c语言机考试题及答案

2024-12-13 版权声明 我要投稿

c语言机考试题及答案(精选4篇)

c语言机考试题及答案 篇1

1.在C语言中,下列类型属于构造类型的是(D)A.整型 B.字符型 C.实型 D.数组类型 2.下列字符串不是标识符的是(D)A.sum B.Average C.Day_night D.M.D.JOHN 3.在C语言中,回车换行符是(A)A.n B.t C.v D.b 4.在C语言中,语句和数据定义是用(C)作为结束标记的 A.句号 B.逗号 C.分号 D.括号 5.设有如下定义: int x=10,y=5,z;则语句printf(“%dn”,z=(x+=y,x/y));的输出结果是(C)A.0 B.1 C.3 D.4 6.10.以下程序的输出结果是(B)main(){char c1=’8’,c2=’2’;

printf(“%c,%c,%d,%dn”,c1,c2,c1-c2,c1+c2);} A.因输出格式不合法,输出出错信息 B.8,2,6,106 C.8,2,6,10 D.8,2,5,9 7.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是(A)main(){int x;scanf(“%d”,&x);

if(x++>5)printf(“%dn”,x);else printf(“%dn”,x--);} A.7和5 B.7和4 C.6和4 8.表达式(int)2.1416的值时(A)A.2 B.2.1 C.0 D.3 9.下列运算符优先级最高的是(B)A.> B.+ C.&& D.!= 10.C语言容许函数值类型缺省定义,此时该函数值隐含的类型时(B)A.float型 B.Int型 C.Long 型 D.Double型

11、C程序的基本构成单位是(C)A、子程序 B、过程 C、函数 D、文件

12、C语言中要求操作数都为整型数据的算术符是(C)A、/ B、!C、% D、= =

13、若int x=1,y=1;则表达式(!x||y--)的值是(B)。A、0 B、1 C、2 D、-1

14、能正确表示逻辑关系:a≥10或a≤0的C语言表达式(D)A、a>=10 or a<=0 B、a>=0|a<=10 C、a>=10 && a<=0 D、a>=10||a<=0

15、double x,y;表达式x=1,y=x+3/2的值是(C)。A、1 B、2 C、2.0 D、2.5

16、运行C源程序的命令是(D)A、ALT+F5 B、ALT+F9 C、CTRL+F5 D、CTRL+F9

17、运行完C程序后,查看C程序运行结果的命令是(A)A、ALT+F5 B、ALT+F9 C、CTRL+F5 D、CTRL+F9 18.若有程序段:int i=2,j;j=i++;printf(“%d,%d”,++i,j);该程序段的输出结果是:(D)A、3,2 B、4,3 C、3,3 D、4,2 19设 int a=12;表达式a+=a-=a*=a的值是(C)。A 12 B 144 C 0 D 132 20、若给定条件表达式(M)?(a++):(a--),则其中表达式M和(D)等价。A M==0 B M=1 C M!=1 D M!=0

21、在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式为(D)。A 只能是逻辑表达式 B只能是关系表达式

C 只能是逻辑表达式或关系表达式 D可以是任意表达式

22、下列选项中,(A)给变量赋初值是错误的。

A int a=b=3;B int a,b,c=5;C int a=3,b,c=a;D float f=3.56;

23、在C语言中,一个字符变量在内存中占用(A)个字节。A 1 B 2 C 3 D 4

24、int a=12,b=13,c;c=(a

25、设有int i;则表达式i=1,++i,++i||++i,i的值为(C)A.1 B.2 C.3 D.4 30以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是(A)A)if((a>b)&&(b>c))k=1;B)if((a>b)||(b>c))k=1 else k=0;C)if(a<=b)k=0;D)if(a>b)k=1;else if(b<=c)k=1;else if(b>c)k=1;else k=0;

31、算法具有五个特性,以下选项中不属于算法特性的是(A)有穷性(B)简洁性(C)可行性(D)确定性 32以下选项中可作为C语言合法常量的是(A)(A)-80.(B)-080(C)-8e1.0(D)-80.0e

33、以下叙述中正确的是(C)

(A)用C语言实现的算法必须要有输入和输出操作(B)用C语言实现的算法可以没有输出但必须要有输入(C)用C程序实现的算法可以没有输入但必须要有输出(D)用C程序实现的算法可以既没有输入也没有输出

33、以下选项中,不能作为合法常量的是(B)(A)1.234e04(B)1.234e0.4(C)1.234e+4(D)1.234e0

34、有以下程序

B)(main(){ int i=1,j=2,k=3;if(i++==1&&(++j==3||k++==3))printf(“%d %d %dn”,i,j,k);} 程序运行后的输出结果是(D)(A)1 2 3(B)2 3 4(C)2 2 3(D)2 3 3

35、判断变量ch中的字符是否为数字字符,正确表达式是____D___。

A)ch>=0&&ch<=9 B)’0’<=ch<=’9’ C)ch>=’0’||ch<=’9’ D)ch>=’0’&&ch<=’9’

36、若执行以下程序时从键盘上输入9,则输出结果是__B_____ A)11 B)10 C)9 D)8 main()

{ int n; scanf(“%d”,&n); if(n++<10)printf(“%dn”,n); else printf(“%dn”,n--); }

37、若w=1,x=2,y=3,z=4;则条件表达式w>x?w:y

