计算机二级 C语言部分.docx

上传人:b****5 文档编号:6378968 上传时间:2023-01-05 格式:DOCX 页数:22 大小:52KB
下载 相关 举报
计算机二级 C语言部分.docx_第1页
第1页 / 共22页
计算机二级 C语言部分.docx_第2页
第2页 / 共22页
计算机二级 C语言部分.docx_第3页
第3页 / 共22页
计算机二级 C语言部分.docx_第4页
第4页 / 共22页
计算机二级 C语言部分.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

计算机二级 C语言部分.docx

《计算机二级 C语言部分.docx》由会员分享,可在线阅读,更多相关《计算机二级 C语言部分.docx(22页珍藏版)》请在冰豆网上搜索。

计算机二级 C语言部分.docx

计算机二级C语言部分

C语言部分(2010秋)

一、选择题(用答题卡答题,答案依次填在21~30答题号内,共10分)

21.以下关于C源程序的叙述中,正确的是(21)。

A.注释只能出现在程序的开始位置或语句后面

B.一行中不能写多条语句

C.一条语句可以分写在多行中

D.一个源程序只能保存在一个文件中

22.C源程序中的命令#include与#define是在(22)阶段被处理的。

A.预处理B.编译C.连接D.执行

23.以下语句中有语法错误的是(23)。

A.printf("%d",0xAB);B.printf("%f",3.45E2.5);

C.printf("%d",037);D.printf("%c",'\\');

24.已有声明“intx=5,y;floatz=2;”,以下表达式中语法正确的是(24)。

A.y=x%zB.x>0?

y=x:

y=-x

C.y=x/2=zD.y=x=z/2

25.已知字母A的ASCII码是65,字母a的ASCII码是97,变量c中存储了一个大写字母的编码。

若要求将c中大写字母编码转换成对应小写字母编码,则以下表达式中不能实现该功能的是(25)。

A.c=tolower(c)B.c=c+32

C.c=c-'A'+'a'D.c=(c+'A')%26-'a'

26.一元二次方程ax2+bx+c=0有两个相异实根的条件是a≠0且b2-4ac>0,以下选项中能正确表示该条件的C语言表达式是(26)。

A.a!

=0,b*b-4*a*c>0B.a!

=0||b*b-4*a*c>0

C.a&&b*b-4*a*c>0D.!

a&&b*b-4*a*c>0

27.以下关于break和continue语句的叙述中正确的是(27)。

A.break和continue语句都可以出现在switch语句中

B.break和continue语句都可以出现在循环语句的循环体中

C.在循环语句和switch语句之外允许出现break和continue语句

D.执行循环语句中的break或continue语句都将立即终止循环

