河南财大成教《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 |