C语言29次答案及分析.docx

上传人:b****6 文档编号:4944404 上传时间:2022-12-12 格式:DOCX 页数:15 大小:71.66KB
下载 相关 举报
C语言29次答案及分析.docx_第1页
第1页 / 共15页
C语言29次答案及分析.docx_第2页
第2页 / 共15页
C语言29次答案及分析.docx_第3页
第3页 / 共15页
C语言29次答案及分析.docx_第4页
第4页 / 共15页
C语言29次答案及分析.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C语言29次答案及分析.docx

《C语言29次答案及分析.docx》由会员分享,可在线阅读,更多相关《C语言29次答案及分析.docx(15页珍藏版)》请在冰豆网上搜索。

C语言29次答案及分析.docx

C语言29次答案及分析

四川省普通高等学校计算机应用知识和能力

第二十九次等级考试

二级(C与C++语言)笔试试卷

时间:

2008年10月18日

上午9:

00—11:

00

第一部分

软件技术基础

(共15分)

一、是非判断题(每小题1分,共10分)

(判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B)

1.在设备管理中通道是处理输入、输出的软件。

(1)

2.从逻辑上可以把数据结构分为线性结构和非线性结构。

(2)

3.若无进程处于运行状态,则就绪队列为空。

(3)

4.在单处理器系统中,程序的并发执行,实质上是程序的交替执行。

(4)

5.分页存储管理中,页面不能映射到不连续的内存块中。

(5)

6.瀑布模型的突出缺点是不适应用户需求的变化。

(6)

7.栈和队列的共同特点是允许在端点之外处插入和删除元素。

(7)

8.为了便于对照检查,测试用例应由输入数据和预期的输出结果两部分组成。

(8)

9.在软件生存期内,能确定软件系统必须做什么和必须具备的功能阶段是编码。

(9)

10.在结构化分析中,用于描述加工逻辑的主要工具有三种,即:

结构化语言、判定表、判定树。

(10)

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

1.软件开发中,模块设计的原则是(11)。

11(A)低偶合、高内聚(B)高偶合、高内聚

(C)高偶合、低内聚(D)低偶合、低内聚

2.进程从运行状态进入就绪状态的原因可能是(12)。

12(A)时间片用完(B)等待某一事件

(C)等待的事件已发生(D)被选中占有处理机

3.队列的操作原则是(13)。

13(A)先进后出(B)先进先出

(C)只进不出(D)只出不进

4.以下(14)不是实时操作系统的特点。

14(A)高可靠性(B)及时响应

(C)高效性(D)通用性

5.程序流程图是用于描述结构化方法中(15)工作阶段的工具。

15(A)可行性分析(B)程序编码

(C)详细设计(D)需求分析

第二部分

C与C++语言程序设计

(共85分)

一、单项选择题(每小题1分,共10分)

1.下列关于C++语言类的描述中错误的是(16)。

(*考点:

C++)

16(A)类用于描述事物的属性和对事物的操作

(B)类与类之间通过封装而具有明确的独立性

(C)类与类之间必须是平等的关系,而不能组成层次结构

(D)类与类之间可以通过一些方法进行通信和联络

2.C++中,已知有如下定义:

(*考点:

C++)

constintD=5;

inti=1;

longintf=0;

charc=15;

则下列选项错误的是(17)。

17(A)++i;(B)D--;(C)c++;(D)--f;

3.下面关于类和对象的描述中,错误的是(18)。

(*考点:

C++)

18(A)类就是C语言中的结构体类型,对象就是C语言中的结构体变量

(B)类和对象之间的关系是抽象和具体的关系

(C)对象是类的实例,一个对象必须属于一个已知的类

(D)类是具有共同行为的若干对象的统一描述体

4.设有定义:

intn=0,*p=&n,**q=&p,则下列选项中正确的赋值语句是(19)。

(考点:

指针赋值)

19(A)p=5;(B)*q=5;(C)q=p;(D)*p=5;

注意:

