《c语言程序改错题.pdf》由会员分享,可在线阅读,更多相关《c语言程序改错题.pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-第 1 题 【程序改错】功能:先将在字符串 s 中的字符按逆序存放到 t 串中,然后把 s 中的 字符按正序连接到 t 串的后面。例如:当 s 中的字符串为:ABCDE时,则 t 中的字符串应为:EDCBAABCDE。-*/#include#include#include void fun(char*s,char*t)/*FOUND*/int i;sl=strlen(s);for(i=0;isl;i+)/*FOUND*/ti=ssl-i;for(i=0;isl;i+)tsl+i=si;/*FOUND*/t2*sl=0;main()char s100,t100;printf(nPlease e
2、nter string s:);scanf(%s,s);fun(s,t);printf(The result is:%sn,t);答案:1).int i,sl;2).ti=ssl-i-1;3).t2*sl=0;或 t2*sl=0;第 2 题 【程序改错】功能:求出以下分数序列的前 n 项之和。和值通过函数值返回 main 函数。2/1+3/2+5/3+8/5+13/8+21/13 例如:假设 n=5,则应输出:8.391667。-*/#include#include /*FOUND*/fun(int n)-int a,b,c,k;double s;s=0.0;a=2;b=1;for(k=1;k
3、=n;k+)/*FOUND*/s=(double)a/b;c=a;a=a+b;b=c;/*FOUND*/return c;main()int n=5;printf(nThe value of function is:%lfn,fun(n);答案:1).double fun(int n)2).s=s+(double)a/b;或 s+=(double)a/b;或 s+=a/(double)b;或 s=s+a/(double)b;3).return s;第 3 题 【程序改错】功能:读入一个整数 m(5m20),函数 getarr 调用函数 rnd 获 得 m 个随机整数,函数 sortpb 将这
4、m 个随机整数从小到大排序。例如:假设输入整数 7,则应输出:3 10 17 28 32 36 47。-*/#include conio.h#include sortpb(int n,int*a)/*FOUND*/int i,j,p,t for(j=0;j n-1;j+)p=j;for(i=j+1;i aj)p=i;/*FOUND*/if(p=j)t=aj;-aj=ap;ap=t;double rnd()static t=29,c=217,m=1024,r=0;r=(r*t+c)%m;return(double)r/m);getarr(int n,int*)int i;for(i=1;i=n;
5、i+,*+)*=(int)(50*rnd();putarr(int n,int*z)int i;for(i=1;i ai)p=i;3).if(p!=j)第 4 题【程序改错】-功能:以下程序能求出 1*1+2*2+.+n*n=1000 中满足条件的 最大的 n。-*/-#include#include string.h main()int n,s;/*FOUND*/s=n=0;/*FOUND*/while(s1000)+n;s+=n*n;/*FOUND*/printf(n=%dn,&n-1);答案:1).s=n=0;2).while(s=1000)3).printf(n=%dn,n-1);第
6、5 题 【程序改错】-功能:求出 a 所指数组中最大数和次最大数(规定最大数和次最大 数不在 a0和 a1中),依次和 a0、a1中的数对调。例如:数组中原有的数:7、10、12、0、3、6、9、11、5、8,输出的结果为:12、11、7、0、3、6、9、10、5、8。-*/#include#include#define N 20 void fun(int*a,int n)int k,m1,m2,ma*1,ma*2,t;ma*1=ma*2=-32768;m1=m2=0;for(k=0;k ma*1)ma*2=ma*1;m2=m1;ma*1=ak;m1=k;/*FOUND*/else if(ak
7、ma*1)ma*2=ak;m2=k;-/*FOUND*/t=a0;am1=a0;am1=t;/*FOUND*/t=a1;am2=a1;am2=t;main()int bN=7,10,12,0,3,6,9,11,5,8,n=10,i;for(i=0;in;i+)printf(%d,bi);printf(n);fun(b,n);for(i=0;ima*2)2).t=a0;a0=am1;am1=t;3).t=a1;a1=am2;am2=t;第 6 题 【程序改错】-功能:读入一个整数 k(2k10000),打印它的所有质因子即 所有为素数的因子。例如:假设输入整数:2310,则应输出:2、3、5、7
8、、11。请改正程序中的语法错误,使程序能得出正确的结果。-*/#include conio.h#include /*FOUND*/isPrime(integer n)int i,m;m=1;for(i=2;i n;i+)/*FOUND*/if(n%i)m=0;break;-/*FOUND*/return n;main()int j,k;printf(nPlease enter an integer number between 2 and 10000:);scanf(%d,&k);printf(nnThe prime factor(s)of%d is(are):,k);for(j=2;j=k;
9、j+)if(!(k%j)&(IsPrime(j)printf(n%4d,j);printf(n);答案:1).IsPrime(int n)2).if(!(n%i)3).return m;第 7 题 【程序改错】-功能:为一维数组输入 10 个整数;将其中最小的数与第一个数 对换,将最大的数与最后一个数对换,输出数组元素。-*/#include main()int a10;void input();void output();void ma*_min();input(a,10);ma*_min(a,10);output(a,10);void input(int*arr,int n)int*p,i
10、;p=arr;printf(please enter 10 integers:n);for(i=0;in;i+)/*FOUND*/scanf(%d,p);void ma*_min(int*arr,int n)-int*min,*ma*,*p,t;min=ma*=arr;for(p=arr+1;parr+n;p+)/*FOUND*/if(*p*ma*)ma*=p;else if(*p*min)min=p;t=*arr;*arr=*min;*min=t;/*FOUND*/if(ma*=arr)ma*=min;t=*(arr+n-1);*(arr+n-1)=*ma*;*ma*=t;void outp
11、ut(int*arr,int n)int*p,i;p=arr;printf(The changed array is:n);/*FOUND*/while(i=0;i*ma*)或 if(*ma*p)3).if(ma*=arr)4).for(i=0;ii;i+)或 for(p=arr;parr+n;)或 for(i=0;i=i;i+)或 for(p=arr;p=p;)第 8 题 【程序改错】-功能:求出在字符串中最后一次出现的子字符串的地址,通过函 数值返回,在主函数中输出从此地址开场的字符串;假设未 找到,则函数值为 NULL。例如:当字符串中的内容为:abcdabfabcd*,t 中的内容为:
12、ab时,输出结果应是:abcd*。当字符串中的内容为:abcdabfabcd*,t 中的内容为:abd时,则程序输出 未找到信息:not found!。-*/#include -#include#include char*fun(char*s,char*t)char*p,*r,*a;/*FOUND*/a=NULL;while(*s)p=s;r=t;while(*r)/*FOUND*/if(r=p)r+;p+;else break;/*FOUND*/if(*r=0)a=s;s+;return a;main()char s100,t100,*p;printf(nPlease enter strin
13、g S:);scanf(%s,s);printf(nPlease enter substring t:);scanf(%s,t);p=fun(s,t);if(p)printf(nThe result is:%sn,p);else printf(nNot found!n);答案:1).a=NULL;2).if(*r=*p)3).if(*r=0)a=s;第 9 题 【程序改错】-功能:从 m 个学生的成绩中统计出高于和等于平均分的学生人数,-此人数由函数值返回。平均分通过形参传回,输入学生成 绩时,用-1 完毕输入,由程序自动统计学生人数。例如:假设输入 8 名学生的成绩,输入形式如下:80.5
14、60 72 90.5 98 51.5 88 64-1 结果为:The number of students:4 Ave=75.56。-*/#include#include#define N 20 int fun(float*s,int n,float*aver)float av,t;int count,i;count=0;t=0.0;for(i=0;i n;i+)t+=s i;av=t/n;printf(ave=%fn,av);for(i=0;i n;i+)/*FOUND*/if(s i 0)sm=a;m+;scanf(%f,&a);printf(nThe number of students
15、:%dn,fun(s,m,&aver);printf(Ave=%n,aver);答案:1).if(s i =av)count+;2).*aver=av;3).return count;-第 10 题 【程序改错】-功能:根据以下公式求 值,并作为函数值返回。例如:给指定精度的变量 eps 输入 0.0005 时,应当输出 Pi=3.140578。1 1 2 1 2 3 1 2 3 4 =1+*+*+*+.2 3 3 5 3 5 7 3 5 7 9-*/#include double fun(double eps)double s,t;int n=1;s=0.0;t=1;/*FOUND*/whi
16、le(teps)或 while(eps=eps)或 while(epseps)或 while(eps=eps)或 while(eps=t)2).t=t*n/(2*n+1);或 t=1.0*n/(2*n+1)*t;或 t=n/(2*n+1.0)*t;或 t=n/(2.0*n+1)*t;或 t=n/(2.0*n+1.0)*t;或 t=1.0*n/(2.0*n+1.0)*t;3).return 2*s;或 return(2*s);或 return(2*s);或 return(s*2);或 return(s*2);第 11 题【程序改错】-功能:实现两个字符串的连接。例如:输入 dfdfqe 和 12
17、345 时,则输出 dfdfqe12345.-*/-#include main()char s180,s280;void scat(char s1,char s2);gets(s1);gets(s2);scat(s1,s2);puts(s1);void scat(char s1,char s2)int i=0,j=0;/*FOUND*/while(s1i=0)i+;/*FOUND*/while(s2j=0)/*FOUND*/s2j=s1i;i+;j+;/*FOUND*/s2j=0;答案:1).while(s1i!=0)或 while(s1i)或 while(s1i!=0)2).while(s2
18、j!=0)或 while(s2j)或 while(s2j!=0)3).s1i=s2j;4).s1i=0;或*(s1+i)=0;或 s1i=0;第 12 题 【程序改错】-功能:求二分之一的圆面积,函数通过形参得到圆的半径,函数 返回二分之一的圆面积。例如:输入圆的半径值:19.527 输出为:s=598.950017。-*/#include#include /*FOUND*/double fun(r)-double s;/*FOUND*/s=1/2*3.14159*r*r;/*FOUND*/return r;main()float*;printf(Enter*:);scanf(%f,&*);p
19、rintf(s=%fn,fun(*);答案:1).float fun(float r)或 double fun(float r)或 double fun(double r)2).s=1.0/2*3.14159*r*r;3).return s;第 13 题 【程序改错】-功能:利用二维数组输出如下图的图形。*-*/#include#include /*FOUND*/#define N=7 main()char aNN;int i,j,z;for(i=0;iN;i+)for(j=0;jN;j+)/*FOUND*/aij=;z=0;for(i=0;i(N+1)/2;i+)-for(j=z;jN-z;
20、j+)aij=*;z=z+1;/*FOUND*/z=0;for(i=(N+1)/2;iN;i+)z=z-1;for(j=z;jN-z;j+)aij=*;for(i=0;iN;i+)for(j=0;jN;j+)/*FOUND*/printf(%d,aij);printf(n);答案:1).#define N 7 2).aij=;3).z=z-1;或 z-;或 z=-1+z;4).printf(%c,aij);第 14 题 【程序改错】-功能:读取 7 个数1-50的整数值,每读取一个值,程序打印 出该值个数的。-*/#include main()int i,a,n=1;/*FOUND*/while(n7)do scanf(%d,&a);/*FOUND*/while(a50);-/*FOUND*/for(i=0;i=a;i+)printf(*);printf(n);n+;答案:1).while(n=7)或 while(n8)2).while(a50);或 while(a50|a1);3).for(i=1;i=a;i+)