c语言程序设计答案

c语言程序设计试卷

一、选择题(每题1分,共20分)

1.c语言规定,在一个源程序中,主函数的位置()。

A.必须在最开始的时候

b必须在系统调用的库函数后面。

C.你可以做任何你想做的事

D.必须在最后

2.在下列四个选项中,属于合法浮点数的选项是()。

A.+1e+1 5e-9.4 03e2

B.-.60 12e-4 -8e5

C.1.2e-.4 +2e-1

D.-e3 .8e-4 5.e-0

3.如果a =-14且b = 3,则条件表达式A

A.-14 B. -13 C. 3 D. 4

4.已知int n,i=1,j = 2;执行语句n = I

A.1,2 B. 1,3 C. 2,2 D. 2,3

5.为了判断两个字符串s1和s2是否相等,应该使用()。

A.if (s1==s2) B. if(s1=s2)

C.if (strcmp(s1,s2))

D.if (strcmp(s1,s2)==0)

6.下列正确的描述是()。

函数的定义可以嵌套,但是函数的调用不能嵌套。

b .函数的定义不能嵌套,但函数的调用可以嵌套。

c函数的定义和调用都不能嵌套。

D.函数的定义和函数的调用可以嵌套。

7.在C语言中,下列对函数描述不正确的是()。

A.当数组名用作形参时,可以通过改变形参组的值来相应地改变实参数组的值。

B.允许递归函数调用。

C.函数参数的范围仅限于定义的函数。

D.子函数必须在主函数之前。

8.如果变量是在函数的复合语句中定义的,下列正确的说法是()。

变量只在复合语句中有效。

B.该变量在此函数中有效。

这个变量在这个程序的范围内有效。

D.该变量是非法的。

9.下列正确的函数形式是()。

A.double fun(int x,int y){ z = x+y;返回z;}

B.fun(int x,y){ int z;返回z;}

C.fun(x,y) { int x,y;双z;z = x+y;返回z;}

D.double fun( int x,int y){ double z;z = x+y;返回z;}

10.下列程序的输出是()。

# include & ltstdio.h & gt

#定义F(y) 8.19-y

#定义PRINT(a)printf(& # 34;% d & # 34,(int)(a))

无效总管(无效)

{

int x = 2;

PRINT(x * F(3));

}

A.10b.13c.11d .错误报告

11.下列程序编译和运行结果正确的一项是()。

A.a .无效总管(无效)