38、以下非法的赋值语句是(C)A)n=(i=2,++i);B)j++;C)++(i+1);D)x=j>0;

39、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是(D)A)6.500000 B)6 C)5.500000 D)6.000000 40、已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为

1、j的值为

2、k的值为3,以下选项中正确的输入语句是(C)A)scanf(“---”,&i,&j,&k);B)scanf(“%d %d %d”,&i,&j,&k);C)scanf(“%d,%d,%d”,&i,&j,&k);D)scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);

41、若有以下程序: main(){ int k=2,i=2,m;m=(k+=i*=k);printf(“%d,%dn”,m,i);} 执行后的输出结果是(C)A)8,6 B)8,3 C)6,4 D)7,4 

42、已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是(D)A)6 B)0 C)2 D)1

43 以下选项中,与k=n++完全等价的表达式是(A)A)k=n,n=n+1 B)n=n+1,k=n C)k=++n D)k+=n+1

39、若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是B A)i= *P;B)*P=*&J;C)i=&j;D)i=* *p;40、若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为6的表达式是C A)*p+6 B)*(p+6)C)*p+=5 D)p+5

二、填空题

1.C语言是通过 库函数 来进行输入和输出的。

2.C语言的数据类型有四大类,他们是 基本类型、构造类型、指针类型和 空类型。

4.下面程序的运行结果是 3.600000,3 main(){float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);} 5.数组名定义规则和变量名相同,遵守 标识符 命名规则。

6、main(){char c1,c2,c3;c2=’c’;c1=c2-1;c3=c2+1;printf(“%c,%d,%cn”,c1,c2,c3);} 程序的运行结果是: b,99,d

7、main(){int a=5,b=6,c;c=a;if(a>b)c=1;else if(a= =b)c=0;else c=-1;printf(“c=%dn”,c);} 程序的运行结果是:-1 11.设x的值为15,n的值为2,则表达式x%=(n+=3)运算后,x的值为 0。12.设 int a=7,b=9,t;执行完表达式t=(a>b)?a:b后,t的值是 9。14.求100~200间的全部素数。# include main(){ int m,k,i,n=0;for(m=101;m<=200;m+=2){ if(n==0)printf(“n”);k=sqrt(m);for(i= 2;i<=k;i++)if(m%i==0)break;if(i== k){ printf(“%d ”,m);n++;} } }

15、main(){ int x,y=1,z=10;if(y!=0)x=5; printf(“x=%dt”,x);x=1;if(z<0)if(y>0)x=3;else x=5;printf(“x=%dn”,x);if(z=y<0)x=3;else if(y==0)x=5;else x=7;printf(“x=%dt”,x);printf(“z=%dn”,z);} 写出程序的运行结果:x=5 x=1 x=7 z=0

16、百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹? main(){ int hb,hm,hl,n=0;for(hb=0;hb<=100;hb+= 3)for(hm=0;hm<=100-hb;hm+= 2){ hl=100-hb-hm;if(hb/3+hm/2+2* hl ==100){ n++;printf(“hb=%d,hm=%d,hl=%dn”,hb/3,hm/2,2*hl);} } printf(“n=%dn”,n);}

17、写出程序运行结果,并简述功能(运行结果5分,功能描述3分,共8分)#include main(){ int i,t;int a[10]={2,4,6,8,10,1,3,5,7,9};for(i=0;i<=4;i++){ t=a[i];a[i]=a[9-i];a[9-i]=t;} for(i=0;i<=9;i++)printf(“%d ”,a[i]);} 运行结果: 7 5 3 1 10 8 6 4 2 功能描述:

将整型数组a以逆序形式显示出来

18、有以下语句段 int n1=10,n2=20;printf(“ n1=%dnn2=%d ”,n1,n2);

要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。n1=10 n2=20

19、有以下程序 main(){ int n=0,m=1,x=2;if(!n)x-=1;if(m)x-=2;if(x)x-=3;printf(“%dn”,x);} 执行后输出结果是-4。

21、.以下程序运行后的输出结果是____ main(){ int a,b,c;a=10;b=20;c=(a%b<1)||(a/b>1);printf(“%d %d %dn”,a,b,c);} 答案:10 20 0

22、任意输入三条边(a,b,c)后,若能构成三角形且为等腰、等边和直角,则分别输出DY、DB和ZJ,若不能构成三角形则输出NO。main(){ float a,b,c,a2,b2,c2 scanf(“%f%f%f%,&a,&b,&c);printf(”%5.1f,%5.1f,%5.1f“,a,b,c);if(a+b>c&&b+c>a&&a+c>b){ if(a==b || b==c || a==c)printf(”DY“);if(a==b && b==c)printf(”DB“);a2=a*a;b2=b*b;c2=c*c;if((a2+b2==c2)||(a2+c2==b2)||(b2+c2==a2))printf(”ZJ“);printf(”n“);} else printf(”NOn“);}

