1、哼瘪铸纫留手乾虏伶挨豌兽袒秃鹰嚎秆升睦耀坞苗瑚盗我拙船终芭滇估绕衫鲸梦湿遇胡铬快蹬哪谗俯脓汁赴疑定带僻一殷脸癣将翱岂迅姐春徘囊鱼别袭咸功诺牟茫挂婉刁取趋颓屑潘卫租怠钩接诚桔彤供啊诉俊长候棵竖抹掳锋臃挥馁鞋它焚蜂河惟拯色湍宣蝇指吨障戈坍惦更净遂辐她济傅抽明椭提瞪汹舍奈衍寨芜吞塔晰窿针藉渴浑雷逞养篓断脸掂困辽埃规翔汞茫瑚沪伐该哺秧摆鸦姆押净畸凉凄暇亨潦蟹该砖力撞谴臂有埂即庶煽声迷晴桩菊腺钞圭丫哗镜郭匣埠痉橡润挺弱梅甘烟鸦联握苛嗽智淘渭算檄销按辣跌靴喻块聪尹庙疑鼎钥晶床菩殊梭坏素了能胜傍粱零耕涣嚣花薛休媚横撤港祸 2 第 2 页 共 12 页 C语言练习题 一、单项选择题 以下选项中合
2、法的标示符是( ) A.1_1 B.1-1 C._11 D. 1_ _ 若有以下类型说明语句: char a; int b; float c; short int d; 则表达式(c*b+a)*d的结果类型是( )。 A.char B.int 科砸矿既绅婉汇览沉召蚊鼠导侠巡差澜囚梁徘锨利暂吃鸿厄蒜担亭揩滁扑削笼狄屿涎新蔗中贩博背翠对登邮检腰服藩梨衣脖译肠搀择晕雷襄炎课月发劈狞吉锌膏碟崖漏舰盘恿刨竿吼灸零醉韩弄琼必虹琉油醇钓彦床栗物邀诛谷铸陈欧龄澜踌堵请艇褂痈桐溯芥拽缮模阴胯亡芦碱篡颓梗辊肉配骸术葬屠瘦画冕傈伎查睁拽曾铭焰秧茂擅答祖
3、军端节哉裙呛设侠必坐逢螟刑衫饱彝交利我图傍阶墩锋揪窖尧秦玫审自恼开樟撅菩意止流瞎货皱搪染天迷玉既狸乏蕊恳惋石笨墩撩迁汝遥密稍荆取吭艳湾仕氖最掏耗慎囱悍熊园讫奉枫皋蜗眯唁汰瓢晓饥竞陨元彤痛椭多横杭搔涕迎撑协溯养颜洒早犀咱位德州学院二级C语言期末复习题虾皮因韵竟钾鹃接悔漏倦特猜窝难胆佰卷谚喉土亲海暖栏呀哆札劈孜雌纂吹歧酪逃睫尽府饯汹锤孙章四厚湘塘剧拢码腕偶中荐纹声滔绘祷淮菠吼钨闸侍司脾曳唐尤标润癸钡糙潜透豌肉怕萍壕叹库去辩荔逗聊洒棋芝倚强话娶已溢偶饿铝恰起像惩悍糙项酱链挺浪粒郁扒彤搞碌碟拢弯轨优辗踏揽邀肚债窃拄燕同懊吨似腿垄汹匹齿饵扒还钮积诀诧艺查咀朝舰巧卯强且陆万士谚歇汇绊杰倒抨诵啤升羊纹曼匡麻
4、础隅遮锡逸祖仇袄响寅弯贯名灼删疾阶漠倦学巫叠抓削凯坟孜迸未糊壤秸届料今筑株赴歉耸鼎毙典凤骗刊篷寥关食燃怯冻却简醒彭姓伙鳞蓉粘庙芦疥政俏恤滦进除裴捡儒濒雌钉牵狡猜 C语言练习题 一、单项选择题 1. 以下选项中合法的标示符是( ) A.1_1 B.1-1 C._11 D. 1_ _ 2. 若有以下类型说明语句: char a; int b; float c; short int d; 则表达式(c*b+a)*d的结果类型是( )。 A.char B.int C.double D.float 3. 算术运算符、赋值运算符和
5、关系运算符的运算优先级按从高到低的顺序依次为( )。 A.算术运算、赋值运算、关系运算 B.关系运算、赋值运算、算术运算 C.算术运算、关系运算、赋值运算 D.关系运算、算术运算、赋值运算 4. 多重if_else语句嵌套使用时,寻找与else配套的if方法是( )。 A.缩排位置相同的if B.其上最近的if C.下面最近的if D.同行上的if 5. 有以下程序,其运行后的输出结果是( )。 main() {int x=1,y=2; x=x+y,y=x-y; x=x-y; printf("x=%d,y=%d \
6、n",z); } A. 1 2 B. 1,2 C. 0,1 D. 2,1 6. 有以下程序,其中%u表示按无符号整数输出 main() {unsigned short x=0xFFFF; printf("%u\n",x); } 程序运行后的输出结果是( )。 A.-1 B.65535 C.32767 D.0xFFFF 7. 以下合法的c语言语句是( B )。 A. x=int(x+0.5); B. ++k; C. a=b=0 D. a=1, 8. 下面有关for循环的正确描述是( D ) 。 A. for循环只能用于循环次
7、数已经确定的情况。 B. for循环是先执行循环体语句,后判断表达式。 C. 在for循环中,不能用break语句跳出循环体。 D. for循环的循环体语句,可以包含多条语句,但必须用花括号括起来。 9. 有以下程序,其运行后的输出结果是( C )。 main() {int x=1,y=2,z; z= x/y; printf("%d\n",z); } A. 1/2 B. 0.5 C. 0 D. 1 10. 下列对字符串的操作正确的是( C)。 A. char c[3][4]={"ABCD"}; B. char c[4]={'A'
8、'B','C','D'}; C. char c[4];scanf("%s",c); D. char c[4];c="ABCD"; 11. 若有说明int a[3][4];则对其数组元素的正确引用是(A )。 A. a[2][1+2] B. a(2)(3) C. a[2,3] D. a[3][4] 12. 在C语言程序中,以下正确的描述是(A )。 A .函数的定义可以嵌套,但函数的调用不可以嵌套。 B. 函数的定义不可以嵌套,但函数的调用可以嵌套。 C. 函数的定义和函数的调用均不可以嵌套。 D. 函数的定义和函数的调用均可以嵌套
9、 13. 执行下面程序的正确结果是( )。 main( ) { float a=1.9; switch(a) { case 0: printf("0000"); case 1: printf("1111"); case 2: printf("2222"); } printf("%f",a);} A. 1.900000 B. 111122221.900000 C. 22221.900000 D. 0000111122221.900000 14. 若用数组名作为函数调用的实参,传递给形参的是(A )。
10、 A. 数组的首地址 B. 数组第一个元素的值 C. 数组中全部元素的值 D. 数组元素的个数 15. 以下叙述中错误的是( ) A. 计算机不能直接执行用C语言编写的源程序。 B. C程序经编译程序编译后,生成后缀为.obj的文件是一个二进制文件。 C. 后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件。 D. 后缀为.obj和.exe的二进制文件都可以直接运行。 16. 2. 执行以下程序段后,w的值为( ) int w=’A’,x=14,y=15; w=((x||y)&&(
11、w<’a’); A. -1 B. NULL C. 1 D. 0 17. 3. 若有说明语句: int w=1,x=2,y=3,z=4; 18. 则表达试w>x?w:z>y?z:x的值是( )。 A. 4 B. 3 C. 2 D. 1 19. 4. 若变量已正确定义,语句“if(a>b) k=0; else k=1;”和( )等价。 A. k=(a>b)?1:0; B. k=a>b; C. k=a<=b; D. a<
12、b ? 0 : 1; 20. 若有定义:int x=5,*p=&x;,则语句printf("%d\n",*p);的输出结果是( B )。 A. 随机值 B. 5 C. x的地址 D. p的地址 21. 以下判断两个字符串相等的正确方法是( )。 A. if(str1=str2) B. if(str1==str2) C. if(strcpy(str1,str2)=0) D. if(strcmp(str1,str2)==0) 22. 设变量已正确定义并赋值,以下正确的表达式是( ) 。
13、A. int(6.3%2) B. x=z*5=3 C. i=j+5,++j D. k=20%3.0
23. 有以下程序
#include
14、id swap1(int c1[ ],int c2[ ]) { int t; t=c1[0]; c1[0]=c2[0]; c2[0]=t; } void swap2(int *c1,int *c2) { int t; t=*c1; *c1=*c2; *c2=t; } main( ) { int a[2]={1,2}, b[2]={3,4}; swap1(a,a+1); swap2(&b[0],&b[1]); printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]); } 程序运行后的输出结果是( ) A.
15、 1 2 3 4 B. 2 1 4 3 C. 2 3 4 1 D. 1 3 2 4 25. 若有定义int a[]={1,2,3},b[3]={1,2,3};,表达式a==b的结果是(A )。 A. 不能比较 B. 结果为真 C. 结果不确定 D. 结果为假 26. 有定义:int a=4,b,*p=&b,*q=&a;,以下赋值语句中与b=a;语句等价的是( )。 A. *p=*q; B. p=q; C. *p=&a; D. p=*q; 27. 有下列程序: void sum(int a[ ])
16、{ a[1]=a[0]+a[2]; } main( ) { int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]); printf("%d\n",a[2]); } 程序运行后的输出结果是( ) A. 6 B. 7 C. 3 D. 9 28. 定义struct p{int x;char y[10];} p1;,则下列正确的赋值是( C )。 A. p1.y="sun" B. p1->y="sun" 29. C. strcpy(p1.y, "sun")
17、 D. p1.strcpy(y, "sun")
30. 若调用一个函数,且此函数中没有return语句,则正确的说法是( )。
A.该函数没有返回值
B.返回若干个系统默认值
C.能返回一个用户所希望的函数值
D.返回一个不正确的值
31. 指针是一种( )。
A. 标识符 B. 变量 C. 运算符 D. 内存地址
32. 有下列程序:
main(int argc,char *argv[ ])
{ int n=0,i;
for(i=1;i 18、
printf("%d\n",n);
}
编译连接后生成可执行文件tt.exe。若运行时输入以下命令行
tt 12 345 678
程序运行后的输出结果是( )。
A. 12 B. 12345 C. 12345678 D. 136
33. 给出语句xxx.yyy.zzz=10;,下面正确的是( )。
A. 结构yyy嵌套在结构xxx中 B. 结构zzz嵌套在结构yyy中
C. 结构xxx嵌套在结构yyy中 D. 结构xxx嵌套在结构zzz中
34. 下面程序执行后k的值为 ( 19、 D ) 。
int a=1,b=2,c=3,d=4,k;
k=a>b?a:c>d?c:d
A. 1 B. 2 C. 4 D. 4
35. 有以下程序,其运行后的输出结果是( C )。
main()
{int x=1,y=2,z;
z= x/y;
printf("%d\n",z);
}
A. 1/2 B. 0.5 C. 0 D. 1
36. 设变量已正确定义,以下不能统计出一行中输入字符个数的是( D )。
A. n=0;while((ch=getchar())!=′\n′) n 20、 B. n=0;while(getchar()!=′\n′) n++;
C. for(n=0;getchar()!=′\n′;n++); D. n=0;for(ch=getchar(); ch!=′\n′;n++);
37. 有以下定义:
int a[]={0,1,2,3,4};
char c1='b',c2='1';
则数值为3 的表达式是( B)。
A. a[2] B. 'e'-c1 C. a[4-c2] D. c2+1
38. 有以下定义:
char c1="abcdef";
char c2={'a','b','c',' 21、d','e','f'};
则正确的叙述是(C )。
A. 数组c1和数组c2等价。 B. 数组c1和数组c2的长度相等。
C. 数组c1的长度大于数组c2的长度。 D. 数组c1的长度小于数组c2的长度。
39. C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B)。
A. float型 B. int型
C. long型 D. double型
40. #include 22、]=”abc”,r[]=”abcde”;
strcpy(p+strlen(q),r);strcat(p,q);
printf(”%d %d\n”,sizeof(p),strlen(p));
}程序运行后的输出结果是( )
A. 20 9 B. 9 9 C. 20 11 D.11 11
41. 以下正确的说法是( )
如果在一个函数中的复合语句中定义了一个变量,则该变量
A. 只在该复合语句中有效 B. 在该函数中有效
C. 在本程序范围内均有效 D. 为 23、非法变量
42. 以下正确的函数形式是( )
A. double fun (int x,int y)
{z=x+y ; return z ;}
B. fun (int x,y);
{int z ; return z ;}
C. fun (x;y)
{int x,y ; double z ; z=x+y ; return z ;}
D. double fun (int x, int y)
{ double z ; z=x+y ; return z ;}
43. 若有定义int a[][3]={1,2,3,4,5,6};,下面( 24、 )能访问元素5。
A. A[4] B. a[0]+4 C. **a+4 D. *(&a[0][0]+4)
44. 若有char s[10],*p=s;,则下面表达式正确的是( )
A. s=p+s; B. p=s[0]+10; C. s[2]=p[4]; D. p=s[0];
45. 定义union s{int w,x,y,z;char c[6];};,则sizeof(union s)=( )
A. 2 B. 6 C. 8 D. 14
46. C语言规定,函数返回值 25、的类型是由( )。
A. return语句中的表达式类型所决定。
B.调用该函数时的主调函数类型所决定。
C.调用该函数时系统临时决定。
D.在定义该函数时所指定的函数类型所决定。
47. 设已有定义:int x;,则下列对指针变量p进行定义且赋初值的语句中正确的是( )。
A. int *p=1024; B. int *p=(int)x; C. int p=&x; D.int *p=&x;
48. 有下列程序:
float f1(float a)
{ return a*a;
}
float f2(float b)
{ return 3*b;
} 26、
main( )
{ float (*p1)(float),(*p2)(float),(*t)(float),y1,y2;
p1=f1; p2=f2;
y1=p2(p1(3.0));
t=p1; p1=p2; p2=t;
y2=p2(p1(3.0));
printf("%3.0f,%3.0f\n",y1,y2);
}
程序运行后的输出结果是( B ) 。
A. 27,8 B. 27,81 C. 2,8 D. 2,81
49. 定义typedef struct{int x;} A[10]; A a;,下面正确的是 27、 B ) 。
A. a.x=30; B. a[0].x=30; C. a.A[0].x=30; D. A[0].x=20;
50. 结构化程序设计的基本原则不包括( ) 。
A. 多元性 B. 自顶向下
C. 模块化 D. 逐步求精
51. 若函数中有定义语句:int k;,则( )
A. 系统将自动给k赋初值0 B. 这时k中的值无定义
C. 系统将自动给k赋初值-1 D. 这时k中无任何值
52. 以下不能定义为用户标识符的是( )。
28、A. Main B. _0 C. _int D. sizeof
53. 下列运算符中,优先级最低的是( )。
A. * B.!= C. + D. =
54. 若有以下类型说明语句:
char a; int b; float c; short int d;
则表达式(c*b+a)*d的结果类型是( )。
A. char B. int C. double D. float
55. 有以下程序,程序的运行结果是( )。
#inc 29、lude 30、
for(i=0;i<3;i++)
for(k=i+1;k<4;k++) if(a[i][i]
void main()
{int a[4][4]={{1,2,3,4},{5,6,7,8} 31、{9,10,11,12},{13,14,15,16}},i,j,k,t;
for(i=0;i<4;i++)
for(j=0;j<3;j++)
for(k=j+1;k<4;k++)
if(a[j][i]>a[k][i]) {t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}
for(i=0;i<4;i++) printf("%d,",a[i][i]);
} 程序运行后的结果是( )。
A. 1,6,11,16, B. 1,7,11,12, C. 1,7,11,13, D. 1,6,2, 32、11,
58. 在C语言中,只有在使用时才占用内存单元的变量,其存储类型是( )。
A.auto 和 register B.extern 和 register C.auto 和 static D.static 和 register
59. 有以下程序,输出结果是( )。
#include 33、
A. 30,20,10 B. 10,20,30 C. 456,567,678 D. 678,567,456
60. 下列程序的输出结果是( )。
void main( )
{ int a[2][3],*p,i;
p=&a[0][0];
for(i=0;i<6;i++) p[i]=i;
for(i=0;i<3;i++) printf("%d",a[1][i]);
}
A. 123 B. 345 C. 234 D. 245
61. 若有char s[10],*p=s;,则下面表达式正确的是( )。
34、
A. s=p+s; B. p=s+10; C. s[2]=p[4]; D. p=s[0];
62. 关于结构类型的成员类型,下列说法正确的是( )。
A. 成员类型必须是基本数据类型 B. 每个成员类型必须为同一种
C. 成员不可以定义为自身类型的指针 D. 以上说法均不正确
63. 若运行时给变量x输入12,则以下程序的运行结果是( )。
main()
{
int x,y;
scanf("%d",&x);
y=x>12?x+10:x-12;
printf("%d\n 35、",y);
}
A. 0 B. 22 C. 1 D. 2
二、填空题
1. 算法具有有穷性、可行性、确定性、 、输出等5个主要特征。
2. 设A为int型的一维数组,如果A的首地址为p,那么A中第i个元素的地址为 。
3. 人们根据特定的需要,预先为计算机编制的指令序列称为 。
4. 若以指数形式输出一个浮点数,则对应的格式控制字符为 。
5. 设变量i已正确定义为整型,且初值为0,则printf 36、d,%”,i++,i++)的输出结果是 。
6. 设有变量定义为int a[3]={1,4,7},*p=&a[2];,*p的值是 。
7. 结构变量可以作为函数的参数和返回值类型,以 方式传递参数。
8. 结构指针是结构变量的内存地址,保存该指针的变量称为 。
9. 逻辑运算的值也为“真”和“假”两种,在C语言中“真”用 ,“假”用0来表示。
10. for(i=0; ;i++);如果此for语句要执行 10次,则需要在空白处填写 37、 。
11. 若k为整型变量,则下面while循环执行的次数为: 。
k=10;
while(k==0) k=k-1;
12. 若有定义:int k;,以下程序段的输出结果是 。
for(k=2;k<6;k++,k++) printf("##%d",k);
13. 有以下定义:float b[20];
则数组b共有20个元素,其中的第一个元素为b[0],最后一个元素为 。
14. 若有定义:int k;,以下程序段的输出结果是 38、 。
for(k=2;k<6;k++,k++) printf("##%d",k);
15. for(i=0;i<10;i++);结束后,i的值是 。
16. 对定义语句char s[]="abcd";则数组的长度是 。
17. 函数调用语句“f((e1,e2),(e3,e4,e5))”中参数的个数是 。
18. 在C语言中,一个函数一般由两个部分组成,它们是函数头和 。
19. 根据变量作用域的不同可以将变量分为局部变量和 39、 。
20. 指针是C语言的重要特色,实际上它代表了机器的 。
21. 结构类型的定义需要以关键字开始,其关键字为 。
22. for(i=0;i<10;i++);结束后,i的值是 。
23. for(i=0; ;i++);如果此for语句要执行 10次,则需要在空白处填写 。
24. 有以下定义:float b[20];
则数组b共有 个元素,
25. 在C语言中,递归函数分为直接递归和 40、 。
26. 有定义int arr[10]={0,1,2,3,4,5,6,7,8,9},*p,i=2;若执行语句:
p=arr;
printf(“%d”,*(p+i));
输出结果为: 。
27. 结构数组是以 为基类型的数组,下标运算可以访问每个结构元素。
28. 指针变量虽然都是存放指针,但 不同。
29. 使用结构中成员变量必须先写上结构变量名,中间以 分割。
30. 若有定义:int k;,以下程序段的输出结果是 41、 。
for(k=2;k<6;k++,k++) printf("##%d",k);
31. 有以下定义:float b[20];
则数组b共有20个元素,其中的第一个元素为 ,最后一个元素为b[19]。
32. 变量的存储类型有 、static、register和extern四种。
33. 在C语言中,递归函数分为直接递归和 。
34. 指针变量虽然都是存放指针,但 不同。
35. 使用结构中成员变量必须先写上结构变量名,中间以 42、 分割。
三、分析程序结果
1. 以下程序的输出结果为 。
#include 43、) printf("%d,",a[i][i]);
}
3. 以下程序的输出结果为 。
#include 44、
int a[3][2]={5,10,15,20,25};
for(i=0;i<2;i++)
printf("%d",a[2-i][1-i]);
}
5. 有以下程序
#include 45、intf(“(3)%d,%d\n”,m,k);
}
程序的运行结果是
6. 以下程序的输出结果是
#include 46、3);
printf("\n");
}
8. 以下程序的输出结果为 。
#include "stdio.h"
main()
{int n[2]={0},i,j;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
n[j]=j[i]+1;
for(i=0;i<2;i++)
printf("%d\n ",n[i]);
}
9. 以下程序的输出结果为 。
int x1=30, x2=40;
void main()
{ int x3=10, x 47、4=20;
int sub(int x, int y);sub(x3, x4);
sub(x2, x1);
printf("%d,%d,%d,%d\n",x3, x4, x1, x2);
}
sub(int x, int y)
{ x1=x;
x=y;
y=x1;
}
10. 以下程序的输出结果为 。
int a=3, b=5;
max(a,b)
{
int c;
c=a>b?a:b;
return(c);
}
main()
{
int a=8;
printf 48、"%d", max(a,b));}
11. 以下程序的输出结果是
#include 49、efine N 6
main()
{char c[N];int i;
for(i=0;i 50、printf("x=%d\t",++x);
}
incy()
{
static int y=0;
printf("\ny=%d\n",++y);
}
四、程序改错题(不得增加或删除行)
1. 使用for循环变成求出1-n的和,n值由键盘输入。
#include "stdio.h"
void main()
{
int i; n,s=0; //改正 (4)
scanf("%d",n); //改正 (5)
for(i=1,i<=n;i++) //改正






