C语言练习题.docx
《C语言练习题.docx》由会员分享,可在线阅读,更多相关《C语言练习题.docx(26页珍藏版)》请在冰豆网上搜索。
C语言练习题
注:
颜色字母为答案,请大家把颜色先去掉,做完再核对答案!
一、单项选择题(共100题,1~40为基本概念题,41~100题为程序阅读题)
1.已有定义:
intx=3,y=4,z=5;,则表达式!
(x+y)+z-1&&y+z/2的值是:
A)6 B)0 C)2 D)1
2.以下选项中非法的表达式是:
A)0<=x<100B)i=j==0C)(char)(65+3)D)x+1=x+1
3.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是:
A)void B)int C)float D)double
4.有定义语句:
intx,y;,若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是
A)1112<回车>B)11,12<回车>C)11,12<回车>D)11,<回车>12<回车>
5.以下能正确定义且赋初值的语句是
A)int n1=n2=10; B)char c=32; C)float f=f+1.1; D)double x=12.3E2.5
6.设有定义:
int k=1,m=2; float f=7;,则以下选项中错误的表达式是
A)k=k>=k B)-(k++) C)k%int(f) D)k>=f>=m
7. main()
{ char a1=’M’, a2=’m’;
printf("%c\n", (a1, a2) ); }
根据以上程序,以下叙述中正确的是
A)程序输出大写字母M B)程序输出小写字母m
C)格式说明符不足,编译出错 D)程序运行时产生出错信息
8.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;for(b=1;b<=c;b++)s=s+1;
则与上述程序段功能等价的赋值语句是
A)s=a+b;B)s=a+c;C)s=s+c;D)s=b+c;
9.有以下程序段
int n,t=1,s=0;
scanf("%d",&n);
do{ s=s+t; t=t-2; }while (t!
=n);
为使此程序段不陷入死循环,从键盘输入的数据应该是
A)任意正奇数 B)任意负偶数 C)任意正偶数 D)任意负奇数
10.C语言中用于结构化程序设计的三种基本结构是
A)顺序结构、选择结构、循环结构 B)if、switch、break
C)for、while、do-while D)if、for、continue
11.在一个C语言程序中
A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现
C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置
12.以下关于函数的叙述中正确的是
A)每个函数都可以被其它函数调用(包括main函数) B)每个函数都可以被单独编译
C)每个函数都可以单独运行 D)在一个函数内部可以定义另一个函数
13.下列叙述中正确的是
A)C语言中既有逻辑类型也有集合类型 B)C语言中没有逻辑类型但有集合类型
C)C语言中有逻辑类型但没有集合类型 D)C语言中既没有逻辑类型也没有集合类型
14.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
A)函数调用可以作为独立的语句存在B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中D)函数调用可以作为一个函数的形参
15.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是
A)地址传递B)单向值传递
C)由实参传给形参,再由形参传回实参D)传递方式由用户指定
16.若程序中定义了以下函数
doublemyadd(doublea,doubleb)
{return(a+b);}
并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是
A)doublemyadd(doublea,b); B)doublemyadd(double,double);
C)doublemyadd(doubleb,doublea); D)doublemyadd(doublex,doubley);
17.以下叙述中正确的是
A)全局变量的作用域一定比局部变量的作用域范围大
B)静态(static)类别变量的生存期贯穿于整个程序的运行期间
C)函数的形参都属于全局变量
D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值
18.若定义a[][2]={1,2,3,4,5,6,7};则a数组中行的大小是:
A)2B)3C)4D)无确定值
19.以下能正确定义数组并正确赋初值的语句是
A)intN=5,b[N][N];B)inta[1][2]={{1},{3}};
C)intc[2][]={{1,2},{3,4}}D)intd[3][2]={{1,2},{3,4}};
20.若有定义:
int x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是
A)随机值 B)0 C)x的地址 D)p的地址
21.#include
char a[10],*b=a;
如以上定义,不能给a数组输入字符串的语句是:
A)gets(a) B)gets(a[0]); C)gets(&a[0]); D)gets(b);
22.设函数fun的定义形式为
void fun(char ch, float x ) { … }
则以下对函数fun的调用语句中,正确的是
A)fun("abc",3.0); B)t=fun(’D’,16.5); C)fun(’65’,2.8); D)fun(32,32);
23.设有定义:
int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是
A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;
24.设有定义:
int n=0,*p=&n,**q=&p;,则以下选项中,正确的赋值语句是
A)p=1; B)*q=2; C)q=p; D)*p=5;
25.在说明语句:
int*f();中,标识符f代表的是
A)一个用于指向整型数据的指针变量B)一个用于指向一维数组的行指针
C)一个用于指向函数的指针变量D)一个返回值为指针型的函数名
26.若定义:
inta=511,*b=&a;,则printf("%d\n",*b);的输出结果为:
A)无确定值B)a的地址C)512D)511
27.有以下程序段,b中的值是
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
A)5 B)6 C)8 D)9
28.若有语句:
char *line[5];,以下叙述中正确的是
A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量
B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
C)定义line是一个指针数组,语句中的*号称为间址运算符
D)定义line是一个指向字符型函数的指针
29.有以下程序段
typedef struct NODE
{ int num; struct NODE *next;} OLD;
以下叙述中正确的是
A)以上的说明形式非法 B)NODE是一个结构体类型
C)OLD是一个结构体类型 D)OLD是一个结构体变量
30.设有以下语句
typedef struct S
{ int g; char h; } T;
则下面叙述中正确的是:
A)可用S定义结构体变量 B)可以用T定义结构体变量
C)S是struct类型的变量 D)T是structS类型的变量
31.设有说明如下,则能正确定义结构体数组并赋初值的语句是:
typedefstruct
{intn;charc;doublex;}STD;
A)structSTDtt[2]={{1,'A',6},{2,'B',7}};B)structtt[2]={{1,'A'},{2,'B'}};
C)STDtt[2]={{1,'A',6},{2,'B',7}};D)STDtt[2]={1,"A",6,2,"",7};
32.以下各选项企图说明一种新的类型名,其中正确的是
A)typedefv1int;B)typedefv2=int;C)typedefintv3;D)typedefv4:
int;
33.若要说明一个类型名STP,使得定义语句STPs;等价于char*s;,以下选项中正确的是
A)typedefSTPchar*s; B)typedef*charSTP;
C)typedefSTP*char; D)typedefchar*STP
34.设有如下定义
structss
{charname[10];
intage;
charsex;
}std[3],*p=std;
下面各输入语句中错误的是
A)scanf("%d",&(*p).age); B)scanf("%s",&std.name);
C)scanf("%c",&std[0].sex);D)scanf("%c",&(p->sex));
35.设有如下说明
typedefstruct
{intn;charc;doublex;}STD;
则以下选项中,能正确定义结构体数组并赋初值的语句是
A)STDtt[2]={{1,'A',62},{2,'B',75}}; B)STDtt[2]={1,"A",62,2,"",75};
C)structtt[2]={{1,'A'},{2,'B'}}; D)structtt[2]={{1,"A",62.5},{2,"B",75.0}};
36.把字符串"OK!
"赋值给变量不正确的语句或语句组是:
A)chara[]="OK!
";B)chara[8]={'O','K','!
','\0'};
C)char*p;D)charp;
p="OK!
";strcpy(p,"OK!
");
37.阅读以下函数
fun(char*sl,char*s2)
{inti=0;
while(sl[i]==s2[i]&&s2[i]!
='\0')i++;
return(sl[i]=='\0'&&s2[i]=='\0');
}
此函数的功能是
A)将s2所指字符串赋给s1
B)比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0
C)比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D)比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0
38.若有定义char*language[]={"FORTRAN","BASIC","PASCAL","C"};则language[2]的值是:
A)一个字符B)一个地址C)一个字符串D)不定
39.若有定义:
inta[3]={1,2,3},*p;则下列语句不正确的是:
A)p=a[0];B)p=a;C)p=&a[0]D)p=a+2
40.若有一些定义和语句
#include
inta=4,b=3,*p,*q,*w;
p=&a;q=&b;w=q;q=NULL;
则以下选项中错误的语句是:
A)*q=0;B)w=p;C)*p=a;D)*p=*w;
◆以下为阅读程序,选择正确的输出的结果。
41.main()
{intx=3;
switch(x)
{case1:
printf("%d",++x);
case2:
printf("%d",++x);
case3:
printf("%d",++x);
case4:
printf("%d",++x);break;
}
}
A)3B)4C)34D)45
42.main()
{chara='A';\*'A'的ASCII为65*\
printf("%d,%c\n",a,a+1);
}
A)A,A+1B)65,66C)65,AD)65,B
43.main()
{chara[]="ABC";
char*p;
for(p=a;p}
A)ABCB)BCCC)ABCBCCD)ABBCCC
44.#include
main()
{intx=3,i;
for(i=0;i<3;i++)
printf("%d",f(x));
}
f(inta)
{intb=0;
staticintc=3;
b++;c++;
return(a+b+c);
}
A)888B)81012C)81114D)8910
45.main()
{char*str1="1,2,3,4,5,6",char*str2="abcdef";
*str1=*str2;
printf("%s\n",str1);
}
A)a,2,3,4,5,6B)1,2,3,4,5,6C)abcdefD)abcdef4,5,6
46.#include
structstudent
{charname[8];
floatgrade[5];
floatsum;
}temp,*p;
main()
{p=&temp;
strcpy(temp.name,"Casanova");
printf(“%c%c\n”,*p->name+2,*(p->name+2));
}
A)esB)ssC)EsD)an
47.intx,y;
one()
{inta,b;
a=25;b=10;
x=a-b;y=a+b;
return;
}
main()
{inta,b;
a=9;b=5;
x=a+b;y=a-b;
one();
printf("%d,%d\n",x,y);
}
A)14,4B)4,14C)15,35D)29,39
48.main()
{intx=1,y=2;
intfunc();
y=func(&x,&y);x=func(&x,&y);
printf("x=%d,y=%d\n",x,y);
}
func(int*a,int*b)
{if(*a>*b)
(*a)-=*b;
else(*a)--;
return(*a+*b);
}
A)x=2,y=1B)x=1,y=3C)x=2,y=3D)x=1,y=2
49.main()
{intx=1;
for(;x<50;)
{if(x>=10)break;
if(x%2){x+=3;continue;}
x-=1;
}
printf("%d\n",x);
}
A)10B)11C)12D)13
50.intx=5,y=7;
voidswap()
{intz;
z=x;x=y;y=z;
}
main()
{intx=3,y=8;
swap();
printf("%d,%d\n",x,y);
}
A)3,8B)8,3C)5,7D)7,5
51.intfun(intn)
{if(n==2||n==1)return1;
return(fun(n-1)+fun(n-2));
}
main()
{printf("%d\n",fun(6));
}
A)8B)6C)12D)10
52.main()
{intx,y,z;
ff(10,5,&x);ff(7,x,&y);ff(x,y,&z);
printf("%d,%d,%d\n",x,y,z);
}
ff(inta,intb,int*c)
{*c=b–a;
}
A)5,2,3B)-5-12,17C)5-2-7D)-5-12-7
53.main()
{intx[]={1,2,3};
inti,s=1,*p=x;
for(i=0;i<3;i++)s*=*(p+i);
printf("%d\n",s);
}
A)4B)2C)3D)6
54.main()
{inti
for(i=0;i<10;i++)
if(!
(i%3))printf("%d",i);
elseif(!
(i%5))printf("%d",i);
}
A)03695B)003569C)03569D)036905
55.#include
main()
{intc;chard;
c=68;d=’D’;\*'A'的ASCII为65*\
putchar(c);
putchar(d);
putchar('D');
putchar(68);
}
A)ddddB)DDDDC)ddDDD)cdDd
56.main()
{inta=4,b=5,c=0,d;
d=!
a&&!
b||!
c;
printf("%d\n",d);
}
A)1B)0C)非0的数D)-1
57.#include
main()
{inta=100,*p;
p=&a;
*p=*p+50;
prinntf("%d\n",a+*p)
}
A)150B)250C)300D)100
58.doublefun(doublex)
{returnx*x;}
main()
{doublex=1.2,y;
y=fun(x);
printf("%.2f\n",y);
}
A)1.44B)不确定C)1.00D)2.00
59.main()
{inta=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
elseif((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
A)2B)3C)4D)编译时有错,无结果
60.main()
{charch[3][5]={"AAAA","BBB","CC"};
printf("\"%s\"\n",ch[1]);
}
A)"AAAA"B)"BBB"C)"BBBCC"D)"CC"
61.f(intb[],intm,intn)
{inti,s=0;
for(i=m;is=s+b[i];
returns;
}
main()
{intx,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
A)10B)18C)8D)15
62.main()
{chars[]="\n123\\";
printf("%d,%d\n",strlen(s),sizeof(s));
}
A)赋初值的字符串有错B)6,7C)5,6D)6,6
63.main()
{charc='z';
printf("%c