C语言章节习题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C程序设计》复习题集
第2章基础概念
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的)
以下叙述中正确的是
A)C语言比其他语言高级
B)C语言可以不用编译就能被计算机识别执行
C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D)C语言出现的最晚,具有其他语言的一切优点
正确答案: C
以下叙述中正确的是
A)构成C程序的基本单位是函数B)可以在一个函数中定义另一个函数
C)main()函数必须放在其他函数之前D)所有被调用的函数一定要在调用之前定义正确答案: A
以下说法正确的是
A)C语言程序总是从第一个函数开始执行
B)在C语言程序中,要调用函数必须在main()函数中定义
C)C语言程序总是从main()函数开始执行
D)C语言程序中的main()函数必须放在程序的开始部分
正确答案: C
C语言规定,在一个源程序中,main函数的位置
A)必须在最开始B)必须在系统调用的库函数的后面
C)可以任意D)必须在最后
正确答案: C
以下叙述不正确的是
A)一个C源程序可由一个或多个函数组成
B)一个C源程序必须包含一个main函数
C)C程序的基本组成单位是函数
D)在C程序中,注释说明只能位于一条语句的后面
正确答案: D
下列叙述中正确的是
A)C语言编译时不检查语法B)C语言的子程序有过程和函数两种
C)C语言的函数可以嵌套定义D)C语言的函数可以嵌套调用
正确答案: D
以下叙述正确的是
A)在C程序中,每行中只能写一条语句
B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C)在C程序中,无论是整数还是实数,都能被准确无误地表示
D)在C程序中,%是只能用于整数运算的运算符
正确答案: D
下列关于C语言的说法不正确的是
A)C语言既具有高级语言的一切功能,也具有低级语言的一些功能
B)C语言中的每一条执行语句都必须用分号结束,但分号不是C语言的一部分,是语句之间的分隔符号
C)注释可以出现在程序中任意合适的地方
D)命令行后面不能加分号,命令行不是C语言的语句
正确答案: B
以下说法错误的是
A)高级语言都是用接近人们习惯的自然语言和数学语言作为语言的表达形式
B)计算机只能处理由0和1的代码构成的二进制指令或数据
C)C语言源程序经过C语言编译程序编译之后生成一个后缀为.EXE的二进制文件
D)每一种高级语言都有它对应的编译程序
正确答案: C
C语言中用于结构化程序设计的3种基本结构是
A)顺序结构、选择结构、循环结构B)if,switch,break
C)for,while,do-while D)if,for,continue
正确答案: A
第3章数据类型运算符与表达式
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的)
C语言提供的基本数据类型包括
A)整型、实型、逻辑型B)整型、实型、字符型
C)整型、字符型、逻辑型D)字符型、实型、逻辑型
正确答案: B
C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符
A)必须为字母B)必须为下划线
C)必须为字母或下划线D)可以是字母,数字和下划线中任一字符正确答案: C
下列可用于C语言用户标识符的一组是
A)void, define, WORD B)a3_b3, _123,Car
C)For, -abc, IF Case D)2a, DO, sizeof
正确答案: B
下面四个选项中,均是不正确的8进制数或16进制数的选项是
A)016 0x8f 018 B)0abc 017 0xa
C)010 -0x11 0x16 D)0a12 7ff -123
正确答案: D
下列数据中,不合法的C语言实型数据的是
A) B)123e3 C) D)
正确答案: C
若有说明语句:char c='\72';则变量c
A)包含1个字符B)包含2个字符
C)包含3个字符D)说明不合法,c的值不确定
正确答案: A
有字符串如下,"\n\\\407as1\"\xabc",则字符串的长度为
A)6 B)7 C)8 D)9
正确答案: D
C语言中运算对象必须是整型的运算符是
A)%= B)/ C)= D)<=
正确答案: A
若变量已正确定义并赋值,以下符合C语言语法的表达式是
A)a:=b+1 B)a=b=c+2 C)int %3 D)a=a+7=c+b
正确答案: B
若变量a,i已正确定义,且i已正确赋值,合法的语句是
A)a= =1 B)++i; C)a=a++=5; D)a=int(i);
正确答案: B
若有定义:int a=7;float x=,y=;则表达式x+a%3*(int)(x+y)%2/4的值是
A) B) C) D)
正确答案: A
若有运算符<<,sizeof,^,&=,则它们按优先级由高至低的正确排列次序是
A)sizeof,&=,<<,^ B)sizeof,<<,^,&= C)^,<<,sizeof,&= D)<<,^,&=,sizeof
正确答案: B
以下不正确的叙述是
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,APH和aph是两个不同的变量
C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值正确答案: D
已知int i,a;执行语句i=(a=3,a++,- -a,a+4,a+5,++a);后,变量i的值为
A)2 B)3 C)4 D)5
正确答案: C
设变量a是int型,f是float型,i是double型,则表达式10+′a′+i*f值的数据类型为
A)int B)float C)double D)不确定
正确答案: C
在C语言中,char型数据在内存中的存储形式是
A)补码B)反码C)原码D)ASCII码
正确答案: D
字符型数据在机器中是用ASCII码表示的,字符’5’和’7’在机器中表示为
A)和01110111 B)01000101和01100011
C)00110101和00110111 D)01100101和01100111
正确答案: C
不能进行++和- -运算的数据类型为
A)指针B)整型C)长整型D)常量
正确答案: D
设有int x=11;则表达式(x++*1/3)的值是
A)3 B)4 C)11 D)12
以下程序的输出结果是
main()
{ int a=21,b=11;
printf("%d\n",- -a+b,- -b+a);
}
A)30 B)31 C)32 D)33
正确答案: A
假设整型变量a,b,c的值均为5,则表达式a+++b+++c++的值为
A)17 B)16 C)15 D)14
正确答案: C
已知int a=6; 则执行a+=a-=a*a;语句后,a的值为
A)36 B)0 C)-24 D)-60
正确答案: D
设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是
A)n=(n*100+/ B)m=n*100+,n=m/
C)n=n*100+ D)n=(n/100+*
正确答案: B
sizeof(float)是
A)一个双精度型表达式B)一个整型表达式
C)一种函数调用D)一个不合法的表达式
正确答案: B
下列关于字符串的说法中错误的是
A)在C语言中,字符串是借助于字符型一维数组来存放的,并规定以字符′\0′作为字符串结束标志
B)′\0′作为标志占用存储空间,计入串的实际长度
C)在表示字符串常量的时候不需要人为在其末尾加入′\0′
D)在C语言中,字符串常量隐含处理成以′\0′结尾
正确答案: B
以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是
A)x/y*z B)x*(1/(y*z)) C)x/y*1/z D)x/y/z
正确答案: A
下列关于语句的说法错误的是
A)复合语句是由“{”开头,由“}”结尾的
B)复合语句在语法上视为一条语句
C)复合语句内,可以有执行语句,不可以有定义语句部分
D)C程序中的所有语句都必须由一个分号作为结束
正确答案: C
二、填空题
以下程序的输出结果是【1】。

