c语言.docx
- 文档编号:5497170
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:23
- 大小:43.24KB
c语言.docx
《c语言.docx》由会员分享,可在线阅读,更多相关《c语言.docx(23页珍藏版)》请在冰豆网上搜索。
c语言
《C语言程序设计技巧》考试范围
考试时间:
2小时,下周四(6月9日)下午5:
00~7:
00
xuhl@
一、单项选择题(每题2分,共50分)
1.main函数
在C语言中,main函数的位置?
C程序从什么函数开始执行?
一个C语言程序可以包括几个main函数?
2.在C语言中,每条语句是用“;”结束;一行可以写几条语句?
是不是在任何场合都区分大小写?
3.转义字符。
转义字符
转义字符的意义
\n
换行
\t
横向跳到下一制表位置(代表Tab键)
\b
退格
\r
回车
\v
竖向跳格
\f
走纸换页
\\
反斜杠符“\”
\'
单引号字符
\"
双引号字符
\a
鸣铃
\ddd
1~3位八进制数所代表的字符
\xhh
1~2位十六进制数所代表的字符
例如:
(1)printf("%d\n",strlen("abc\bd\t\'\x80\nabc\\\"\200\n"));输出16
(2)函数printf("%d\n",strlen("ab\n\t\\\""))的输出结果是6。
(3)printf("%d\n",strlen("a\a\bc\0134074123\\q\rwe\"\0abc"))输出结果18
4.四舍五入运算。
设变量n为float类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是。
A)n=(n*100+0.5)/100.0B)n=(int)(n*100+0.5)/100.0
C)n=n*100+0.5/100.0D)n=(n/100+0.5)*100.0
5.非法的字符串常量与标识符。
'abc',"1212\",[abc],{qwer}
5e,-abf,+abc
6.表达式类型。
(1)设有说明:
char w;int x;float y;double z;则表达式w*x+z-y值的数据类型为doubel。
(2)已知intb;floatd;chara;a+b+123.456+d的类型是double。
(3)设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为。
A.intB.floatC.doubleD.不确定
7.写表达式。
(1)代数式
的C语言表达式是(a+b)/(a-b)*c
(2)以下不能正确表示代数式
的C语言表达式是()。
A)2*a*b/c/dB)a*b/c/d*2
C)a/c/d*b*2D)2*a*b/c*d
8.进制与输入输出。
d(或i)-int,o-八进制,x(或X)-十六进制,u-unsignedint,f-实型,c-字符,s-字符串。
(1)C源程序中不能表示的数制是()。
A)二进制B)八进制C)十进制D)十六进制
(2)若有定义“inta;floatb;”,则正确的输入输出为。
A)scanf("%f%d",&a,&b);printf("%d,%d\n",a,b);
B)scanf("%d%f",%a,%b);printf("%d,%f\n",a,b);
C)scanf("%d%f",&a,&b);printf("%d,%f\n",a,b);
D)scanf("%d%d",&a,&b);printf("%f,%d\n",a,b);
(3)若有定义语句:
doublex,y,*px,*py;执行了px=&x;py=&y;之后,正确的输入语句是
A)scanf("%f%f",x,y);B)scanf("%f%f"&x,&y);
C)scanf("%lf%le",px,py);D)scanf("%lf%lf",x,y);
(4)有以下程序
#include
main()
{inta1,a2;charc1,c2;
scanf("%d%c%d%c",&a1,&c1,&a2,&c2);
printf("%d,%c,%d,%c",a1,c1,a2,c2);
}
若通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,
程序输出结果是:
12,a,34,b则正确的输入格式是(以下_代表空格,
A)12a34b
C)12,a,34,b
(5)printf函数的调用格式
printf("格式控制字符串",输出表列);
在TurboC和VC中,printf函数的输出格式的一般形式为:
%[标志][宽度指示符][.精度指示符][长度修饰符]格式字符
表3.4标志及其意义
标志
意义
−
输出结果左对齐,右边填空格;缺省则输出结果右对齐,左边填空格
+
输出符号(正号或负号)
空格
输出值为正时冠以空格,为负时冠以负号
#
对c,s,d,u类无影响;对o类,在输出时加前缀0;对x类,在输出时加前缀0x
0
对数值格式,在指定宽度的同时,输出数据左边空格处填以数字0
表3.5标志的用法
输出语句
输出结果
printf("%6d\n",111);
ㄩㄩㄩ111
printf("%-6d\n",111);
111ㄩㄩㄩ
printf("%+d\n",111);
+111
printf("%d\n",111);/*%和d之间有一个空格*/
ㄩ111
printf("%d\n",−111);/*%和d之间有一个空格*/
−111
printf("%#o\n",10);
012
printf("%#x\n",16);
0x10
printf("%06.2f\n",1.6);
001.60
9.条件表达式。
在if、do-while、while、for语句中的条件表达式都可以是任意合法的表达式。
如if(a+5)、if(b=7)、if(a)……。
10.写if语句的运行结果。
(1)#include
main()
{intx;
scanf("%d",&x);
if(x++>5)printf("%d",x);
elseprintf("%d\n",x--);
}
输入6和4,则输出结果是_7__5__
(2)#include
main()
{intx;
scanf("%d",&x);
if(x<=3);
elseif(x!
=10)printf("%d\n",x);
}
(3)#include
main()
{intx=3,y=0,z=0;
if(x=y+z)printf("****");
elseprintf("####");
}
(4)以下选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是
A)switch(a)B)switch(a==1)
{case1:
a=b;break;{case0:
a=b;break;
default:
a++;case1:
a++;
}}
C)switch(a)D)switch(a==1)
{default:
a++;break;{case1:
a=b;;
case1:
a=b;case0:
a++;
}}
(5)有以下程序
#include
main()
{inta=1,b=2,c=3,d=0;
if(a==1)
if(b!
=2)
if(c==3)d=1;
elsed=2;
elseif(c!
=3)d=3;
elsed=4;
elsed=5;
printf(“%d\n”,d);
}
程序运行后的输出结果是___4___。
11.逻辑运算。
(1)main()
{
inta,b,c,d;
a=b=c=0;
d=(a++&&b++)||c++;
printf("%d,%d,%d,%d\n",d,a,b,c);
d=a++||(b++&&c++);
printf("%d,%d,%d,%d\n",d,a,b,c);
}
(2)有以下程序
#include
main()
{inta=1,b=2,c=3,d=0;
if(a==1&&b++==2)
if(b!
=2||c--!
=3)
printf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d\n",a,b,c);
}
程序运行后输出结果是C
A)1,2,3B)1,3,2
C)1,3,3D)3,2,1
12.写switch语句执行结果。
(1)main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
(2)inta=1,b=0;
switch(a)
{ case 1:
switch(b)
{case 0:
printf("**0**");break;
case 1:
printf("**1**");break;
}
case 2:
printf("**2**");break;
}
A)**0** B)**0****2**
C)**0****1****2**D)有语法错误
13.循环次数。
(1)intn=0;
do{++n;}while(n<=0);//1
(2)intn=0;
while
(1){n++;}//无限次
(3)intn=10;
while(n);{n--;}//10
(4)for(n=0,i=1;;i++)n+=i;//无限次
(5)for(i=0,j=5;++i!
=--j;)printf("%d%d",i,j);//无限次
(6)for(x=0,y=0;(y!
=123)&&(x<4);x++);//4
(7)以下程序段中的变量已正确定义
for(i=0;i<4;i++,j++)
for(k=1;k<3;k++);printf("*");
程序段的输出结果是
A)********
B)****
C)**
D)*
(8)有以下程序
#include
main()
{inti=5;
do
{if(i%3==1)
if(i%5==2)
{printf("*%d",i);break;}
i++;
}while(i!
=0);
printf("\n");
}
程序的运行结果是()。
A)*7B)*3*5C)*5D)*2*6
14.累加、连乘。
例如:
(1)计算s=1×2×3×…×10
(2)计算
,其中y为整型变量且y≥0
(3)计算
(4)求下列式子的值。
1-
+
-
…+
-
15.数组的使用。
(1)若有说明:
int a[10];则对数组元素的正确引用是。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]
(2)若有说明:
int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是。
A)2B)3C)4D)无确定值
(3)若有说明:
inta[3][4];则对a数组元素的非法引用是。
A)a[0][3*1]B)a[2][3]C)a[1+1][0]D)a[0][4]
(4)若有以下定义语句:
inta[]={1,2,3,4,5,6,7,8,9,10};则值为5的表达式是。
A)a[5]B)a[a[4]]C)a[a[3]]D)a[a[5]]
(5)若二维数组a有m列,则在a[i][j]前的元素个数为。
A)i*m+jB)j*m+iC)i*m+j-1D)i*m+j+1
(6)若有说明:
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是。
A)*p+9B)*(p+8) C)*p+=9 D)p+8
(7)以下选项中正确的语句组是
A)chars[];s="BOOK!
";
B)char*s;s={"BOOK!
"};
C)chars[10];s="BOOK!
";
D)char*s;s="BOOK!
";
(8)以下程序的输出结果是。
main()
{intn[5]={0,0,0},i,k=2;
for(i=0;i printf("%d\n",n[i]); } (9)以下程序的输出结果是sum=6。 main() {inta[3][3]={1,3,5,7,9,11,13,15,17}; intsum=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) {a[i][j]=i+j; if(i==j)sum=sum+a[i][j]; } printf("sum=%d",sum); } (10)以下程序的输出结果是3。 main() {inti,j,k,n[3]; for(i=0;i<3;i++)n[i]=0; k=2; for(i=0;i for(j=0;j n[j]=n[i]+1; printf("%d\n",n[1]); } (11)有以下程序 #include main() {char*a[]={"abcd","ef","gh","ijk"};inti; for(i=0;i<4;i++)printf("%c",*a[i]); } 程序运行后的输出结果是 A)aegiB)dfhkC)dfhkD)abcdefghijk 16.函数。 (1)如有函数调用语句: func(rec1,rec2+rec3,(rec4,rec5));在该函数调用语句中,含有的实参个数是3。 (2)语句strcat(srcpy(str1,str2),str3);的功能是。 (3)函数调用语句f((s1,s2,s3),(s4,s5,s6,s7));中参数的个数是2。 (4)若函数中有定义语句: intk;,则 A)系统将自动给k赋初值0B)这是k中的值无定义 C)系统将自动给k赋初值-1D)这时k中无任何值 (5)设函数中有整型变量n,为保证其在未赋初值的情况下初值为0,应该选择的存储类别是 A)autoB)registerC)staticD)auto或register (6)以下叙述正确的是 A)C语言程序是由过程和函数组成的 B)C语言函数可以嵌套调用,例如: fun(fun(x)) C)C语言函数不可以单独编译 D)C语言中除了main函数,其他函数不可作为单独文件形式存在 (7)以下叙述中错误的是。 A)用户定义的函数中可以没有return语句 B)用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值 C)用户定义的函数中若没有return语句,则应当定义函数为void类型 D)函数的return语句中可以没有表达式 (8)下列关于函数形参和实参的叙述中正确的是。 A)函数的实参和其对应的形参共占同一存储单元 B)形参只是形式上的存在,不占用具体存储单元 C)同名的实参和形参占同一存储单元 D)函数的形参和实参分别占用不同的存储单元 (9)下面关于函数参数的说法不正确的是。 A)形参可以使常量、变量或表达式 B)实参可以使常量、变量或表达式 C)在带参函数的定义中,必须指定形参的类型 D)形参应与其对应的实参类型一致 17.宏定义。 (1)#define N 3 #define Y(n) N*n*n3*5+1*5+1 则执行语句: z=Y(5+1);后,z的值为21。 A)21B)108C)54D)都不是 (2)#defineS(r)10*r*r main() {inta=20,b=20,s; s=S(a+b); printf("%d\n",s); } A)320B)620C)16000D)400 (3)#defineMIN(x,y)(x)<(y)? (x): (y) main() {inti,j,k; i=10;j=15;k=10*MIN(i,j); printf("%d\n",k); }//运行结果: 15 (4)设有宏定义: #defineIsDIV(k,n)((k%n==1)? 1: 0)且变量m已正确定义并赋值,则宏调用: IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是 A)判断m是否能被5或者7整除B)判断m是否能被5和7整除 C)判断m被5或者7整除是否余1D)判断m被5和7整除是否都余1 18.指针。 (1)若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是。 A)a,point,*&a B)&*a,&a,*point C)*&point,*point,&a D)&a,&*point,point (2)下面函数的功能是。 sss(char*s,char*t) {while((*s)&&(*t)&&(*t==*s)) s++,t++; return(*s-*t); } A)求字符串的长度 B)比较两个字符串的大小 C)将字符串s复制到字符串t中D)将字符串s连接到字符串t中 (3)设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是。 A)k=*p1+*p2; B)p2=k;C)p1=p2; D)k=*p1*(*p2); (4)已知inta[3][4],*p=a[0];p+=6;那么*p和的值相同。 A)*(a+6)B)*(&a[0]+6)C)*(a[1]+3)D)*(&a[0][0]+6) (5)已知函数定义如下: abcd(char*s1,char*s2) { while(*s2++=*s1++); } 函数abcd的功能是 A)串复制B)求串长C)串比较D)串反向 (6)若有以下定义 intx[10],*pt=x; 则对数组元素的正确引用是 A)*&x[10]B)*(x+3)C)*(pt+10)D)pt+3 19.结构体 (1)以下程序的输出结果是。 structst {intx; int*y; }*p; intdt[4]={10,20,30,40}; structstaa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; main() {p=aa; printf("%d",++p->x); printf("%d",(++p)->x); printf("%d\n",++(*p->y)); } A.102020B.506021C.516021D.607031 (2)假定已建立以下链表结构,且指针p和q已指向如图所示的结点: 则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是()。 A)(*p).next=(*q).next;free(p);B)p=q->next;free(q); C)p=q;free(q);D)p->next=q->next;free(q); (3)若已经建立下面的链表结构,指针p、q分别指向图中所示结点,则不能将q所指的结点插入到链表末尾的一组语句是。 A)q−>next=NULL;p=p−>next;p−>next=q; B)p=p−>next;q−>next=p−>next;p−>next=q; C)p=p−>next;q−>next=p;p−>next=q; D)p=(*p).next;(*q).next=(*p).next;(*p).next=q; 20.文件操作。 (1)利用fseek函数可以实现的操作是。 (2)fread函数的功能是。 (3)fwrite函数的功能是。 二、程序填空题(每空2分,共16分) (1)给定程序中,函数fun的功能是对N × N矩阵,以主对角线为对称线,将对称元素相加并将结果存放在下三角元素中,右上三角元素置0。 例如,若N = 4,有下列矩阵: 2112132421000 25164738计算结果为: 371600 291132544258320 4221331066598710 #include #defineN4 main() {inti,j,a[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}; printf("\nTheoriginalarray: \n"); for(i=0;i { for(j=0;j printf("%2d",a[i][j]); printf("\n"); } for(i=1;i { for(j=0;【1】;j++)//j { 【2】;//a[i][j]=a[i][j]+a[j][i]; a[j][i]=0; } } printf("\nTheresultis: \n"); for(i=0;i { for(j=0;j printf("%2d",a[i][j]); printf("\n"); } } (2)下面函数是用选择法对n个字符串排序,请填空。 fun(char*str[],intn) { inti,j; char*p; for(i=0;i<5;i++) for(j=i+1;j<6;j++) if(strcmp(*(str+i),【1】)>0)//*(str+j) { p=*(str+i); str
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言