C语言题库.docx
《C语言题库.docx》由会员分享,可在线阅读,更多相关《C语言题库.docx(100页珍藏版)》请在冰豆网上搜索。
C语言题库
12.3试卷
(2)
12.3.1选择题
(本大题共40个选项,【1】~【40】每个选择项1.5分,共60分)
1.在C语言中,用户能使用的合法标识符是【B】。
【1】A)姓名B)-xyz
C)5iD)For
2.执行语句printf("%d\n",strlen("abc\x41\n"));的输出结果是【2】。
【2】A)5B)7
C)abcAD)abc\x41
3.在C语言中,合法的字符常量是【3】。
【3】A)'字'B)"A"
C)"ABC"D)'\x41'
4.C语言中简单数据类型包括【4】。
【4】A)整型、实型、字符型B)整型、实型、逻辑型
C)整型、字符型、逻辑型D)整型、实型、逻辑型、字符型
5.在C语言中,不合法的实型常量是【5】。
【5】A)-0.123B)-.123
C)-1.23e-1D)-123e-3.0
6.以下关于C语言变量的叙述,错误的是【6】。
【6】A)变量名必须由字母或下划线开头
B)变量按所定义的类型存放数据
C)不同基本类型的变量之间不能混合运算
D)变量的类型确定了变量的取值范围
7.以下整数值中,不正确的八进制或十六进制数是【7】。
【7】A)0x9aB)012
C)-0x3AD)090
8.下列i、j、k均为整型变量,选项中不正确的C语言赋值语句是【8】。
【8】A)i+1=k;B)i=j=k=1;
C)i=j+=++k;D)j=i+1==i++;
9.以下程序的运行结果是【9】。
main()
{inta=1,b=2,c;
c=a
3:
a>=b?
a:
b;
printf("%d\n",c);
}
【9】A)0B)1
C)2D)3
10.设E为表达式,以下与do…while(E);不等价的语句是【10】。
【10】A)do…while(!
E==0);B)do…while(E>0||E<0);
C)do…while(E==0);D)do…while(E!
=0);
11.设以下程序段中的变量都是int类型,则输出的结果是【11】。
sum=pad=5;
pAd=sum++,pAd++,++pAd;
printf("%d\n",pad);
【11】A)7B)6
C)5D)4
12.以下程序的输出结果为【12】。
main()
{inti=59;
printf("%5o,%-10d,%x\n",i,i,i);
}
【12】A)73,59,3bB)073,59,0x3b
C)00073,59,3BD)73,59,3B
13.以下程序的运行结果是【13】。
main()
{unsigneda=0x3ef,b;
b=a<<2;
printf("%x,%x\n",a,b);
}
【13】A)3ef,fbB)3ef,fbc
C)fbc,3efD)fbc,fbc
14.以下程序的运行结果是【14】。
main()
{inta,b,c;
a=b=c=1;
if(a++||++b)c++;
printf("%d,%d,%d\n",a,b,c);
}
【14】A)2,1,2B)1,2,1
C)2,2,2D)2,2,1
15.以下在定义一维数组a的同时,给a数组所有元素赋初值0,正确的语句是【15】。
【15】A)inta[8]={0};B)inta[8]=0,0,0,0,0,0,0,0;
C)inta[8]={};D)inta[8]=0;
16.以下对C语言字符数组描述:
【16】,是正确的。
【16】A)可以用length函数计算字符数组中字符串的长度
B)使用printf函数整体输出字符数组中的字符串时,遇到字符'\0'结束输出
C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D)字符数组只能存放字符串,不能存放字符
17.有以下程序:
main()
{intc;
while((c=getchar())!
='\n')
{switch(c-'2')
{case0:
case1:
putchar(c+4);
case2:
putchar(c+4);break;
case3:
putchar(c+3);
default:
putchar(c+2);break;
}
}
printf("\n");
}
当输入:
247<回车>,程序的输出结果是【17】。
【17】A)689B)6689
C)66778D)66887
18.以下程序的输出结果是【18】。
#defineSUM(y)1+y
main()
{intx=2;
printf("%d\n",SUM(5)*x);
}
【18】A)10B)11
C)12D)15
19.以下程序的输出结果是【19】。
main()
{inti=1,j=3;
printf("%d,",i++);
{inti=0;
i+=j*2;
printf("%d,%d,",i,j);
}
printf("%d,%d",i,j);
}
【19】A)1,6,3,1,3B)1,6,3,2,3
C)1,6,3,6,3D)1,7,3,2,3
20.以下运算符中,优先级最高的运算符是【20】。
【20】A)<=B)&&
C)=D)/
21.以下程序的输出结果是【21】。
main()
{inta=10,b=20;
swap(&a,&b);
printf("%d,%d\n",a,b);
}
swap(int*p,int*q)
{intt;
t=*p;*p=*q;*q=t;
}
【21】A)10,10B)20,20
C)10,20D)20,10
22.以下程序的输出结果是【22】。
main()
{inta,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);
}
【22】A)7B)8
C)9D)10
23.以下不能对二维数组a进行正确初始化的语句是:
【23】。
【23】A)inta[3][2]={0};
B)inta[][2]={1,2,3,4,5};
C)inta[3][2]={{1,2},{3,4},{5,6}};
D)inta[3][2]={{1},{3,4,5}};
24.若a[][4]={1,2,3,4,5,6,7,8,9};,则a数组第一维的大小是【24】。
【24】A)1B)2
C)3D)无确定值
25.以下程序的运行结果是:
【25】。
main()
{unionu_type
{inti;
doublex;
floatf;
};
structstr_type
{charstr[100];
unionu_typeu[2];
};
printf("%d\n",sizeof(structstr_type));
}
【25】A)100B)116
C)120D)200
26.以下对枚举类型进行定义,不正确的是【26】。
【26】A)enumb{1,2,3};B)enuma{A,B,C};
C)enumc{D=3,E,F};D)enumd{X=0,Y=5,Z=9};
27.若有以下定义和语句,且0≤i<4,0≤j<3,则不能访问a数组中的元素的是【27】。
inti,(*p)[3],a[][3]={1,2,3,4,5,6,7,8,9,10,11,12};
p=a;
【27】A)*(*(a+i)+j)B)p[i][j]
C)(*(p+i))[j]D)p[i]+j
28.以下程序的输出结果是【28】。
main()
{printf("%d\n",fac(5));
}
fac(intn)
{ints;
if(n==1)return1;
elsereturnn*fac(n-1);
}
【28】A)120B)60
C)6D)1
29.循环语句循环体中执行continue语句,其作用是【29】。
【29】A)立即终止程序运行
B)继续执行continue语句之后的循环体各语句
C)结束本次循环
D)结束本次循环,跳出循环
30.运行以下程序,输出结果是a=5,b=4,则输入数据的形式应该是【30】。
main()
{inta,b;
scanf("%d,b=%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
【30】A)54B)5,4
C)5b=4D)5,b=4
31.以下程序的输出结果是【31】。
main()
{unionexample
{struct
{intx;
inty;
}in;
inta[2];
}e={0,0};
e.a[0]=1;e.a[1]=2;
printf("%d,%d\n",e.in.x,e.in.y);
}
【31】A)2,1B)0,0
C)1,2D)0,1
32.以下程序运行后,输出的结果是【32】。
func(inta)
{staticintm=0;
m+=a;
return(m);
}
main()
{intk=4,p;
p=func(k);printf("%d,",p);
p=func(k);printf("%d\n",p);
}
【32】A)4,4B)0,4
C)4,8D)8,8
33.标准函数fgets(s,n,f)的功能是【33】。
【33】A)从文件f中读取长度为n的字符串存入指针s所指的内存
B)从文件f中读取长度不超过n-1的字符串存入指针s所指的内存
C)从文件f中读取n个字符串存入指针s所指的内存
D)从文件f中读取长度为n-1的字符串存入指针s所指的内存
34.以下关于指针概念的叙述中,错误的是【34】。
【34】A)一个指针变量只能指向同一类型的变量
B)一个变量的地址称为该变量的指针
C)两个同类型的指针变量可以作加减运算
D)任何指针变量都可以与空指针NULL进行比较
35.执行下列语句组后,*a、*p、**p的值分别为【35】。
inti,a[]={0,1,2,3,4},*p[5];
for(i=0;i<5;i++)p[i]=a+i;
【35】A)0、0、0B)0、数组a的首地址、0
C)0、1、2D)0、数组a的首地址、数组p的首地址
36.以下程序的运行结果是【36】。
main()
{charch[7]="12xy89";
inti,s=0;
for(i=0;ch[i];i++)
if(ch[i]>='0'&&ch[i]<='9')s=10*s+ch[i]-'0';
printf("%d\n",s);
}
【36】A)12B)xy
C)12xy89D)1289
37.以下程序运行后,输出的结果是【37】。
main()
{inty=18,i=0,j,a[8];
do
{a[i]=y%2;
i++;
y=y/2;
}while(y>=1);
for(j=i-1;j>=0;j--)printf("%d",a[j]);
printf("\n");
}
【37】A)10010B)01001
C)00110D)10100
38.设有以下程序:
main()
{chara1[80],a2[80],*s1=a1,*s2=a2;
gets(s1);
gets(s2);
if(!
strcmp(s1,s2))printf("*");
elseprintf("#");
printf("%d\n",strlen(strcat(s1,s2)));
}
如果从键盘上输入:
aver<回车>
aver<空格><回车>
则输出的结果是【38】。
【38】A)*8B)#9
C)#8D)*9
39.以下程序运行后,输出的结果是【39】。
fun(char*w)
{chart,*s1,*s2;
for(s1=w,s2=w+strlen(s1)-1;s1{t=*s1;
*s1=*s2;
*s2=t;
}
}
main()
{char*p="12345";
fun(p);
puts(p);
}
【39】A)12345B)54321
C)15115D)51551
40.若已建立以下的链表结构(如下图所示),指针p指向某单向链表的第一个结点。
structnode
{intdata;
structnode*next;
}*p;
p─┌─┐┌─……┌─┐
│1│││56│
├─┤│├─┤
│┼─┘│∧│
└─┘└─┘
以下循环语句输出该链表所有结点的数据成员data,正确的是【40】。
【40】A)for(;p!
=NULL;p++)B)for(;!
p;p=p->next)
printf("%7d,",p->data);printf("%7d,",(*p).data);
C)while(p)D)while(p!
=NULL)
{printf("%7d,",(*p).data);{printf("%7d,",p->data);
p=p->next;p++;
}}
12.3.2填空题
(本大题共20个空,每个空2分,共40分。
请将答案写在答题卡对应栏中,答在试
卷上不得分)
1.以下程序从读入的整数数据中统计大于零和小于零整数的个数,用零结束输入。
main()
{intn,i,j;
i=j=0;
scanf("%d",&n);
while(【1】)
{if(n>0)i++;
else【2】;
scanf("%d",&n);
}
printf("正数的个数为:
%d,负数的个数为:
%d\n",i,j);
}
2.以下程序可以把从键盘上输入的十进制数(long型)以二到十六进制的形式输出,请填空。
main()
{charb[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
intc[64],i=0,base;
longn;
printf("enteranumber:
\n");
scanf("%ld",&n);
printf("enternewbase:
\n");
scanf("%d",&base);
do
{c[i]=【3】;
i++;
n=n/base;
}while(n!
=0);
printf("transmitnewbase:
\n");
for(--i;i>=0;--i)
printf("%c",b[【4】]);
}
3.以下函数delete(s,i,n)从字符串s中删除第i个字符开始的n个字符。
voiddelete(chars[],inti,intn)
{intj,k,length=0;/*length用于计算字符串的长度*/
while(s[length])【5】;
i--;
j=i;
if(i{k=i+n;
if(i+n<=length)
while(ks[j]=【6】;
}
}
4.以下程序求数组a中所有素数的和,函数isprime用来判断自变量是否为素数。
素数是只能被1和本身整除且大于1的自然数。
main()
{inti,a[10],*p=a,sum=0;
printf("Enter10num:
");
for(i=0;i<10;i++)scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(isprime(*(p+【7】))==1)
{printf("%d,",*(a+i));
sum+=*(a+i);
}
printf("sum=%d\n",sum);
}
isprime(intx)
{inti;
for(i=2;i<=x/2;i++)
if(x%i==0)return0;
return【8】;
}
5.以下程序根据n的值打印2n-1行#号。
运行后当输入4给变量n时,将打印如下图案:
#
###
#####
#######
#####
###
#
main()
{intn,i,j;
printf("Entern:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{for(j=1;j<=2*(n-i);j++)putchar('');
for(j=1;j<=【9】;j++)putchar('#');
【10】;
}
for(i=1;i<=n-1;i++)
{for(j=1;j<=【11】;j++)putchar('#');
printf("\n");
}
}
6.输入正整数n,输出对应的中文字符串,其中n≤999。
对应规则:
若百位不为零,则在该百位后写一个“佰”,如356:
叁佰伍拾陆;
若十位不为零,则在该拾位后写一个“拾”,如56:
伍拾陆;
个位写“零”字的情况,百位、十位、个位均为零,0:
零;
拾位写“零”字的情况,百位、个位均不为零,且拾位为零,如308:
叁佰零捌。
例如,0:
零1:
壹15:
壹拾伍100:
壹佰308:
叁佰零捌
main()
{char*s[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","佰"};
charstr[30]="";
unsignedintn1,n10,n100,num;/*n1为个位,n10为拾位,n100为百位*/
scanf("%d",&num);
n100=num/100;
n10=num/10-n100*10;
n1=num%10;
if(n100!
=0)
{strcat(str,s[n100]);
strcat(str,【12】);
}
if(n10!
=0)
{strcat(str,s[n10]);
strcat(str,s[10]);
}
else
if((n100!
=0&&n1!
=0)||(n100==0&&n1==0))strcat(str,s[0]);
if(【13】)strcat(str,s[n1]);
puts(str);
}
7.给定一个年、月、日,函数getdays()返回这一年的第几天。
闰年的二月有29天,表达式“(year%4==0&&year%100!
=0)||(year%400)==0”值为真,即为闰年,其中year表示年号。
如以下程序运行时输入:
200125<回车>,则输出:
2001年2月5日是该年的第36天。
structdatetp
{unsignedyear,month,day;
};
unsignedmonths[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
main()
{structdatetpd;
printf("请输入年月日:
");
scanf("%u%u%u",&d.year,&d.month,【14】);
if((d.year%4==0&&d.year%100!
=0)||(d.year%400)==0)months[2]=29;
printf("%d年%d月%d日是该年的第%d天。
\n",d.year,d.month,d.day,getdays(d));
}
getdays(【15】date)
{unsigneddays=0,i;
for(i=1;idays+=【16】;
days+=date.day;
returndays;
}
8.某一文件内容为英文,文件名由命令行输入。
以下程序对其进行一项英文语法检查:
把每个英文句子的第一个字母改为大写。
假设每个英文句子可分别由标点符号“.”或“!
”或“?
”结束,并且每行少于1000个英文字母。
将修改后的结果存入文件C:
\DATA\FIEL1.TXT中。
main(intargc,【17】)
{FILE*fpr,*fpw;
inti,sentence_end=1;
charstr[1000];
if(argc<2)
{printf("Pleaseinputafilename.\n");exit
(1);
}
if((fpr=fopen(argv[1],"r"))==NULL)
{printf("