{

联盟

{

int n;

浮动x;

} comm = { 1 }

printf(& # 34;% d & # 34,comm . n);

}

B.b .无效总管(无效)

{

联盟

{

int n;

浮动x;

} comm = { 12.5 }

printf(& # 34;% f & # 34,comm . x);

}

C.c .无效总管(无效)

{

联盟

{

浮动x;

int n;

} comm={12.5}

printf(& # 34;% f & # 34,comm . x);

}

D.d .无效总管(无效)

{

联盟

{

int n;

浮动x;

} comm = 5;

printf(& # 34;% d & # 34,comm . n);

}

12.有定义:int a=1,* p = & a;float b = 2.0char c = & # 39一& # 39;;下列非法操作是()。

A.p++;b . a-;c . b++;直流-;

13.在下面的程序中,调用scanf函数向变量A输入数值是错误的,错误的原因是()。

主()

{

int *p,*q,a,b;

p = & a;

printf(& # 34;输入a:& # 34;);

scanf(& # 34;% d & # 34,* p);

}

A.*p代表指针变量p的地址。

B.*p表示变量A的值,而不是变量A的地址。

C.*p代表指针变量p的值。

D.*p只能用来说明p是指针变量。

14.如果num,a,b,c都是int变量,那么执行表达式num=(a=4,b=16,c = 32);最后一个num的值是()。

A.4 B. 16 C. 32 D. 52

15.已经做出了以下定义和输入语句。如果要求A1、A2、C1、C2的值分别为10、20、A、B,正确的数据输入方法是(),(注:_代表空 grid)。

int al,a2,char c1,C2;

scanf(& # 34;% d % c % d % c & # 34,&a1,&c1,&a2,& C2);

A.10A _ 20 _ B B . 10 _ A _ 20 _ B c . 10A 20 B d . 10A 20 _ B

16.如果指定:int a[10];对数组元素的正确引用是()。

A.a[10] B. a[3.5] C. a[5-3] D. a[-1]

17.在C语言中,一维数组被定义为:

类型描述符数组名();

A.[整数常量表达式]b .[表达式]

C.[整数常量]d .[整数表达式]

18.下列能正确初始化一维数组A的说法是()。

A.in a[10]=(0,0.0,0,0);

B.int a[10]= { };c . int a[]= { 0 };

D.int a[10]= { 10 * 1 };

19.下列程序段()。

x =-1;

{

x = x * x

}

而(!x);

A.这是一个无限循环。b .循环执行两次

C.循环一次。d .语法错误

20.下列关于do-while循环的不正确描述是()。

. do-while的循环体至少执行一次。

B.do-while循环以do开头,以while结尾,while(表达式)后面不能写分号。

C.在do-while循环体中,一定有什么东西可以让while之后的表达式的值变为零(& # 34;假& # 34;)操作

D. do-while的循环体可以是复合语句。

二、是非题(每题1分,共15分)

1.c语言规定标识符中的字母一般区分大小写。

2.控制台标准输入设备一般指键盘。

3.使用while和do-while循环时,循环变量的初始化应该在循环语句之前处理。

4.循环体中continue语句的作用是结束整个循环的执行。

5.关系表达式的值为0或1。

6.如果声明int a[3][4]={0},那么只有元素a[0][0]可以得到初始值0。

7.字符串以一维数组的形式存储在内存中。

8.字符数组中的一个元素保存一个字符。

9.字符数组中的最后一个字符必须是& # 39;[162]'。

10.当形参是指针变量时,实参必须是数组名。

11.当数组名用作函数参数时,传递数组的值。

12.任何函数中的任何表达式都可以使用全局变量。

13.函数可以返回整数值、字符值、实数值等。,还可以带回指针数据。

14.表达式i++和++i在任何场合都有完全一样的作用。

15.在赋值表达式中,赋值号左边的变量的数据类型和右边表达式的值可以不同。

三、选择题(每题1分,共5分)

1.如果要求用if后的一对圆括号表示A不等于0的关系,则不能正确表示。

的表达式是()。

A.a & lt& gt0

B.!a

C.a=0

地方检察官

E.a!=0

2.选择所有合法常数()。

A.3e22.5

B.-E3

C.-.1e-1

D.'基本& # 39;

E.'5'

F.0fd

G.0xfdaL

he8

一. & # 39;\\'

J."\\""

3.下列关于函数原型的说法错误的是: ()

(1)变量的定义和声明是一回事,函数的定义和声明也是一回事。

(2)声明函数原型时,允许只写参数的类型,不必写参数的名称。

(3)如果定义函数时没有指定函数类型,系统会隐式指定函数类型为int。

(4)调用函数时,函数名、参数个数、参数类型必须与函数原型一致。

(5)如果调谐函数的定义出现在主音函数之前,则不必声明。

(6)所有函数可以互相调用。

(7)在C语言中,所有函数都是并行的,一个函数不能从属于另一个函数,也就是不能用嵌套的方式定义。

(8)如果函数没有返回值,可以在定义时省略函数类型。

(9)在C语言中,任何函数的定义都不允许是空。

(10)根据C语言,实参数变量和形参数变量之间的数据传递是“值传递”。

请从下列关于指针的陈述中选择五个正确的陈述。

(1)指针就是地址。

(2)指针在使用前必须赋值。

(3)当指针P指向数组A的第一个地址时,由于p[i]和a[i]都可以引用数组元素,所以P和A在这里是等价的。

(4)int *p是指定义了一个指向int数据的指针变量p。

(5)数组的指针是索引组的起始地址。

(6)如果定义了int A [4]并且* p = a,那么p++指向数组A占用的内存的第二个字节..

(7)使用指针变量作为函数参数是& # 34;价值转移& # 34;的方式。

(8)同类型指针可以相减。

(9)指针变量和很多变量一样,可以进行四种运算。

(10)指针p指向数组元素a[2]。如果指向a[4],就执行p=p*2。

5.在下列关于阵列的陈述中,五种最准确的陈述是:

(1)声明数组变量时必须指定大小。

(2)常量表达式必须用来解释数组变量的大小。

(3)初始化数组时,大括号中的数据个数必须与数组的大小相同。

(4)变量定义int a[3]={0,1,2},b[3];可以用b=a让数组b的每个元素等于a的每个元素。

(5)在C语言中,字符串可以作为字符数组处理。

(6)定义了字符数组char c[11];为了给它赋值,可以用c = & # 34中国& # 34;;。

(7)如果char s[15]= { & # 34;我是一名[222]学生& # 34;};,strlen(s)的值是6。

(8)在C语言中,二维数组中元素的顺序是:按行存储。

(9)C语言中,局部数组变量不能初始化。

(10)在声明时初始化数组时,必须指定数组大小。

四、程序运行结果(每题4分,共20分)

1.(4分)

下列程序的运行结果是()。

# include & ltstdio.h & gt

无效总管(无效)

{

int I;

char a[]= & # 34;时间& # 34;,b[]= & # 34;汤姆& # 34;;

for(I = 0;一个[我]!='[235]'&&b[i]!='[235]';i++)

if (a[i]==b[i])

if(a[I]& gt;='一& # 39;& & a[I]& lt;= 'z & # 39)printf(& # 34;% c & # 34,a[I]-32);

else printf(& # 34;% c & # 34,a[I]+32);

else printf(& # 34;*");

}

2.(4分)

下列程序段的运行结果是()。

I = 1;s=3

{

s++ = i++;

if (s%7==0)继续;

else ++ I;

} whlie(s & lt;15);

printf(& # 34;% d & # 34,我);

3.(4分)

如果在运行时输入:5999,下面这个程序(保留一位小数)的运行结果是()。

无效总管(无效)

{

int x;

浮动y;

scanf(& # 34;% d & # 34,& x);

if(x & gt;= 0 & & x & lt= 2999)y = 18+0.12 * x;

if(x & gt;= 3000 & & x & lt= 5999)y = 36+0.6 * x;

if(x & gt;= 6000 & & x & lt= 10000)y = 54+0.3 * x;

printf(& # 34;% 6.1f & # 34,y);

}

4.(4分)

下列程序的运行结果是()。

无效总管(无效)

{

int a=1,k;

for(k = 0;k & lt3;k++)printf(& # 34;% 4d & # 34,f1(a))

}

int f1(int x)

{

静态int z=3,y = 0;

y++;

z++;

return(x+y+z);

}

5.(4分)

下面这个程序的作用是计算函数f (x,y,z) = (x+y)/(x-y)+(z+y)/(z-y)的值。请选择空。

# include & ltstdio,h & gt

# include & ltmath.h & gt

float fun1(float,float);

无效总管(无效)

{

float x,y,z,sum

scanf(& # 34;% f % f % & # 34,&x,&y,& z);

sum = fun 1()+fun 1();

printf(& # 34;sum = % f \\ n & # 34,sum);

}

浮点功能1(浮点a,浮点b)

{

浮点数字;

num = a/b;

退货数量;

}

五、程序填写空题(每题2分,共20分)

1.下面这个程序的作用就是用公式:π×π/6 = 1/(1×1)+1/(2×2)+1/(3×3)+……

近似π,直到最后一项的值小于10e-6。

# include & ltstdio.h & gt

# include & ltmath.h & gt

无效总管(无效)

{

long I = 1;

_________;pi = 0;

while(I * I & lt;= 10e+6){ pi = _ _ _ _ _ _ _;i++;}

pi = sqrt(6.0 * pi);

printf(& # 34;pi = % 10.6f \\ n & # 34,pi);

}

2.下面这个程序的作用是将下面的给定字符按照它们的矩阵格式读入数组str1,输出行列数之和为3的数组元素。

无效总管(无效)

{

char str 1[4][3]= { & # 39;一& # 39;,'b & # 39,'C & # 39,'d & # 39,'E & # 39,'f & # 39,'G & # 39,'h & # 39,'我& # 39;,'j & # 39,'K & # 39,'我& # 39;

};

int x,y,z;

for(x = 0;x & lt4;x++)

for(y = 0;________ ;y++)

{

z = x+y;

if(_ _ _ _ _ _ _ _)printf(& # 34;% c \\ n & # 34,str 1[x][y]);

}

}

3.下面这个程序的功能是用递归的方法计算学生的年龄。已知第一个学生年龄最小,10岁,其余学生都比对方大两岁。找出第五个学生的年龄。

递归公式如下:

年龄(1)=10岁

年龄(n)=年龄(n-1)+2(n & gt;1)

# include & ltstdio.h & gt

整数年龄

{

int c;

if(n = = 1)c = 10;

else c = _ _ _ _ _ _ _ _ _ _ _ _;

返回c;

}

4.下面这个程序的作用是判断输入的年份是否是闰年。

无效总管(无效)

{

int年,是;

scanf(& # 34;% d & # 34,&年);

if(year % 400 = = 0)yes = 1;

else if(_ _ _ _ _ _ _)yes = 1;

else _ _ _ _ _ _ _ _ _ _ _ _ _ _;

如果(是)printf(& # 34;%d是& # 34;,年份);

else printf(& # 34;%d不是& # 34;,年份);

printf(& # 34;闰年。\\ n & # 34);

}

5.实现了以下程序:输入三个整数,按降序输出。

无效总管(无效)

{

int x,y,z,c;

scanf(& # 34;% d % d % d & # 34,&x,&y,& z);

if(_ _ _ _ _ _ _ _){ c = y;y = z;z = c;}

if(_ _ _ _ _ _ _ _){ c = x;x = z;z = c;}

if(_ _ _ _ _ _ _ _){ c = x;x = y;y = c;}

printf(& # 34;%d,%d,% d & # 34,x,y,z);

}

六、填空题(每题1分,共20分)

1.在C语言中,一个浮点数据在内存中的字节数是()字节;内存中双精度数据的字节数是()字节。

2.如果定义了:char c = & # 390';变量c包含的字符数是()。

3.C源程序的基本单元是()。

4.在C语言中(以16位PC为例),内存中一个char数据的字节数是();

内存中int数据的字节数是()。

5.现有定义:

int m;

浮点n,k;

char chl,ch2

对于m=3,n=6.5,k=12.6,ch1 = & # 39一& # 39;,ch2 = & # 39一& # 39;,输入数据的格式是:

12.6aA

对应的scanf语句是();。

6.执行下面的程序片段后,x的值是()。

i = 10i++;x = ++ I;

7.如果A,B,C都是int变量,执行下面的for循环后,C的值是()。

for(a=1,b = 5;a & lt= b;a++)c = a+b;

8.以下do-while语句中循环体的执行时间是()。

a = 10

b = 0;

do { b+ = 2;a-= 2+b;} while(a & gt;=0);

9.设X和Y都是int变量,那么下面for循环中scanf语句可以执行的最大次数是()。

for (x=0,y = 0;y!= 123 & & x & lt3;x++)

scanf(& # 34;% d & # 34,& y);

10.如果有以下定义和陈述:

int *p[3],a[9],I;

for(I = 0;我& lt3;i++)p[I]= & a[3 * I];

那么*p[0]是指一个数组元素();*(p[1]+1)引用一个数组元素()。

11.设A = 3,B = 4,C = 5,则表达式a||b+c&&b==c的值为()。

12.逻辑与运算的运算符是()。

13.如果a = 6,b = 4,c = 2,那么表达式!(a-b)+c-1&&b+c/2的值是()。

14.以下程序片段中循环的执行次数是()次。

for(i=1,s = 0;我& lt11;I+= 2)s+= I;

15.如果有以下定义和陈述:

int a[4]={0,1,2,3},* p;

p = & a[2];

*-p的值是()。

16.执行下面的程序段后,S的值是()。

int a[]={5,3,7,2,1,5,3,10},s=0,k;

for(k = 0;k & lt8;k+=2)

s+= *(a+k);

17.执行下面的程序段后,m的值是()。

int a[]={7,4,6,3,10},m,k,* ptr

m = 10

ptr = & a[0];

for(k = 0;k & lt5;k+=2)

m =(*(ptr+k)& lt;m)?*(ptr+k):m;

回答:

一、选择题(20分)

1.~5.CBACD 6。~10.BDADB

11.~15.CABCC 16。~20.CACCB

二、是非题(15分)

√√√×√ √√√×× × √

三、选择题(5分)

1.ABC 2。CEGIJ 3。ADFHI 4。ABDEH 5。贝吉

四、程序运行结果(20分)

1.t*M

2.8

3.3635.4

4.6 8 10

5.z+y,z-y^x+y,x-y

五、程序填写空题(20分)

1.①double ②pi+1.0/(i*i)

2.①y & lt;3 ②z==2

3.①年龄(n-1)+2

4.①年份% 4 = = 0 & &年份%100!=0②是= 0

5.①z & gt;y②z & gt;x③y & gt;x

六、填空空题(20分)

1.①4/4 ②8/8

2.①1/1

3.①功能

4.①1/① 22/②

5.①scanf(& # 34;% d % f % f % c % c & # 34,&m,&n,&k,&ch1,&ch2)

6.①12

7.①10

8.①3..9.①3..10.①a[0] ②a[4]

11.①112.①&&13.①1.14.①5

15.①1

16.①16

17.①6

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论