实验二、选择结构参考答案1.修改下列程序,使之满足当x为10时输出“==”,否则输出“!=”的条件。#includestdio.hmain(){intx;scanf(%d,&x);if(x==10)printf(==\n);elseprintf(!=\n);}2.修改下列程序,使之实现以下功能:#include“stdio.h”main(){inta,b,c;scanf(“%d%d%d”,&a,&b,&c);if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);}3.程序填空。从键盘输入任意一个字母,将其按小写字母输出。#includestdio.hmain(){charc;scanf(%c,&c);if(c='A'&&c='Z')c=c+32;printf(\n%c,c);}7.有一函数x(x1)y=2x–1(1≤x10)3x–11(x≥10)编写程序输入x,输出y值。#includestdio.hmain(){intx,y;scanf(%d,&x);if(x1)y=x;elseif(x10)y=2*x-1;elsey=3*x-11;printf(%d,y);}9.给一个不多于3位的正整数,要求:(1)求出它是几位数;(2)、分别打出每一位数字;(3)、按逆序打出各位数字,例如原数为321,应输出123。#includestdio.hvoidmain(){inta,b,c,x,n;scanf(%d,&x);a=x/100;b=(x-a*100)/10;c=x%10;if(a!=0)printf(%d为3位数,原数为%d,逆序数为%d\n,x,x,c*100+b*10+a);elseif(b!=0)printf(%d为2位数,原数为%d,逆序数为%d\n,x,x,c*10+b);elseprintf(%d为1位数,原数为%d,逆序数为%d\n,x,x,c);}实验三、循环结构实验(1)1.分析并修改下面的程序,使该程序能正常结束运行。#includestdio.hmain(){intx,y;x=2;y=0;while(!y--)printf(“%d,%d\n”,x,y);}3.下面是一个计算e的近似值(使误差小于给定的数值)的程序。main(){doublee=1.0,x=1.0,y,detax;inti=1;printf(“pleaseinputenter:\n”);scanf(“%lf”,&detax);y=1/x;while(y=detax){x=x*i;y=1/x;e=e+y;++i;}printf(“%12.10f”,e);}实验要求:(1)阅读上面的程序,写出程序所依据的计算公式。e=1+1/1!+1/2!+1/3!+....+1/n!(2)当输入的detax各是什么值时,能分别使程序按下面的要求运行:a.不进入循环;=1b.只循环一次;无此条件c.只循环两次;==1d.进入死循环(程序将永远循环下去)。=04.编写程序。对输入的任意的一个正整数按反序输出。例如,输入147,输出741。#includestdio.hvoidmain(){intx,i;scanf(%d,&x);while(x!=0){i=x%10;x=x/10;printf(%d,i);}}任务2do-while语句程序设计5.求1!+2!+3!+4!+5!+6!+7!+8!+9!+10!请填空将下面的程序补充完整:答案:4037913#includestdio.hmain(){intj,m,p,s;s=0;m=1;do{p=1;j=1;while(j=m){p*=j;j++;}s=s+p;m++;}while(m=10);这里是m=10printf(s=%d\n,s);}6.编写程序。每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一天的2倍,直至购买的苹果个数总数达到不超过100的最大值,求每天平均花多少钱?答案:9.92#includestdio.h//要考虑到最后一天的苹果数不能计入总和,要减去。voidmain(){intx,sum,day;doubleave=0;x=2;day=1;sum=2;do{x=2*x;sum=sum+x;day++;}while(sum=100);ave=(sum-x)*0.8/(day-1);printf(%lf,ave);}实验四、循环结构实验(2)【上机内容】1.分析并修改下面的程序,使该程序能正常结束运行。#includestdio.hmain(){inti;for(i=1;i10;i++)printf(“%d\n”,i);}2.分析并修改下面的程序,使sum的值为1+2+……+10的和#includestdio.hmain(){inti=1;intsum=0;for(;i=10;i++)sum=sum+i;printf(“sum=%d\n”,sum);}3.运行下列程序,输出结果为_________15________#includestdio.hmain(){inti,sum=0;for(i=0;i=10;i++){sum=sum+i;if(i==5)break;}printf(“sum=%d\n”,sum);}4.运行下列程序,输出结果为_______50__________#includestdio.hmain(){inti,sum=0;for(i=0;i=20;i++){if((i%5)!=0)continue;sum=sum+i;}printf(sum=%d\n,sum);}5.运行下列程序,输出结果为________24_________#includestdio.hmain(){inti,j,sum=0;for(i=0;i=3;i++)for(j=0;j=5;j++);sum=sum+i*j;printf(sum=%d\n,sum);}6.程序填空。求出1000以内能被13整除的最大数。#includestdio.hmain(){inti;for(i=1000;i0;i--)if(i%13==0)break;printf(“\n%d”,i);}7、程序填空。求Fibonacci数列:1,1,2,3,5,8,···的前40个数,即:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n=3)要求每一行输出8个数。参考答案:#includestdio.hmain(){longf1,f2;inti;f1=1;f2=1;for(i=1;i=20;i++){printf(%10ld%10ld,f1,f2);if(i%4==0)printf(\n);f1=f1+f2;f2=f2+f1;}}8.程序填空。从键盘输入10个不为0的整型数,统计其中负数的个数,并求出所有正数的平均值。参考答案:#includestdio.hmain(){inti,x,count=0;floatave=0;for(i=0;i10;i++){scanf(%d,&x);if(x0)ave+=x;elsecount++;}if(count!=10)ave/=10-count;printf(count:%d,Average:%f\n,count,ave);}9.帕多瓦数列:1,1,1,2,2,3,4,5,7,9,12,16,21,……求出这个数列的前20项之和。答案为:614参考答案:#includestdio.hmain(){intf1,f2,f3,f,i;longsum=3;f1=f2=f3=1;for(i=4;i=20;i++){f=f1+f2;sum=sum+f;f1=f2;f2=f3;f3=f;}printf(sum=%ld\n,sum);}10.统计能被4整除而且个位数为6的4位数的个数及和。答案:个数为450,总和为:2477700参考答案:#includestdio.hmain(){inti,sum=0,count=0;for(i=1000;i=9999;i++)if(i%10==6&&i%4==0){count++;sum=sum+i;}printf(个数为:%8d,总和为:%8d\n,count,sum);}11.求1~100之间所有素数的个数及和。答案:个数为25,总和为:1060参考答案:#includestdio.h#includemath.hmain(){intm,n,i,j,k,sum=0;n=0;for(m=2;m=100;m++){k=(int)sqrt(m);i=2;while(m%i!=0&&i=k)i++;if(i==k+1){n++;sum=sum+m;}}printf(共有%8d个素数,总和为%8d\n,n,sum);}12.编写程序输出下面的数字金字塔。1121123211234321123454321参考答案:#includestdio.hmain(){intn=5,inti,j;for(i=1;i=5;i++){for(j=1;j=5-i;j++)printf();for(j=1;j=i;j++)printf(%d,j);for(j=i-1;j=1;j--)printf(%d,j);printf(\n);}实验5-6参考答案1.21;2.123.求2的4次方。4.上机调试下面计算两个整数之和的程序,记录系统给出的出错信息,指出出错原因并予以改正。#includestdio.hmain(){intx,y;scanf(%d,%d,&x,&y);printf(%d\n,sum(x+y));intsum(inta,b){return(a+b);}}改正:#includestdio.hmain(){intsum(inta,intb);//函数说明语句intx,y;scanf(%d,%d,&x,&y);printf(%d\n,sum(x,y));//实参个数要与形参个数一致}intsum(inta,intb)//参数类型要分别说明{return(a+b);}5.上机调试下面判断n是否是素数的程序,函数fun中有逻辑错误,调试并改正。#includestdio.hfun(intn){intk,yes=1;for(k=2;k=n/2;k++)if(n%k==0){yes=0;break;}//添加break语句。elseyes=1;returnyes;}main(){intn;scanf(%d,&n);if(fun(n))//要有实参printf(%d:yes!\n,n);elseprintf(%d:no!\n,n);}6.下面程序中,函数fun的功能是根据形参m计算公式T=1/1!+1/2!+1/3!+…+1/m!的值,上机调试,请改正程序中的错误。当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。答案应为:1.71828#includestdio.hmain(){intm;printf(\ninputm:);scanf(%d,&m);printf(\nt=%12.10lf\n,fun(m));}doublefun(intm){doublefac,t=0.0;inti=1,j;for(i=1;i=m;i++){fac=1.0;for(j=1;j=m;j++)fac=fac*i;//改为:for(j=1;j=i;j++)fac=fac*j;这样才表示求i!,原程序行是求i的m次方。t+=1.0/fac;}returnt;}任务2函数的嵌套调用1.(1)inmain:x=2,y=5(2)inswap:a=2,b=5(3)inswap:a=5,b=2(4)inmain:x=2,y=52.a=83.如输入:12345则输出:54321程序的功能是实现将输入的5个字符逆序输出。4.8实验6函数递归调用、变量的存储类型及编译预处理1.下面的程序是用递