秋季理工A卷答案.docx

上传人:b****4 文档编号:11700965 上传时间:2023-03-30 格式:DOCX 页数:16 大小:23.98KB
下载 相关 举报
秋季理工A卷答案.docx_第1页
第1页 / 共16页
秋季理工A卷答案.docx_第2页
第2页 / 共16页
秋季理工A卷答案.docx_第3页
第3页 / 共16页
秋季理工A卷答案.docx_第4页
第4页 / 共16页
秋季理工A卷答案.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

秋季理工A卷答案.docx

《秋季理工A卷答案.docx》由会员分享,可在线阅读,更多相关《秋季理工A卷答案.docx(16页珍藏版)》请在冰豆网上搜索。

秋季理工A卷答案.docx

秋季理工A卷答案

班号

姓名

哈工大(威海)2005/2006年秋季学期

C语言试题

题号

创新实践分

卷面总分

分数

参考答案与评分标准

一、单项选择题:

(10分,评分标准:

每题2分,正确得2分,错误扣2分)

1.以下能对外部的二维数组a进行正确初始化的语句是:

A)inta[2][]={{1,0,1},{5,2,3}};

B)inta[][3]={{1,2,1},{5,2,3}};

C)inta[2][4]={{1,2,1},{5,2},{6}};

D)inta[][3]={{1,0,2},{},{2,3}};

2.若intx;且有下面的程序片断,则输出结果为:

for(x=3;x<6;x++)

{

printf((x%2)?

"**%d":

"##%d\n",x);

}

A)**3B)##3C)##3D)**3##4

##4**4**4##5**5

**5##5

3.在if(x)语句中的x与下面条件表达式等价的是:

A)x!

=0B)x==1C)x!

=1D)x==0

4.已知

structsk

{

inta;

floatb;

}data,*p;

若有p=&data则对data中成员b的正确引用是________。

A)(*p).dataB)(*p).b

C)p->data.bD)p.data.b

5.若二维数组a有m列,则在a[i][j]之前的元素个数为:

A)j*m+iB)i*m+jC)i*m+j-1D)i*m+j+1

二、写出下列程序的运行结果。

(10分,评分标准:

正确得2分,完全错误扣2分,如果部分错误则扣1分,具体见各题的详细标准)

1.

#include

main()