int a=1234;
printf ("%d\n",a);
正确答案: 1234
在计算机中,字符的比较是对它们的【2】进行比较。

正确答案: ASCII码
在内存中,存储字符′x′要占用1个字节,存储字符串″X″要占用【3】个字节。

正确答案: 2
在C语言中(以16位PC机为例),一个float型数据在内存中所占的字节数为4;一个double 型数据在内存中所占的字节数为【4】。

正确答案: 8
以下程序段的输出结果是【5】。

main ()
{int a=2,b=3,c=4;
a*=16+(b++)-(++c);
printf("%d",a);
}
正确答案: 28
以下程序段的输出结果是【6】。

int x=17,y=26;
printf ("%d",y/=(x%=6));
正确答案: 5
下列y的值是【7】。

int y; y=sizeof*4);
正确答案: 8
以下程序的输出结果是【8】。

main ()
{int i=010,j=10;
pirntf ("%d,%d\n",i,j);
}
正确答案: 8,10
已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=′a′+′8′-′3′的值为【9】。

正确答案: f
如下语句printf("%c\n",′B′+40);在执行后的输出结果是【10】。

正确答案: j
定义int a=5,b=20;若执行语句printf("%d\n",++a*- -b/5);后,输出的结果为【11】。

正确答案: 9
第4章顺序程序设计
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的)
若变量已正确说明为float型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予,b赋予,c 赋予,下列不正确的输入形式是
A)10<回车>22<回车>33<回车> B),,<回车>
C)<回车> <回车> D)10 22<回车>33<回车>
正确答案: B
调用gets和puts函数时,必须包含的头文件是
A) B) C)define D)以上都不对
正确答案: A
x,y,z被定义为int型变量,若从键盘给x,y,z输入数据,正确的输入语句是
A)INPUT x、y、z; B)scanf("%d%d%d",&x,&y,&z);
C)scanf("%d%d%d",x,y,z); D)read("%d%d%d",&x,&y,&z);
正确答案: B
阅读下面程序段
#include ""
main()
{ char c;
c=(′z′-′a′)/2+′A′;
putchar(c);}
输出结果为
A)M B)N C)O D)Q
正确答案: A
下列程序段的输出结果是:
int a=1234;
float b=;
double c=;
printf("%2d,%,%",a,b,c);
A)无输出B)12,,
C)1234,, D)1234,,
正确答案: C
执行下列程序时输入:123<空格>456<空格>789<回车> 输出结果是
main()
{ char s[100]; int c, i;
scanf("%c",&c); scanf("%d",&i); scanf("%s",s);
printf("%c,%d,%s\n",c,i,s);}
A)123,456,789 B)1,456,789 C)1,23,456,789 D)1,23,456
正确答案: D
若已定义:int a=25,b=14,c=19;以下三目运算符(:)所构成语句的执行后
a<=25&&b--<=2&&cprintf("***a=%d,b=%d,c=%d\n",a,b,c):printf("###a=%d,b=%d,c=%d\n",a,b,c);程序输出的结果是
A)***a=25,b=13,c=19 B)***a=26,b=14,c=19
C)### a=25,b=13,c=19 D)### a=26,b=14,c=19
正确答案: C
请选出以下语句的输出结果
printf("%d\n",strlen("\t\"\065\xff\n"));
A)5 B)14
C)8 D)输出项不合法,无正常输出
正确答案: A
下列程序的输出结果是
main()
{ double d=; int x,y;
x=; y=(x+/;
printf("%d\n", d*y);
}
A)3 B) C)0 D)
正确答案: C
二、填空题
在使用putchar和getchar函数处理字符时,必须在程序的开头出现包含头文件的命令行是【2】。