指针不能和非0的整数赋值,赋值运算符左右的类型要一致

5.设有定义:

chars[20]="ab\101\ncd";则sizeof(s)和strlen(s)的值为(20)。

(考点:

字符数组)

20(A)6,6(B)20,6(C)20,7(D)20,10

注意:

sizeof运算符是求字节数,数组的字节数为元素个数决定,strlen求字符串中第一个空字符前的字符个数,即字符串的长度,\101、\n各占一个字符

6.在C语言的函数中(21)。

21(A)必须有形参(B)形参必须是变量名

(C)可以有也可以没有形参(D)数组名不能作为形参

7.下列程序输出结果是(22)。

(考点:

带参数的宏定义)

#include"stdio.h"

#defineSQR(x)x*x

voidmain()

{inta=10,k=2,m=1;

a/=SQR(k+m)/SQR(k+m);

printf("%d\n",a);

}

22(A)10(B)1(C)9(D)0

8.已知学生记录描述如下(考点:

嵌套结构体)

structstudent

{intno;

charname[20];

charsex;

struct

{intyear;

intmonth;

intday;

}birth;

};

structstudents;

设变量s中“生日”是“1982年5月29日”,对“生日”的正确赋值方式是(23)。

23(A)year=1982;month=5;day=29;

(B)birth.year=1982;birth.month=5;birth.day=29;

(C)s.year=1982;s.month=5;s.day=29;

(D)s.birth.year=1982;s.birth.month=5;s.birth.day=29;

9.有下列程序输出结果是(24)。

(考点:

字符指针、函数(地址参数)、条件运算)

#include

voiddig(char*s)//删除字符串的数字字符

{char*p=s;

while(*s)

*s>='0'&&*s<='9'?

s++:

(*p++=*s++);

*p='\0';

}

voidmain()

{char*str="A1B2C3";

dig(str);

puts(str);

}

24(A)ABC(B)A1B2C3(C)A1B2C(D)ABC3

10.在下面的选项中,赋值语句错误的是(25)。

(考点:

赋值语句)

25(A)i++;(B)a=(b=(c=2,d=3));

(C)a=a

二、读程序回答问题(每个选择3分,共45分)

1.读下面程序并回答问题:

(考点:

函数参数的传递方式(普通值传递、地址值传递))

#include

voidfun1(intx,inty)

{intt;

t=x;x=y;y=t;

}

voidfun2(intx[])

{intt;

t=x[0];x[0]=x[1];x[1]=t;

}

voidmain()

{inta[2]={1,2},b[2]={1,2};

fun1(b[0],b[1]);fun2(a);

printf("%d,%d,%d,%d\n",a[0],a[1],b[0],b[1]);

}

(1)下列说法错误的是(26)。

26(A)数组名作为函数参数进行传递,传递的是数组的首地址

(B)数组名作为函数参数时,形参数组与实参数组共用内存空间

(C)普通变量作为函数参数进行传递,实参与形参之间发生的是单向值传递

(D)数组名作为函数参数时,传递的是数组元素的值

(2)程序的运行结果是(27)。

27(A)1,2,1,2(B)1,2,2,1(C)2,1,1,2(D)2,1,2,1

2.读程序并回答问题。

(考点:

命令行参数、静态变量)

#include

intfun()

{staticintc=0;

c++;

returnc;

}

voidmain(intargc,char*argv[])