28.若有一函数定义为“intf(intx,int*y){returnx/*y;}”,声明该函数的正确形式是(28)。

A.voidf(int,int);B.int*f(int,int*);

C.intf(int*,int*)D.intf(int,int*)

29.已知有声明chara[]="program",*p=a+1;”,则执行以下语句不会输出字符a的是(29)。

A.putchar(*p+4);B.putchar(*(p+4));

C.putchar(a[sizeof(a)-3]);D.putchar(*(a+5));

30.已有定义和声明:

structstudent

{intno;

charname[20];

struct{intyear,month,day;}birth;

}s;

若要求将日期“1989年11月12日”保存到变量s的birth成员中,则能实现这一功能的程序段是

(30)。

A.year=1989;month=11;day=12;

B.s.year=1989;s.month=11;s.day=12;

C.birth.year=1989;birth.month=11;birth.day=12

D.s.birth.year=1989;s.birth.month=11;s.birth.day=12;

二、填空题(将答案填写在答题纸的相应题号内,每个答案只占一行,共30分)

基本概念

1.若有声明“doublen;”则数学公式“

n(4n2-1)”对应的C语言表达式的正确形式是

(1)。

2.已知有声明“charch;inta;”执行语句“scanf("%c%d",&ch,&a);”时如果从键盘输入的数据是“123”,则变量a得到的值是

(2)。

3.若有声明“inta=0,b=1,c=2;”,执行语句“if(a>0&&++b>0)c++;elsec--;”后,变量a、b、c的值分别是(3)。

4.若有以下宏定义:

#defineM(a,b)-a/b

则执行语句“printf("%d",M(4+3,2+1));”后输出结果为(4)。

5.声明“FILE*p;”中的类型标识符“FILE”是在头文件(5)中定义的。

阅读程序

6.以下程序运行时输出到屏幕的结果为(6)。

#include

enum{A,B,C,D}x;

voidmain()

{chars[]="your";

for(x=B;x<=D;x++)

putchar(s[x]);

}

7.以下程序运行时输出到屏幕的结果为(7)。

#include

voidmain()

{ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i,j;

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

{j=s[i];

c[j]++;

}

for(i=1;i<5;i++)printf("%d",c[i]);

}

8.以下程序运行时输出到屏幕的结果为(8)。

#include

intfun(intx)

{staticintc,y;

if(c==0)y=1;

elsey=y+x;

c++;

returny;

}

voidmain()

{inti;

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

printf("%d",fun

(2));

}

9.以下程序运行时输出到屏幕的结果中第一行为(9),第二行为(10)。

#include

voidfun(int*a,intb)

{while(b>0)

{*a+=b;

b--;

}

}

voidmain()

{intx=0,y=3;

fun(&x,y);

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

}

10.以下程序运行时输出到屏幕的结果为(11)。

#include

intf(intx)

{if(x==0||x==1)return3;

returnx*x-f(x-2);

}

voidmain()

{printf("%d\n",f(3));}

11.以下程序运行时输出到屏幕的结果中第一行为(12),第二行为(13)。

#include

#include

voidcompute(char*s)

{intt,r;

charop;

for(r=0;isdigit(*s);s++)/*isdigit(*s)判断s指向的字符是否为数字字符*/

r=r*10+*s-'0';

while(*s)

{op=*s++;

for(t=0;isdigit(*s);s++)

t=t*10+*s-'0';

switch(op)

{case'+':

r=r+t;break;

case'-':

r=r-t;break;

case'*':

r=r*t;break;

case'/':

if(t)r=r/t;else{puts("devideerror");return;}

}

}

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

}

voidmain()

{compute("12+6-19+2");

compute("12/6*19/2");

}

12.以下程序运行时输出到屏幕的结果中第一行为(14),第二行为(15),第三行为(16)。

算法提示:

将Fibonacci数列(1,1,2,3,5,8,13,…)前6个数填入a数组。

#include

#defineN3

voidmain()