正确答案: #include <>
下列程序的输出结果是【3】,【4】。

#include<>
main()
{ float a=;b=;
printf("%f,%f",fabs(a),fabs(b);}
正确答案: ,
第5章选择结构程序设计
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的。

)若变量c为char类型,能正确判断出c为小写字母的表达式是
A)′a′<=c<=′z′B)(c>=′a′)||(c<=′z′)
C)(′a′<=c)and(′z′>=c)D)(c>=′a′)&&(c<=′z′)
正确答案: D
已知int x=6,y=2,z;则执行表达式z=x=x>y后,变量z的值为
A)0 B)1 C)4 D)5
正确答案: B
能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是
A)a>=10 or a<=0 B)a>=0|a<=10
C)a>=10 &&a<=0 D)a>=10‖a<=0
正确答案: D
有如下程序段
int a=14,b=15,x;
char c=′A′;
x=(a&&b)&&(c<′B′);
执行该程序段后,x的值为
A)ture B)false C)0 D)1
正确答案: D
设int x=1,y=1;表达式(!x||y- -)的值是
A)0 B)1 C)2 D)-1
正确答案: B
设有:
int a=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>b)&&(n=c>d)后n的值是
A)1 B)2 C)0 D)不确定
正确答案: B
以下程序的输出结果是
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);}
A)1 B)0 C)非0的数D)-1
已知x,y,z均为整型变量,且值均为1,则执行语句++x||++y&&++z;后,表达式x+y的值为A)1 B)2 C)3 D)4
正确答案: C
若运行时给变量x输入12,则以下程序的运行结果是
main()
{int x,y;
scanf("%d",&x);
y=x>12x+10:x-12;
printf("%d\n",y);
}
A)0 B)22 C)12 D)10
正确答案: A
已知char ch=′C′;则以下表达式的值是
ch=(ch>=′A′ && ch<=′Z′)(ch+32):ch;
A) ′A′B) ′a′C) ′Z′D) ′c′
正确答案: D
若有条件表达式(exp)a++:b--,则以下表达式中能完全等价于表达式(exp)的是
A)(exp==0) B)(exp!=0) C)(exp==1) D)(exp!=1)
正确答案: B
有以下程序
main()
{int i=1,j=1,k=2;
if((j++||k++)&&i++)
printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是
A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3
正确答案: C
请阅读以下程序:
main()
{ int a=5,b=0,c=0;
if(a=b+c)printf("***\n");
else printf("$$$\n");
}
A)有语法错不能通过编译B)可以通过编译但不能通过连接C)输出*** D)输出$$$
正确答案: D
有如下程序
main() {float x=,y; if(x<y=; else if(x<y=x;else y=;
printf("%f\n",y); }
该程序的输出结果是
A) B) C) D)正确答案: C
以下4个选项中,不能看作一条语句的是
A); B)a=5,b=,c=;
C)if(a<5); D)if(b!=5)x=2;y=6;
正确答案: D
执行下列程序后,变量k的值是
main()
{int k=8; switch(k) {case 9:k+=1; case 10:k+=1;case 11:k+=1;break; default:k+=1;
}
printf("%d\n",k);
}
A)12 B)11 C)10 D)9正确答案: D
阅读如下程序段
#include ""
main()
{ int a=45,b=40,c=50,d; d=a>30b:c;
switch(d)
{ case 30 : printf("%d,",a);case 40 : printf("%d,",b); case 50 : printf("%d,",c); default : printf("#");
}
}
则输出的结果是
A)40,50, B)50,# C)40,# D)40,50,# 正确答案: D
现有如下程序段,此程序段编译有错误,则程序段的错误出在
#include
main()
{ int a=30,b=40,c=50,d; d=a>30b:c;
switch(d)
{ case a:printf("%d,",a);case b:printf("%d,",b); case c:printf("%d,",c); default:printf("#");
}
}
A)default:printf("#");这个语句
B)d=a>30b:c;这个语句
C)case a:printf("%d,",a); case b:printf("%d,",b); case c:printf("%d,",c);这三个语句
D)switch(d)这个语句
正确答案: C
二、填空题
设y是int型,请写出判断y为奇数的关系表达式【1】。

