河南财大成教《C语言程序设计》高起专原题及答案

荣盛长春 发表于 2024-11-25 21:56:19|来自:中国 | 显示全部楼层 |阅读模式

河南财大成教《C语言程序设计》高起专原题及答案 图1

河南财大成教《C语言程序设计》高起专原题及答案 图1

1、C语言中的简单数据类型包括()。
A.整型、实型、逻辑型
B.整型、实型、逻辑型、字符型
C.整型、字符型、逻辑型
D.整型、实型、字符型
答案:D

2、下列运算符中,优先级最高的是()。
A.[]
B.++
C.%
D.&&
答案:A

3、()是构成C语言程序的基本单位。
A.函数
B.过程
C.子程序
D.子例程
答案:A

4、已知inta[10],则对a数组元素的正确引用是()。
A.a[10]
B.a[3.5]
C.a(5)
D.a[0]
答案:D

5、以下能对一维数组a进行初始化的语句是()。
A.inta[5]=(0,1,2,3,4)
B.inta(5)={}
C.inta[3]={0,1,2}
D.inta{5}={10*1}
答案:C

6、在while(!a)中,其中!a与表达式()等价。
A.a==0
B.a==1
C.a!=1
D.a!=0
答案:A

7、在C语言程序中,表达式5%2的结果是()。
A.2.5
B.2
C.1
D.3
答案:C

8、退出一个循环语句(不终止函数的执行)的有效措施是()。
A.用break语句
B.用continue语句
C.用return语句
D.用exit
答案:B

9、如果inta=3,b=4,则条件表达式“a
A.3
B.4
C.0
D.1
答案:A

10、若有以下说明语句: struct student { it num; car name[]; float score; }stu; 则下面的叙述不正确的是( )。
A.struct是结构体类型的关键字。
B.struct student是用户定义的结构体类型。
C.num和score都是结构体成员名。
D.stu是用户定义的结构体类型名。
答案:D

11、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为()。
A.0
B.1
C.-1
D.一个非0值
答案:A

12、以下对结构变量stu1中成员age的非法引用是( )。 struct student { int age; int num; }stu1,*p; p=&stu1;
A.stu1.age
B.student.age
C.p->age
D.(*p).age
答案:B

13、C语言是一种结构化程序设计语言,而结构化程序设计的基本结构不包含()。
A.顺序
B.选择或分支
C.循环
D.以上都不对
答案:D

14、fread(buf,64,2,fp)的功能是()。
A.从fp指向的文件中,读出整数64,并存放在buf中。
B.从fp指向的文件中,读出整数64和2,并存放在buf中。
C.从fp指向的文件中,读出整数64个字节的字符,读两次,并存放在buf地址中。
D.从fp指向的文件中,读出整数64个字节的字符,并存放在buf中。
答案:C

15、若有说明:inta[][3]={{1,2,3},{4,5},{6,7}},则数组a第一维的大小为()。
A.2
B.3
C.4
D.无确定值
答案:B

16、在C语言中,表示静态存储类别的关键字是()。
A.auto
B.register
C.static
D.extern
答案:C

17、在C语言中,函数的数据类型是指()。
A.函数返回值的数据类型
B.函数形参的数据类型
C.调用该函数时实参的数据类型
D.任意指定的数据类型
答案:A

18、未指定存储类别的变量,其隐含的存储类别是()。
A.auto
B.register
C.static
D.extern
答案:A

19、已知charx[]=”hello”,y[]={‘h’,’e’,’a’,’b’,’e’};则关于两个数组长度的正确描述是()。
A.相同
B.x大于y
C.x小于y
D.以上答案都不对
答案:B

20、设有定义:intx[10],*p=x,i;若要为数组x读入数据,以下选项正确的是()。
A.for(i=0;i<10;i++)scanf("%d",p+i);
B.for(i=0;i<10;i++)scanf("%d",*p+i);
C.for(i=0;i<10;i++)scanf("%d",*(p+i));
D.for(i=0;i<10;i++)scanf("%d",x);
答案:A

21、判断字符串s1是否大于字符串s2,应该使用()。
A.if(strcmp(s1,s2)<0)
B.if(s1>s2)
C.if(strcmp(s2,s1)<0)
D.if(strcmp(s1,s2))
答案:C

22、以下正确的说法是()。
A.结构体类型变量不能初始化。
B.结构体类型变量为外部变量或静态变量时能初始化。
C.结构体数组不能初始化
D.可以用赋值语句将一组常量赋给一个结构体变量
答案:B

23、下列关于C语言的说法错误的是()。
A.C程序的工作过程是编辑、编译、链接、执行。
B.C语言不区分大小写。
C.C程序的三种基本结构是顺序、选择、循环。
D.C程序从main函数开始执行。
答案:B

24、设整型变量x的值是10,则表达式2
A.不确定
B.1
C.0
D.表达式非法
答案:B

25、下列四组选项中,正确的C语言标识符是()。
A.%x
B.a+b
C.a123
D.123
答案:C

