C语言实验报告参考答案实验一熟悉C语言程序开发环境及数据描述四、程序清单1.编写程序实现在屏幕上显示以下结果:ThedressislongTheshoesarebigThetrousersareblack答案:#includestdio.hmain(){printf(Thedressislong\n);printf(Theshoesarebig\n);printf(Thetrousersareblack\n);}2.编写程序:(1)a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。(2)a=160,b=46,c=18,d=170,编写求(a+b)/(b-c)*(c-d)的程序。答案:(1)#includestdio.hmain(){inta,b,c,x,y;a=150;b=20;c=45;x=a/b;y=a/c;printf(a/b的商=%d\n,x);printf(a/c的商=%d\n,y);x=a%b;y=a%c;printf(a/b的余数=%d\n,x);printf(a/c的余数=%d\n,y);}(2)#includestdio.hmain(){inta,b,c,d;floatx;a=160;b=46;c=18;d=170;x=(a+b)/(b-c)*(c-d);printf((a+b)/(b-c)*(c-d)=%f\n,x);}3.设变量a的值为0,b的值为-10,编写程序:当ab时,将b赋给c;当a=b时,将0赋给c。(提示:用条件运算符)答案:#includestdio.hmain(){inta,b,c;a=0;b=-10;c=(ab)?b:a;printf(c=%d\n,c);}五、调试和测试结果1.编译、连接无错,运行后屏幕上显示以下结果:ThedressislongTheshoesarebigThetrousersareblack2、(1)编译、连接无错,运行后屏幕上显示以下结果:a/b的商=7a/c的商=3a/b的余数=10a/c的余数=15(2)编译、连接无错,运行后屏幕上显示以下结果:(a+b)/(b-c)*(c-d)=-1064.00003.编译、连接无错,运行后屏幕上显示以下结果:c=-10实验二顺序结构程序设计四、程序清单1.键盘输入与屏幕输出练习问题1D。问题2改printf(%c,%c,%d\n,a,b,c);这条语句改成:printf(%c%c%d\n,a,b,c);问题3改scanf(%c%c%d,&a,&b,&c);这条语句改为:scanf(%c,%c,%d,&a,&b,&c);问题4改printf(%c,%c,%d\n,a,b,c);这条语句改成:printf(\’%c\’\’%c\’%d\n,a,b,c);问题5把scanf(%c%c%d,&a,&b,&c);和printf(%c,%c,%d\n,a,b,c);改成scanf(%c%*c%c%*c%d,&a,&b,&c);printf(\'%c\',\'%c\',%d\n,a,b,c);2(1)从键盘输入两个八进制数,计算两数之和并分别用十进制和十六进制数形式输出。#includestdio.hintmain(){inta,b,c;scanf(%d%d,&a,&b);c=a+b;printf(%d\n,c);printf(%x\n,c);return0;}2(2)编写程序:从键盘输入两个实数a和x,按公式计算并输出y的值:axexaaxay)ln()sin(5#includestdio.h#includemath.hintmain(){floata,x,y;scanf(%f%f,&a,&x);y=pow(a,5)+sin(a*x)+exp(a*x)+log(a+x);printf(y=%f\n,y);return0;}五、调试和测试结果2(1)输入:1214输出:261a2(2)输入:10输出:2.000000实验三选择结构程序设计四、设计流程(算法描述)(请写出上机内容2(3)题的算法描述)主要是两两比较,然后得出最大的数五、程序清单(1)输入一个整数,若大于等于0,输出提示信息“ispositive”,否则输出“isnegative”。#includestdio.h#includemath.hmain(){inta;scanf(%d,&a);if(a=0)printf(thenumberispositve\n);elseprintf(thenumberisnegetive\n);return0;}(2)输入两个整数a和b,若a=b时,求其积c并显示;若ab时,求其商c并显示。#includestdio.hmain(){inta,b,c;scanf(%d%d,&a,&b);if(a=b)printf(c=%d\n,a*b);elseprintf(c=%d\n,a/b);return0;}(3)输入a、b、c三个整数,输出最大数。#includestdio.hmain(){inta,b,c,x;scanf(%d%d%d,&a,&b,&c);if(a=b)x=a;elsex=b;if(xc)x=c;printf(themaxnumberis:%d\n,x);return0;}六、调试和测试结果2(1)输入:2输出:thenumberispositve输入:0输出:thenumberispositve输入:-2输出:thenumberisnegetive2(2)输入:32输出:c=6输入:23输出:c=02(3)输入:321输出:themaxnumberis:3输入:231输出:themaxnumberis:3输入:123输出:themaxnumberis:3实验四循环结构程序设计四、设计流程(算法描述)(请写出上机内容2的算法描述)首先求出每一个给定数的所有因子和,然后从2到5000循环,那一个数x与因子之和相等,就是完数。五、程序清单1.编写程序:求1+2+3+…+100和12+22+33+…+1002。#includestdio.h#includemath.hintmain(){inti,j,sum;sum=0;for(i=1;i=100;i++)sum+=i;printf(thesumis:%d\n,sum);sum=0;for(i=1;i=100;i++){j=pow(i,2);sum+=j;}printf(thesquaresumis:%d\n,sum);return0;}2.一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写程序找出2~5000中的所有完数。#includestdio.h#includemath.hmain(){inti,j,sum=0;for(i=2;i=5000;i++)//遍历从2到5000的所有数{sum=0;for(j=1;j=i/2;j++)//找出给定整数X的所有因子和{if(i%j==0)sum+=j;}if(i==sum)//sum为因子和,如果和i相等,则输出printf(%d,i);}return0;}3.编写程序:计算sinx的近似值,精确到10-6。!7!5!3sin753xxxxx其实)!12()1(sin)12(1n)1(nxxnn所以程序#includestdio.h#includemath.hmain(){floatx,sinx,i,t;printf(请输入一个x值(弧度值):);scanf(%f,&x);sinx=0;t=x;i=1;while(fabs(t)=1e-6){sinx=sinx+t;t=t*(-x*x/(2*i*(2*i+1)));i++;}printf(sin(%.2f)=%.6f\n,x,sinx);}六、调试和测试结果1:结果:thesumis:5050thesquaresumis:3383502:结果:6284963、输入0,输出sin(0.00)=0.000000输入1.57,输出sin(1.57)=1.000000输入0.5,输出sin(0.50)=0.479426实验五函数和编译预处理四、设计流程(算法描述)(请写出上机内容2的算法描述)求素数的方法就是:给定一个大于3的数x,从2到X的平方根遍历,只要有数可以被x整除,就不是素数五、程序清单1.编写自定义函数longpower(intm,intn),计算nm的值。利用此函数编程序实现:从键盘输入两个整数m和n,计算出nm的值。#includestdio.hlongpower(intm,intn)//要返回的是long型{inti;longs;//因为是要返回的数,所以这里也定义为long型s=1;for(i=1;i=n;i++){s*=m;}returns;}intmain(void){intm,n;scanf(%d%d,&m,&n);printf(s=%ld\n,power(m,n));return0;}2.编写自定义函数prime(intx),判断x是否为素数。利用此函数编写程序找出3~5000中的所有素数,并输出素数的个数。#includestdio.h#includemath.hintprime(intm){inti,k;k=sqrt(m);for(i=2;i=k;i++)if(m%i==0)break;if(ik)return1;return0;}main(){inti,k;k=0;for(i=3;i=5000;i++)if(prime(i)==1){k++;printf(%disaprimemuber\n,i);}printf(共有%d个素数\n,k);}3.编写自定义函数count(intx),计算x的因子个数。利用此函数找出并输出1~1000中有奇数个不同因子的整数。#includestdio.h#includemath.hintcount(intx){intsum,i;sum=0;//记住因子的个数for(i=1;i=x/2;i++)if(x%i==0)sum+=1;returnsum+1;}intmain(void){inti,y;for(i=1;i=100;i++){y=count(i);if(y%2==1)printf(%d\t,i);}return0;}六、调试和测试结果1.输入:23输出:s=82.输出:共有668个素数2.3、输出结果为:实验六数组四、设计流程(算法描述)(请写出上机内容1的算法描述)设置两个变量分别指示头和尾。第一个和最后一个元素值互换,然后头和尾变量向里移动,最终到两变量相遇为止。五、程序清单1.编写程序:从键盘输入一串整数保存到数组中,调用函数antitone()将数组反序输出。自定义函数voidantitone(inta[],intn)实现将数组中的n个数据按逆序存放。voidantitone(inta[],intn){inti,j;intk;i=0;j=n-1;while(ij){k=a[i];a[i]=a[j];a[j]=k;i+=1;j-=1;}}2.已知某数列的前两项为2和3,其后每一项为其前两项之积。编程实现:从键盘输入一个整数x,判断并输出x最接近数列的第几项?#includestdio.h#includemath.hvoidMad(inta[],intn){inti;a[0]=2;a[1]=3;for(i=2;in;i++){a[i]=a[i-1]*a[i-2];}}intmain(void){inta[100],x,k1,k2;inti;Mad(a,100);//产生序列printf(inputx:);scanf(%d,&x);i=0;for(;xa[i];i++);k1=abs(x-a[i-1]);k2=abs(x-a[i]);if(k1k2)printf(themostsi