正确答案: (y%2)==1 或(y%2)!=0
设int a=5,b=6,表达式(++a= =b- -)++a:--b的值是【2】。

正确答案: 7
将以下程序写成三目运算表达式是【3】。

if(a>b)max=a;
else max=b;
正确答案: max=(a>b)a:b;
以下程序输出的结果是【4】。

main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
正确答案: 0
若从键盘输入58,则以下程序输出的结果是【5】。

main()
{int a;
scanf("%d",&a);
if(a>50)printf("%d",a);if(a>40)printf("%d",a); if(a>30)printf("%d",a); }
正确答案: 585858
阅读下面语句,则程序的执行结果是【6】。

#include ""main()
{ int a=-1,b=1,k;
if((++a<0)&&!(b- -<=0)) printf("%d,%d\n",a,b);else printf("%d,%d\n",b,a); }
正确答案: 1,0
阅读下面程序,则在执行时候的输出为【7】。

#include "" main()
{ int x=1,y=2,z=0;if(x=2)z=x,x=y,y=z; printf("%d,%d\n",x,y); }
正确答案: 2,2
以下程序的输出结果是【8】。

main()
{ int x=100, a=10, b=20, ok1=5, ok2=0; if(aelse if(ok2)x=10;else x=-1;
printf("%d\n", x); }
正确答案: -1
阅读下面的程序,当程序在执行时,如果输入的是′A′,则输出结果为【9】。

#include "" main() {char a;
a=getchar(); switch(a){ case 65: printf("%c",′A′);
case 66: printf("%c",′B′); default :printf("%s\n","other"); }
}
正确答案: ABother
第6章循环结构(本章的答案统一放在章节最后)一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的)
1.以下程序的输出结果是( )。

#include ""
int main()
{ int n=4;
while (n--)
printf("%d",--n);
}
2.以下程序的输出结果是( )。

main()
{int x=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x--,y);
}
3.当执行以下程序段时。

x=-1;
do
{x=x*x;}
while (!x);
A.循环体将执行一次
B.循环体将执行两次
C.循环体将执行无数多次
D.系统将提示有语法错误4.执行以下程序后输出的结果是()。

main()
{ int y=10;
do{y--;}while(--y);
printf("%d\n",y--);}
5.下面程序的输出结果是()。

main()
{ int x=3,y=6,a=0;
while (x++!=(y-=1))
{a+=1;
if (y<x) break;
}
printf("x=%d,y=%d,a=%d\n",x,y,a);
}
=4,y=4,a=1 =5,y=5,a=1
=5,y=4,a=3 =5,y=4,a=1
6.若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是()。

for (i=5;i;i--)
for (j=0;j<4;j++)
{…}
7.请读程序:
#include<>
main()
{int x=1,y=0,a=0,b=0; switch(x)
{case 1:switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
}
printf("a=%d,b=%d\n",a,b); }
上面程序的输出结果是()。

=2,b=1 =1,b=1 =1,b=0 =2,b=2 8.下面程序的输出是()。

#include ""
int main()
{
char *s="";
int k,v1=0,v2=0,v3=0,v4=0; for (k=0;s[k];k++)
switch(s[k])
{
default:v4++;
case 1:v1++;
case 2:v2++;
case 3:v3++;
}
printf("v1=%d,v2=%d,v3=%d,v4=%d\n", v1,v2,v3,v4);
}
=4,v2=2,v3=1,v4=1=4,v2=9,v3=3,v4=1 =5,v2=8,v3=6,v4=1=8,v2=8,v3=8,v4=8 9.有以下程序
#include〞〞
int abc(int u,int v );
main()
{
int c,a=24,b=16;
c=abc(a,b);
printf(〞%d\n〞,c);
}
int abc (int u,int v)
{
int w;
while (v)
{w=u%v;u=v;v=w;}
return u;
}
输出结果是( )。

10.在下列选项中,没有构成死循环的程序段是()。

i=100;
while (1)
{
i=i%100+1;
if(i>100) break;
}
B. for ( ;;);
k=1000;
do {++k;}while (k>=10000);
s=36;
while (s) ;
--s;
11.若输入B,以下程序的运行结果为()。

main()
{char grade;scanf("%c",&grade);
switch(grade)
{case'A':printf(">=85.");
case'B':
case'C':printf(">=60.");
case'D':printf("<60.");
default:printf("error.");
}
}
A.>=85.
B.>=60.
C.>=60.<. .
12.列程序运行的情况是()。

main()
{ int i=1,sum=0;
while(i<10)sum=sum+1;i++;
printf("i=%d,sum=%d",i,sum);
}
=10,sum=9 =9,sum=9 =2,sum=1 D.运行出现错误
13.有以下语句:
i=1;
for(;i<=100;i++) sum+=i;
与以上语句序列不等价的有( )。