{

inti,j,m;

inta[2][5]={1,20,32,14,5,62,87,38,9,10};

m=a[0][0];

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

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

if(m

printf(“m=%d\n”,m);

}

运行结果是:

m=87

评分标准:

正确得2分,完全错误扣2分,如果部分错误则扣1分。

本题中如果运行结果为87,漏掉了m=,则扣1分。

2.

#include

main()

{

intx,y;

scanf("%2d%*2s%2d",&x,&y);

printf("%d",x*y);

}

程序执行时从键盘输入:

12341234↙

运行结果是:

144

评分标准:

正确得2分,完全错误扣2分。

3.

#include

voidFunc(intb[])

{

intj;

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

{

b[j]=j+1;

}

}

main()

{

staticinta[4]={5,6,7,8},i;

Func(a);

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

{

printf("%d\n",a[i]);

}

}

运行结果是:

1

2

3

4

评分标准:

正确得2分,完全错误扣2分,如果部分错误则扣1分。

本题中如果运行结果为1234,没有换行,则扣1分。

4.

structdate

{

intyear;

intmonth;

intday;

};

voidfunc(structdate*p)

{

p->year=2000;

p->month=5;

p->day=22;

}

main()

{

structdated;

d.year=1999;

d.month=4;

d.day=23;

printf(“%d,%d,%d\n”,

d.year,d.month,d.day);

func(&d);

printf(“%d,%d,%d\n”,

d.year,d.month,d.day);

}

运行结果是:

1999,4,23

2000,5,22

评分标准:

正确得2分,完全错误扣2分,如果部分错误则扣1分。

本题中如果运行结果中1999,4,23输出正确、2000,5,22输出不正确,或者2000,5,22输出正确、1999,4,23输出不正确,则扣1分。

5.

#include

voidFunc(void);

main()

{

inti;

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

{

Func();

}

}

voidFunc(void)

{

inttimes=1;

printf("Func()wascalled%dtime(s).\n",

times++);

}

运行结果是:

Func()wascalled1time(s).

Func()wascalled1time(s).

评分标准:

正确得2分,完全错误扣2分,如果部分错误则扣1分。

本题中如果运行结果中第1行输出正确、第2行输出不正确,或者第2行输出正确、第1行输出不正确,则扣1分。

三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。

(8分,评分标准:

每空2分,正确得2分,错误扣2分)

1.下面这个程序用于读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,程序结束运行。

#include

main()

{

inti,n;

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

{

printf("Pleaseentern:

");

scanf("%d",&n);

if(n<=0)break;

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

}

printf("Programisover!

\n");

}

2.下面函数实现strcmp的功能,将两个字符串s和t进行比较,然后将两个字符串中第一个不相同字符的ASCII码值之差作为函数值返回。

intMyStrcmp(chars[],chart[])

{

inti;

for(i=0;s[i]==t[i];i++)

{

if(s[i]==‘\0’)return0;

}

return(s[i]-t[i]);

}

六、在下面给出的4个程序中,有15处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。

(30分,评分标准:

实际错误有16个,只要找对15个即可,多找不加分。

每找对1个错误,加1分,每修改正确1个错误,再加1分。

1.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。

#include

#include

#defineARR_SIZE=80;

//错误,应该为#defineARR_SIZE80

main()

{

charstr[ARR_SIZE];

intlen,i;

intletter,digit,space,other;

//错误,应该为intletter=0,digit=0,space=0,other=0;

printf("请输入一个字符串:

");

gets(str);

len=strlen(str);

for(i=0;i

{

if(a=

//错误,应该为if(str[i]>=’a’&&str[i]<=’z’||str[i]>=’A’&&str[i]<=’Z’)

{

++letter;

}

elseif('0'=

//错误,应该为elseif(str[i]>=’0’&&str[i]<=’9’)

{

++digit;

}

elseif(str[i]='')

//错误,应该为elseif(str[i]=='')

{

++space;

}

else

++other;

}

printf("英文字符数:

%d\n",letter);

printf("数字字符数:

%d\n",digit);

printf("空格数:

%d\n",space);

printf("其他字符数:

%d\n",other);

}

2.任意输入一个字符串,在星期表中查找该字符串,若找到,则打印”已找到”,否则打印”没找到”。

#include

main()

{

inti;

intfindFlag;//错误,应该为intfindFlag=0;

charx[10];

charweekDay[7][10]={"Sunday",

"Monday",

"Tuesday",

"Wednesday",

"Thursday",

"Friday",

"Saturday"};

printf("请输入一个字符串:

");

scanf("%s",x);

for(i=0;i<7&&!

findFlag;i++)

{

if(x=weekDay[i])

//错误,应该为if(strcmp(x,weekDay[i])==0)

{

findFlag=1;

}

}

if(!

findFlag)//错误,应该为if(findFlag)

{

printf("找到\n");

}

else

{

printf("没找到!

\n");

}

}

3.爱因斯坦数学题。

爱因斯坦曾出过这样一道数学题:

有一条长阶梯,若每步跨2阶,则最后剩下1阶,若每步跨3阶,则最后剩下2阶,若每步跨5阶,则最后剩下4阶,若每步跨6阶,则最后剩下5阶,只有每步跨7阶,最后才正好1阶不剩。

请问,这条阶梯共有多少阶?

#include

main()

{

intx,find=0;//错误,应该为intx=1,find=0;

if(!

find)//错误应该为while(!

find)

{

if(x%2==1

&&x%3==2

&&x%5==4

&&x%6==5

&&x%7==0)

{

//错误,缺少find=1;

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

x++;//错误,x++;应该放到if语句}的外面

}

}

}

4.下面函数Squeez()的功能是删除字符串s中所出现的与变量c相同的字符。

voidSqueeze(chars[],charc);

//错误,应该为voidSqueeze(chars[],charc)

{

inti,j;

for(i=0;s[i]!

='\0';i++)

//错误,应该为for(i=j=0;s[i]!

='\0';i++)

{

if(s[i]!

='c')//错误,应改为if(s[i]!

=c)

{

s[i]=s[j];//错误,应该为s[j]=s[i];

j++;

}

//错误,应该为s[j]='\0';

}

}

七、编程(42分,具体评分标准见各题,总的原则:

每出现一处简单语法错误就扣1分)

1.利用

前100项之积,编程计算π的值。

(15分)

参考答案1:

#include

main()

{

floatterm,result=1;

intn;//以上语句:

3分

for(n=2;n<=100;n=n+2)//核心语句:

10分

{

term=(float)(n*n)/((n-1)*(n+1));

result=result*term;

}

printf("result=%f\n",2*result);//2分

}

参考答案2:

#include

main()

{

floatresult=1,term;

intn;//以上语句:

3分

for(n=1;n<=50;n++)//核心语句:

10分

{

term=(float)(2*n*2*n)/((2*n-1)*(2*n+1));

result=result*term;

}

printf("result=%f\n",2*result);//2分

}

2.编写一个函数Inverse,实现将字符数组中的字符串逆序存放的功能。

(15分)

参考答案1:

#include

#include

#defineARR_SIZE80

voidInverse(charstr[],charptr[]);

main()

{

chara[ARR_SIZE],b[ARR_SIZE];

printf("Pleaseenterastring:

");//以上1分

gets(a);//1分

Inverse(a,b);//2分

printf("Theinversedstringis:

");

puts(b);//1分

}

voidInverse(charstr[],charptr[])

{

inti=0,j;//1分

j=strlen(str)–1;//1分

while(str[i]!

='\0')//核心语句:

7分

{

ptr[j]=str[i];

i++;

j--;

}

ptr[i]='\0';//1分

}

参考答案2:

#include

#include

#defineARR_SIZE80

voidInverse(charstr[]);

main()

{

chara[ARR_SIZE];//以上1分

printf("Pleaseenterastring:

");

gets(a);//1分

Inverse(a);//2分

printf("Theinversedstringis:

");

puts(a);//1分

}

voidInverse(charstr[])

{

intlen,i,j;

chartemp;//以上1分

len=strlen(str);//1分

for(i=0,j=len-1;i

8分

{

temp=str[i];

str[i]=str[j];

str[j]=temp;

}

}

3.从键盘任意输入某班10个学生的成绩,计算并打印平均分并统计成绩在平均分以上的学生人数,要求用一维数组和指针变量做函数参数编程实现计算平均分并统计成绩在平均分以上的学生人数,然后在主函数中打印这些统计结果,不能使用全局变量编程。

(12分)

#include

intFindAver(intscore[],intn,int*pAver);

main()

{

intscore[10],aver,i,num;

printf("Pleaseenterthescore:

\n");

for(i=0;i<10;i++)//1分

{

scanf("%d",&score[i]);

}

num=FindAver(score,10,&aver);//2分

printf("aver=%d,num=%d\n",aver,num);//1分

}

intFindAver(intscore[],intn,int*pAver)

{

inti;

intsum=0,count=0;

for(i=0;i

3分

{

sum=sum+score[i];

}

*pAver=sum/n;

for(i=0;i

4分

{

if(score[i]>*pAver)count++ ;

}

return(count);//1分

}

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

当前位置:首页 > 人文社科 > 法律资料

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

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