26、已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为2,k的值为3,以下选项中正确的输入语句是()。
A.scanf(“%2d%2d%2d”,&i,&j,&k);
B.scanf(“%d%d%d”,&i,&j,&k);
C.scanf(“%d,%d,%d”,&i,&j,&k);
D.scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);
答案:C

27、语句int*p;说明了()。
A.p是指向一维数组的指针
B.p是指向函数的指针,该函数返回一个int类型的数据
C.p是指向int型数据的指针
D.p是函数名,该函数返回一指向int型数据的指针
答案:C

28、若有说明语句“inta[5],*p=a;”则对数组元素的正确引用是()。
A.a[p]
B.p[a]
C.*(p+2)
D.p+2
答案:C

29、下列不正确的定义是()。
A.int*p=&i,i;
B.int*p,i;
C.inti,*p=&I;
D.inti,*p
答案:A

30、下列数据中,属于字符串常量的是()。
A.“a”
B.{ABC}
C.‘abc\0’
D.‘a’
答案:A

31、在C语言中,以()作为字符串结束标志。
A.‘\n’
B.‘‘
C.‘0’
D.‘\0’
答案:D

32、C语言源程序名的后缀是()。
A..exe
B..c
C..obj
D..cpp
答案:B

33、如下程序段的输出为( )。 #include int main() { int a=3,b=5; double c; c=a/b; printf(“%.2f\n”,c); }
A.0
B.1
C.0.6
D.不确定
答案:A

34、下面关于if与switch比较的叙述中不正确的是()。
A.switch执行效率高,if效率低
B.switch只能是基于一个整型值进行分支选择
C.使用if的分支,都可以通过switch实现
D.使用switch的分支,都可以通过if实现
答案:C

35、C语言中while和do_while循环的主要区别是()。
A.do_while的循环体至少无条件执行一次
B.while的循环控制条件比do_while的循环控制条件严格
C.do_while允许从外部转到循环体内
D.do_while的循环体不能是复合语句
答案:A

36、为避免if_else语句二义性,规定else总是与()组成配对关系。
A.缩排位置相同的if
B.在其之前未配对的if
C.在其之前最近的未配对的if
D.同一行上的if
答案:C

37、下列说法正确的是()。
A.结构体变量说明时,系统按照结构体定义时所需空间的大小实际分配存储空间。
B.结构体变量说明时,系统按照各成员项中占用空间最大的成员项分配存储空间。
C.结构体变量说明时,系统并不给结构体分配存储空间。
D.以上描述都不正确。
答案:A

38、下列说法正确的是( )。
A.结构体变量说可以作为一个整体进行其值的输入输出。
B.结构体成员项不可以是结构体。
C.结构体成员项可以是结构体或其他任何C语言的数据类型。
D.结构体变量和结构体是相同的概念。
答案:C

39、结构体类型变量在程序执行期间,()。
A.所有成员一直驻留在内存中。
B.只有一个成员驻留在内存中。
C.部分成员驻留在内存中。
D.没有成员驻留在内存中。
答案:A

40、设有以下语句 struct stu { int a; float b; }stutype; 则下面不正确的叙述是( )。
A.struct是结构体类型的关键字
B.struct stu是用户自定义的结构体类型
C.stutype是用户定义的结构体类型名
D.a和b都是结构体成员名
答案:C

41、下列说法正确的是()。
A.对于一个具体的结构体,它的成员可以根据自己的需要随时更改。
B.结构体与数组一样,其每个成员的数据类型都相同。
C.结构体的每个成员的数据类型必须是基本数据类型。
D.以上描述都不正确。
答案:D

第一阶段基础测验

一、 单选
1、如下程序段的输出为( )。 #include int main() { int a=3,b=5; double c; c=a/b; printf(“%.2f\n”,c); }
A.0
B.1
C.0.6
D.不确定
答案:A

2、若有说明语句“inta[5],*p=a;”则对数组元素的正确引用是()。
A.a[p]
B.p[a]
C.*(p+2)
D.p+2
答案:C

3、下列不正确的定义是()。
A.int*p=&i,i;
B.int*p,i;
C.inti,*p=&I;
D.inti,*p
答案:A

4、语句int*p;说明了()。
A.p是指向一维数组的指针
B.p是指向函数的指针,该函数返回一个int类型的数据
C.p是指向int型数据的指针
D.p是函数名,该函数返回一指向int型数据的指针
答案:C

5、未指定存储类别的变量,其隐含的存储类别是()。
A.auto
B.register
C.static
D.extern
答案:A

6、在C语言中,表示静态存储类别的关键字是()。
A.auto
B.register
C.static
D.extern
答案:C

7、在C语言中,函数的数据类型是指()。
A.函数返回值的数据类型
B.函数形参的数据类型
C.调用该函数时实参的数据类型
D.任意指定的数据类型
答案:A

8、若有说明:inta[][3]={{1,2,3},{4,5},{6,7}},则数组a第一维的大小为()。
A.2
B.3
C.4
D.无确定值
答案:B

9、已知inta[10],则对a数组元素的正确引用是()。
A.a[10]
B.a[3.5]
C.a(5)
D.a[0]
答案:D