A. for(i=1; ;i++) {sum+=i;if(i==100)break;}
B. for(i=1;i<=100;){sum+=i;i++;}
C. i=1;for(;i<=100;)sum+=i;
D. i=1;for(; ;){sum+=i;if(i==100)break;i++;}
14.下面程序的运行结果为()。

main()
{ int n;
for(n=1;n<=10;n++)
{ if(n%3==0)continue;
printf("%d",n);
}
}
A. D.
15.标有/**/的语句的执行次数是()。

int y=0,i;
for(i=0;i<20;i++)
{if(i%2==0)continue;
y+=i; /**/
}
16.下列程序的输出是()。

#include<>
main()
{ int i;char c;
for(i=0;i<=5;i++)
{c=getchar();putchar(c);
}
}
程序执行时从第一列开始输入以下数据,<CR>代表换行符。

u<CR>
w<CR>
xsta<CR>
w w w
x xs xsta 17.下列程序的输出为()。

#include""
main()
{ int i,j,x=0;
for(i=0;i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2)continue;x++; }
x++;
}
printf("x=%d\n",x);
}
=4 =8 =6 =12
18.下列程序的输出为()。

#include<>
main()
{int i,j,k=0,m=0;
for(i=0;i<2;i++)
{ for(j=0;j<3;j++)k++;k-=j;}
m=i+j;
printf("k=%d,m=%d\n",k,m);
}
=0,m=3 =0,m=5 =1,m=3 =1,m=5
19.在C语言中,为了结束while语句构成的循环,while后一对圆括号中表达式的值应该为()。

D.非0
20.在C语言中,为了结束由do-while语句构成的循环,while后一对圆括号中表达式的值应为()。

D.非0
21.下列程序的输出为()。

#include<>
main()
{ int k=0;char c='A';
do
{switch(c++)
{ case'A':k++;break;
case'B':k--;
case'C':k+=2;break;
case'D':k=k%2;continue;
case'E':k=k*10;break;
default:k=k/3;
}
k++;
}
while(c<'G');
printf("k=%d\n",k);
}
=3 =4 =2 =0 22.下列程序段的输出结果为()。

main()
{int x=3;
do
{ printf("%3d",x-=2);}
while(!(--x));}
0 -2 D.死循环
二、填空题:
1.当输入19,2,21时下列程序运行的结果是_________。

main()
{int a,b,c,max;
printf("please scan three number a,b,c:\n");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max<b)max=b;
if(max<c)max=c;
printf("max is:%d",max); }
2.若输入小写字母c,程序输出结果为【1】;若输入字符*,程序将【2】。

#include<> main(){char c1,c2;
c1=getchar();
while(c1<97||c1>122)c1=getchar(); c2=c1-32;printf("%c,%c\n",c1,c2); }
3.以下程序运行的结果________。

#include<>
#include<>
main()
{int i,k,m,n=0;
for(m=1;m<=10;m+=2) { if(n%10==0)printf("\n");
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>k)
{printf("%2d",m);
n++;
}
}
}
4.如果输入‘1’,‘2’,‘3’,‘4’,程序运行输出的是________。

#include<> main()
{char c;
int i,k;
k=0;
for(i=0;i<4;i++) {while(1)
{ c=getchar();
if(c>='0'&&c<='9')break;}
k=k*10+c-'0';
}
printf("k=%d\n",k);
}
5.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为________。

#include <>
main()
{int v1=0,v2=0;
char ch;
while ((ch=getchar())!='#')
switch(ch)
{case 'a':
case 'h':
default: v1++;
case '0':v2++;
}
printf("%d,%d\n",v1,v2); }
6.程序运行结果是_________。

#include<> main()
{int i;
for(i=1;i+1;i++)
{ if(i>4){printf("%d\t",i++);break;}
printf("%d\t",i++);
}
}
7.以下程序运行的结果是_________。

#include<>
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); }
8.以下程序运行的结果是________。

main()
{int i=1;
while(i<10)
if(++i%3!=1)continue;
else printf("%d",i);
}
9.程序运行的结果是________。

main()
{int n=0;
while(n++<=1)
printf("%d\t",n);
printf("%d\n",n);
}
10.此程序运行时,输入qwert程序的运行结果是_________。

#include<>
main()
{char c;
while((c=getchar())!='')putchar(++c);
}
11.对以下程序:
当输入65 14时,其运行结果是【 1 】。

当输入14 63时,其运行结果是【 2 】。

当输入25 125时,其运行结果时【3 】。

#include<>
main()
{int m,n;
scanf("%d%d",&m,&n);
while(m!=n)
{ while(m>n)m-=n;
while(n>m)n-=m;
}
printf("m=%d\n",m);
}
12.在执行以下程序时,为了使输出结果为t=4,则给a和b输入的值应满足的条件是_______。

