一、改错题
【分析】:对于改错题的程序中的错误一般可分为两类,一类是语法错误,程序中的语句不符合C语言的语法,拼写错误,这类的错误可通过调试程序改正。另一类是逻辑错误,程序调试已通过,但运行结果不正确,这类错误的修改必须要看懂和理解程序。
#include
#define N 50
void sum(int n,int *pa)
/*属第一类错误。若声明为void类型,则该函数没有返回值,但程序要求返回前n的和,所以类型声明不正确,应改为: int 或去掉*/
{ int count, total,temp;
*pa=3;*++pa=2;
total=5; count=2;
while(count++
{ temp=*(pa-1)**pa;
if(temp<10)
{ total+=temp; *(++pa)=temp;
}
else
{*++pa=temp/10;
total+=*pa;
if(count
/*属第二类错误。若乘积为两位数,已把其十位数字作为数列的后续项,但若数列的个数没有超过n时,将该乘积个位数字作为数列的后续项。*++pa 与*pa++不同,此处应为: *++pa */
}
}
return total;
}
main()
{ int tol,n,i,num[n];
/*属第一类错误。数组的声明不正确,数组的下标必须为常量或常量标识符。应改为:num[N] 或 num[50] */
do
{ printf("Input n=?(2
scanf("%d",&n);
}while(n<=2||n>=50);
tol=sum(N,num);
/*属第二类错误。本题要求生成数列的前n(n<50)项,而N是常量。应改为:sum(n,num) */
for(i=0;i
printf((i+1)%5?"%5d":"%5d\n",num[i]);
printf("\n");
printf("%d",tol);
}
二、编程题
【分析】:编写程序时,通过按照题目的要求编程。main函数实现对文件的操作和数据的输入。
#include
#define N 100
int chang(char a[],int b[],int *n)
{int sign,k=-1,i;
*n=0;
if(a[0]= ='-') sign=1;
else sign=0;
for(i=0;a[i]!='\0';i++)
if(a[i]>='0'&&a[i]<='9')
b[++k]=a[i]-'0';
*n=k;
return sign;}
main()
{char str[N];
int num[N],i,j,sign,n;
FILE *fp;
if((fp=fopen("myf2.out","w"))= =NULL)
{printf("can't open the file!");
exit(0);}
for(j=0;j<2;j++)
{gets(str);
sign=chang(str,num,&n);
fprintf(fp,"sign=%d,",sign);
fprintf(fp,"b=(");
for(i=0;i<=n;i++)
fprintf(fp,"%2d",num[i]);
fprintf(fp,")\n");
}
fclose(fp);
}
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|