10、以下能对一维数组a进行初始化的语句是()。
A.inta[5]=(0,1,2,3,4)
B.inta(5)={}
C.inta[3]={0,1,2}
D.inta{5}={10*1}
答案:C

11、()是构成C语言程序的基本单位。
A.函数
B.过程
C.子程序
D.子例程
答案:A

12、C语言中while和do_while循环的主要区别是()。
A.do_while的循环体至少无条件执行一次
B.while的循环控制条件比do_while的循环控制条件严格
C.do_while允许从外部转到循环体内
D.do_while的循环体不能是复合语句
答案:A

13、为避免if_else语句二义性,规定else总是与()组成配对关系。
A.缩排位置相同的if
B.在其之前未配对的if
C.在其之前最近的未配对的if
D.同一行上的if
答案:C

14、下列关于C语言的说法错误的是()。
A.C程序的工作过程是编辑、编译、链接、执行。
B.C语言不区分大小写。
C.C程序的三种基本结构是顺序、选择、循环。
D.C程序从main函数开始执行。
答案:B

15、下面关于if与switch比较的叙述中不正确的是()。
A.switch执行效率高,if效率低
B.switch只能是基于一个整型值进行分支选择
C.使用if的分支,都可以通过switch实现
D.使用switch的分支,都可以通过if实现
答案:C

16、C语言源程序名的后缀是()。
A..exe
B..c
C..obj
D..cpp
答案:B

17、如果inta=3,b=4,则条件表达式“a
A.3
B.4
C.0
D.1
答案:A

18、退出一个循环语句(不终止函数的执行)的有效措施是()。
A.用break语句
B.用continue语句
C.用return语句
D.用exit
答案:B

19、在while(!a)中,其中!a与表达式()等价。
A.a==0
B.a==1
C.a!=1
D.a!=0
答案:A

20、已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为2,k的值为3,以下选项中正确的输入语句是()。
A.scanf(“%2d%2d%2d”,&i,&j,&k);
B.scanf(“%d%d%d”,&i,&j,&k);
C.scanf(“%d,%d,%d”,&i,&j,&k);
D.scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);
答案:C

21、设整型变量x的值是10,则表达式2
A.不确定
B.1
C.0
D.表达式非法
答案:B

22、下列运算符中,优先级最高的是()。
A.[ ]
B.++
C.%
D.&&
答案:A

23、在C语言程序中,表达式5%2的结果是()。
A.2.5
B.2
C.1
D.3
答案:C

24、C语言中的简单数据类型包括()。
A.整型、实型、逻辑型
B.整型、实型、逻辑型、字符型
C.整型、字符型、逻辑型
D.整型、实型、字符型
答案:D

25、下列四组选项中,正确的C语言标识符是()。
A.%x
B.a+b
C.a123
D.123
答案:C
第二阶段基础测验
一、 单选
1、在C语言中,以()作为字符串结束标志。
A.‘\n’
B.‘‘
C.‘0’
D.‘\0’
答案:D

2、下列数据中,属于字符串常量的是()。
A.“a”
B.{ABC}
C.‘abc\0’
D.‘a’
答案:A

3、已知charx[]=”hello”,y[]={‘h’,’e’,’a’,’b’,’e’};则关于两个数组长度的正确描述是()。
A.相同
B.x大于y
C.x小于y
D.以上答案都不对
答案:B

4、判断字符串s1是否大于字符串s2,应该使用()。
A.if(strcmp(s1,s2)<0)
B.if(s1>s2)
C.if(strcmp(s2,s1)<0)
D.if(strcmp(s1,s2))
答案:C

5、设有定义:intx[10],*p=x,i;若要为数组x读入数据,以下选项正确的是()。
A.for(i=0;i<10;i++)scanf("%d",p+i);
B.for(i=0;i<10;i++)scanf("%d",*p+i);
C.for(i=0;i<10;i++)scanf("%d",*(p+i));
D.for(i=0;i<10;i++)scanf("%d",x);
答案:A

6、以下正确的说法是()。
A.结构体类型变量不能初始化。
B.结构体类型变量为外部变量或静态变量时能初始化。
C.结构体数组不能初始化
D.可以用赋值语句将一组常量赋给一个结构体变量
答案:B

7、结构体类型变量在程序执行期间,()。
A.所有成员一直驻留在内存中。
B.只有一个成员驻留在内存中。
C.部分成员驻留在内存中。
D.没有成员驻留在内存中。
答案:A

8、设有以下语句 struct stu { int a; float b; }stutype; 则下面不正确的叙述是( )。
A.struct是结构体类型的关键字
B.struct stu是用户自定义的结构体类型
C.stutype是用户定义的结构体类型名
D.a和b都是结构体成员名
答案:C

9、下列说法正确的是()。
A.对于一个具体的结构体,它的成员可以根据自己的需要随时更改。
B.结构体与数组一样,其每个成员的数据类型都相同。
C.结构体的每个成员的数据类型必须是基本数据类型。
D.以上描述都不正确。
答案:D

