天津城建大学C语言程序改错.docx
《天津城建大学C语言程序改错.docx》由会员分享,可在线阅读,更多相关《天津城建大学C语言程序改错.docx(22页珍藏版)》请在冰豆网上搜索。
天津城建大学C语言程序改错
程序改错
功能:
编制统计营业员一天的营业额的程序,设程序采用一个循环
实现,每次循环输入一笔交易金额并累计营业额。
由于营
业员一天完成的交易次数是不确定的,为此以最后附加输
入一笔0或负数交易额作为交易金额已全部输入结束的标志。
有以下统计营业员一天营业额的算法:
统计营业员一天营业额
{
营业额清0;
输入第一笔交易额;
while(交易额>0.0)
{
累计营业额;
输入下一笔交易额;
}
输出营业额;
}
记一笔交易额为变量sale,营业额为sigma。
/**********FOUND**********/
floatsale,sigma;
sigma=0.0;
printf("Entersaledata.\n");
/**********FOUND**********/
scanf("%f",&sale);
while(sale>0.0)
{
/**********FOUND**********/
sigma+=sale;
功能:
输入两个双精度数,函数返回它们的平方和的平方根值。
例如:
输入:
22.936和14.121,输出为:
y=26.934415。
/**********FOUND**********/
doublefun(double*a,double*b)
{
doublec;
/**********FOUND**********/
c=sqrt(*a**a+*b**b);
/**********FOUND**********/
returnc;
【程序改错】
--------------------------------------------------------
功能:
分别统计字符串中大写字母和小写字母的个数。
例如:
给字符串s输入:
AAaaBBb123CCccccd,
则应输出结果:
upper=6,lower=8。
voidfun(char*s,int*a,int*b)
{
while(*s)
{
/**********FOUND**********/
if(*s>='A'&&*s<='Z')
/**********FOUND**********/
(*a)++;
if(*s>='a'&&*s<='z')
/**********FOUND**********/
(*b)++;
s++;
}
}
功能:
输入一个字符串,过滤此串,滤掉字母字符,并统计新生
成串中包含的字符个数。
例如:
输入的字符串为ab234$df4,则输出为:
Thenewstringis234$4
Thereare5charinthenewstring.。
inti,j;
/**********FOUND**********/
for(i=0,j=0;*(ptr+i)!
=0;i++)
/**********FOUND**********/
if(*(ptr+i)>'z'||*(ptr+i)<'a'&&*(ptr+i)>'Z'||*(ptr+i)<'A')
{
/**********FOUND**********/
*(ptr+j)=*(ptr+i);
j++;
}
*(ptr+j)='\0';
return(j);
}
阿【程序改错】
功能:
求1到20的阶乘的和。
答案:
1).t=1;或t=1.0;
2).t=★t★*★j★;或t*=j;或t=j*t;
3).s=★s★+★t★;或s+=t;或s=t+s;
4).printf("jiecheng=%f\n",s);
【程序改错】
功能:
计算正整数num的各位上的数字之积。
例如:
输入252,则输出应该是20。
答案:
1).longk=1;
2).num/=10;或num=num/10;
3).scanf("%ld",&n);
4).printf("\n%ld\n",fun(n));
【程序改错】
功能:
求出两个非零正整数的最大公约数,并作为函数值返回。
例如:
若给num1和num2分别输入49和21,则输出的最大公约数为7。
答案:
1).a=b;
2).b=t;
3).r=a%b;
4).returnb;或return(b);或return(b);
【程序改错】
功能:
从键盘输入十个学生的成绩,统计最高分,最低分和平均分。
max代表最高分,min代表最低分,avg代表平均分。
答案:
1).floata[10],min,max,avg;
2).scanf("%f",&a[i]);或scanf("%f",a+i);
3).max=min=avg=a[0];
4).if(min>a[i])或if(a[i]【程序改错】
功能:
输入10个数,要求输出这10个数的平均值
答案:
1).for(i=1;i<10;i++)或for(i=1;i<=9;i++)
2).floatscore[10],aver;或floataver,score[10];
3).scanf("%f",&score[i]);或scanf("%f",score+i);
4).aver=average(score);
【程序改错】
功能:
判断整数x是否是同构数。
若是同购数,函数返回1;否则返回0。
说明:
所谓“同构数”是指这个数出现在它的平方数的右边。
例如:
输入整数25,25的平方数是625,25是625中右侧的数,
所以25是同构数。
注意:
x的值由主函数从键盘读入,要求不大于1000。
答案:
1).intk;
2).k=x*x;
3).if((k%10==x)||(k%100==x)||(k%1000==x))
【程序改错】
功能:
根据整型形参m,计算如下公式的值:
y=1+1/3+1/5+1/7+...+1/(2m-1)
答案:
1).doubley=1;
2).for(i=1;i<=m;i++)
3).y+=1.0/(2*i-3);
【程序改错】
功能:
找出一个大于给定整数m且紧随m的素数,并作为函数值返回。
答案:
1).inti,k;或inti;intk;或intk,i;或intk;inti;
2).if(i%k==0)或if(!
(i%k))
3).if(k==i)或if(i==k)
【程序改错】
功能:
用选择法对数组中的n个元素按从小到大的顺序进行排序。
答案:
1).p=j;
2).if(a[i]a[i])
3).p=i;
【程序改错】
功能:
用插入排序法将n个字符进行排序(降序)。
提示:
插入法排序的思路是:
先对数组的头两个元素进行排序,
然后根据前两个元素的情况插入第三个元素,再插入第
四个元素…)。
答案:
1).inta,b,t;
2).while((b>=0)&&(t>aa[b]))
3).aa[b+1]=t;
【程序改错】
功能:
读入一个整数k(2≤k≤10000),打印它的所有质因子(即
所有为素数的因子)。
例如:
若输入整数:
2310,则应输出:
2、3、5、7、11。
请改正程序中的语法错误,使程序能得出正确的结果。
答案:
1).IsPrime(intn)
2).if(!
(n%i))
3).return(m);
【程序改错】
功能:
根据整型形参m,计算某一数据项的值。
y=1/(100*100)+1/(200*200)+1/(300*300)+……+1/(m*m)
例如:
若m=2000,则应输出:
0.000160。
答案:
1).doublefun(intm)
2).for(i=100;i<=m;i+=100)
3).y+=1.0/d;
【程序改错】
功能:
根据整型形参n,计算某一数据项的值。
A[1]=1,A[2]=1/(1+A[1]),A[3]=1/(1+A[2]),…,
A[n]=1/(1+A[n-1])
例如:
若n=10,则应输出:
a10=0.617977。
答案:
1).floatfun(intn)
2).for(i=2;i<=n;i++)
3).A=1.0/(1+A);
【程序改错】
功能:
求广义菲玻那契级数的第n项。
广义菲玻那契级数的前n
项为:
1,1,1,3,5,9,17,31,……
项值通过函数值返回main()函数。
例如:
若n=15,则应输出:
Thevalueis:
2209。
答案:
1).for(k=4;k<=n;k++)
2).a=b;
3).returnd;
【程序改错】
功能:
求二分之一的圆面积,函数通过形参得到圆的半径,函数
返回二分之一的圆面积。
例如:
输入圆的半径值:
19.527输出为:
s=598.950017。
答案:
1).floatfun(floatr)
2).s=1.0/2*3.14159*r*r;
3).returns;
【程序改错】
功能:
求出数组中最大数和次最大数,并把最大数和a[0]中的数
对调、次最大数和a[1]中的数对调。
答案:
1).m=i;
2).for(k=i;k3).if(a[k]>a[m])m=k;
【程序改错】
功能:
根据整型形参m,计算如下公式的值:
y=1/2+1/8+1/18+...+1/2m*m
答案:
1).doubley=0;
2).for(i=1;i<=m;i++)
3).y+=1.0/(2*i*i);
【程序改错】
功能:
统计出若干个学生的平均成绩,最低分以及得最低分的人数。
例如:
输入10名学生的成绩分别为92,87,68,56,92,84,67,
75,92,66,则输出平均成绩为77.9,最低高分为56,得最
低分的人数为1人。
答案:
1).sum+=array[i];或sum=sum+array[i];
2).ave=sum/n;
3).if(array[i]==Min)J++;
【程序改错】
功能:
将整型数组中所有小于0的元素放到所有大于0的元素的前
面(要求只能扫描数组一次)。
答案:
1).int★i=0★,★j=n-1★,★temp★;
2).j--;
3).if(i【程序改错】
功能:
输入两个实数,按代数值由小到大输出它们,并在fun()
函数中输出。
(输出的数据都保留2位小数)
答案:
1).floatt;
2).if(a>b)
3).printf("%5.2f,%5.2f\n",a,b);
【程序改错】
功能:
编写函数fun求20以内所有5的倍数之积。
答案:
1).int★s=1★,★i★;
2).if(i%m==0)
3).s=s*i或s=i*s或s*=i
【程序改错】
功能:
编写函数fun求20以内所有5的倍数之积。
答案:
1).ints=1,i;
2).if(i%m==0)
3).s*=i;
【程序改错】
功能:
编写函数fun计算下列分段函数的值:
x*x+xx<0且x≠-3
f(x)=x*x+5x0≤x<10且x≠2及x≠3
x*x+x-1其它
答案:
1).floaty;
2).if(x<0&&x!
=-3.0)
3).returny;
【程序改错】
功能:
有1、2、3、4个数字,能组成多少个互不相同且无重复数
字的三位数?
都是多少?
答案:
1).printf("\n");
2).for(i=1;i<5;i++)或for(i=1;i<=4;i++)
3).if(i!
=k&&i!
=j&&j!
=k)
【程序改错】
功能:
某个公司采用公用电话传递数据,数据是四位的整数,在
传递过程中是加密的,加密规则如下:
每位数字都加上5,
然后除以10的余数代替该位数字。
再将新生成数据的第一
位和第四位交换,第二位和第三位交换。
例如:
输入一个四位整数1234,则结果为:
9876。
答案:
1).scanf("%d",&a);
2).aa[1]=a%100/10;
3).for(i=0;i<=3;i++)或for(i=0;i<4;i++)
【程序改错】
功能:
一球从100米高度自由落下,每次落地后反跳回原高度的
一半;再落下,求它在第10次落地时,共经过多少米?
第10次反弹多高?
答案:
1).floatsn=100.0,hn=sn/2;
2).for(n=2;n<=10;n++)或for(n=2;n<11;n++)
3).hn=hn/2;
【程序改错】
功能:
读取7个数(1-50)的整数值,每读取一个值,程序打印
出该值个数的*。
答案:
1).while(n<=7)或while(n<8)
2).while(a<1||a>50);或while(a>50||a<1);
3).for(i=1;i<=a;i++)
【程序改错】
功能:
给一个不多于5位的正整数,要求:
一、求它是几位数,
二、逆序打印出各位数字。
答案:
1).longa,b,c,d,e,x;
2).b=x%10000/1000;
3).if(a!
=0)或if(!
a)
【程序改错】
功能:
一个偶数总能表示为两个素数之和。
答案:
1).scanf("%d",&a);
2).d=a-b;
3).if(d%c==0)
【程序改错】
功能:
求0-7这8个数字所能组成的奇数个数。
答案:
1).longsum=4,s=4;
2).printf("\n%ld",sum);
3).if(j<=2)或if(j<3)
【程序改错】
功能:
809*?
?
=800*?
?
+9*?
?
+1其中?
?
代表的两位数,8*?
?
的结果
为两位数,9*?
?
的结果为3位数。
求?
?
代表的两位数,及809*?
?
后的结果。
答案:
1).long★int★a★,★b★,★i★;
2).for(i=10;i<100;i++)或for(i=10;i<=99;i++)
3).b=★i*a★+★1★;或b=★a*i★+★1★;
【程序改错】
功能:
编写一个程序计算某年某月有几天。
(注意要区分闰年)
答案:
1).switch(mm)
2).break;
3).default:
【程序改错】
功能:
以下程序能求出1*1+2*2+......+n*n<=1000中满足条件的
最大的n。
答案:
1).s=n=0;
2).while(s<=1000)
3).printf("n=%d\n",n-1);
【程序改错】
功能:
输入n,计算s=1+1+2+1+2+3+1+2+3+4+...+1+2+3+4+...+n
答案:
1).inti,s,p,n;
2).scanf("%d",&n);
3).for(s=p=0,i=1;i<=n;i++)
【程序改错】
功能:
编制统计营业员一天的营业额的程序,设程序采用一个循环
实现,每次循环输入一笔交易金额并累计营业额。
由于营
业员一天完成的交易次数是不确定的,为此以最后附加输
入一笔0或负数交易额作为交易金额已全部输入结束的标志。
有以下统计营业员一天营业额的算法:
统计营业员一天营业额
{
营业额清0;
输入第一笔交易额;
while(交易额>0.0)
{
累计营业额;
输入下一笔交易额;
}
输出营业额;
}
记一笔交易额为变量sale,营业额为sigma。
答案:
1).floatsale,sigma;
2).scanf("%f",&sale);
3).sigma+=sale;或sigma=sigma+sale;
【程序改错】
功能:
编写函数fun,求两个整数的最小公倍数,然后用主
函数main()调用这个函数并输出结果,两个整数由
键盘输入。
答案:
1).q=fun(m,n);
2).if(m3).if(i%n==0)
【程序改错】
功能:
求100以内(包括100)的偶数之和.
答案:
1).inti,sum=0;
2).for(i=2;i<=100;i+=2)
3).printf("Sum=%d\n",sum);
【程序改错】
功能:
企业发放的奖金根据利润提成。
利润(I)低于或等于10万元
时,奖金可提10%;利润高于10万元,低于20万元时,低于
10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;40万
到60万之间时高于40万元的部分,可提成3%;60万到100万
之间时,高于60万元的部分,可提成1.5%,高于100万元时,
超过100万元的部分按1%提成,从键盘输入当月利润I,求
应发放奖金总数?
答案:
1).scanf("%ld",&i);
2).if(i<=100000)
3).printf("bonus=%d",bonus);
【程序改错】
功能:
用起泡法对10个整数从小到大排序。
答案:
1).voidsort(int*x,intn)或voidsort(intx[],intn)
2).for(j=0;j<★n★-1★-i★;j++)或for(j=0;★n★-1★-i★>j;j++)或for(j=0;jj;j++)或for(j=0;j<=★n★-2★-i★;j++)
3).if(x[j]>x[★j★+★1★])或if(x[★j★+★1]★4).sort(a,n);
【程序改错】
功能:
求如下表达式:
111
S=1+——+———+......+———————
1+21+2+31+2+3+......+n
答案:
1).scanf("%d",&n);
2).floatfun(intn)
3).for(i=1;i<=n;i++)或for(i=1;n>=i;i++)或for(i=1;ii;i++)
4).s+=1.0/t;或s=★s★+★1.0★/(float)t;或s=★s★+★1.0★/t;或s+=1.0/(float)t;
【程序改错】
功能:
判断m是否为素数,若是返回1,否则返回0。
答案:
1).intfun(intm)或fun(intm)
2).for(i=2;ii;i++)或for(i=2;i<=m-1;i++)或for(i=2;m-1=>i;i++)
3).if(★m%i★==★0★)k=0;
4).returnk;
【程序改错】
功能:
用下面的和式求圆周率的近似值。
直到最后一项的绝对值
小于等于0.0001。
π111
—=1-—+—-—+...
4357
答案:
1).#include"math.h"或#include
2).floats=0,t=1,p=1;或floats=0,p=1,t=1;或floatp=1,s=0,t=1;或floatp=1,t=1,s=0;或floatt=1,p=1,s=0;或floatt=1,s=0,p=1;
3).while(fabs(t)>1e-4)或while(0.00010.0001)
4).printf("pi=%f\n",★s★*★4★);
【程序改错】
功能:
求1到10的阶乘的和。
答案:
1).for(i=1;i<=10;i++)或for(i=1;10>=i;i++)或for(i=1;i<11;i++)或for(i=1;11>i;i++)
2).s=★s★+★fac(i)★;或s+=fac(i);或s=fac(i)+s;
3).floaty=1.0;或floaty=1;
4).returny;或return(y);或return(y);
【程序改错】
功能:
输出Fabonacci数列的前20项,要求变量类型定义成浮点型,
输出时只输出整数部分,输出项数不得多于或少于20。
答案:
1).printf("%8.0f",f1);或printf("%f",f1);或printf("%8f",f1);
2).for(i=1;i<20;i++)或for(i=1;20>i;i++)或for(i=2;i<=20;i++)或for(i=2;20>=i;i++)或for(i=1;i<=19;i++)或for(i=1;19>=i;i++)
3).f1=f2;
4).f2=f3;
【程序改错】
功能:
根据整型形参m的值,计算如下公式的值。
111
t=1-——-——-...-——
2x23x3mxm
例如:
若m=5,则应输出:
0.536389
答案:
1).for(i=2;i<=m;i++)或for(i=2;m>=i;i++)或for(i=2;ii;i++)或for(i=2;1+m>i;i++)
2).y-=1.0/(i*i);或y=y-1.0/(i*i);或y-=1.0/(float)(i*i);或y=y-1.0/(float)(i*i);或y=y-1.0/i/i;或y=y-1.0/(float)i/(float)i;或y=y-1/(double)(i*i);或y-=1/(double)(i*