main()
{int s,t,a,b;
scanf(〞%d,%d〞,&a,&b);
s=1;t=1;
if(a>0)s=s+1;
if(a>b)t=s+t;
else if (a==b) t=5;
else t=2*s;
printf(〞t=%d\n〞,t);
}
13.求出1000以内的“完全数”。

(提示:如果一个数恰好等于它的因子之和(因子包括1,不包括数本身),则称该数为“完全数”。

如:6的因子是1,2,3而6=1+2+3,则6是个“完数”)。

main()
{int i,a,m;
for(i=1;i<1000;i++)
{for(m=0,a=1;a<=i/2;a++)
if(!(i%a)) 【1 】;
if【2】)printf("%4d",i);
}
}
14.鸡问题:100元钱买100只鸡,公鸡一只5元钱,母鸡一只3元钱,小鸡一元钱三只,求100元钱能买公鸡、母鸡、小鸡各多少只
#include<>
main()
{int cocks,hens,chicks; cocks=0;
while(cocks<=19) { hens=0;
while(hens<=33)
{ chicks=;
if*cocks+*hens+chicks/==
printf("%d,%d,%d\n",cocks,hen s,chicks);
【1】;
}
【2】;
}
}
15.爱因斯坦的阶梯问题:设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;只有每步跨7阶时,正好到阶梯顶。

问共有多少阶梯。

main()
{int ladders=7;
while(【1 】)ladders+=14;
printf("%d\n",ladders);
}
16.下列程序计算平均成绩并统计90分及以上人数。

main()
{int n,m;
float grade,average; average=n=m=【1】; while(【2】)
{ scanf("%f",&grade);
if(grade<0)break;
n++;
average+=grade;
if(grade<90)【3】;
m++;
}
if(n)printf("%.2f%d\n",average/n,m );
}
17.下列程序计算Fibonacci数列:1,1,2,3,5,8,13……的前40项。

main()
{int I;long f1,f2;
【1】;
for(I=0;I<20;I++)
{ printf("%12ld%12ld",f1,f2);if(I%2)printf("\n"); f1+=f2;
【2】;
}
}
19.下列程序判断一个数是否为素数。

#include<>#include<>
main()
{int I,k,m;
scanf("%d",&m); k=sqrt(【1】); for(I=2;I<=k;I++)if(m%I==0)【2】;
if(【3】)printf("%dyes\n",m); else printf("%dno\n",m);
}
19.求100~499之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。

main()
{int I,j,k,m,n;
for(I=1;【1】;I++) for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
{【2】;
n=I*I*I+j*j*j+k*k*k;
if(【3】)
printf("%d",m);
}
}
20.从键盘上输入两个整数m和n,求其最大公约数。

main()
{int a,b,num1,num2,temp; scanf("%d,%d",&num1,&num2); if(【1】)
{ temp=num1;
num1=num2;
num2=temp;
}a=num1;b=num2;
while(b!=0)
{ temp=【2】;
a=b;
b=temp;
}
printf("%d,%d",a,num1*num2/a); }
答案及部分解题分析
一.选择题答案
14A
二.填空题答案
1.答案:21
2.答案:【1】c C 【2】等待继续输入,直到输入小写字母。