10、下列说法正确的是()。
A.结构体变量说明时,系统按照结构体定义时所需空间的大小实际分配存储空间。
B.结构体变量说明时,系统按照各成员项中占用空间最大的成员项分配存储空间。
C.结构体变量说明时,系统并不给结构体分配存储空间。
D.以上描述都不正确。
答案:A

11、下列说法正确的是( )。
A.结构体变量说可以作为一个整体进行其值的输入输出。
B.结构体成员项不可以是结构体。
C.结构体成员项可以是结构体或其他任何C语言的数据类型。
D.结构体变量和结构体是相同的概念。
答案:C

12、若有以下说明语句: struct student { it num; car name[]; float score; }stu; 则下面的叙述不正确的是( )。
A.struct是结构体类型的关键字。
B.struct student是用户定义的结构体类型。
C.num和score都是结构体成员名。
D.stu是用户定义的结构体类型名。
答案:D

13、以下对结构变量stu1中成员age的非法引用是( )。 struct student { int age; int num; }stu1,*p; p=&stu1;
A.stu1.age
B.student.age
C.p->age
D.(*p).age
答案:B

14、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为()。
A.0
B.1
C.-1
D.一个非0值
答案:A

15、fread(buf,64,2,fp)的功能是()。
A.从fp指向的文件中,读出整数64,并存放在buf中。
B.从fp指向的文件中,读出整数64和2,并存放在buf中。
C.从fp指向的文件中,读出整数64个字节的字符,读两次,并存放在buf地址中。
D.从fp指向的文件中,读出整数64个字节的字符,并存放在buf中。
答案:C

第一阶段练习

一、 判断
1、在if语句的三种形式中,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。()
A.正确
B.错误
答案:对

2、continue不是结束本次循环,而是终止整个循环的执行。()
A.正确
B.错误
答案:错

3、在switch语句中,每一个的case常量表达式的值可以相同。()
A.正确
B.错误
答案:错

4、C语言是一种具有某些低级语言特征的高级语言。()
A.正确
B.错误
答案:对

5、C语言的三种循环不可以互相嵌套。()
A.正确
B.错误
答案:错

二、 填空
6、一个C语言程序总是从()开始执行。
答案:主函数或main函数

7、C语言是一种结构化程序设计语言,而结构化程序设计的基本结构有3种,分别是()、()和()。
答案:顺序|选择或分支|循环

8、C语言中的标识符只能由()、()和()组成。开头必须是()或()。
答案:数字|字母|下划线|字母|下划线

9、一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译指令()。
答案:#include

10、C语言源程序经过编译后,生成扩展名为()的目标文件;经过链接后,生成扩展名为()的可执行文件。
答案:.obj|.exe

11、continue语句只能用在()结构中。
答案:循环

12、判断整数a即能被3整除又能被5整除的合法表达式为()。
答案:a%3==0&&a%5==0或!(a%3)&&!(a%5)或!(a%3||a%5)或a%15==0等

13、对n个数进行排序,最多需要进行()趟冒泡排序。
答案:n-1

14、一个完整的C语言程序,是由一个()和若干(或0个)其它函数结合而成的。
答案:主函数

15、C语言中,基本整型类型关键字为(),在16位操作系统中,一般用()字节表示一个变量。单精度浮点型型类型关键字为(),一般占()字节。
答案:int2|float4

16、如果某一函数直接或间接地调用自身,这样的调用称为()。
答案:递归调用或递归(函数)

17、在C语言中,二维数组的元素在内存中的存放顺序是()。
答案:先行后列

18、数组名表示数组在内存的()。
答案:起始地址

19、C语言数组的下标总是从()开始,不可以为负数;构成数组各个元素具有相同的()。
答案:0|数据类型或类型

20、指针变量也是一个变量,只不过该变量中存储的是(),如果一个变量存储另一个对象的地址,则称该变量()。
答案:另一个对象的内存地址|指向这个对象

21、数组中的每一个元素都属于同一数据类型,数组中的每一个元素都是由()来唯一确定。
答案:数组名和下标

22、若定义x[5],则数组名x的含义是()。
答案:数组的起始地址

23、定义二维数组时,数组名后要有两个下标,其中,第一个下标的含义是(),第二个下标的含义是()。
答案:所占行数|所占列数

24、所有的C函数都必须在被()时才能执行其函数体,从而完成函数的功能。
答案:调用

25、外部变量是指在()定义的变量。
答案:函数外部

第二阶段练习

一、 判断
1、逻辑表达式的值只能为1或0。()
A.正确
B.错误
答案:对

2、C语言程序的实现与其它高级语言一样也需要经过编辑、编译、链接和执行的步骤。()
A.正确
B.错误
答案:对

3、C语言程序在书写上只能是一条语句写一行。()
A.正确
B.错误
答案:错

4、内存单元的地址与内存单元中的数据是两个完全相同的概念。()
A.正确
B.错误
答案:错

5、double型变量在内存中占的字节数比int型变量在内存中占的字节数多。()
A.正确
B.错误
答案:对

