C语言经典题目.docx
《C语言经典题目.docx》由会员分享,可在线阅读,更多相关《C语言经典题目.docx(19页珍藏版)》请在冰豆网上搜索。
C语言经典题目
得分
一、单选题(每题2分)
1、以下叙述错误的是___。
A、一个C源程序可由一个或多个函数组成
B、一个C源程序必须包含一个main函数
C、C程序的基本组成单位是函数
D、在C程序中,注释说明只能位于一条语句的后面
*在下面四个运算符中,优先级别最低的是()。
A、!
B、&&C、==D、=
*若执行语句:
intb,a=12,n=5;表达式a%=(b=2,n%=b)+4结果是()。
A、16B、2C、1D、4
*有如下输入语句:
scanf(“x=%d,y=%d”,&x,&y);为使变量x的值为1,y的值为2,从键盘输入数据的正确形式是()。
A、12<回车>B、1,2<回车>
C、x=1,y=2<回车>D、x=1y=2<回车>
2、设x和y为浮点型变量,则以下________语句是正确的赋值语句。
A、x=y%2 ;B、x*x=y ;C、x=x+10*y ;D、*x=y+2 ;
3、为了避免嵌套的条件分支语句if—else的二义性,C语言规定:
C程序中的else总是与______组成配对关系。
A、缩排位置相同的ifB、在其之前未配对的if
C、在其之前未配对的最近的ifD、同一行上的if
4、有以下程序段,while循环执行的次数是________。
intk=0;
while(k=1)k++;
A、执行1次 B、有语法错,不能执行
C、执行0次 D、无限次
*以下不是无限循环的是()。
A.for(;;x++=i);
B.while(l){x++;}
C.for(i=10;;i--)sum+=i;
D.for(y=0,x=1;x>++y;x=i++)i=x;
*以下程序运行结果是()。
#include
#defineS(r)r*r
voidmain()
{
inti=2;
printf(“%d\t%d\n”,S(i),S(i+1));
}
A、45B、26C、24D、49
5、对于以下程序段,运行后i值为__。
inti=0,a=2;
switch(a)
{
case1:
i+=1;
case2:
i+=2;
default:
i+=3;
}
A、2B、5C、6D、上述程序有语法错误
6、若希望当A的值为奇数时,表达式的值为"真",A的值为偶数表达式的值为"假"。
则以下不能满足要求的表达式是________。
A、A%2==1B、!
(A%2==0)C、!
(A%2)D、A%2
*C语言中规定,函数返回值的类型是由()。
A、return语句中的表达式的类型决定B、调用该函数时系统临时决定
C、在定义该函数时所指定的函数类型决定D、调用该函数的函数类型决定
7、设变量定义为inta[5],*p=a;,则*p相当于______。
A、aB、a[5]C、a[0]D、a+1
8、有下面程序段则___。
char*a,b[]="China";a=b;printf("%s",a+2);
A、编译出错B、运行后将输出ina
C、运行后将输出ChD、运行后将输出China
*下面判断字符串str1是否大于str2,正确的表达式是()。
A、if(str1>str2)B、if(strcmp(str1,str2))
C、if(strcmp(str1,str2)>0)D、if(strcmp(str2,str1)>0)
9、若在主函数中有数组定义inta[10],并有函数调用f(a),则下列关于函数f的原型声明,错误的是______。
A、voidf(intx[10]);B、voidf(intx[]);
C、voidf(intx);D、voidf(int*x);
10、调用一个带参数的函数时,以下正确的说法是___。
A、实参变量和与其对应的形参变量各占用独立的存储单元
B、实参变量和与其对应的形参变量共占用一个存储单元
C、只有当实参变量和与其对应的形参变量同名时才共用存储单元
D、形参变量是虚拟的,不占用存储单元
*设有语句intarray[2][3];,下面几种引用下标为i和j的数组元素的表示方法,不正确的是()。
A、*(array[i]+j)B、*(*(array+i)+j)
C、*(array+i*3+j)D、array[i][j]
11、有变量定义如下:
inta[2][3],*p,(*q)[3];以下赋值语句中错误的是__。
A、p=a;B、q=a;C、p=*a+1;D、q=a+1;
*假设已定义chara[10];char*p;下面的赋值语句中,正确的是()。
A、p=a;B、a=”abcdef”;
C、*p=”abcdef”;D、p=*a;
*设有下列语句,intn=0,*p=&n,**q=&p;则下面()是正确的赋值语句。
A、p=1;B、*p=2;C、q=p;D、*q=5;
12、已知
structsk
{inta;floatb;
}data,*p;
若有p=&data,则对data中的成员a的正确引用是___。
A、(*p).dataB、(*p).aC、p->data.aD、p.data.a
*下面关于静态局部变量的描述,不正确的是()。
A、静态局部变量存储在静态存储区B、静态局部变量全局可见
C、静态局部变量还是局部可见D、静态局部变量只会被初始化一次
13、以下一维数组定义及初始化正确的是___。
A、inta[];B、inta[]={1,2,3};
C、inta[3]={1,2,3,4}D、inta[3]={,2,};
14、下面对数组array进行正确初始化的是______。
A、intarray[2][3]={{1,2},{1,2},{1,2}};
B、intarray[2][]={{1,2},{1,2}};
C、intarray[][3]={1,2,3,4,5,6};
D、intarray[2][3]={{1,2},{,2},{}};
*strlen(”\012ab\xab\\bcd\n”)的值为()。
A、9B、10C、11D、13
15、当已存在一个read.txt文件时,执行函数fopen("read.txt","r+")的功能是________。
A、打开read.txt文件,清除原有的内容
B、打开read.txt文件,只能写入新的内容
C、打开read.txt文件,只能读取原有内容
D、打开read.txt文件,可以读取和写入新的内容
*使用fopen函数打开一个新的二进制文件,要求可以进行读和写,那么打开方式是()。
A、”w+”B、”rb+”C、”wb+”D、”ab”
得分
二、填空题(每空1分)
1、C语言源程序中整型常量可以用十六进制数表示,此时必须以
(1)为前缀。
*C语言源程序文件的后缀是
(1),头文件的后缀是
(2)。
*printf()函数表示输出一个字符的格式转换说明符为(3),表示输出字符串的格式转换说明符为(4)。
*C语言中,表示函数返回的关键字是(5),表示程序中止、强制返回操作系统的库函数是(6)。
*C语言的宏定义指令是(7),取消宏定义的指令是(8)。
2、表达式sizeof("AB\bCDEF\rGH\n")的结果是
(2)。
3、若有定义:
inta=2,b=3,c=4;则接着执行完语句:
a*=16+(b++)-(++c);后,a的值是(3),b的值是(4),c的值是(5)。
4、(6)语句用于循环体中可以提前结束本次循环体的执行,进入下一次循环条件的判断。
5、在函数体内声明一个静态局部变量,需要使用的关键字是(7)。
*定义含3个整型指针元素的指针数组arr的语句是(9),返回整型指针值的无参函数fun的函数原型是(10)。
6、设有说明语句int*ptr[4],那么ptr是(8)。
7、单链表的结点类型定义为:
structNODE
{intdata;
structNODE*next;
}head,*p,*q;
在单链表中,如果指针p指向链表中间的某一个结点处,指针q指向其后继结点处,则删除q结点需要用两条语句实现,依次是:
(9)和free(q);
8、终端输入1个字符的函数getchar()的等效文件输入函数(即以stdin为形参)是_(10)_。
得分
三、程序阅读题(每题5分)
1、写出下面程序的输出结果______。
#include
intmain()
{inta;
for(a=0;a<7;a++)
{
if(a%2)
printf("$");
else
continue;
printf("#");
}
return0;
}
2、写出下面程序的输出结果______。
#include
inta=5;
voidp1()
{printf("%d",a=a*a);
}
voidp2()
{staticinta=3;
printf("%d",a=a*a*a);
}
intmain()
{
printf("%d",a);
p1();
a=a-5;
printf("%d",a);
p2();
printf("%d\n",a);
return0;
}
3、写出下面程序的输出结果______。
#include
intfun(intn)
{
intret;
if(n==1)
ret=2;
elseif(n==2)
ret=3;
else
ret=2+fun(n-2);
returnret;
}
intmain()
{
printf("%d\n",fun(5));
return0;
}
*以下程序的执行结果是___(3)___。
#include
voidmain()
{
intx=1,y=2,z=0;
switch(x)
{
case0:
printf(“@”);
case1:
switch(y)
{
case1:
printf(“@”);break;
case2:
printf(“!
”);break;
}
case3:
switch(z)
{
case0:
printf(“*”);break;
case1:
printf(“#”);break;
default:
printf(“$”);break;
}
break;
default:
printf(“&”);
}
}
4、写出下面程序的输出结果______。
#include
typedefstructst
{
intx,y;
}ST;
STdata[2]={{1,100},{2,200}};
intmain()
{
ST*p=data;
printf("%d",p->y);
printf("%d\n",(++p)->x);
return0;
}
5、写出下面程序的输出结果______。
#include
#include
intmain()
{
char*p;
charcolor1[10]="red",color2[10]="grey";
p=color1;
p++;
strcat(p,color2);
printf("%s\n",p);
return0;
}
得分
四、程序填空题(每空2分)
1、下面是以下三角形式输出九九乘法表的程序,在画线的位置填上适当的语句,使该程序完整。
#include
intmain()
{
inti,j;
for(i=1;_____①______;i++)
{
for(____②______;j<=i;j++)
printf("%d*%d=%d",i,j,____③______);
printf(____④______);
}
return0;
}
*产生1万个1~100之间的随机整数,将每个值产生的次数统计到数组create中,例如:
create[30]=98,则表示在1万个随机整数中有98次产生的是30。
最后打印数组create的元素从create[1]至create[100]。
#include
(1)
voidmain()
{
intcreate[101]={0};
inti,r;
srand(time(NULL));
for(i=1;i<=10000;i++)
{
r=
(2);
++(3);
}
for(i=1;i<=100;i++)
printf("%5d",create[i]);
printf("\n");
}
2、完成以下程序,该程序的功能是对N个初始的字符串用选择法进行由小到大的排序,函数sort完成排序功能,最后输出排序后的各字符串。
#include
#include
#defineN6
voidsort(char(*a)[10],intn)
{
inti,j,k;
chart[10];
for(i=0;i{
k=i;
for(j=i+1;jif(strcmp(a[j],a[k])<0)
____⑤______;
if(i!
=k)
{
strcpy(t,a[i]);
____⑥_____;
strcpy(a[k],t);
}
}
}
intmain()
{
inti;
charstr[N][10]={"red","black","pink","yellow","green","white"};
____⑦_____;//调用sort进行字符串排序
for(i=0;iputs(str[i]);
return0;
}
*下列函数实现统计字符串string中字符letter出现的次数,并将次数返回。
intcharCount(constchar*string,charletter)
{
inti=0,count=0;
while(string[i]){
if((4)==letter)
(5);
(6);
}
returncount;
}
3、完成以下程序,该程序的功能是将一个名为old.txt的文本文件拷贝到一个名为new.txt的新文本文件中。
#include
intmain()
{
intc;
FILE*fp1,*fp2;
fp1=fopen("old.txt",___⑧_____);
fp2=fopen("new.txt","w");
c=fgetc(fp1);
while(___⑨_____)
{
___⑩_____;
c=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
return0;
}
得分
五、编程题(15分)
编写一个程序,要求:
①在main()函数中定义一维整型数组arr,调用input函数完成数组的n个元素的输入(n≤30),再调用OddNum函数得到数组中的奇数个数并输出此值,最后用Output函数将数组中所有的奇数输出。
②输入函数的原型为:
voidinput(intarray[],intn);完成数组array中n个元素的输入。
③求奇数元素个数的函数原型为:
intOddNum(intarray[],intn);完成求数组中的奇数元素个数并返回。
④输出函数的原型为:
voidOutput(intarray[],intn);完成输出数组array中所有的奇数元素。
参考
#include
voidinput(intarray[],intn);
intOddNum(intarray[],intn);
voidoutput(intarray[],intn);
intmain()
{
intarr[30],n;
do
{
printf("pleaseinputn:
\n");
scanf("%d",&n);
}while(n<1||n>30);
printf("pleaseinput%delements:
\n",n);
input(arr,n);
printf("oddnumberis:
%d\n",OddNum(arr,n));
printf("alloddelements:
\n");
output(arr,n);
return0;
}
voidinput(intarray[],intn)
{
inti;
for(i=0;iscanf("%d",&array[i]);
}
intOddNum(intarray[],intn)
{
inti,s=0;
for(i=0;iif(array[i]%2)
s+=1;
returns;
}
voidoutput(intarray[],intn)
{
inti;
for(i=0;iif(array[i]%2)
printf("%d",array[i]);
printf("\n");
}
*编写一个计算给定数值范围内素数的程序。
要求:
①在main()函数中任意输入两个正整数a,b表示求解素数的实际范围[a,b],并用程序代码保证b的值大于a的值;调用prime函数求得该范围内所有的素数,并在主函数中输出素数的个数。
②定义函数prime,求得一定范围内所有的素数并在屏幕显示这些素数,函数原型为:
intprime(intstart,intend);其中的两个形式参数表示求解素数的范围是[start,end],函数的返回值为这一段范围内素数的个数。
#include
#include
intprimelnt(intm);
intprime(intstart,intend);
intmain()
{
inta=0,b=0;
while(b<=a)
{
printf("pleaseinputstartandend\n");
scanf("%d%d",&a,&b);
}
prime(a,b);
return0;
}
intprime(intstart,intend)
{
inti,count=0;
for(i=start;i<=end;i++)
if(primelnt(i))
{
printf("%5d",i);
count++;
if(count%5==0)printf("\n");
}
printf("\n");
}
intprimelnt(intm)
{
inti,k;
if(m==1)
return0;
k=(int)sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
return0;
return1;
}
*编写程序将一个名为old.txt的文本文件依次读出,数字字符在屏幕上显示,字母字符全部转换成大写字母存放到一个名为new.txt的新文本文件中。
例如:
old.txt中的内容是:
aB*cdeF12@3gH4567
屏幕输出:
1234567
new.txt中的内容是:
ABCDEFGH
#include
#include
#include
intmain()
{
charch;
FILE*infile="old.txt",*outfile="new.txt";
if((infile=fopen(infile,"r"))==NULL)
{
printf("cannotopenold.txt\n");
exit(0);
}
if((outfile=fopen(outfile,"w"))==NULL)
{
printf("cannotopennew.txt\n");
exit(0);
}
while((ch=fgetc(infile))!
=EOF)
{
if(ch>='0'&&ch<='9')
printf("%c",ch);
elseif(ch>='A'&&ch<='Z')
fputc(ch,outfile);
elseif(ch>='a'&&ch<='z')
{
ch-=32;
fputc(ch,outfile);
}
}
fclose(infile);
fclose(outfile);
return0;
}