C语言习题与答案.docx
- 文档编号:11167742
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:26
- 大小:28.78KB
C语言习题与答案.docx
《C语言习题与答案.docx》由会员分享,可在线阅读,更多相关《C语言习题与答案.docx(26页珍藏版)》请在冰点文库上搜索。
C语言习题与答案
一、单选题
1、能将高级语言源程序转换成目标程序的是(C)。
编译程序的基本功能是把源程序翻译成目标程序
A)调试程序B)解释程序
C)编译程序D)编辑程序
2、设有以下定义:
intx=10,y=3,z;则语句:
printf(“%d”,z=(x%y,x/y));的结果是(D)。
A)1B)0
C)4D)3
3、若已定义x和y为整型,则表达式:
x=1,y=x+3/2的值是(B)。
P56
A)1B)2
C)2.0D)2.5
4、C语言中(B)。
P115
A)不能使用do-while语句构成循环。
B)do-while语句,当while语句中的表达式值为零时结束循环。
C)do-while语句,当while语句中的表达式值为非零时结束循环
D)do-while语句必须用break语句才能退出循环
5、设有定义inta=3;,则执行语句a+=a-=a*a后,变量a的值是(C).P64
(a-a*aa=3-3*3a=-6a=a+aa=-6+(-6)a=-12)
A)3B)0C)-12D)9
6、以下程序的输出结果是(C)。
p93
#include
main()
{inta,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);
}
A)21B)1,-1C)2,1D)2-1
7、以下程序的输出结果是(D)。
#include
#include
main()
{charstr[12]={'s','t','r','i','n','g'};
printf("%d\n",strlen(str));
}求字符串的长度,strlen( )的参数必须是char*
A)12B)7C)11D)6
8、以下的for循环(A)。
for(x=0,y=0;(y!
=123)&&(x<4);x++);
A)执行4次B)是无限循环C)执行3次D)循环次数不定
9、以下程序段的输出结果是(A)
chara[]=”Basic”;
char*p=a;
printf(“%s”,p);
A)BasicB)BC)asicD)不确定
10、以下说法中正确的是(C )。
A)C语言程序总是从第一个定义的
B)在C语言程序中,要调用的函数必须在main()函数中定义
C)C语言程序总是从main()函数开始执行
D)C语言程序中的main()函数必须放在程序的开始部分
11、下述对C语言字符数组的描述中错误的是(C)
A)字符数组可以存放字符串
B)字符数组中的字符串可以整体输入、输出
C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D)不可以用关系运算符对字符数组中的字符串进行比较
12、C语言中最简单的数据类型包括( B )
A)整型、实型、逻辑型
B)整型、实型、字符型
C)整型、字符型、逻辑型
D)整型、实型、逻辑型、字符型
13、阅读程序:
#include
#defineSUB(X,Y)(X)*Y
main()
{inta=3,b=4;
printf("%d\n",SUB(a++,b++));
}
程序的输出结果是(B)
A)15B)12C)16D)20
14、为表示关系x≥y≥z应使用C语言表达式(A)
A)(x>=y)&&(y>=z)B)(x>=y)and(y>=z)
C)(x>=y>=z)D)(x>=y)&(x>=y)
15、如下程序的运行结果是(A)
Main()
{intn=0;
while(n++<=1)
printf(“%3d”,n);
printf(“%3d\n”,n);
}
A)123B)321C)012D)210
16、设有如下定义:
char*aa[2]={“abcd”,”ABCD”};
则以下说法中正确的是(D)
A)aa数组元素的值分别是”abcd”和”ABCD”
B)aa是指针变量,它指向含有两个数组元素的字符型一维数组
C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D)aa数组的两个元素中各自存放了字符’a’和’A’的地址。
17、设有如下定义:
structsk
{inta;floatb;}data,*p;
若有p=&data;,则对data中的a域的正确引用是(p->a)(A)
A)(*p).aB)(*p).data.aC)p.data.aD)p->data.a
18、设有说明int(*ptr)[M];其中的标识符ptr是(C)
A)M个指向整形变量的指针
B)指向M个整形变量的函数指针
C)一个指向具有M个整形元素的一维数组的指针
D)具有M个指针元素的一维指针数组,每个元素都只能指向整形变量
19、阅读程序,程序的输出结果为(C)。
intx=3;
do
{printf(“%3d”,x-=2);
}
while(!
(--x));
A)1B)30C)1-2D)死循环
20、设有10个数据进行冒泡排序,最少进行的比较次数为(C)。
A)0B)10C)9D)1
21、设有语句chara=’\n’;,则变量a(A)。
A)包含1个字符B)包含2个字符
C)包含3个字符 D)说明不合法
22、若有定义:
doublex,y;则表达式:
x=1,y=x+3/2的值是(C)。
A)1B)2
C)2.0D)2.5
23、有以下程序:
(注意:
ch[0]在低字节,ch[1]在高字节。
)
#include
unionpw{inti;charch[2];}a;
main()
{a.ch[0]=0;a.ch[1]=13;
printf("%d\n",a.i);
}
程序的输出结果是(C)。
A)13B)14C)3328D)328
24、以下程序的输出结果是(B)。
#include
main()
{charstr[12]={'a','b','c','d','f','g',’f’};
printf("%d\n",strlen(str));}
A)12B)7C)11D)6
25、设有以下语句:
structst{intn;structst*next;};
staticstructsta[3]={{5,&a[1]},{7,&a[2]},{9,'\0'}},*p;p=&a[0];
则表达式(B)的值是6。
A)p++->nB)++(p->n)C)(*p).n++D)p->n++
26、对于程序段
floatf1(inta)
{intb;……}
main()
{intm,n;
m=f1(n);……
}
charf2(intx,inty)
{inta;……}
变量m,n的作用范围是(B)
(A)整个程序段(B)main函数
(C)main函数和f2函数(D)mian函数和f1函数
27、若p1、p2都是指向整型的指针,p1已经指向数量x,要使p2也指向x,正确的是( A )
(A)p2=p1;(B)p2=**p1;
(C)p2=&p1;(D)p2=*p1;
28、算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为( B )
(A)算术运算、赋值运算、关系运算
(B)算术运算、关系运算、赋值运算
(C)关系运算、赋值运算、算术运算
(D)关系运算、算术运算、赋值运算
29、C语言中,运算对象必须是整型数的运算符是(A )
A)%B)/C)%和/D)*
30、若数组定义为inta[10];则下列哪个表达式是错误的?
( A )
(A)*a(B)a__
(C)&a__(D)++a
31、表达式10%2值是( A )
(A)0(B)1
(C)5(D)5.0
32、设有说明int(*ptr)[M];其中的标识符ptr是(C)
A)M个指向整形变量的指针
B)指向M个整形变量的函数指针
C)一个指向具有M个整形元素的一维数组的指针
D)具有M个指针元素的一维指针数组,每个元素都只能指向整形变量
33、初始化一维数组a正确的语句是(C)
(A)inta[10]=(0,0,0,0,0);(B)inta[10]={};
(C)inta[]={10};(D)inta[10]={[10*1]};
34、下列程序执行后输出的结果是(A)
intd=1;
fun(intp)
{intd=5;
d+=p++;
printf("%d",d);
}
main()
{inta=3;
fun(a);
d+=a++;
printf("%d\n",d);
}
A)84B)96C)94D)85
35、函数调用语句“f((e1,e2),(e3,e4,e5))”中参数的个数是( B )
(A)1(B)2
(C)3(D)5
36、执行下列语句中,sum变量的值是( B )
intI,sum=0;
for(i=0;i<10;i++,sum+=i);
(A)45(B)55(C)0(D)编译错误
37、以下c语言函数声明中,不正确的是( C )
(A) voidfun(intx,inty);(B) fun(intx,inty);
(C) intfun(intx,y);(D) char*fun(char*s);
38、以下关于typedef的叙述中错误的是 ( A )
(A) 用typedef可以增加新的类型
(B) 用typedef可以定义各种类型名,但不能用来定义变量
(C) 用typedef只是将已有的类型用新的标识符来代表
(D) 使用typedef有利于程序的通用和移植
39、假设指针p已经指向某个整型变量x,则*p相当于( C )
(A) &x(B) &p(C) x(D) *x
40、组成C语言程序的是(B)
(A)过程(B)函数
(C)子程序(D)主程序和子程序
41、不用第三个变量,将变量a和b的值进行互换的操作是(B)
(A)a+=b;b-=a;a-=b;(B)a+=b;b=a-b;a-=b;
(C)b-=a;a-=b;a-=b;(D)b-=a;a=b-a;a+=b;
42、对do-while语言错误的说法是(C)
(A)可构成多重循环结构(B)循环次数不可能为0
(C)循环次数可能为0(D)先执行后判断
43、函数调用时,若实参是一个数组名,则向形参传递的是(C )
(A)数组的长度(B)数组的每一个元素的地址(C)数组的首地址(D)数组元素的值
二、填空题
1、下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值。
intadd(intx,inty,intz)
{z=x+y;}
2、以下定义和语句,则使指针P指向值为17的数组元素的表达式是P+3。
inta[10]={19,23,44,17,37,28,49,36},*p;
p=a;
if(a<=b){x=1;
printf(“x=%d\n”,x);}
else{y=2;
printf(“x=%d\n”,y)}
3、设有定义:
inti,j,k;则执行语句for(i=0,j=10;i<=j;i++,j--)k=i+j;后,k的值为10。
4、以下两条if语句可合并成一条if语句为。
if(a<=b)x=1;
elsey=2;
if(a>b)printf("y=%d\n",y);
elseprintf("x=%d\n",x);
5、C语言程序的函数之间可通过函数名返回数据外,还可通过函数指针返回
数据(P261)定义全局变量,传递地址运算进行。
6、int*p[4]的意义是它表示指针数组,int(*p)[4]的意是表示p是一个指针变量,它指向包含4个整形元素的一维数组数组指针(p28)。
7、设有以下定义和语句:
inta[3][2]={10,20,30,40,50,60},(*p)[2];
p=a;
则*(*(p+1)+1)的值为_____40_________。
8、若有以下定义和语句:
struct{intx;chary;intz;}a,*b;
b=&a;
则sizeof(a)的值是__5__,而sizeof(b)的值是2。
9、以下程序的输出是______49___。
main()
{inta[10]={19,23,44,17,37,28,49,36},*p;
p=a;
printf("%d\n",(p+=3)[3]);
}
10、若有以下说明和定义语句,则变量w在内存中所占的字节数是34,
unionaa
{floatx,y;charc[6];};
structst{unionaav;floatm[5];doubleave;}w;
11、以下函数的功能是:
把两个整数指针所指的存储单元中的内容进行交换。
请填空。
exchange(int*x,int*y)
{intt;
t=*y;*y=*x;*x=t;}
12、设有字符串STR,如下程序段用于确定其长度。
{intnum=0;
while(STR[num]!
=’\0’)
num++;
return(num);
}
13、设单链表的结点含两个域:
data是数据域,next是指针域,请填空。
structlink{chardata;structlink*next}node;
14、下面程序的输出是4。
main()
{inta[]={1,2,3,4},*p=a,i;
for(i=0;i<4;i++)a[i]=*(++p);
printf(“%d”,a[2]);
}
15、如下程序的运行结果是123。
Main()
{intn=0;
while(n++<=1)
printf(“%3d”,n);
printf(“%3d\n”,n);
}
16、设for(k=0;k<10;k++)++k;则该循环共执行5次。
17、结构化程序由三种基本控制结构组成,它们分别是
顺序结构、选择结构和循环结构。
18、初始化值是0.618的双精度变量a的定义形式为doublea=0.618。
19、若有以下定义和语句:
struct{intx;chary;floatz;}a,*b;b=&a;
则sizeof(a)的值是__7__,而sizeof(b)的值是2。
20、语句printf(“\%d%d”,123);执行后将输出:
123285。
21、如下程序段的输出是BCD。
staticchara[]=”ABCD”;
char*p=a;
printf(“%s”,++p);
22、如下函数用于求出一个2x4矩阵中的最小值。
Max_value(arr)
Intarr[][4];
{intI,j,max=arr[0][0];
for(I=0;I<2;I++)
for(j=0;j<4;j++)
if(arr[I][j]>max)max=a[I][j];
return(max);
}
23、设单链表的结点含三个域:
data1和data2是数据域,next是指针域,请填
空。
structlink{intdata1;chardata2;structlink*next;}node;
24、字符串″ABCD\t\\\123″的长度是7。
25、表达式a=1,a+1,a++的值是2。
27、被调函数在执行结束时,这个函数中定义的静态储存类型的变量不被释放。
28、设inta[2][3]={{2},{3}};则数组元素a[1][0]的值为3。
29、下列程序
intx=3;
do{printf(″%d″,--x);}while(!
x);
循环执行的次数是1。
30、若函数定义为
intdata( )
{ floatx=9.9;
return(x);
}
则调用后函数返回的值是9。
三、阅读如下程序,其功能是求出数组S中的最大元素,请简述其算法的基本思想,画出程序流程图;修改该算法,使其更高效。
voidmain()
{inti,m,s[10]={87,98,87,54,85,75,98,45,87,96};
for(i=1;i<10;i++)
if(s[i]>s[0])
{m=s[0];
s[0]=s[i];
s[i]=m;
}
printf("%d",s[0]);
}
Main()
{ints[10],I,m;
for(I=0;I<10;I++)
scanf(“%d”,&s[I]);
for(I=1;I<10;I++)
if(s[I]>s[0])
{m=s[0];
s[0]=s[I];
s[I]=m;}
printf(“%d”,s[0]);
}
main()
{ints[10],i,m;
for(i=0;i<10;i++)
{scanf("%d",&s[i]);
if(s[i]>s[0]){m=s[0];s[0]=s[i];s[i]=m;}}
printf("%d",s[0]);
}
四、简述如下程序的功能,画出程序流程图,并对其进行修改,使其符合结构化程序的要求。
main()
{intn;
for(n=100;n<=200;n++)
if(n%3!
=0)
printf("%d\n",n);
}
输出100~200中不能够被3整除的数。
程序1:
main()
{intn;
for(n=100;n<=200;n++)
{if(n%3==0)
continue;
printf(“%d”,n);
}
}
main()
{intn=1;
while(n<=100)
{printf("%d\n",n++);
}
}
输出1至100的数。
程序2:
main()
{intn=1;
while(n<=200)
{if(n>100)
break;
printf(“%d”,n++);
}
}
五、阅读如下程序:
#include
intmain(void)
{inti;
char*name[3]={"David","Jane Wang","Tom Lee"};
for(i=0;i<3;i++)
printf("name[%d]=%s\n",i,name[i]);
printf(“\n”);
for(i=0;i<3;i++)
printf("name[%d]=%c\n",i,name[i][0]);
}
原来输出:
name[0]=David
name[1]=Jane Wang
name[2]=Tom Lee
请描述其执行结果;修改程序显示三个字符串("David","Jane Wang","Tom Lee")的首字符。
六、设数组a中有10个整数(数据在函数main中产生),请设计一个函数把其中的偶数存放到数组b中返回并输出。
#include
main()
{voidmod(inta[10],intb[10]);
inta[10],i,b[10];
printf("inputtendata:
\n");
for(i=0;i<10;i++)
{scanf("%2d",&a[i]);
b[i]=1;
}
mod(a,b);
printf("thenewdata:
\n");
for(i=0;i<10;i++)
{if(b[i]!
=1)
printf("%2d\n",b[i]);
}
}
voidmod(inta[10],intb[10])
{inti;
for(i=0;i<10;i++)
{if(a[i]%2==0)
b[i]=a[i];
}
}
七、设有单向链表L,编程输出结点的值,并删除第一个结点。
(提示:
结点结构为:
structnode{intdata;structnode*next;};)
#include
#include
#defineNULL0
structnode
{intdata;
structnode*next;
};
voidmain()
{structnodea,b,c,*head,*p;
a.data=10;
b.data=11;
c.data=12;
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;
printf("thedataofthelink:
\n");
while(p!
=NULL)
{printf("%4d",p->data);
p=p->next;
}
printf("\ndeletethefirstdata:
\n");
head=&b;
b.next=&c;
c.next=NULL;
p=head;
while(p!
=NULL)
{printf("%4d",p->data);
p=p->next;
}
}
八、编程完成:
函数main产生整型数组s[4][4]中的数据;函数findmin求出数组s每列中最小元素的行号;函数outdata输出每列的最小元素及行号。
#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题 答案