一、程序改错一、下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。1.求1234nmain(){longintsum;//若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值。一般赋值0或者循环初值。intn,i=1;scanf(%d,n);//若scanf语句有错误,常见考点有两个:(1)格式声明符号要与后面欲赋值的变量的类型一致,此题%d与n的类型int一致(详见p69-78);(2)变量的前面要有地址符号&printf(“\n”);while(in)//循环条件用于控制循环的次数,若以in为循环条件,则意味着i的终值为n-1,由于且i初值为1,因此一共能够循环n-1次。比要求少了1次,因此应改为i=n或者in+1{sum=sum*i;//若不为sum赋初值,则此处无法计算sum*i。i++;}printf(sum=%d,sum);//若printf语句有错误,常见考点有1个:格式声明符号要与后面欲输出的变量的类型一致,此题%d与sum的类型longint不一致,应改为%ld(详见p69-78);}sum应初始化即加入sum=1第四行改为:scanf(“%d”,&n);第六行改为:while(i=n)或者while(in+1)第十行改为:printf(sum=%ld,sum);2.求一个数组中最大值及其下标。main(){intmax,j,m;inta[5];for(j=1;j=5;j++)//j=1为循环变量j赋初值为1,同时用j作为数字元素的逻辑地址下标。因此输出的时候只能从a[1]开始输出,无法输出a[0].因此应将j赋初值0,相应的循环条件改为j5或者j=4用于控制循环执行5次scanf(“%d”,a);//若scanf语句有错误,常见考点有两个:(1)格式声明符号要与后面欲赋值的变量的类型一致,此题%d与a的类型int一致(详见p69-78);(2)变量的前面要有地址符号&max=a[0];for(j=1;j=5;j++)//修改思路与上一个for语句同if(maxa[j]){max=a[j];m=j;}printf(“下标:%d\n最大值:%d”,j,max)//j为for语句的循环变量,当for语句执行完之后,j中的值为6,并非最大值下标,在执行某一次循环的比较过程中,将当时最大值的下标存在了m里}第四行改为:for(j=0;j5;j++)第五行改为:scanf(“%d”,&a[j]);第七行改为:for(j=1;j5;j++)第八行改为:if(maxa[j])第十三行改为:printf(“下标:%d\n最大值:%d”,m,max)3.用一个函数求两个数之和。sum(x,y)//函数定义的一般形式p173-174{floatz;z=x+y;return;//return语句后面可以返回0、常量、变量和表达式的值。}main(){floata,b;intc;//若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值。一般赋值0或者循环初值。scanf(%f,%f,&a,&b);c=sum(a,b);printf(\nSumis%f,sum);}第一行改为:floatsum(floatx,floaty);第四行改为:return(z);或者returnz;第八行:floatc;第十一行:printf(\nSumis%f,c);4.程序读入20个整数,统计非负数个数,并计算非负数之和.#include“stdio.h”main(){inti,s,count,n=20;inta[n];//数组定义的一般形式,详见p143,其中的常量表达式不能为变量s=count=1;for(i=1,i20,i--)//for语句的格式,三个表达式之间用分号,且分号不可省略scanf(“%d”,a[i]);//若scanf语句有错误,常见考点有两个:(1)格式声明符号要与后面欲赋值的变量的类型一致,此题%d与n的类型int一致(详见p69-78);(2)变量的前面要有地址符号&for(i=0;i20;i++){if(a[i]0)break;//break与continue的区别p128.在改错题中若错误出现在break语句,则通常是将break换为continue;反之,若错误出现在continue,通常是将其换为breaks+=a[i];count++;}printf(“s=%fcount=%f\n”,s,count);//若printf语句有错误,常见考点有1个:格式声明符号要与后面欲输出的变量的类型一致}答案:inta[20]s=count=0;for(i=0;i20;i--)scanf(“%d”,&a[i]);continue;printf(“s=%dcount=%d\n”,s,count);5.从键盘输入整数x的值,并输出y的值.main(){floatx,y;scanf(“%d”,&x);y=3.5+x;printf(“y=%d”);}正确的:intx;floaty;printf(“y=%f”,y);6编程计算下面分段函数,输入x,输出y101131001201xxxxxxymain(){intx,y;printf(“\nInputx:\n”);scanf(“%d”,x);//错误同上题scanfif(x0)y=x-1;elseif(x=0||x=10)//||表示逻辑或,当左边表达式成立或者右边表达式成立时,整个表达式成立。&&表示逻辑与,当左边表达式和右边表达式同时成立时,整个表达式成立。此处用逻辑表达式来表示x的区间[0,10],因此应改用逻辑与符号y=2x-1;//C语言中乘号不能省略,且用*表示乘法运算elsey=3x-1;//C语言中乘号不能省略,且用*表示乘法运算printf(“y=%d”,&y);//printf与scanf不用,printf后面给出的是变量名列表或表达式列表,无需地址符号}第一处改为:scanf(“%d”,&x);第二处改为:x=0&&x=10第三处改为:y=2*x-1;第四处改为:y=3*x-1;第五处改为:printf(“y=%d”,y);7.求100~300间能被3整除的数的和。main(){intn;longsum;//若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值,一般赋值0或者循环初值。for(n=100,n=300,n++)//for语句的格式,三个表达式之间用分号,且分号不可省略{if(n%3=0)//=是赋值符号,用于将右边的值赋给左边的变量;==是关系符号,用来判断两个值是否相等。改错中if后面表达式中的赋值符号是常见的考点。sum=sum*n;}printf(“%ld”,sum);}第一处改为:longsum=0;第二处改为:for(n=100;n=300;n++)第三处改为:if(n%3==0)第四处改为:sum=sum+n;8.求表达式abc的值#includestdio.h#includemath.hintfun(intx,inty);main(){inta,b;floatf;scanf(“%d,%d”,a,b);//与改错第1题中的scanf错误相同if(ab0){//C语言中乘号不能省略,且用*表示乘法运算fun(a,b);//调用带有返回值的函数,应将函数的返回值保存在变量里printf(Theresultis:%d\n,&f)//与第6题中printf错误相同}elseprintf(“error!”);}fun(x,y)//定义函数的一般形式p173-174{floatresult;result=sqrt(a+b);return;//return语句后面可以返回0、常量、变量和表达式的值。}第一处改为:if(a*b0)第二处改为:f=fun(a,b);第三处改为:printf(Theresultis:%d\n,f);第四处改为:floatfun(intx,inty)第五处改为:f=fun(a,b);第六处改为:result=sqrt(a*b);第七处改为:returnresult;