6、预处理指令的前面必须加一个“#”号。()
A.正确
B.错误
答案:对

7、C语言格式化标准输入函数scanf()的参数表中要使用变量的地址值。()
A.正确
B.错误
答案:对

8、表达式语句和表达式没有什么区别。()
A.正确
B.错误
答案:错

9、C语言程序中可以有多个函数,但只能有一个主函数。()
A.正确
B.错误
答案:对

10、在多层循环中,一个break语句只向外跳一层。()
A.正确
B.错误
答案:对

11、在对数组全部元素赋初值时,不可以省略行数,但能省略列数。()
A.正确
B.错误
答案:错

12、函数的实参传递到形参有两种方式:值传递和地址传递。()
A.正确
B.错误
答案:对

13、指向结构体的指针可以作函数参数,实现传址调用。()
A.正确
B.错误
答案:错

14、用字符串方式赋值比用字符逐个赋值要多占一个字节,用于存放字符串结束标志’\0’。()
A.正确
B.错误
答案:对

15、可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数。()
A.正确
B.错误
答案:对

16、函数形参的存储单元是动态分配的。()
A.正确
B.错误
答案:对

17、在C语言中,能逐个地使用下标变量,也能一次引用整个数组。()
A.正确
B.错误
答案:错

18、如果指针变量p已指向数组中的一个元素,则p+1指向同一数组的下一个元素。()
A.正确
B.错误
答案:对

19、如果函数定义出现在函数调用之前,可以不必加函数原型声明。()
A.正确
B.错误
答案:对

20、指针变量可以存放指针(地址)、数值和字符。()
A.正确
B.错误
答案:错

21、字符串在内存中的起始地址成为字符串的指针,可以定义一个字符指针变量指向一个字符串。()
A.正确
B.错误
答案:对

22、凡在函数中未指定存储类别的局部变量,其默认的存储类别为static。()
A.正确
B.错误
答案:错

23、一个变量的地址称为该变量的指针。()
A.正确
B.错误
答案:对

24、一个数组是由连续的一块内存单元组成的,指针变量就是这块连续内存单元的首地址。()
A.正确
B.错误
答案:错

25、函数的实参可以是常量、变量或表达式。()
A.正确
B.错误
答案:对

第三阶段练习

一、 程序
1、编程:输入4个实数x1,y1,x2,y2,数据之间用空格隔开。表示两点坐标A(x1,y1),B(x2,y2),计算并输出两点间的距离。结果保留两位小数。部分程序如下: #include #include int main() { double x1, y1, x2, y2, dist; scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2); ( ) } printf("%.2f\n", dist); return 0; }
答案:dist= sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );

2、编程:输入两个整数 a 和 b ,求其中较大的一个的值,并存储到变量 max 中。部分程序如下: #include int main(void) { int a, b, max; scanf("%d%d", &a, &b); max = a; if ( ) max = b; printf("max = %d", max); return 0; }
答案:b > max

3、编程:从键盘输入一个英文字母,判断大小写,若是大写,输出“upper case ”,否则输出 “lower case”。部分程序如下: #include int main(void) { char ch; ch = getchar( ); if( ) printf("upper case %c\n", ch); else printf("lower case %c\n", ch); return 0; }
答案:ch >= 'A' && ch <= 'Z'

4、编程:求n个数的和。首先输入一个整数n,然后输入n个整数,求它们的和。部分程序如下: #include int main(void) { int number, sum; int i, n; sum = 0; scanf("%d", &n); for(i = 1; i <= n; i++) { scanf("%d", &number); ( ) } printf("%d\n", sum); return 0; }
答案:sum = sum + number;

5、编程:求数列1-1/3+1/5-1/7+1/9…的前n项和。结果保留两位小数。部分程序如下: #include int main(void) { int i, n, deno; double sum, flag; scanf("%d\n", &n); sum = 0; deno = 1; flag = 1.0; for(i = 1; i <= n; i++) { ( ) deno = deno+2; flag = -flag; } printf("%.2f\n", sum); return 0; }
答案:sum = sum + flag/deno;

6、编程:求两个整数的和。要求输入包含多组数据,每组数据包含两个整数a和b,对每组数据输出a+b的结果。当a和b同时为0时表述输入结束。部分程序如下: #include int main(void) { int a, b; while( ) printf("%d\n", a + b); return 0; }
答案:scanf("%d %d", &a, &b), (a != 0 || b != 0)

7、经典的百钱买百鸡问题是:公鸡五文钱一只,母鸡三文钱一只,鸡仔一文钱三只,用100文钱买100只鸡,公鸡、母鸡、鸡仔各买多少只? 编程解决如下问题:给定一个正整数n,用n文钱买n只鸡,问公鸡、母鸡、鸡仔各买多少只?如果问题有解,输出所有解,每个解占一行,每个整数用空格隔开;如果问题无解,则输出“No answer”。 部分程序如下: #include int main(void) { int i, j, k, n, noAnswer; scanf("%d", &n); noAnswer = 1; for(i = 0; i <= n/5; i++) for(j =0 ; j <= n/3; j++) { k = n – i - j; if( ) { printf(“%d %d %d\n”, i, j, k); noAnswer = 0; } } if (noAnswer == 1) printf("No answer\n"); return 0; }
答案:i*15 + j*9 + k == n * 3

