C语言习题集平时练习含答案.docx
《C语言习题集平时练习含答案.docx》由会员分享,可在线阅读,更多相关《C语言习题集平时练习含答案.docx(31页珍藏版)》请在冰豆网上搜索。
C语言习题集平时练习含答案
C语言习题集
第一章C语言概述
复习要点:
1. 程序的构成,main函数和其他函数。
2.语句,注释
3.运行C程序的步骤和方法
习题:
1.C程序是由函数构成的,一个C程序中至少包含一个main函数。
2.函数是C程序的基本单位。
(最小单位是表达式)
3.C程序有且只有一个main函数。
4.C程序从main函数开始执行。
5.C程序注释符是由/*和*/组成,且不能嵌套使用。
6.C程序的语句是以;结束。
7.C程序一条语句可分多行写,需要以\为连接符。
8.C程序可以用{和}将多条语句括起来,形成复合语句。
9.上机运行一个C程序必须经过源代码输入,编译,连接,运行4个步骤。
10.C程序的源文件扩展名是。
c。
11.以下叙述中正确的是(C)
A)C语言程序将从源程序中第一个函数开始执行
B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C)C语言规定必须用main作为主函数名,main必须小写,程序将从此开始执行,在此结束
D)main可作为用户标识符,用以命名任意一个函数作为主函数
12.以下叙述中错误的是(D)
A)C语言源程序经编译后生成后缀为.obj的目标程序
B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
13.以下不是语句的是(A)
A)a=10B)a=b+c;c=20;C);D){a=b;b++;}
14.运行以下程序
main()
{
inta=10;/*定义一个变量a
a=20;*/
printf(“%d”,A);此程序应该改写为:
printf(“%d”,a)
}
输出的结果是B。
A)10B)20
15.牢记VC++6.0的出错提示
英文提示中文实际意义
missing;,({等表示缺少;,({
'T':
undeclaredidentifierT没有定义(T要先定义然后才能使用)
'sqrt'undefined;sqrt如果是函数名则表示它的头文件没有包含
'T':
redefinitionT重复定义(可能是多次定义了T)
Cannotopenincludefile头文件的拼写或路径的不对
第二章数据类型,运算符与表达式
复习要点:
1. C的数据类型(整型,字符型,浮点型)及其定义方法。
2. C运算符的种类、运算优先级和结合性。
3. 不同类型数据间的转换与运算。
4. C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。
习题:
1.C语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符必须为 大小写字母和下划线 。
2.字符常量使用一对单引号界定单个字符,而字符串常量使用一对双引号来界定若干个字符的序列。
3.浮点数有十进制小数形式;
(2)指数形式两种表示形式。
4.C语言%(取余的操作符)要求两个操作数是整型。
5.关系运算的值是整型。
6.Sizeof(int)的意义返回int型变量在内存中占的字节数 。
7.假设所有变量均为整型:
a=b=5;i=++a;j=b++;则i等于6j等于5。
8.假设所有变量均为整型:
a=3;b=5;a>b&&++a;a
9.假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+B)的值为9。
提示:
a=2,b=5,a++,b++,i=a,j=b,a+b的值
10.a=(2,5,2+5)则a的值为7。
11.表达式:
(int)(7.2/2)的值是3。
12.C语言中,不同运算符之间运算次序存在先后的区别,同一运算符之间运算次序存在结合性的规则。
13.32与八进制数40相等,75与十六进制数4b相等
14.已知x=2.5,a=7,y=4.7则x+a%3*(int)(x+y)%2/4的值是2.5
15.下列关于C语言用户标识符的叙述中正确的是(C)
A)用户标识符中可以出现下划线和字母,可以和关键字同名
B)用户标识符中不可以出现中划线,但可以出现下划线
C)用户标识符中可以出现下划线,但不可以放在用户标识符的开头
D)用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头
16.有以下程序
#include
main()
{charc1,c2;
c1='A'+'8'-'4';
c2='A'+'8'-'5';
printf("%c,%d\n",c1,c2);
}已知字母A的ASCII码为65,程序运行输出后的结果是(A)
A)E,68B)D,69C)E,DD)输出无定值
17.以下各组标识符中,合法的用户标识符是(D)
A)B01table_10_tk%
B)Fast_voidpblbook
C)xy_longdouble*pCHAR
D)sjInt_xyw_y23
18.在C语言中,字符型数据在内存中以(D)形式存放。
A)原码B)BCD码C)反码D)ASCII码
19.已知字符’A’的ASCⅡ代码值是65,字符变量c1的值是’A’,c2的值是’D’。
执行语句printf("%d,%d",c1,c2-2);后,输出结果是C
A)A,BB)A,68C)65,66D)65,68
20.1MB等于(D)
A)1000字节B)1024字节C)1000*1000字节D)1024*1024字节
21.与十六进制数200等值得十进制数为(B)
A)256B)512C)1024D)2048
22.设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是(B)
A)n=(n*100+0.5)/100.0B)m=n*100+0.5,n=m/100.0
C)n=n*100+0.5/100.0D)n=(n/100+0.5)*100.0
23.以下叙述中错误的是(D)
A)C程序中的#include和#define行均不是C语句
B)除逗号运算符外,赋值运算符的优先级最低
C)C程序中,j++;是具有赋值功能的语句
D)C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算
24.以下关于long、int和short类型数据占用内存大小的叙述中正确的是(D)
A)均占4个字节B)根据数据的大小来决定所占内存的字节数
C)由用户自己定义D)由C语言编译系统决定
25.已知x=10,y=20,则表达式y+=5+x的值为(C)
A)25B)-10C)35D)10
26.以下常量正确的是(B)
A)0X7a,078,6a,57L,
B)10.,-.5e3,1e0,0.0012e-101
C)‘’,‘\”’,‘\0127’,‘\xff’
D)56,-.3,.e2,1.2e2.1,”xy”
27.有以下定义语句,编译时会出现编译错误的是C
A)chara=’a’;B)chara=’\n’;C)chara=’aa’;D)chara=’\x2d’;
第三章顺序结构
复习要点:
1. 赋值
2. 输入与输出函数的调用,正确输入数据并正确设计输出格式。
3. 常见的编程题
习题:
1.已知x=1,y=2,则表达式y*=5+x的值为12。
2.putchar(getchar());从键盘上输入A。
则最终的输出是A。
3.printf函数和scanf函数的格式说明都使用%字符开始。
4.printf(“%-m.nf”,A);其中-m表示长度为m,左对齐,n表示小数位长度为n。
5.已知a=17则printf(“%o,%#o”,a,A);输出的结果是。
(#输出0八进制标志)
6.已知a=17则printf(“%*d,%d”,-5,a);输出的结果是170。
;*表示跳过改项目,%d没有对应会输出0
7.scanf处理输入数据时,遇到下列情况时该数据认为结束:
空格,
Tab,回车。
8.一般地,调用标准字符或格式输入输出库函数时,程序开头应有包含头文件的预编译命令:
stdio。
h 。
9.下列符合语法的赋值语句是(cd)
A)a=7+b=8;B)++a=7;C)a=b,b++,a+7;D)a+=2*b,c=++b;
10.关于赋值过程中类型转换叙述错误的是(d)
A)实数赋值给整数变量时,将小数位不会四舍五入,会直接截断
B)整数赋值给实数变量时,整数位不变,小数位补0
C)整型变量赋值给short时,则只保留2个低字节
D)Double变量赋值给float变量,则只保留前面的7位有效数字
E)长度相同的有符号整型变量和无符号整型变量可以直接赋值
11.putchar()函数可以向终端输出一个。
d
A)整型变量表达式值B)实型变量值
C)字符串D)字符或字符型变量值
12.有以下程序
main()
{printf("%d\n",NULL);}
程序运行后的输出结果是(A)
A)0B)1C)-1D)NULL没定义,出错
13.执行下列程序片段时输出结果是(a)。
unsignedinta=65535;
printf(“%d”,A);
A)65535B)-1C)-32767D)1
14.执行下列程序片段时输出结果是(B)。
floatx=-1023.012
printf(“\n%8.3f,”,x);
printf(“%10.3f”,x);
A)1023.012,-1023.012B)-1023.012,-1023.012
C)1023.012,-1023.012D)1023.012,1023.012
15.对于下述语句,若将10赋给变量k1和k3,将20赋给变量k2和k4,则应按(D)方式输入数据。
intk1,k2,k3,k4;
scanf(“%d%d”,&k1,&k2);
scanf(“%d,%d”,&k3,&k4);
A)1020↙B)1020↙C)10,20↙D)1020↙
1020↙1020↙10,20↙10,20↙
16.若运行时输入:
12345678↙,则下列程序运行结果为(d)。
main()
{inta,b;
scanf(“%2d%2d%3d”,&a,&b);可以在后面加&c就对了a
printf(“%d\n”,a+b);
}//按照教育部考试中心教材标准
A)46B)579C)5690D)出错
17.有定义语句:
intx,y;scanf("x=%d,y=%d",&x,&y);若想让x值为11,y值为12,下面四组键盘输入正确的是(D)
A)1112<回车>B)11,12<回车>
C)a=11,b=12<回车>D)x=11,y=12<回车>
18.阅读以下程序
#include
main()
{intcase;floatprintF;
printf(“请输入2个数:
”);
scanf(“%d%f”,&case,&printF);
printf(“%d%f\n”,case,printF);
}
该程序在编译时产生错误,其出错原因是A
A)定义语句出错,case是关键字,不能用作用户自定义标识符
B)定义语句出错,printF不能用作用户自定义标识符
C)定义语句无错,scanf不能作为输入函数使用
D)定义语句无错,printf不能输出case的值
19.有以下程序
#include
main()
{inta=1,b=0;
printf(“%d,”,b=a+B);
printf(“%d\n”,a=2+B);
}
程序运行后的输出结果是D
A)0,0B)1,0C)3,2D)1,3
20.有以下程序段
intm=0,n=0;charc='a';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
若从键盘上输入:
10A10<回车>,则输出结果是:
A
A)10,A,10B)10,a,10C)10,a,0D)10,A,0
21.在屏幕中显示如下字符(提示:
用printf)
****Hello*****
World
============
22.从键盘输入一个小写字母,将其变成大写字母输出?
(提示:
1.假定输入的字母一定符合要求2.大小写字母ASCII码相差32)
23.从键盘输入一个100—999之间的数,将该数的个,十,百位数字相加的和输出?
(提示:
1.假定输入的数一定符合要求2.可以通过%,/实现)
inta,b,c,num,sum;
scanf(“%d”,&num);
a=num%10;b=num/10%10;c=num/100;
sum=a+b+c;
printf(“%d”,sum);
第四章选择结构
复习要点:
1.逻辑关系的表示。
2.条件运算符。
3.用if语句实现选择结构。
4.用switch语句实现多分支选择结构。
5.选择结构的嵌套。
1.下面各逻辑表达式的值,设a=3,b=4,c=5。
(1)a>b1
(2)!
(a>B)&&!
c||1:
1
(3)!
(x=A)&&(y=B)&&0:
0
2.下列表达式中,不满足“当x的值为偶数时值为真,为奇数时值为假”的要求(B)。
A)x%2==0B)!
x%2!
=0C)(x/2*2-x)==0D)!
(x%2)
3.能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是(C)。
A)(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)
B)(x>=1)||(x<=10)||(x>=200)||(x<=210)
C)(x>=1)&&(x<=10)||(x>=200)&&(x<=210)
D)(x>=1)||(x<=10)&&(x>=200)||(x<=210)
4.以下程序段中与语句k=a>b?
(b>c?
1:
0):
0;功能等价的是(A)
A)if((a>B)&&(b>C))k=1;B)if((a>B)||(b>C))k=1
elsek=0;
C)if(a<=B)k=0;D)if(a>B)k=1;
elseif(b<=C)k=1;elseif(b>C)k=1;
elsek=0;
5.对if语句的理解错误的是:
(D)
A)if结构,将判断表达式的值视为逻辑值B)系统将if---else结构视为一条语句
C)else总是与其之前最近的且尚未配对的if配对D)else可以独立出现
(以下6到12题必须掌握)
6.有如下程序。
#include
voidmain()
{
intn=20;
if(n<10);
printf("n<10");
if(n=10)printf("n=10");
else
if(n>10)printf("n>10");
elseprintf("n<10");
}
程序执行后输出的结果是:
7.有如下程序。
main()
{
intn;
scanf("%d",&n);
switch(n/10)
{
default:
printf("E");
case6:
printf("D");
case10:
case9:
printf("A");
case8:
printf("B");
case7:
printf("C");
}
}
从键盘上输入的数是:
999,输出的结果是
从键盘上输入的数是:
100,输出的结果是
8.有如下程序。
voidmain()
{
intx,y;
charop;
x=20;y=10;
scanf("%c",&op);
switch(op)
{case'+':
y+=x;break;
case'-':
y-=x;break;
case'*':
y*=x;break;
case'/':
y/=x;break;
default:
y+=x;
}
printf("%d\n",y);
}
从键盘上输入的字符是:
’+’,输出的结果是
9.以下if嵌套中实现的逻辑意义不同的是
(1)voidmain()
{
intn;
scanf("%d",&n);
if(n==10)printf("n=10");
else
if(n>10)printf("n>10");
elseprintf("n<10");
}
(2)#include
voidmain()
{
intn;
scanf("%d",&n);
if(n!
=10)
if(n>10)printf("n>10");
elseprintf("n<10");
elseprintf("n=10");
}
(3)
voidmain()
{
intn;
scanf("%d",&n);
if(n==10)printf("n=10");
if(n>10)printf("n>10");
elseprintf("n<10");
}
10.下面程序的输出结果是:
#include
main()
{
intx=100,a=20,b=10;
intv1=5,v2=0;
if(a
if(b!
=15)if(!
v1)
x=1;
else
if(v2)x=10;
x=-1;
printf("%d",x);
}
}
11.有如下程序段。
if(a
if(celse
if(a if(b elsex=3;
elsex=6;
elsex=7;
当a=1,b=3,c=5,d=4时执行完下面一段程序后x的值是
当a=4,b=3,c=5,d=4时执行完下面一段程序后x的值是
当a=1,b=3,c=4,d=3时执行完下面一段程序后x的值是
当a=1,b=3,c=1,d=1时执行完下面一段程序后x的值是
12.有三个整数a,b,c,由键盘输入,输出其中最大的数。
13.某商店推出打折活动,要求购物达到或超过2000元的打八折,购物达到或超过1000元不到2000元的打八五折,购物达到或超过500元不到1000元的减50元,购物不到500元的原价,请写出相应的程序(分别用switch和if—else结构)
13.随机给出一个不多于5位的数,计算出他的位数,按个十百千的顺序输出。
第五章循环结构
复习要点:
1. for循环结构。
2. while和do-while循环结构。
3. continue语句和break语句。
4. 循环的嵌套。
1.C语言三个循环语句分别是while语句,do-while语句和for语句。
2.至少执行一次循环体的循环语句是do-while。
3.以下对循环结构相关知识描述错误的(E)。
A)循环结构需要包含结束循环的条件,否则循环结构将陷入死循环
B)break的意义是直接跳出循环结构,continue的意义是结束本次循环进入下次循环
C)死循环是指无限循环下去,永远不结束,所以死循环一定是有害的
D)for循环结构的表达式1,只执行一次
E)for循环结构的表达式1,2,3都可以省略,所以表达式1,2,3之间的分号可以省略
F)for循环结构如表达式2省略,则系统认为表达式2的值永远为真
4.下面程序段
intn=2;
while(n=0){printf(“%d”,n);n--;}
则下面描述中正确的是(C)。
A)while循环执行2次B)循环是无限循环
C)循环题语句一次也不执行D)循环体语句执行一次
5.下述程序段中,(C输出5150)与其他程序段的作用不同。
A)s=0;k=1;B)s=0;k=1;
while
(1){Repeat:
s+=k;s+=k;
k=k+1;if(++k<=100)
if(k>100)break;gotoRepeat;
}printf(“\n%d”,s);输出5050
printf(“\n%d”,s);
输出5050
C)k,s=0;D)s=0;k=1;
for(k=1;k<=100;s+=++k);do
printf(“\n%d”,s);s+=k;
while(++k<=100);
printf(“\n%d”,s);
6.以下程序段的循环次数是(B)。
for(i=2;i==0;)printf(“%d”,i--);
A)无限次B)0次C)1次D)2次
7.有以下程序
main()
{inti,n=0;
for(i=2;i<5;i++)
{do
{if(i%3)continue;
n++;
}while(!
i);
n++;}
printf(“n=%d\n”,n);
}程序执行后的输出结果是(D)
A)n=5B)n=2C)n=3D)n=4
8.下面程序的输出结果是。
main()
{intx=9;
for(;x>0;x--){
if(x%3==0){
printf(“%d”,--x);
continue;
}
}
}
9.有以下程序
main()
{intx=0,y=5,z=3;
while(z-->0&&++x<5)y=y-1;
printf(“%d,%d,%d\n”,x,y,z);
}程序执行后的输出结果是
10.下面程序的功能是输出以下形