{inti,j,a[N][N]={1},f1=0,f2=1,temp;

for(i=1;i

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

{if(j<=i)

{a[i][j]=f1+f2;

temp=f1;

f1=f2;

f2=f1+temp;

}

}

for(i=0;i

{for(j=0;j

printf("%5d",a[i][j]);

printf("\n");

}

}

13.以下程序运行时输出屏幕的结果中第一行为(17),第二行为(18)。

#include

typedefstruct

{intdm;/*产品代码*/

char*mc;/*产品代码*/

longje;/*金额*/

}PRO;

voidmain()

{inti,j,k,n=3;

PROsell[10]={{101,"apple",100},{301,"orange",100},

{101,"apple",200}},xy;

for(i=0;i

{k=i;

for(j=i+1;j

if(sell[k].dm

&&sell[k].je

k=j;

if(k!

=i)

{xy=sell[i];sell[i]=sell[k];sell[k]=xy;}

}

for(i=0;i

printf("%15d%10s%5d\n",sell[i].dm,sell[i].mc,sell[i].je);

}

完善程序

14.以下程序中函数floatfun(intm)的功能是计算s=s1+s2+s3+s4的值,其中s1、s2、s3、s4用下列公式计算。

请完善程序以达到要求的功能。

s1=1+

+

+

+…+

s2=1+

+

+

+…+

s3=1+

+

+

+…+

s4=1+

+

+

+…+

算法提示:

s=1+1+1+1+

+

+

+

+…+

+

+

+

#include

floatfun(intm)

{inti,n;

floats=0,t;

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

{t=(19);

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

{t=(20);

s+=t;

}

}

returns;

}

main()

{printf("%f",fun(50));}

15.以下程序将同时出现在数组a和b中的数据复制到数组c中。

例如,如果数组a中的数据是{8,5,7,1,6,4,9},数组b中的数据是{2,9,3,7,4,5,10},则数组c中的结果数据为{5,7,4,9}。

以下程序中,in函数判断x中存储的整数是否在a指向的数组前n个元素中出现,如果出现则函数返回1,否则返回0。

请完善程序以达到要求的功能。

#include

intin(inta[],intn,intx)

{inti;

for(i=0;i

if((21))return1;

return0;

}

voidmain()

{inta[7]={8,5,7,1,6,4,9},b[7]={2,9,3,7,4,5,10},c[7]={0},i,j=0;

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

if((22))c[j++]=a[i];

for(i=0;(23);i++)

printf("%d\t",c[i]);

}

16.以下程序根据输入的年份及该年中的第几天,计算并输出这一天的“年/月/日”。

例如,若输入“2010,100”则输出“2010/4/10(表示2010年的第100天是4月10日)”。

试完善程序以达到要求的功能。

提示:

能被4整除并且不能被100整除的年份是闰年,能被400整除的年份也是闰年,其他年份是平年。

#include

intleap(intyear)

{inty;

y=year%4==0&&year%100!

=0||year%400==0;

returny;

}

voidmonth_day(intyear,intyearday,int*month,int*day)

{intk,p;

inttab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}};

p=leap(year);

for(k=1;yearday>(24);k++)

yearday=yearday-tab[p][k];

*month=k;

*day=(25);

}

voidmain()

{intyear,days,month,day;

printf("Inputyearanddays!

\n");

scanf("%d,%d",&year,&days);

if(leap(year)==1&&days<=366||leap(year)==0&&days<=365)

{month_day(year,days,(26));

printf("\n%d/%d/%d",year,month,day);

}

elseputs("daysiswrong!

");

}

17.本题所列Bind函数的功能是实现两个多项式的合并操作,试完善Bind函数以实现要求的功能。

算法提示:

Bind函数所在的程序采用单向链表存储多项式,多项式的每一项分别存储在链表的一个节点中。

节点的数据结构如下:

typedefstructnode

{inta;/*系数*/

intn;/*指数*/

structnode*next;

}NODE;

函数NODE*Bind(NODE*h1,NODE*h2)的形式参数h1和h2分别是两个按“指数”值降序排列的有序单向链表的头指针(简称这两个链表为h1链表和h2链表),h3是一个新建的按“指数”值降序排列的有序单向链表头指针(简称h3链表)。

Bind函数完成h1链表与h2链表中分别存储的两个多项式的合并操作,合并后的多项式保存到h3链表中,函数返回h3链表头指针的值。

算法提示:

若h1指向节点与h2指向节点的“指数”值相同,则将这两个节点的“系数”值相加并取两节点中任一个节点的“指数”值,结果保存到一个新申请的节点中;如果新节点的“系数”值不为零则将新节点添加到h3链表的尾部,否则放弃新节点;分别修改h1和h2使其指向所在链表的下一个节点。

若h1指向节点与h2指向节点的“指数”值不相同,则将其中“指数”值较大节点的“系数”和“指数”值复制到一个新申请的节点中,将新节点添加到h3链表尾部,修改被复制节点的链表头指针使其指向下一个节点。

重复上述操作直到处理完h1链表和h2链表中全部节点为止。

例如:

h1链表中存储的多项式为:

-2x5+3x4+2x2+3,h2链表中存储的多项式为:

2x5+5x4+4x+7,

保存到h3链表中的多项式为:

8x4+2x2+4x+10。

#include

NODE*Bind(NODE*h1,NODE*h2)

{NODE*h3=NULL,*p1,*p2;

while((27))

{p1=(NODE*)malloc(sizeof(NODE));

if((28)&&h1&&h2)

{p1->a=h1->a+h2->a;

p1->n=h1->n;

if(p1->a==0){free(p1);p1=0;}

h1=h1->next;

h2=h2->next;

}

else

{if(h1->n>h2->n||h1&&h2==0)

{p1->a=h1->a;

p1->n=h1->n;

h1=h1->next;

}

if(h1->nn||h2&&h1==0)

{p1->a=h2->a;

p1->n=h2->n;

h2=h2->next;

}

}

if(p1)

if(h3==NULL)h3=p2=p1;

else

{(29)=p1;

p2=p1;

}

}

if((30))p2->next=NULL;

returnh3;

}

C语言部分(2011春)

一、选择题(用答题卡答题,答案依次填在21~30答题号内,共10分)

21.以下关于预处理命令的叙述中错误的是(21)。

A.预处理命令由预处理程序解释

B.程序中的预处理命令是以#开始的

C.若在程序的一行中出现多条预处理命令,这些命令都是有效的

D.预处理命令既可以出现在函数定义的外部,也可以出现在函数体内部

22.有如下程序段:

charp1[80]="NanJing",p2[20]="Young",*p3="Olympic";

strcpy(p1,strcat(p2,p3));

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

执行该程序段后的输出是(22)。

A.NanJingYoungOlympicB.YoungOlympic

C.OlympicD.NanJing

23.已知有声明"intx[2][3]={0},*p=x[0];",以下表达式中有语法错误的是(23)。

A.x[0]=1B.p[0]=1C.*p=1D.x[0][0]=1

24.程序中已有预处理命令"#include"和声明"charx=4,y,*z",以下表达式中能通过编译且无警告信息的是(24)。

A.y=sqrt(x)%2B.y="x"C.y='x'+1D.y=&'x'

25.已知有定义和声明:

struct

{intx;}a[4]={{1},{1},{4},{6}},b;

以下语句中语法正确的是(25)。

A.if(a[0]==a[1])b=a[0];B.if(a[0].x==a[1].x)b=a[0];

C.if(a[0]->x==a[1]->x)b=a[0];D.if(!

(a[0]-a[1]))b=a[0];

26.已知有声明"intx,a=3,b=2;",则执行赋值语句"x=a>b++?

a++:

b++;"后,变量x、a、b的值分别为(26)。

A.343B.334C.333D.434

27.下列符号中可用作变量名的是(27)。

A.CaseB.a-bC.$cdD.2ab

28.执行以下程序后的结果是(28)。

#include

voidmain()

{intx=3;

do

{printf("%d\t",x=x-3);

}while(!

x);

}

A.输出一个数:

0B.输出一个数:

3

C.输出2个数:

0和-3D.无限循环,反复输出数

29.以下关于C语言函数的叙述中,正确的是(29)。

A.在一个函数体中可以定义另一个函数,也可以调用其他函数

B.在一个函数体中可以调用另一个函数,但不能定义其他函数

C.在一个函数体中不可调用另一个函数,也不能定义其他函数

D.在一个函数体中可以定义另一个函数,但不能调用其他函数

30.设有声明"inta=4,b=3,c=5;",以下4个程序段中有3个程序段的执行效果是相同的,另一个执行效果不同的是(30)。

A.if(a>b)c=a,a=b,b=c;B.if(a>b){c=a,a=b,b=c;}

C.if(a>b)c=a;a=b;b=c;D.if(a>b){c=a;a=b;b=c;}

二、填空题(将答案填写在答题纸的相应题号内,每个答案只占一行,共30分)

基本概念

1.除goto语句外,在循环结构中执行

(1)语句可提前结束本次循环直接进入下一次循环。

2.若有程序段"inta[10],*p=a,*q;q=&a[5];",则表达式q-p的值是

(2)。

3.执行语句序列"inta,b;a=b=4;a+=b%3;"后,变量a、b的值分别是(3)。

4.执行程序段"intx=0x6c;printf("x=%x\n",x);"后的输出结果为(4)。

5.使用TURBO系统编译C语言源程序后生成的文件名后缀是(5)。

阅读程序

6.以下程序运行时输出到屏幕的结果是(6)。

#include

#defineL10

#defineCL+L

voidmain()

{intArea;

Area=C*L;

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

}

7.以下程序运行时输出到屏幕的结果是(7)。

#include

enum{A,B,C=4}i;

voidmain()

{intk=0;

for(i=B;i

printf("%d",k);

}

8.以下程序运行时输出到屏幕的结果是(8)。

#include

voidfun(inta)

{printf("%d",a%10);

if(((a=a/10)!

=0))fun(a);

}

voidmain()

{inta=-13;

if(a<0)

{printf("-");

a=-a;

}

fun(a);

}

9.以下程序运行时若输入“201010”,则输出到屏幕的结果中第一行是(9),第三行是

(10)。

#include

char*fun(intn)

{staticchars[20];

staticintc;

chart[10]={0},i=0,j,k;

while(n>0)

t[i++]=n%10+'0',n=n/10;

puts(t);

for(j=0;j

k=t[j],t[j]=t[i-1-j],t[i-1-j]=k;

strcat(s,t);

if(c<1){strcat(s,"/");c++;}

elsestrcat(s,"\0");

returns;

}

voidmain()

{inti,m;char*p;

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

{scanf("%d",&m);

p=fun(m);

}

puts(p);

}

10.以下程序运行时输出到屏幕的结果中第一行是(11),第二行是(1

展开阅读全文
相关搜索
资源标签

当前位置:首页 > 工程科技 > 材料科学

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

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