8、编程:输入m,若m是素数,则输出“yes”,否则输出“no”。素数的定义:除了1和m,不能被其它数整除。注意,1不是素数。部分程序如下: #include #include int main() { int m,k,flag; int i; scanf("%d",&m); k = (int)sqrt(m); flag = 0; for(i = 2; i <= k; i++) { if( ) { flag = 1; break; } } if(m==1) flag=1; if( flag == 0 ) printf("yes\n"); else printf("no\n"); return 0; }
答案:m % i == 0

9、编程:输出阶乘表。输入一个整数n(n<=20),输出1-n的阶乘表。部分程序如下: #include int main(void) { int i, n; double fact; printf("input n: \n"); scanf ("%d", &n) ; for (fact=1, i = 1; i <= n; i++ ) { printf ( "%d %.0f \n", i, fact ); } return 0; }
答案:fact = fact * i ;

10、编程:输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。部分程序如下: #include int main() { int i,j,k,n; for (n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if ( ) printf("%d ",n); } printf("\n"); return 0; }
答案:n==i*i*i + j*j*j + k*k*k

11、编程:输出100以内的全部素数,每个素数占3列。部分程序如下: #include #include int IsPrime (int m); int main() { int m; for(m = 2; m <= 100; m++) { if ( ) printf("%3d", m ); } printf ("\n"); return 0; } int IsPrime (int m) { int i, k; if ( m == 1 ) return 0; k = (int)sqrt (m); for( i = 2; i <= k; i++) { if (m % i == 0) return 0; } return 1; }
答案:IsPrime(m) != 0

12、编程:验证哥德巴赫猜想,任意输入一个不小于6的偶数,将其表示成两个素数的和,如:6=3+3;8=3+5;18=7+13。部分程序如下: #include #include int IsPrime (int m); int main() { int n, i; scanf("%d", &n); for(i = 3;i <= n/2;i = i+2) { if( ) printf("%d %d\n", i, n-i); } return 0; } int IsPrime (int m) { int i, k; if ( m == 1 ) return 0; k = (int)sqrt (m); for( i = 2; i <= k; i++) { if (m % i == 0) return 0; } return 1; }
答案:IsPrime(i) && IsPrime(n-i)

13、编程:求组合数。组合数的公式如图所示: 部分程序如下: #include int fact( int n) { int i; int result = 1; for(i = 2; i <= n; i++) ( ) return result; } int main(void) { int m, n, p; scanf("%d%d", &m, &n); ( ) printf("p=%d\n", p); return 0; }
答案:result *= i; p = fact(m) / (fact(n) * fact(m - n));

14、编程:使用比较交换法进行排序。部分程序如下: #include void Sort(int a[], int n); int main() { int i; int a[5]={ 8,3,9,2,1 }; Sort(a,5); for(i = 0; i <5; i++) printf("%d ", a); printf("\n"); return 0; } void Sort(int a[], int n) { int i, j, t; for(i = 0; i < n-1; i++) { for(j = i+1; j < n; j++) if(a > a[j]) {( ) ( ) ( ) } } }
答案:t=a;a=a[j]; a[j]=t;

15、编程:输入n(n ≤10)和n个整数,逆序输出这n个整数。部分程序如下: #include int main() { int a[100]; int n, i; scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a); for( ) printf("%d ", a); printf("\n"); return 0; }
答案:i = n-1; i >= 0; i--

二、 判断
16、共用体变量可以作结构体的成员,结构体变量也可以作共用体的成员。()
A.正确
B.错误
答案:对

17、文件指针和位置指针都是随着文件的读写操作在不断改变。()
A.正确
B.错误
答案:错

18、结构体变量可以作数组元素。()
A.正确
B.错误
答案:对

19、随机操作只适用于文本文件。()
A.正确
B.错误
答案:错

20、文件指针用于指向文件,文件只有被打开后才有对应的文件指针。()
A.正确
B.错误
答案:对

21、指向结构体变量的指针可以作函数参数,实现传址调用。()
A.正确
B.错误
答案:对

22、结构体成员的类型必须是基本数据类型。()
A.正确
B.错误
答案:错

23、随机操作只适用于二进制文件。()
A.正确
B.错误
答案:错

24、以“r”方式打开一个文件时,文件指针指向文件首。()
A.正确
B.错误
答案:对

25、C语言程序只能有一个文件。()
A.正确
B.错误
答案:错

第四阶段练习

