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;i8分
{
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;i3分
{
sum=sum+score[i];
}
*pAver=sum/n;
for(i=0;i4分
{
if(score[i]>*pAver)count++ ;
}
return(count);//1分
}