{intx,i,j;

for(i=1;i

for(j=0;argv[i][j]!

='\0';j++)

x=fun();

printf("%d\n",x*argc);//7*3=21,输出21

}

(1)若程序经编译连接后生成可执行文件2_3.exe,若键入以下命令行:

2_3abcd123

则程序的运行结果为(28)。

28(A)3(B)21(C)9(D)0

(2)若将函数fun中的static去掉,变为intc=0;程序经编译后连接生成可执行文件2_3.exe,若键入以下命令行:

2_3abcd123

则程序的运行结果为(29)。

29(A)3(B)30(C)22(D)10

3.读程序并回答问题(考点:

字符数组、函数(指针参数)、逆置算法)

#include

#include

voidfun(char*s,intp1,intp2)//逆置s指向数组中的元素值

{chart;

while(p1

{

t=*(s+p1);*(s+p1)=*(s+p2);*(s+p2)=t;

p1++;p2--;

}

}

voidmain()

{charstr[10];

inti;

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

str[i]='A'+i;

str[i]='\0';

puts(str);

fun(str,0,strlen(str)-1);

puts(str);

}

(1)第一个puts(str)的输出结果为(30)。

30(A)AHCFEDGBI(B)IBGDEFCHA

(C)ABCDEFGHI(D)IHGFEDCBA

(2)第二个puts(str)的输出结果为(31)。

31(A)AHCFEDGBI(B)IBGDEFCHA

(C)ABCDEFGHI(D)IHGFEDCBA

4.阅读下面程序,回答问题。

(考点:

循环应用、阶乘求和算法)

voidmain()

{intn,m,s=0,t=1;

scanf("%d",&m);

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

{t*=n;//t为当前n的阶乘值

s+=t;//累加t

}

printf("%d\n",s);

}

程序的功能是(32)

32(A)实现1的阶乘至m的阶乘的求和

(B)求m的阶乘

(C)1到m的求和

(D)实现1至m-1的阶乘的求和

5.读程序,回答问题。

(考点:

字符数组、删除字符算法)

#include

voidmain()

{chars[80];

inti,j;

gets(s);

for(i=j=0;s[i]!

='\0';i++)

if(s[i]!

='c')s[j++]=s[i];

s[j]='\0';

puts(s);

}

程序运行时输入cctv10,其输出结果为(33)。

33(A)cc(B)tv10(C)ctv10(D)tv10cc

6.有下列程序:

(考点:

函数(地址参数)、指针运算)

#include

charfunc(char*s)

{char*p=s;

while(*p!

='\0')

p++;//将指针p移到字符串的末尾

returnp-s;//两个指针相减得之间相差的元素个数

}

voidmain()

{printf("\n%d\n",func("Hello!

"));

getch();//接收一个字符但不显示,作用为方便查看结果

}

(1)程序的运行结果是(34)。

34(A)3(B)Hello!

6(C)无输出(D)6

(2)指针变量的运算不可以(35)。

35(A)指针变量加整形变量(B)指针变量减整形变量

(C)指针变量加指针变量(D)指针变量减指针变量

7.以下是一个C++程序,读程序写出程序运行结果。

(*考点:

C++)

#include

voidmain()

{intnum=0,i=8;

do

{i--;

num++;

}while(--i);

cout<

}

程序的运行结果是(36)。

36(A)2(B)0(C)4(D)5

8.有下列程序:

(考点:

switch语句、循环)

#include

voidmain()

{charc='A';

intk=0;

do

{switch(c++)

{case'A':

k++;break;

case'B':

k--;

case'C':

k+=2;break;

case'D':

k%=2;continue;

case'E':

k*=10;break;

default:

k/=3;

}

k++;

}while(c<'G');

printf("k=%d\n",k);

getch();

}

(1)程序输出结果是(37)。

37(A)k=3(B)k=4(C)k=2(D)k=0

(2)本程序中continue的作用(38)。

38(A)与break一样(B)不起任何作用

(C)开始下一次循环(D)出现语法错误

9.有下列程序(考点:

递归函数、全局变量和局部变量)

intw=3;

intfun(intk)

{if(k==0)returnw;//w为全局变量

return(fun(k-1)*k);

}

voidmain()

{intw=10;

printf("%d\n",fun(5)*w);//w为局部变量

}

输出结果是(39)。

39(A)360(B)3600(C)1080(D)1200

10.有下列程序(考点:

指针数组、字符转换处理)

voidmain()

{charch[2][5]={"6934","8254"},*p[2];

inti,j,s=0;

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

p[i]=ch[i];

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

for(j=0;p[i][j]>'\0'&&p[i][j]<='9';j+=2)//p[i][j]ch[i][j]

s=10*s+p[i][j]-'0';//将取得的数字字符串转换为整数

printf("%d\n",s);

}

输出结果是(40)。

40(A)6385(B)69825(C)63825(D)693825

注意:

①请把下面“程序填空”中各小题答案写在主观题答题纸上

②每一个空只填一个语句或一个语句所缺的部分内容

三、程序填空(每空2分,共30分)

1.函数fun的功能是:

找出N行M列二维数组元素中的最大值,并作为函数值返回,最大值的行列下标通过形参指针带回main函数中。

请填空。

(考点:

函数(指针参数)、求最值算法)

#include

#defineN3

#defineM4

intfun(inta[N][M],int*row,int*col)

{inti,j,r,c;

r=c=0;

for(i=0;i

for(j=0;j

if(a[i][j]>①a[r][c]){r=i;c=j;}

②*row=r;

*col=c;

③returna[r][c];

}

voidmain()

{inta[N][M]={1,2,3,4,5,6,7,8,9,10,11,12};

introw,col,max;

max=fun(a,&row,&col);

printf("max=%d,row=%d,col=%d\n",max,row,col);

}

2.程序的功能是:

求出分数序列2/1,3/2,5/3,8/5,13/8……前20项之和,请填空。

(考点:

循环、序列求和算法)

#include

voidmain()

{doublex=2,y=1,t,s=0;

inti;

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

{s=①s+x/y;

t=②x;

x=③x+y;

y=t;

}

printf("s=%f\n",s);

}

3.有5个学生的成绩需要保存在文件score.dat文件中,保存格式如下:

(考点:

文件)

姓名,年龄,成绩请填空。

#include

voidmain()

{FILE*fp;

inti;

charname[80];

intage;

floatscore;

fp=fopen(①“score.dat”,"w");

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

{printf("请输入第%d个学生的信息\n",i);

printf("姓名:

");

scanf("%s",name);

printf("年龄:

");

scanf("%d",&age);

printf("成绩:

");

② scanf(“%f”,&score);

fprintf(fp,"%s,%d,%f\n",name,age,score);

}

③fclose(fp);

}

4.下列程序的功能是:

从5个字符串中找出最长的那个字符串。

请填空。

(考点:

二维字符数组、行指针参数、返回指针值函数、字符串处理函数)

#include

#include

#defineN5

#defineM81

char*fun(char(*sq)[M])//sq为行指针变量,函数fun为返回指向char类型的指针

{inti;

①char*sp;

sp=sq[0];//sq[0]&sq[0][0]&str[0][0]

for(i=1;i

if(②strlen(sq[i])>strlen(sp))sp=sq[i];

returnsp;

}

voidmain()

{charstr[N][M],*longest;//二维数组的名字是行指针常量

inti;

printf("pleaseenter5string:

");

for(i=0;i

gets(str[i]);

for(i=0;i

puts(str[i]);

longest=③fun(str);//调用函数

printf("\nThelongeststring:

");

puts(longest);

}

5.下面程序的功能是:

由25人坐成圆圈,先从任一人出发用1到25顺时针依次编号,然后从1号开始顺时针报数(1,2,3,4,…),数到5的倍数的出圈,剩下的继续报数,求最后出圈的编号。

(考点:

数组、循环、约瑟夫环算法)

#include

voidmain()

{inta[26],j,n,count;

for(j=1;j<=25;j++)a[j]=j;//编号

j=1;

count=0;

①n=0;

do

{if(a[j]!

=0)//条件为真表示在圈内

{n++;//n是报数器

if(n%5==0)//条件为真表示报到5的倍数,以下作出圈处理

{②a[j]=0;//a[j]退出圈子

if(count==24)printf("%d\n",j);//如果之前已经退出24个人,则当前的j为最后出圈的编号

count++;//计退出圈的人数

}

}

j++;

if(j>25)j=1;//处理成循环,当报完最后一个人后,又从第一个人开始报数

}

while(③count<25);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1