3.答案:55
4.答案:1234
5.答案:5,5
6.答案:1 3 5
7.答案:8
8.答案:4 7 10
9.答案:1 2 3
10.答案:rxfsu
11.答案:【1】m=1 【2】m=7 【3】m=25 12.答案:0<a<b
13.答案:【1】m=m+a 【2】m==i
14.答案:【1】hens++ 【2】cocks++
15.答案:【1】ladders/3!=2||ladders/5!=4||ladders/6!=5
16.答案:【1】0 【2】1 【3】continue
17.答案:【1】f1=1;f2=1 【2】f2+=f1
18.答案:【1】m 【2】break 【3】I>=k+1 19.答案:【1】I<=4 【2】m=I*1000+j*100+k*10 【3】m==n 20.答案:【1】num1>num2 【2】a%b
第7章数组
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的。

)若有说明int a[3][4];则a数组元素的非法引用是
A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]
正确答案:D
下列程序执行后的输出结果是
#include <>
#include <>
int main()
{ char arr[2][4];
strcpy(arr[0],"you");
strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr[0]);
}
A)you&me B)you C)me D)err
正确答案:A
执行下面的程序段后,变量k中的值为
int k=3, s[2];
s[0]=k; k=s[1]*10;
A)不定值B)33 C)30 D)10
正确答案:A
定义如下变量和数组:
int k;
int a[3][3]={9,8,7,6,5,4,3,2,1};
则下面语句的输出结果是
for(k=0;k<3;k++)printf("%d",a[k][k]);
A)7 5 3 B)9 5 1 C)9 6 3 D)7 4 1
正确答案:B
以下不正确的定义语句是
A)double x[5]={,,,,};
B)int y[5]={0,1,3,5,7,9};
C)char c1[]={′1′,′2′,′3′,′4′,′5′};
D)char c2[]={′\x10′,′\xa′,′\x8′};
正确答案:B
设有数组定义: char array[]="China"; 则数组array所占的空间为
A)4个字节B)5个字节C)6个字节D)7个字节
正确答案:C
对以下说明语句的正确理解是
int a[10]={6,7,8,9,10};
A)将5个初值依次赋给a[1]至a[5]
B)将5个初值依次赋给a[0]至a[4]
C)将5个初值依次赋给a[6]至a[10]
D)因为数组长度与初值的个数不相同,所以此语句不正确
正确答案:B
若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是
A)2 B)3 C)4 D)无确定值
正确答案:B
有以下程序
main()
{ char a[]={ ′a′, ′b′, ′c′,′d′, ′e′, ′f′, ′g′,′h′,′\0′};
int i,j;
i=sizeof(a);
j=strlen(a);
printf("%d,%d\b",i,j);
}
程序运行后的输出结果是
A)9,9 B)8,9 C)1,8 D)9,8
正确答案:D
在C语言中,若二维数组a有m列,则计算任一元素a[i][j]在数组中的相对位置的公式为A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1
正确答案:A
假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是
A)3 B)6 C)10 D)20
正确答案:D
下面程序输出的结果是
main()
{ int i;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d ",a[2-i][i]);
}
A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1正确答案:B
以下对二维数组a的定义错误的是
A)int a[2][3]={0}; B)int a[][3]={{1,2},{0}};
C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[][3]={1,2,3,4,5,6};
正确答案:C
阅读下面程序,则程序段的功能是
#include ""
main()
{ int c[]={23,1,56,234,7,0,34},i,j,t; for(i=1;i<7;i++)
{ t=c[i];j=i-1;
while(j>=0 && t>c[j])
{c[j+1]=c[j];j--;}c[j+1]=t;
}
for(i=0;i<7;i++) printf("%d ",c[i]); putchar(′\n′);
}
A)对数组元素的升序排列B)对数组元素的降序排列C)对数组元素的倒序排列D)对数组元素的随机排列正确答案:B
下列选项中错误的说明语句是
A)char a[]={′t′,′o′,′y′,′o′,′u′,′\0′};
B)char a[]={"toyou\0"};
C)char a[]="toyou\0";
D)char a[]=′toyou\0′;
正确答案:D
下述对C语言字符数组的描述中错误的是
A)字符数组的下标从0开始
B)字符数组中的字符串可以进行整体输入/输出
C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D)字符数组可以存放字符串
正确答案:C
阅读下列程序,则在执行后,程序的运行结果为
#include ""
main()
{ char a[30]="nice to meet you!";
strcpy(a+strlen(a)/2,"you");
printf("%s\n",a);
}
A)nice to meet you you B)nice to
C)meet you you D)nice to you 正确答案:D
现有如下程序段
#include ""
main()
{int k[30]={12,324,45,6,768,98,21, 34,453,456};
int count=0,i=0;
while(k[i]){ if(k[i]%2==0‖k[i]%5==0) count++;
i++;
}
printf("%d,%d\n",count,i); }
则程序段的输出结果为
A)7,8 B)8,8 C)7,10 D)8,10
正确答案:D
有如下定义语句:int aa[][3]={12,23,34,4,5,6,78,89,45};,则45在数组aa中的行列坐标各为A)3,2 B)3,1 C)2,2 D)2,1
正确答案:C
现在有如下程序
#include "" main() { char s[80]; int i,j;
gets(s);for(i=j=0;s[i]!=′\0′;i++) if(s[i]!=′H′)______
s[j]=′\0′;
puts(s);
}
这个程序段的功能是删除输入的字符串中字符′H′,则空线上应当添入的是A)s[j++]=s[i];j++; B)s[j]=s[i++];j++;
C)s[j++]=s[i]; D)s[j]=s[i];
正确答案:C
以下二维数组c的定义形式是
A)int c[3][] B)float c[3,4]
C)double c[3][4] D)float c(3)(4)
已知:int c[3][4];则对数组元素引用正确的是
A)c[1][4] B)c[][0] C)c[1+0][0] D)以上表达都错误
正确答案:C
若有以下语句,则正确的描述是
char a[]="toyou";
char b[]={′t′,′o′,′y′,′o′,′u′};
A)a数组和b数组的长度相同B)a数组长度小于b数组长度
C)a数组长度大于b数组长度D)a数组等价于b数组
正确答案:C
已知:char a[15],b[15]={"I love china"};则在程序中能将字符串I love china赋给数组a的正确语句是
A)a="I love china"; B)strcpy(b,a);
C)a=b; D)strcpy(a,b);
正确答案:D
已知:char a[20]= "abc",b[20]= "defghi";则执行下列语句后的输出结果为
printf("%d",strlen(strcpy(a,b)));
A)11 B)6 C)5 D)以上答案都不正确
正确答案:B
阅读如下程序段,则程序在先后输入love和china后,输出结果是
#include<>
#include<>
main()
{ char a[30],b[30];
int k;
gets(a);
gets(b);
k=strcmp(a,b);
if(k>0) puts(a);
else if(k<0) puts(b);
}
A)love B)china C)lovechina D)没有输出结果
正确答案:A
二、填空题
下面程序的功能是输出数组s中最大元素的下标,请填空。