23、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是___x=2______ if(a

24、以下程序运行后的输出结果是 20,0。 main(){ int x=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf(“%d,%d n”,x,y);}

三、程序题

1、在购买某物品时,若所花的钱x在下述范围内,所付钱y按对应折扣支付:

x x<1000 0.9x 1000≤x<2000 0.8x 2000≤x<3000 0.7x x.≥3000 y=

2、编一程序根据上网时间计算上网费用,计算方法如下:

费用= 30元基数 <10小时 每小时3元 10 ~50 每小时2.5元 ≥50小时

同时为了鼓励多上网,每月收费最多不超过150元。

3、已知输入某课程的百分制成绩mark,要求显示对应五级制的评定,评定条件如下:

c语言机考试题及答案 篇2

一、单项选择题(共20题,每题1.5分,共计30分。

每题有且仅有一个正确答案)

1.在下面各世界顶级的奖项中,为计算机科学与技术领域做出杰出贡献的科学家设立的奖项是()。

A.沃尔夫奖    B.诺贝尔奖    C.菲尔兹奖    D.图灵奖

2.在下面各软件中,不属于NOIP竞赛(复赛)推荐使用的语言环境是()。

A.gcc/g++    B.Turbo

Pascal    C.RHIDE    D.free

pascal

3.以下断电之后仍能保存数据的有()。

A.寄存器    B.ROM    C.RAM    D.高速缓存

4.Linux是一种()。

A.绘图软件    B.程序设计语言    C.操作系统    D.网络浏览器

5.CPU是()的简称。

A.硬盘    B.中央处理器    C.高级程序语言    D.核心寄存器

6.在计算机中,防火墙的作用是()。

A.防止火灾蔓延    B.防止网络攻击    C.防止计算机死机    D.防止使用者误删除数据

7.在下列关于计算机语言的说法中,不正确的是()。

A.Pascal和C都是编译执行的高级语言

B.高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上

C.C++是历史上的第一个支持面向对象的计算机语言

D.与汇编语言相比,高级语言程序更容易阅读

8.在下列关于计算机算法的说法中,不正确的是()。

A.一个正确的算法至少要有一个输入

B.算法的改进,在很大程度上推进了计算机科学与技术的进步

C.判断一个算法的好坏的主要标准是算法的时间复杂性与空间复杂性

D.目前仍然存在许多涉及到国计民生的重大课题,还没有找到能够在计算机上实施的有效算法

9.在下列各种排序算法中,不是以“比较”作为主要操作的算法是()。

A.选择排序    B.冒泡排序    C.插入排序    D.基数排序

10.在编程时(使用任一种高级语言,不一定是C),如果需要从磁盘文件中输入一个很大的二维数组(例如1000*1000的double型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于列的)相比,在输入效率上()。

A.没有区别                B.按行读的方式要高一些

C.按列读的方式要高一些    D.取决于数组的存储方式

11.在C语言中,表达式21^2的值是()。

A.441    B.42    C.23    D.24

12.在C语言中,判断a不等于0且b不等于0的正确的条件表达式是()。

A.!a==0

||

!b==0    B.!(a==0)&&(b==0)C.!(a==0&&b==0)D.a&&b

13.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为()。

A.1,2,3,4,5    B.1,2,4,5,7    C.1,4,3,7,6    D.1,4,3,7,2

14.高度为n的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。在这里,树高等于结点的最大深度,根结点的深度为0,如果某个均衡的二叉树共有2381个结点,则该树的树高为()。

A.10    B.11    C.12    D.13

15.与十进制数1770对应的八进制数是()。

A.3350    B.3351    C.3352    D.3540

16.将5个数的序列排序,不论原先的顺序如何,最少都可以通过()次比较。完成从小到大的排序。

A.6    B.7    C.8    D.9

17.设A=B=D=ture,C=false,以下逻辑运算表达式值为真的有()。

A.(﹁A∧B)∨(C∧D)B.﹁((A∨B∨D)∧C)C.﹁A∧(B∨C∨D)D.(A∧B∧C)∨﹁D

18.(2010)16+(32)8的结果是()。

A.(8234)10    B.(202B)16    C.(20056)8    D.(100000000110)2

19.设栈S的初始状态为空,元素a,b,c,d,e依次入栈,以下出栈序列不可能出现的有()。

A.a,b,c,e,d    B.b,c,a,e,d    C.a,e,c,b,d    D.d,c,e,b,a

20.已知6个结点的二叉树的先根+遍历是1

6(数字为结点的编号,以下同),后根遍历是3

1,则该二叉树的可能的中根遍历是()。

A.3

5    B.3

6    C.2

6    D.2

二、问题求解(共2题,每题5分,共计10分)

1.(寻找假币)现有80枚硬币,其中有一枚是假币,其重量稍轻,所有真币的重量都相同,如果使用不带砝码的天平称重,最少需要称几次,就可以找出假币?你还要指出第1次的称重方法。请写出你的结果:________________________________________________________________。

2.(取石子游戏)现有5堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取),取最后一颗石子的一方获胜。甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?如果有,甲第一步应该在哪一堆里取多少?请写出你的结果:____________________________________________________________________。

三、阅读程序写结果(共4题,每题8分,共计32分)

1.#include

int

main()

{

int

i,u[4],a,b,x,y=10;

for(i=0;i<=3;i++)

scanf(“%d“,&u[i]);

a=(u[0]+u[1]+u[2]+u[3])/7;

b=u[0]/((u[1]-u[2])/u[3]);

x=(u[0]+a+2)-u[(u[3]+3)%4];

if(x>10)

y+=(b*100-u[3])/(u[u[0]%3]*5);

else

y+=20+(b*100-u[3])/(u[u[0]%3]*5);

printf(“%d,%d\n“,x,y);

return

0;

}

