改错题
- 格式:doc
- 大小:44.50 KB
- 文档页数:10
改错题
1、下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。
例如输入8名学生的成绩:
85 65.5 69 95.5 87 55 62.5 75
则高于平均分的学生人数为4(平均分为74.312500)。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <conio.h>
#define N 20
int fun(float *s, int n,float *aver)
{
/**************found**********************/
int ave ,t=0;
int count=0,k,i;
for(k=0;k<n;k++)
t+=s[k];
ave=t/n;
for(i=0;i<n;i++)
/***************found***********************/
if(s[i]<ave)
count++;
/************found***********************/
aver=ave;
return count;
}
main()
{
float s[30],aver;
int m,i;
clrscr();
printf("\nPlease enter m: ");
scanf("%d",&m);
printf("\nPlease enter %d mark :\n",m);
for(i=0;i<m;i++)
scanf("%f",s+i);
printf("\nThe number of
students :%d\n",fun(s,m,&aver));
printf("Ave=%f\n",aver);
}
(1)错误:int ave ,t=0;
正确:float ave ,t=0.0;
(2)错误:if(s[i]<ave)
正确:if(s[i]>ave)
(3)错误:aver=ave;
正确:*aver=ave;
【解析】错误1:ave和t分别用来存放成绩的平均值和总分,应为实型数。
错误2:根据题意,找出高于平均分的数,所以此处的关系运算符应为">"
错误3:aver是指针,而ave是一个数,不能将一个数赋值给一个指针,而要用符号'*'。
2、下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。
K的值由主函数传入,若k的值为500,则函数的值为2925。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include <conio.h>
int fun(int k)
{
int m=0,mc=0, j;
/**********************found***********************/
while(k>=2)&&(mc<6)
{
/**********************found***********************/
if((k%7=0)||(k%11=0))
{
/**********************found***********************/ m=k;
mc++;
}
k--;
}
return m;
}
main()
{
clrscr();
printf("%d\n ",fun(500));
}
(1)错误:while(k>=2)&&(mc<6)
正确:while((k>=2)&&(mc<6))
(2)错误:if((k%7=0)||(k%11=0))
正确:if((k%7==0)||(k%11= =0))
(3)错误:m=k;
正确:m=m+k;
【解析】错误1:C语言规定while语句后的表达式两侧必须要有圆括号。
错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。
错误3:根据题意,将满足条件的数求累加和。
3、下列给定程序中,函数fun()的作用是:将字符串tt中的小写字母都改为对应的大写字母,其他字符不变。
例如,若输入"edS,dAd",则输出"EDS,DAD"。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <string.h>
#include <conio.h>
/*************found***********************/
char fun(char tt[])
{
int i;
for(i=0;tt[i];i++)
{
/**********************found***************** ******/
if((tt[i]>='A')&&(tt[i]<= 'Z'))
tt[i]-=32;
}
return(tt);
}
main()
{
int i;
char tt[81];
clrscr();
printf("\nPlease enter a string: ");
gets(tt);
printf("\nThe result string is:
\n%s",fun(tt));
}
(1)错误:char fun(char tt[])
正确:char *fun(char tt[])
(2)错误:if((tt[i]>='A')&&(tt[i]<= 'Z'))
正确:if((tt[i]>='a')&&(tt[i]<= 'z'))
【解析】错误1:函数的返回值是字符串的首地址,是指针类型,所以在函数名前要加'*'号。
错误2:题目要求将小写字母改为大写字母,所以if语句的判断条件是小写字母。
4、下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。
例如,当s中的数为4576235时,t中的数为4725。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include <conio.h>
/**********************found***********************/
int fun(long s,long *t)
{
long s1=10;
*t=s%10;
while(s>0)
{
/**********************found***********************/
s=s%100;
*t=s%10*s1+*t;
s1=s1*10;
}
}
main()
{
long s, t;
clrscr();
printf("\nPlease enter s: ");
scanf("%ld",&s);
fun(s,&t);
printf("The result is: %ld\n ",t);
}
答案及评析:
(1)错误:int fun(long s,long *t)
正确:void fun(long s,long *t)
(2)错误:s=s%100;
正确:s=s/100;
【解析】错误1:函数由指针来完成参数的传递,所以没有返回值,应定义函数的类型为void。
错误2:此处要注意特殊运算符号"%"--取余和"/"--整除的区别。
将一个数整除100则可得到由其百位数以上的数组成的新数字,将一个数整除100取余则可得到由十位数和个位数组成的新数。