main()
{ int k, p,s[]={1, -9, 7, 2, -10, 3};
for(p =0, k =p; p< 6; p++)
if(s[p]>s[k])_____________
printf("%d\n", k);
}
正确答案:k=p;
以下程序可把输入的十进制数以十六进制数的形式输出,请填空。

#include <>
int main()
{
char b[17]={"09ABCDEF"};
int c[64],d,i=0,base=16;
long n;
printf("Enter a number:\n");
scanf("%ld",&n);
do
{
c[i]=___________;
i++;
n=n/base;
}while(n!=0);
printf("Transmite new base:\n");
for(--i;i>=0;--i)
{
d=c[i];
printf("%c",____________);
}
printf("\n");
}
正确答案:n%base,b[d]
以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。

数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

例如,若一维数组中的数据是:
2 2 2
3
4 4
5
6 6 6 6
7 7
8
9 9 10 10 10
删除后,数组中的内容应该是:
2 3 4 5 6 7 8 9 10。

请填空。

#include <>
#define N 80
int fun(int a[], int n)
{
int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]__________a[i])
a[j++]=a[i];
___________;}
int main()
{
int
a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,1 0}, i, n=19;
printf("The original data :\n");
for(i=0; i<n;i++)
printf("%4d",a[i]);
n=fun(a,n);
printf("\nThe data after deleted :\n"); for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
}
正确答案:!=,return j
下列程序的输出的结果是
#include <>
int main()
{
int i,j,row,colum,m;
static int array[3][3]={{100,200,300},{28,72,-30},{-850 ,2,6}};
m=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(array[i][j]<m)
{
m=array[i][j];
colum=j;
row=i;
}
printf("%d,%d,%d\n",m,row,colum); }
正确答案:-850,2,0
下面程序是求出数组arr的两条对角线上元素之和,请填空。

#include ""
int main()
{ int arr[3][3]={2,3,4,8,3,2,7,9,8}, a=0,b=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(_________)
a=a+arr[i][j];
for(i=0;i<3;i++)
for(____________;j>=0;j--)
if(____________)
b=b+ arr[i][j]; printf("%d,%d\n",a,b);}
正确答案:i==j j=2 i+j==2
第8章函数
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的。

)
若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
A)函数调用可以作为独立的语句存在
B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中
D)函数调用可以作为一个函数的形参
正确答案: D
在调用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是
A)地址传递B)单向值传递
C)由实参传形参,再由形参传实参D)传递方式由用户指定
正确答案: B
以下正确的说法是
A)定义函数时,形参的类型说明可以放在函数体内
B)return后边的值不能为表达式
C)如果函数值的类型与返回值类型不一致,以函数值类型为准
D)如果形参与实参类型不一致,以实参类型为准
正确答案: C
以下正确的说法是
A)用户若需调用标准库函数,调用前必须重新定义
B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C)系统根本不允许用户重新定义标准库函数
D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动调用
正确答案: B
以下叙述正确的是
A)函数可以嵌套定义但不能嵌套调用
B)函数既可以嵌套调用也可以嵌套定义
C)函数既不可以嵌套定义也不可以嵌套调用
D)函数可以嵌套调用但不可以嵌套定义
正确答案: D
下面对C语言的描述中,正确的是
A)函数一定有返回值,否则无法使用函数
B)C语言函数既可以嵌套定义又可以递归调用
C)在C语言中,调用函数时,只能将实参的值传递给形参
D)C语言程序中有调用关系的所有函数都必须放在同一源程序文件中正确答案: C
以下程序有语法错误,有关错误原因的正确说法是
main()
{ int G=5,k;
void prt_char();
...
k=prt_char(G);
...
}
A)语句void prt_char();有错,它是函数调用语句,不能用void说明
B)变量名不能使用大写字母
C)函数声明和函数调用语句之间有矛盾
D)函数名不能使用下划线
正确答案: C
以下正确的函数首部定义形式是
A)double fun(int x,int y) B)double fun(int x;int y) C)double fun(int x,int y); D)double fun(int x,y);
正确答案: A
以下所列的各函数首部中,正确的是
A)void play(var :Integer,var b:Integer)
B)void play(int a,b)
C)void play(int a,int b)
D)Sub play(a as integer,b as integer)
正确答案: C
下面函数调用语句含有实参的个数为
func((exp1,exp2),(exp3,exp4,exp5));
A)1 B)2 C)4 D)5正确答案: B
有以下程序
float fun(int x,int y)
{ return(x+y);}
main()
{ int a=2,b=5,c=8;。

相关文档
最新文档