/*注:本例中,给定的输入数据可以避免分母为0或下标越界。*/

输入:9  3  9  4

输出:________________

2.#include

main()

{

int

i,j,m[]={2,3,5,7,13};

long

t;

for(i=0;i<=4;i++)

{

t=1;

for(j=1;j

t*=2;

printf(“%ld  “,(t*2-1)*t);

}

printf(“\n“);

}

输出:________________

3.#include

“stdio.h“

#define

N

int

fun(char

s[],char

a,int

n)

{

int

j;

j=n;

while(a

&&

j>0)

j--;

return

j;

}

int

main()

{

char

s[N+1];

int

k,p;

for(k=1;k<=N;k++)

s[k]='A'+2*k+1;

printf(“%d\n“,fun(s,'M',N));

}

输出:________________

4.#include

void

digit(long

n,long

m)

{

if(m>0)

printf(“%2ld“,n%10);

if(m>1)

digit(n/10,m/10);

printf(“%2ld“,n%10);

}

main()

{

long

x,x2;

printf(“Input

a

number:\n“);

scanf(“%ld“,&x);

x2=1;

while(x2

x2*=10;

x2/=10;

digit(x,x2);

printf(“\n“);

}

输入:9734526

输出:________________

四、完善程序(前4空,每空2.5分,后6空,每空3分,共28分)

1.(全排列)下面程序的功能是利用递归方法生成从1到n(n<10)的n个数的全部可能的排列(不一定按升序输出)。例如,输入3,则应该输出(每行输出5个排列):

123  132  213  231  321

312

程序:

#include

int

n,a[10];/*a[1],a[2],…,a[n]构成n个数的一个排列*/

long

count=0;/*变量count记录不同排列的个数,这里用于控制换行*/

void

perm(int

k)

{

int

j,p,t;

if(______①______)

{

count++;

for(p=1;p<=n;p++)

printf(“%1d“,a[p]);/*

“%1d“ 中是数字1,不是字母l

*/

printf(“

“);

if(______②______)

printf(“\n“);

return;

}

for(j=k;j<=n;j++)

{

t=a[k];

a[k]=a[j];a[j]=t;

______③______;

t=a[k];

______④______;

}

}

main()

{

int

i;

printf(“Entry

n:\n“);

scanf(“%d“,&n);

for(i=1;i<=n;i++)

a[i]=i;

______⑤______;

}

2.由键盘输入一个奇数P(P<100,000,000),其个位数字不是5,求一个整数S,使P×S=1111...1(在给定的条件下,解s必存在)。要求在屏幕上依次输出以下结果:

(1)

S的全部数字。除最后一行外,每行输出50位数字。(2)乘积的数字位数。

例1:输入P=13,由于13*8547=111111,则应输出(1)

8547,(2)

例2:输入P=147,则输出结果应为(1)

7558578987******613(2)

42,即等式的右端有42个1。

程序:

#include

main()

{

long

p,a,b,c,t,n;

int

bl;

while(1)

{

printf(“输入p,最后一位为1或3或7或9:\n“);

scanf(“%ld“,&p);

if((p%2!=0)&&(p%5!=0))/* 如果输入的数符合要求,结束循环 */

______⑥______;

}

a=0;

n=0;

while(a

{

a=a*10+1;

n++;/* 变量a存放部分右端项,n为右端项的位数 */

}

t=0;

do

{

b=a/p;

printf(“%1ld“,b);

t++;

if(______⑦______)

printf(“\n“);

c=______⑧______;a=______⑨______;n++;

}while(c>0);

printf(“\nn=%ld\n“,______⑩______);

}

一、选择一个正确答案代码(A/B/C/D/E),填入每题的括号内(每题1.5分,多选无分, 共30 分)

题号

选择

D

B

B

C

B

B

C

A

D

D

题号

选择

C

D

C

B

C

B

B

A

C

B

二、问题求解(共2题,每题5分,共计10分)

1.4次(1分)第一步:分成3组:27,27,26,将前2组放到天平上(4分)。

2.有获胜策略(1分)第1次在第5堆中取32颗石子(4分)。

三、阅读程序写结果(共4题,每题8分,共计32分)

1.10,10(对1个数给4分,无逗号扣1分)

2.6  28  496  8128  33550336

(前2个对1个数给1分,后3个对1个数给2分)

3.5

4.6

6(数字之间无空格扣2分)

四、完善程序(前4空,每空2.5分,后6空,每空3分,共28分)

1.① k==n  ② count%5==0  ③ perm(k+1)④ a[k]=a[j];

a[j]=t  ⑤ perm(1)

c语言面试题及答案 篇3

答案:指向常量的指针所指向的内容不能被修改但能够指向其它的量,而常指针是指向的内容可以被修改但指针不能再指向其它地方。

12. if (a=b)

printf(“a==b”)

else

printf(“a!=b”);

输出结果为:

A.a==b B.a!=b C.不一定 D.不能运行

答案:不一定,这要根据b的内容来决定。通常再编程时不要使用此类的赋值语句。

13.在内联函数中使用static变量,比如

inline test

{ static couter = 0;

counter++;

}

会有什么问题?

答案:会造成多次定义该变量,因此再内联函数中禁止定义静态变量

14. F是一个结构类型,有如下定义:

F f1,f2;

问:f1=f2;语句是否成立?

答案:该语句成立,不过有的编译器不支持。实际上编译器也是用内存拷贝函数来实现的。

15.全局变量、局部变量、模块变量在内存空间中如何存放?(数据区or栈空间?)

答案:全局变量在全局空间分配,局部变量在栈空间分配,模块变量在全局空间分配。

16.struct A{

......

......

union {

int x;

.....

};

}

struct A a;

问:a.x这样的表示法是否成立?

答案:成立

如果结构定义改为如下定义

.struct A{

......

int x;

union {

int x;

.....

};

}

那a.x表示法是否成立?

答案:不成立,编译时会报x变量重定义

17. #define REDEF(name,arg1,arg...)

_##name (arg1,##arg)

问:以下两个语句宏展开的结果

REDEF(test_fn1,int a,int b);

REDEF(test_fn2,int a);

答案:

_test_fn1(int a ,int b)

_test_fn2(int a);

注意:在VC中不支持,gcc才支持该参数宏函数。

18. fnxxxx_max(char str[])

{

putchar str[0];

str++; //(1)

printf(“%s”,str);

}

main()

{

char str[20]={“ABCDEFG”};

fnxxxx_max(str);

str++; //(2)

printf(“%s”,str);

}

问:语句(1)和语句(2)是否成立?

答案:语句(1)成立,语句(2)不成立

19.#define SRR 0x001;

#define SRT 0x002;

#define SRI 0x0900;

EVENT = SRR|SRT|SRI

问:上面的语句有什么问题?EVENT的值会是多少?

答案:宏展开后变为:

EVENT = 0x001; 0x002;0x0900;

c语言机考试题及答案 篇4

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

1.设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为()。

A.20

B.0或35

C.15

D.16

2.下列关于栈的叙述中,正确的是()。

A.栈底元素一定是最后入栈的元素

B.栈操作遵循先进后出的原则

C.栈顶元素一定是最先入栈的元素

D.以上三种说法都不对

3.下列链表中,其逻辑结构属于非线性结构的是()0、A.双向链表

B.带链的栈

C.二叉链表

D.循环链表

4.在关系数据库中,用来表示实体间联系的是()。

A.网状结构

B.树状结构

C.属性

D.二维表

5.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是()。

A.1:m联系

B.m:n联系

C.1:1联系

D.m:l联系

6.右两个关系R和S如下:

则由关系R得到关系S的操作是()。

A.自然连接

B.并

C.选择

D.投影

7.数据字典(DD)所定义的对象都包含于()。

A.软件结构图

B.方框图

C.数据流图(DFD图)

D.程序流程图

8.软件需求规格说明书的作用不包括()。

A.软件设计的依据

B.软件可行性研究的依据

C.软件验收的依据

D.用户与开发人员对软件要做什么的共同理解

9.下面属于黑盒测试方法的是()。

A.边界值分析

B.路径覆盖

C.语句覆盖

D.逻辑覆盖

10.下面不属于软件设计阶段任务的是()。

A.制订软件确认测试计划

B.数据库设计

C.软件总体设计

D.算法设计

11.以下叙述中正确的是()。

A.在C语言程序中,main函数必须放在其他函数的最前面

B.每个后缀为C的C语言源程序都可以单独进行编译

C.在C语言程序中,只有main函数才可单独进行编译

D.每个后缀为.C的C语言源程序都应该包含一个main函数

12.C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是()。

A.预定义标识符(如库函数中的函数名)可用做用户标识符,但失去原有含义

B.用户标识符可以由字母和数字任意顺序组成

C.在标识符中大写字母和小写字母被认为是相同的字符

D.关键字可用做用户标识符,但失去原有含义

13.以下选项中表示一个合法的常量是(说明:符号口表示空格)()。

A.9口9口9

B.0Xab

C.123E0.2

D.2.7e

14.C语言主要是借助以下哪个功能来实现程序模块化?()

A.定义函数

B.定义常量和外部变量

C.三种基本结构语句

D.丰富的数据类型

15.以下叙述中错误的是()。

A.非零的数值型常量有正值和负值的区分

B.常量是在程序运行过程中值不能被改变的量

C.定义符号常量必须用类型名来设定常量的类型

D.用符号名表示的常量叫符号常量

16.若有定义和语句:int a,b;scanf(“%d,%d”,&a,&b);以下选项中的输人数据,不能把值3赋给变量a、5赋给变量b的是()。

A.3,5,B.3,5,4

C.3,5

D.3,5

17.C语言中char类型数据占字节数为()。

A.3

B.4

C.1

D.2

18.下列关系表达式中,结果为“假”的是()。

A.(3+4)>6

B.(3!=4)>2

C.3<=4‖D.(3<4)=1

19.若以下选项中的变量全部为整型变量,且已正确定义并赋值,则语法正确的switch语句是()。

A.switch(a+9)

{case cl:y=a-b;

case c2:y=a+b;

}

B.switch a*b

{case l0:x=a+b;

default:y=a-b;

}

C.switch(a+b)

{casel:case3:y=a+b;break;

case0:case4:y=a-b;

}

D.switch(a*a+b*b)

{default:break;

case 3:y=a+b;break;

case 2:y=a-b;break;

}

20.有以下程序:

#include

main()

{ int a=-2,b=0;

while(a++&&++b);

printf(“%d,%dn”,a,b);

}

程序运行后的输出结果是()。

A.1,3

B.0,2

C.0,3

D.1,2

21.设有定义:int x=o,* P;,立刻执行以下语句,正确的语句是()。

A.p=x;

B.* p=x;

C.D=NULL;

D.* p=NULL;

22.下列叙述中正确的是()。

A.可以用关系运算符比较字符串的大小

B.空字符串不占用内存,其内存空间大小是0

C.两个连续的单引号是合法的字符常量

D.两个连续的双引号是合法的字符串常量

23.有以下程序:

#include

main()

{ rhar a=’H’;

a=(a>=’A’&&a<=’2’)?(a-’A’+’a’):a;

printf(“%cn”,a);

}

程序运行后的输出结果是()。

A.A

B.a

C.H

D.h

24.有以下程序:

#include

int f(int x);

main()

{ int a,b=0;

for(a=0;a<3;a++)

{b=b+f(a);putchar(’A’+b);}

}

int f(int x)

{ return x * xl;}

程序运行后的输出结果是()。

A.ABE B.BDI C.BCF D.BCD

25.设有定义:int x[2][3];,则以下关于二维数组X的叙述错误的是()。

A.x[0]可看做是由3个整型元素组成的一维数组

B.x[0]和x[l]是数组名,分别代表不同的地址常量

C.数组X包含6个元素

D.可以用语句x[o]=0;为数组所有元素赋初值0

26.设变量P是指针变量,语句P=NULL;是给指针变量赋NULL值,它等价于()。

A.p=“";

B.p=”0“;

C.p=0;

D.p=”;

27.有以下程序:

#include

main()

{int a[]={10,20,30,40},*p=a,j;

for(i=0;i<=3;i++){a[i]=*P;p++;}

printf(“oAdn”,a[2]);

}

程序运行后的输出结果是()。

A.30

B.40

C.10

D.20

28.有以下程序:

#include

#define N 3

void fun(int a[][N],int b[])

{ int i,j;

for(i=0;i

for(j=i;j

}

main()

{int x[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;

fun(x,y);

for(i=0;i

}

程序运行后的输出结果是(,)。

A.2,4,8,B.3,6,9,C.3,5,7,D.1,3,5,29.有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数):

#include

#include

main()

{char a[10]=“abc”,b[10]=“012”,c[10]=“xyz”;

strcpy(a+1,b+2);

puts(strcat(a,c+1));

}

程序运行后的输出结果是()。

A.al2xyz

B.12yz

C.a2yz

D.bc2yz

30.以下选项中,合法的是()。

A.char str3[]={’d’,’e’,’b’,’u’,’g’,’’};

B.char str4;str4=“hello world”;

C.char name[10];name=“china”;

D.char strl[5]=“pass”,str2[6];str2=strl;

31.有以下程序:

#include

main()

{ char*s=“[2]34”;int k=0,a=0;

whil(s[k+1]!=’o’)

{ k++;

if(k%2=o){a=a+(s[k]-’0’+1);continue;}

a=a+(s[k]-’0’);

printf(“k=%d a=%dn”,k,a);

}

程序运行后的输出结果是()。

A.k=6 a=11

B.k=3 a=14

C.k=4 a=12

D.k=5 a=15

32.有以下程序:

#include

main()

{char a[5][10]={“one”,“tw0”,“three”,“four”,“five”};

int i,j;

char t:、for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(a[i][O]>a[j][0])

{t=a[i][O];a[i][O]=a[j][O];a[j][O]=t;)

puts(a[1]);

}

程序运行后的输出结果是()。

A.fwo

B.fix

C.two

D.owo

33.有以下程序:

#include

int a=1,b=2:

void funl(int a,int b)

{printf(“%d%d”,a,b);}

void fun2()

{ a=3;b=4;}

main()

{ funl(5,6);fun2();

printf(“%d%dn”,a,b);

}

程序运行后的输出结果是()。

A.1 2 5 6

B.5 6 3 4

C.5 6 1 2

D.3 4 5 6

34.有以下程序:

#include

void func(int n)

{ static int num=1);

num=num+n;printf(“%d”,num);

}

main()

{funo(3);func(4);printf(“n”);}

程序运行后的输出结果是()。

A.4 8

B.3 4

C.3 5

D.4 5

35.有以下程序:

#include

#include void fun(int*pl,int*p2,int*s){ s=(int*)malloc(sizeof(int));

*s=*pl+*p2;

free(s);

}

main()

{int a=1,b=40,*q=&a;

fun(&a,&b,q);

printf(“%dn”,*q);

}

程序运行后的输出结果是()。

A.42

B.0

C.1

D.41

36.有以下程序:

#include

struct STU{char name[9];char sex;int score[2];};

void f(struct STU a[])

{ struct STU b={“Zhao”,’m’,85,90);

a[1]=b;

}

main()

{struct STU c[2]={{“Qian”,’f’,95,92},{“Sun”,’m’ 98,99}};

f(c);

printf(”%s,%c,%d,%d,¨,c[o].name,c[o].sex,c[o].score[o],c[o].score[1]);

printf(“%s,%c,%d,%dn”,c[1].name,c[1].sex,c[1].score[o],c[1].score

[1]);

}

程序运行后的输出结果是()。

A.Zhao,m,85,90,Sun,m,98,99

B.Zhao,m,85,90,Qian,f,95,92

C.Qian,f,95,92,Sun,m,98,99

D.Qian,f,95,92,Zhao,m,85,90

37.以下叙述中错误的是()。

A.可以用typedef说明的新类型名来定义变量

B.typedef说明的新类型名必须使用大写字母,否则会出编译错误

C.用typedef可以为基本数据类型说明一个新名称

D.用typedef说明新类型的作用是用一个新的标识符来代表已存在的类型名

38.以下叙述中错误的是()。

A.函数的返回值类型不能是结构体类型,只能是简单类型

B.函数可以返回指向结构体变量的指针

C.可以通过指向结构体变量的指针访问所指结构体变量的任何成员

D.只要类型相同,结构体变量之间可以整体赋值

39.若有定义语句int b=2;,则表达式(b<<2)/(3‖b)的值是()。

A.4

B.8

C.0

D.2

40.有以下程序:

#include

main()

{ FILE*fp;int i,a[6]={1,2,3,4,5,6};

fp=fopen(“d2.dat”,“w+”);

for=(i=o;i<6;,i++)fpintf(fp,“%dn”,a[i]);

rewind(fp);

for(i=0;i%6;i++)fscanf(fp,“%d”,&a[5-i]);

fclose(fp);

for(i=0;i%6;i++)printf(“%d,”,a[i]);

}

程序运行后的输出结果是()。

A.4,5,6,1,2,3,B.1,2,3,3,2,1,C.1,2,3,4,5,6,D.6,5,4,3,2,1,二、基本操作题(共18分)

str是一个由数字和字母字符组成的字符串,由变量num传人字符串长度。请补充函数proc(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。

例如,str=“abcl23de45f967”,结果为:l234567。

注意:部分源程序给出如下。

请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#define M 80

int bb[M];

int proc(char str[],int bb[],int num)

{

int i,n=0;

for(i=0;i

if(【1】)

{

bb[n]=【2】;

n++;

}

}

return 【3】;

}

void main()

{

char str[M];

int num=0,n,i;

printf(“Enter a string:n”);

gets(str);

while(str[num])

num++:

n=proc(str,bb,num);

printf(“nbb=”);

for(i=0;i

}

三、程序改错题(共24分)

下列给定程序中,函数proc()的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCIl码升序排序后输出。

例如,输入opdye,则应输出deopy。

请修改程序中的错误,使它能得到正确结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include%string.h>

#include%stdlib.h>

#include

#include

//****found****

int proc(char str[])

{

char C;

unsigned i,j;

for(i=0;i

{

c=str[j]:

//****found****

str[j]=str[i++];

str[i]=C;

}

}

void main()

{

char st/[81];

system(“CLS”);

printf(“nPlease enter a character

string:”);

gets(str);

printf(“nknBefore sorting:n %s”,str);

proc(str);

printf(“nAfter sorting decendingly:n

%S”,str);

}

四、程序设计题(共18分)

请编写函数proc(),它的功能是计算:s=(In(1)4+ln(2)4+ln(3)+…+In(m))0.在C语言中可调用log(n)函数求ln(n)。

例如,若m的值为30,则proc()函数值为8.640500。

注意:部分源程序给出如下。

请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。

试题程序:

#include

#include

#inclllde

#include

double proc(int m)

{

}

void main()

{

system(“CLS”);

printf(“%fn”,proc(30));

}

【参考答案及专家详解】

一、选择题

1.B。【解析】Q(1:35)则队列的存储空间为35;对空条件:front=rear(初始化时:front=rear),队满时:(rear+1)%n= =front,n为队列长度(所用数组大小),因此当执行一系列的出队与入队操作,front=rear.则队列要么为空,要么为满。

2.B。【解析】栈是先进后出,因此,栈底元素是先入栈的元素,栈顶元素是后入栈的元素。

3.C。【解析】数据的逻辑结构是描述数据之间的关系,分两大类:线性结构和非线性结构。线性结构是n个数据元素的有序(次序)集合,指的是数据元素之间存在着“一对一”的线性关系的数据结构。常用的线性结构有:线性表,栈,队列,双队列,数组,串。非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后驱。常见的非线性结构有:树(二叉树等),图(网等),广义表。

4.D。【解析】单一的数据结构——关系,现实世界的实体以及实体间的各种联系均用关系来表示。数据的逻辑结构——二维表,从用户角度,关系模型中数据的逻辑结构是一张二维表。但是关系模型的这种简单的数据结构能够表达丰富的语义,描述出现实世界的实体以及实体间的各种关系。

5.A。【解析】部门到职员是一对多的,职员到部门是多对一的,因此,实体部门和职员间的联系是l:m联系。

6.C。【解析】选择:是在数据表中给予一定的条件进行筛选数据。投影:是把表中的某几个属性的数据选择出来。连接:有自然连接、外连接,内连接等,连接主要用于多表之间的数据查询。并:与数学中的并是一样的。两张表进行并操作,要求它们的属性个数相同并且需要相容。

7.C。【解析】数据字典(DD)是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。

8.B。【解析】《软件可行性分析报告》是软件可行性研究的依据。

9.A。【解析】黑盒测试方法主要有等价类划分、边界值分析、因果图、错误推测等。白盒测试的主要方法有逻辑驱动、路径测试等,主要用于软件验证。

10.A。【解析】软件设计阶段的主要任务包括丙个:一是进行软件系统的可行性分析,确定软件系统的建设是否值得,能否建成。二是进行软件的系统分析,了解用户的需求,定义应用功能,详细估算开发成本和开发周期。

11.B。【解析】C语言是一种成功的系统描述语言,具有良好的移植性,每个后缀为.C的C语言源程序都可以单独进行编译。

12.A。【解析】用户标识符不能以数字开头,C语言中标识符是区分大小写的,关键字不能用做用户标识符。

13.B。【解析】当用指数形式表示浮点数据时,E的前后都要有数据,并且E的后面数要为整数。

14.A。【解析】C语言是由函数组成的,函数是C语言的基本单位。所以可以说C语言主要是借助定义函数来实现程序模块化。

15.C。【解析】在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量。

16.C。【解析】在输入3和5之间除逗号外不能有其他字符。

17.C。【解析】Char类型数据占1个字节。

18.B。【解析】在一个表达式中,括号的优先级高,先计算3!=4,为真即是l,1>2为假。

19.D。【解析】选项A,当cl和c2相等时,不成立;选项B,a*b要用括号括起来;选项C,case与后面的数字用空格隔开。

20.D。【解析】输出的结果是:-1,1 0,2 1,2

21.C。【解析】如果没有把P指向一个指定的值,*P是不能被赋值的。定义指针变量不赋初始值时默认为null。

22.D。【解析】比较两个字符串大小用函数strcomp(S,t),空字符串有结束符,所以也要占用字节,两个双引号表示的是空字符串。

23.D。【解析】多元运算符问号前面表达式为真,所以(a-’A’+’a’)赋值给a,括号里的运算是把大写字母变成小写字母,所以答案应为选项D。

24.B。【解析】第一次循环时,b=1,输出结果为B;

第二次循环时,b=3,输出结果为D;

第三次循环时,b=8,输出结果为I。

25.D。【解析】x[0]是不能赋值的。

26.C。【解析】在C语言中null等价于数字0。

27.A。【解析】For循环结束后,数组a的值并没有变化,由于数组是由0开始,所以a[2]的值是30。

28.B。【解析】Fun函数功能是把数组a的每一行的最大值赋给b,a的第一行的最大值是3,第二行的最大值是6,第三行的最大值是9,所以答案是3,6,9。

29.C。【解析】第一次执行字符串的复制函数a的值是a2,第二次执行的是字符串的连接函数,所以运行结果为a2yz。

30.A。【解析】选项B不能把一个字符串赋值给一个字符变量,选项c和D犯了同样的错误是把字符串赋给了数组名。

31.C。【解析】输出结果:k=1 a=2

k=2 a=4 k=3 a=7

k=4 a=12

32.A。【解析】For循环完成的功能是把二维数组a的第一列的字母按从小到大排序,其他列的字母不变。

33.B。【解析】Funl是输出局部变量的值,fun2是把全局变量的值改成3和4,所以输出的结果是5634。

34.A。【解析】第一调用func函数时输出4,第二次调用func函数时num的值并不会释放,仍然是上次修改后的值4,第二次调用结果为8,所以输出结果是4 8。

35.C。【解析】Fun函数功能是新开辟内存空间存放a和b的地址,q的地址并没有变化,所以应该还是指向地址a。

36.D。【解析】F函数是为结构体数组的第二个数赋值,数组的第一个数没有变化,所以正确答案应选D。

37.B。【解析】用typedef说明的类型不是必须用大写,而是习惯上用大写。

38.A。【解析】函数返回值类型可以是简单类型和结构体类型。

39.B。【解析】2的二进制数为010,移两位后的二进制数为01000,转成十制数为8,(3||2)为真即1,8/ 1=8,所以结果为8。

40.D。【解析】这个是对文件的操作,把数组的数写到文件里,然后再从文件里倒序读出。所以输出结果为6,5,4,3,2,1。

二、基本操作题程序填空题

【1】str[i]>=’0’&&str[i]<=’9’【2】str[i]-’O’【3】n

【解析】题目中要求把字符串str中的数字字符转换成数字并存放到整型数组bb中。首先,应判断字符串str中每个字符是否是数字字符。因此,【1】处填“str[i]>=’0’&&str[i]<=’9’”将每一个数字字符转化为数字放在整型数组bb中,因此,【2】处填“str[i]-’0’;由函数proc()可知,变量n中存放整型数组bb中的元素个数,最后要返回到主函数当中,因此,【3】处填’n’。

三、程序改错题

(1)错误:int proc(char str[])

正确:void proc(char str[])

(2)错误:str[j]=str[i++];

正确:str[j]=str[i];

【解析】由主函数中的函数调用可知,函数proc()没有返回值。因此,“int proc(char str[])”应改为“void proc(char str[])”;由函数proc()可知,if语句块完成将字符串str中的第i个元素与第j个元素相交换。因此,“str[j]=str[i++];”应改为“str[j]=str[i];”。

四、程序设计题

double proc(int m)

{

int i;

double s=0.0;//s是表示其和

for(i=1;i<=m;i++)

s=s+log(i);//计算s=ln(1)+ln(2)+ln(3)+…+ln(m)

return sqrt(s);//最后将其开平方的值返回到主函数中

}

上一篇:安全生产是煤炭企业永恒的主题下一篇:冬天的名言警句