一、 程序
1、编程:输入一个正整数n (1 #define N 50 int main() { int n, i, a[N] = {1, 1}; scanf("%d", &n); for(i = 2; i < n; i++) ( ) for(i = 0; i < n; i++) printf("%d ", a); printf("\n"); return 0; }
答案:a = a[i-1] + a[i-2];

2、编程:输出杨辉三角的前10行。每个元素占6列。杨辉三角形是形如 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 的三角形,其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行相邻两个数之和。部分程序如下: #include #define N 10 int main() { int i; int j; int a[N][N]; for(i=0;i
答案:a[j]=a[i-1][j-1]+a[i-1][j];

3、编程:输入一个int范围内的十进制整数,输出其对应的二进制数。部分程序如下: #include #include #define N 40 void DToB(int n, char str[]); int main(void) { char str[N]; int n; scanf("%d", &n); DToB(n, str); puts(str); return 0; } void DToB(int n, char str[]) { int len = 0; while( n>0) { ( ) len++; n /= 2; } str[len] = '\0'; strrev(str); }
答案:str[len] = n % 2 + '0';

4、编程:输入正整数n(0 < n <= 10),然后输入n个字符串,输出字典序最大的字符串。部分程序如下: #include #include #define N 40 int main(void) { int i,n; char max[N] = ""; char str[N]; scanf("%d", &n); getchar(); for(i = 1; i <= n; i++) { gets(str); if( strcmp(str, max) > 0 ) ( ) } puts(max); return 0; }
答案:strcpy(max, str);

5、编程:输入n和n 个字符串,按升序排序输出所有字符串(按ASCII码)要求使用比较交换方法进行排序。部分程序如下: #include #include #define N 100 #define LEN 81 void Sort(char str[] [LEN],int n); int main(void) { int i,n; char str[N] [LEN]; scanf("%d",&n); getchar(); for(i=0;i0) { () () () } } }
答案:strcpy(temp,str); strcpy(str,str[j]); strcpy(str[j],temp);

6、编程:编写程序,建立同学通讯录。通讯录中包括同学的姓名和电话号码。部分程序如下: #include #define NUM 3 struct mem { char name[20]; char phone[11]; }; void main() { struct men man[NUM]; int i; for(i=0;i
答案:gets(man.name); gets(man.phone) ; man.name, man.phone

7、编写程序,计算学生的平均成绩并统计不及格的人数。部分程序如下: #include struct stu { int num; char*name; char sex; float score; }student[5]={ {101,"Li ping",'M',45}, {102,"Zhang ping",'M',62.5}, {103,"He fang",'F',92.5}, {104,"Cheng ling",'F',87}, {105,"Wang ming",'M',58}, }; void main() { int i,c=0; float ave,s=0; for(i=0;i<5;i++) { s+= ( ) ; if( ) c++; } ( ) printf("%.2f %d",ave,c); return 0; }
答案:student.score student.score<60 ave=s/5;

8、编程:要求在程序执行前创建文件D:\file.txt,文档的内容为“I am a student.”,在屏幕中显示该文件的内容。部分程序如下: #include void main() { FILE *fp; char ch; fp=fopen("d:\\file.txt","r"); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ( ) } fclose(fp); }
答案:ch=fgetc(fp);

9、编程:对D:\file1.txt文件追加一个字符串。部分程序如下: #include main() { FILE *fp; char ch,st[20]; if((fp=fopen("D:\\file1.txt","a"))==NULL) { printf("不能打开文件"); getch(); exit(1); } printf("输入字符串:\n"); scanf("%s",st); ( ) fclose(fp); }
答案:fputs(st,fp);

10、编程:将数字66以字符的形式写到磁盘文件中。部分程序如下: #include void main() { FILE *fp; int i=66; if((fp=fopen("d:\\C\\file2.txt","w"))==NULL) { printf("不能打开文件"); getch(); exit(1); } ( ) fclose(fp); }
答案:fprintf(fp,"%c",i);

二、 填空
11、文件是指()。
答案:存储在外部介质上数据的集合

12、根据数据的组织形式,C语言将文件分为()和()。
答案:ASCII文件和二进制文件

13、现要求以读写方式打开一个文本文件stu,写出语句()。
答案:FILE*fp;|fp=fopen(“stu”,”r+”);

14、现要求将上题中打开的文件关闭掉,写出语句()。
答案:fclose(fp);

15、若执行fopen()函数时发生错误,则函数的返回值是()。
答案:NULL

综合作业

一、 程序
1、 读下列程序,写出程序的运行结果。 #include int main() { int n=10; while (n>7) { n--; printf("%d\n",n); } return 0; } 输出:
答案:9|8|7

2、 读下列程序,写出程序的运行结果。 #include int main() { int a,b; for(a=1,b=1;a<=100;a++) { if(b>=20) break; if(b%3==1) { b+=3; continue; } b-=5; } printf("%d\n",a); return 0; } 输出:
答案:8

3、 读下列程序,写出程序的运行结果。 #include void Func(void); int main() { int i; for (i=0; i<5; i++) { Func(); } } void Func(void) { static int a = 1; int b = 2, c; c = a + b; a++; b++; printf("%d\n", c); } 输出:
答案:3|4|5|6|7

4、 读下列程序,写出程序的运行结果。 #include int main() { int n=0,fact=1,sum=0; do { n++; fact=fact*n; sum+=fact; } while (n<4); printf("%d\n",sum); return 0; } 输出:
答案:33

5、 读下列程序,写出程序的运行结果。 # include int main () { int a[5]={3, 2, 5, 4, 8}; int *p, *q; p = &a[0]; q = &a[4]; for( ; q >= p; q--) printf ("%d ", *q); printf ("\n"); return 0; } 输出:
答案:8|4|5|2|3

6、 读下列程序,写出程序的运行结果。 #include int main() { int i,j; for(i=1;i<=4;i++) { for(j=1;j<=4-i;j++) putchar(' '); for(j=1;j<=2*i-1;j++) printf("%c",'A'+j-1); putchar('\n'); } return 0; } 输出:
答案:A|ABC|ABCDE|ABCDEFG

7、 读下列程序,写出程序的运行结果。 #include int main() { int x[3][3]={0,1,2, 0,1,2, 0,1,2}; int i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) printf("%d\n",t=t+x[x[j][j]]); return 0; } 输出:
答案:1|2|4

8、 读下列程序,写出程序的运行结果。 #include #include int main() { char s1[101],s2[51]; int len1,len2,i; printf("请输入字符串1:"); gets(s1); printf("请输入字符串2:"); gets(s2); len1=strlen(s1); len2=strlen(s2); for(i=0;i
答案:ABCDEF1234

9、 读下列程序,写出程序的运行结果。 #include int main() { int x, y, z; x = y = z = -1; ++x && ++y || ++z; printf ("x=%d y=%d z=%d\n", x, y, z); x = y = z = -1; ++x || y++ && z; printf ("x=%d y=%d z=%d\n", x, y, z); return 0; } 输出:
答案:x=0 y=-1 z=0|x=0 y=0 z=-1

10、 读下列程序,写出程序的运行结果。 #include int main(void) { char ch; ch = getchar( ); if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') printf("字母\n"); else if (ch >= '0' && ch <= '9') printf("数字\n"); else if(ch == ' ' || ch == '\n') printf("分隔符\n"); else printf("其他\n"); return 0; } 输入: A 输出:
答案:字母

11、 读下列程序,写出程序的运行结果。 #include void fun(int x, int y); int a=5, b=8; int main( ) { int a=15; fun(a, b); printf("a=%d, b=%d\n", a, b); } void fun(int x, int y) { int temp; if(a>b) { temp=a; x=y; y=temp; } } 输出:
答案:a=15, b=8

12、 读下列程序,写出程序的运行结果。 #include int main() { int a=2,b=3,c; c=a; if(a>b) c=1; else if(a==b) c=0; else c=-1; printf("%d\n",c); return 0; } 输出:
答案:-1

13、 读下列程序,写出程序的运行结果。 #include int main() { int i; int a[10],*p=a; for(i=0;i<10;i++) *p++=2*i; for(i=0;i<10;i++) printf("%4d",a); printf("\n"); return 0; } 输出:
答案:0|2|4|6|8|10|14|16|18

14、 读下列程序,写出程序的运行结果。 #include void swap( int *pa, int *pb) { int t; t = *pa; *pa = *pb; *pb=t; } int main() { int a = 3, b = 5; swap( &a, &b ); printf("%d %d\n",a,b); return 0; } 输出:
答案:5|3

15、 读下列程序,写出程序的运行结果。 #include int main() { char str[1000]; int i, count; count = 0; gets(str); for(i = 0; str != '\0'; i++) { if(str == ' ' && str[i+1] != ' ') count++; } if(str[0] != ‘ ’) count++; printf("%d\n",count); } 输入: I love Zhengzhou Normal University! 输出:
答案:4

16、 读下列程序,写出程序的运行结果。 #include int main() { int x=2, y=3, m, n; m = x++*5; n = ++y*5; printf ("%d,%d,%d,%d\n", x, y, m, n); return 0; } 输出:
答案:3,|4,|10,|20

17、 读下列程序,写出程序的运行结果。 #include int main() { int a=2,b=3,c; c=a; if(a>b) c=1; else if(a==b) c=0; else c=-1; printf("%d\n",c); return 0; } 输出:
答案:-1

18、 读下列程序,写出程序的运行结果。 #include void PrintStar (int m); int main (void) { int i, n; scanf("%d", &n); for(i = 1; i <= n; i++) PrintStar(i); return 0; } void PrintStar (int m) { int i; for (i = 1; i <= m; i++) putchar('*'); putchar ('\n'); } 输出:
答案:* ** *** **** *****

19、 读下列程序,写出程序的运行结果。 #include double fact(int n); int main() { int n; scanf ("%d", &n); printf ("%.0f\n", fact (n) ); return 0; } double fact(int n) { double result; if (n==1 || n == 0) result = 1; else result = n * fact(n-1); return result; } 输入: 5 输出:
答案:120

20、 读下列程序,写出程序的运行结果。 #include int main() { int j , k , p, s; s=0; for (j=1; j<=3; j++) { p=1; for(k=1; k<=j; k++) p=p*k; s=s+p; } printf("s=%d\n",s); return 0; } 输出:
答案:s=9
回复

使用道具 举报

全部回复0 显示全部楼层
暂无回复,精彩从你开始!

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则