c语言作业资料.doc_第1页
c语言作业资料.doc_第2页
c语言作业资料.doc_第3页
c语言作业资料.doc_第4页
c语言作业资料.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

选择作业:1、输入两个运算量和一个运算符,完成加、减、乘、除、取余运算,输出运算结果。#includestdio.h main( )int x,y,z; char ch;printf(Enter an operator(+,-,*,/,%):n);ch=getchar();printf(Enter two numbers:);scanf(%d%d,&x,&y);switch(ch) case +:z=x+y;printf(%d+%d=%d,x,y,z);break; case -:z=x-y;printf(%d-%d=%d,x,y,z);break; case *:z=x*y;printf(%d*%d=%d,x,y,z);break; case /: if (y=0) printf(division by zeron); else z=x/y; printf(%d/%d=%d,x,y,z);break; case %: if (y=0) printf(division by zeron); else z=x%y; printf(%d%d=%d,x,y,z);break; default:printf(The error operator); 2. 用公式f=p*w*s*(1-d)计算运输费。要求运费和路程从# include void main( )float f,p,w,s,d;int c;printf(please input how much mony/T:); scanf(%f,&p);printf(please input how weight:); scanf(%f,&w);printf(please input how loog:); scanf(%f,&s);if(s=3000) c=12;else c=s/250; switch( c) case 0: d=0;break; case 1: d=0.02;break; case 2: case 3: d=0.05;break; case 4: case 5: case 6: case 7: d=0.08;break; case 8: case 9: case 10: case 11: d=0.10;break; case 12: d=0.15; break; f=p*w*s*(1-d);printf(f=%.2fn,f);3.区分键盘上的字母、数字、空格和回车字符。# include void main( ) char c;printf(Please input a character:n); c = getchar(); if(c= | c=n) printf(This is a blank or enter); else if(c=0 & c =a & c =A & c = Z) printf(This is a 小写 letter.n); else printf(This is an other character. n);实验三一、编程,输入任意三个数n1,n2,n3,求其中最大的一个数。输入输出示例:input n1,n2,n3: 2 10.58max=10.50源程序:#includevoid main( )float n1,n2,n3,max;printf(please input n1,n2,n3:);scanf(%f%f%f,&n1,&n2,&n3);max=n1;if(maxn2) max=n2;if(maxn3) max=n3;printf(the max is:%.1fn,max);运行结果:please input n1,n2,n3:9 10 3the max is:10.0Press any key to continue二、编程,输入x,计算并输出下列分段函数f(x)的值(保留2位小数)。 x x1y= 2x-1 1=x=10 输入输出示例:input x: -2.5f(-2.500000)=-2.5源程序:#includevoid main()float x,y;printf(please input x:);scanf(%f,&x);if(x=1&x10) y=2*x-1;else y=3*x-1;printf(f(%.1f)=%.1fn,x,y);运行结果;第一次运行:please input x:0.5f(0.5)=0.5Press any key to continue第二次运行;please input x:8f(8.0)=15.0Press any key to continue第三次运行:please input x:10f(10.0)=29.0Press any key to continue三、编程,把百分制成绩转换成5级记分制,要求用switch语句。 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E 输入输出示例:input Score: 8686的等级为B源程序:#includevoid main()float score;int y;printf(please input score:);scanf(%f,&score);y=(int)(score/10);switch(y)case 0:case 1:case 2:case 3:case 4:case 5:printf(%f的等级为En,score); break;case 6:printf(%f的等级为Dn,score); break;case 7:printf(%f的等级为Cn,score); break;case 8:printf(%f的等级为Bn,score); break;case 9:case 10:printf(%f的等级为An,score); break; 第一次运行结果:please input score:100APress any key to continue第二次运行结果:please input score:8686.0的等级为BPress any key to continue第三次运行结果:please input score:5050的等级为EPress any key to continue四、编程,输入2005年的任一个月,输出这个月的天数,要求使用switch语句。输入输出示例:Input month of 2005: 10 2005年10月有31天源程序:#includevoid main( )int month;printf(please input a month;);scanf(%d,&month);switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:printf(2005年%d月有31天n,month); break;case 2:printf(2005年%d月有28天n,month); break;case 4:case 6:case 9:case 11:printf(2005年%d月有30天n,month); break;default:printf(input another month pleasen3);运行结果:please input a month;12005年1月有31天Press any key to continue五、改错,对2个整数进行乘、除和求余运算。 源程序(有错误的程序)#includevoid main() char sign; int x,y; prnitf(“输入x 运算符 y:”); scanf(“%d%c%d”,&x,&sign,&y); if(sign=*) printf(“%d * %d = %dn”,x,y,x*y); else if(sign=/) printf(“%d / %d = %dn”,x,y,x/y); else if(sign=%) printf(“%d % %d = %dn”,x,y,x%y); else printf(“运算符输入错误”);实验四:1调试示例:输入2个正整数m,n,输出它们的最小公倍数和最大公约数。修改后的程序:#includevoid main() int m,n,j,k; printf(input m n:n); while(scanf(%d%d,&m,&n),m0 | n0); j=m; while(j%n!=0) j=j+m; k=(m*n)/j; printf(最小公倍数是:%dn最大公约数是:%dn,j,k);运行结果:input m n:3 6最小公倍数是:6最大公约数是:3编程,输入一批整数,先求出其中的偶数和及奇数和,然后输出偶数和与奇数和的差输入输出示例:输入一批整数:10 11 20 33Ctrl+Zsub=-14源程序:#includevoid main() int x,sum1=0,sum2=0,sub=0; printf(请输入一批整数:n); while(scanf(%d,&x)!=EOF) if (x%2=0) sum1+=x; else sum2+=x; sub=sum1-sum2; printf(sum1=%dnsum2=%dnsub=%dn,sum1,sum2,sub);运行结果为:请输入一批整数:1 2 3 4 Ctrl+Zsum1=6sum2=4sub=2编程,输入个正实数eps,计算并输出下式的值,直到最后一项的绝对值小于eps源程序如下;#include void main() float f=0,eps,t=1.0;int i=1,sign=1;printf(请输入正实数eps的值:);scanf(输入一个正实数%f,&eps);while(abs(t)eps)t=1.0/i*sign;f+=t;sign=-sign;i+=4;printf(f=%f n,f);运行结果为:请输入正实数eps的值:0.000001f=0.8785764 编程,输入一个整数,求它的各位数字之和及位数。例如123的各位数字之和是6,位数是3.源程序如下:#includevoid main()int i=0,n,sum=0;scanf(%d,&n);if(n0)sum+=n%10; n=n/10; i+;printf(位数=%d,各位数之和=%dn,i,sum);运行结果:134位数=3;各位数之和=85、改错,输入2个整数,分别将其逆向输出。输入输出示例:修改后的程序:#includeint fun(int n) int m,y; y=0;if(n0) m=n; else m=-n; while (m0) y=y*10+m%10; m=m/10; if(n=0) return y; else return -y;void main() int n,m; scanf(%d%d,&n,&m); printf(%d的逆向是%dt,n,fun(n); printf(%d的逆向是%dt,m,fun(m);运行结果:234 -234234的逆向是432-234的逆向是-4326调试示例,输入正整数的个数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数修改后的程序:#include#includevoid main() int i,j,k,m,n; printf(输入正整数的个数n:); scanf(%d,&n); printf(输入%d个正整数n,n); k=n; for(j=0;jk;j+) scanf(%d,&m); n=sqrt(m); for(i=2;in) printf(%d是一个素数!n,m); else printf(%d不是一个素数!n,m); 运行结果:输入正整数的个数n:3输入3个正整数:2 5 92不是一个素数;5是一个素数;9不是一个素数;7编程,输出101115之间不能被3整除的数,每行输出5个。要求使用continue语句。源程序:#includevoid main() int n,count=0;for(n=101;n=115;n+)if(n%3=0) continue;elseprintf(%d ,n); count+; if(count%5=0)printf(n);运行结果:101 103 104 106 107109 110 112 113 115 8编程,猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第10天早上想再吃的时候,见只剩下一个桃子了。求第1天共摘了多少桃子源程序:#include void main() int day,total,sum=1;for(day=1;day=9;day+)total=(sum+1)*2;sum=total;printf(%dn,total);运行结果:1534方法二#include void main() int day,x; day=9; x=1; while(day0) x=(x+1)*2;day-; printf(the total is %dn,x); 9在1001500内找出所有的亲密数对,并输出每对亲密数对。输入输出示例:(220,284)(284,220)(1184,1210)(1210,1184)源程序:# includeint yun(int x);void main() int a,b; for (a=100;a=100&b=1500) if (yun(b)=a)&(a!=b) printf(%5d%5d),a,b);printf(n); int yun(int x) int i,sum=0; for(i=1;ix;i+) if(x%i=0) sum+=i; return sum;运行结果:( 220 284)( 284 220)( 1184 1210)( 1210 1184)Press any key to continue函数作业:4.4,写一个将整数转换成字符串的函数。源程序:#includevoid main()int i=0,j,x;char c10,temp;scanf(%d,&x);while(x!=0)ci=x%10+0;x=x/10;i+;ci=0;for(j=0;j=i/2;j+)temp=cj;cj=ci-j-1;ci-j-1=temp;for(j=0;j=0,n=0, Ack(m,n)定义为Ack(0,n)=n+1Ack(m,0)= Ack(m-1,1)Ack(m,n)= Ack(m-1,Ack(m,n-1), m0, n0源程序: #includeint ack(int m,int n)if(m=0) return (n+1); else if(n=0) return ack(m-1,1); elsereturn ack(m-1,ack(m,n-1);void main()int m,n;printf(input m,n(m=0,n=0):);scanf(%d%d,&m,&n);printf(ack(%d,%d)=%dn,m,n,ack(m,n);4.6分别写出Hermite多项式Hn(x)之值的递推和递归函数,Hn(x)定义如下:H0(x)=1H1(x)=2*x;Hn(x)=2*x* Hn-1(x)-2*(n-1) Hn-2(x), x1源程序:#includeint hermite(int n,int x)if(n=0)return 1; if(n=1)return (2*x); if(x1)return (2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x);void main()int n,x;printf(input n,x:);scanf(%d%d,&n,&x);printf(hermite(%d,%d)=%dn,n,x,hermite(n,x);运行结果:input n,x:5 5hermite(5,5)=80600Press any key to continue实验五:1.某数列为K(n)的定义为:求该数列的第六项k(6)。 k(n)=1 n=1 k(n-1)2 n为偶数 k(n-1)3 n为奇数 源程序:#includefloat k(int n) int m;if(n=1) m=1;else if(n%2=0) m=k(n-1)*2;else m=k(n-1)*3;return (m);void main( ) int i;int j;printf(input a integer number:);scanf(%d,&i);if(i=0)printf(n=0,data error!);else j=k(i); printf(nk(%d)=%d,i,j);2. 写出判断素数的函数,在主函数中输入一序列整数(ctrl+z结束),输出是否是素数的信息。源程序:#include #include int p(int n);void main()int n,x,t=0; while(scanf(%d,&n)!=EOF)x=p(n);if(x=1) printf( %3d , n);t+;if(t%10=0) printf(n);int p(int n) int i,k; k=sqrt(n); for(i=2;i=k;i+)if(n%i=0) return 0; return 1;3. 写两个函数,求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。源程序:#include int gcd(int n, int m) int r,t; if(m2f(2)=f(1)=1当 n=1或n=2 源程序:#includeint f(int n) int m;if(n=1|n=2) m=1;else m=f(n-2)+f(n-1);return m;void main( ) int i; int n;printf(input a integer number:);scanf(%d,&n);if(n=0) printf(n=0,data error!);else for (i=1;i=n;i+) printf(tf(%d)=%dt,i,f(i);数组实验:1编程:输入一个正整数n(0n=10)和一组(n个)有序整数,再输入一个整数x,把x插入到这组数据中,使该组数据仍然有序源程序:#includevoid main() int i,j,n,x,a10,t; printf(输入数据的个数n:); scanf(%d,&n); printf(输入%d个整数:,n); for(i=0;in;i+) scanf(%d,&ai); printf(输入要插入的整数:); scanf(%d,&x); for(i=0;iai) continue; j=n-1; while(j=i) aj+1=aj; j-; ai=x; break;if(i=n) an=x;for(i=0;in+1;i+) printf(%3d,ai);putchar(n);2编程,输入1个正整数n(1n=10),再输入n个整数,将最小值与第1个数交换,最大值与最后1个数交换,然后输出交换后的n个数。源程序:#includevoid main() int i,n,index,temp,a10,min,max; printf(请输入整数个数n(n=10):); scanf(%d,&n); printf(请输入%d个整数:n,n); for(i=0;in;i+) scanf(%d,&ai); min=max=a0; for(i=0;in;i+) if(aimin) min=ai;index=i;temp =a0;a0=aindex;aindex=temp;for(i=1;imax)max=ai;index=i;temp=an-1;an-1=aindex;aindex=temp; printf(交换后的%个整数为:,n); for(i=0;in;i+) printf(%d ,ai); 运行结果:请输入整数个数n(n=10):5请输入5个整数:2 1 5 10 9交换后的个整数为:1 2 5 9 10 Press any key to continue 3编程,输入1个正整数n(1n=10),再输入n个整数,按绝对值从小到大排序后输出方法一:选择排序法源程序:#include#includevoid main()int i,index,temp,n,j,a10;printf(Input a number please: );scanf(%d,&n);printf(Input %d numbers:,n);for(i=0;in;i+)scanf(%d,&ai);for(i=0;in-1;i+)index=i;for(j=i+1;j=n-1;j+)if(abs(aj)abs(aindex) index=j;temp=ai;ai=aindex;aindex=temp;printf(exchanged %d numbers:,n);for(i=0;in;i+)printf(%4d,ai);printf(n);方法二:冒泡法源程序:#include#includevoid main()int i,temp,n,j,a10;printf(Input a number please: );scanf(%d,&n);printf(Input %d numbers:,n);for(i=0;in;i+)scanf(%d,&ai);for(j=0;j=n-2;j+)for(i=0;iabs(ai+1) temp=ai;ai=ai+1;ai+1=temp; printf(exchanged %d numbers:,n);for(i=0;in;i+)printf(%4d,ai);printf(n);运行结果:Input a number please: 10Input 10 numbers:-11 2 8 5 -3 -16 9 7 6 10exchanged 10 numbers: 2 -3 5 6 7 8 9 10 -11 -16Press any key to continue4编程,平面上有n个点,求所有各点之间的最长距离。要求定义和调用函数计算距离源程序:#include#includefloat fun(float x0,float x1,float y0,float y1)float y;y=sqrt(pow(x0-x1),2)+pow(y0-y1),2);return y;void main()float x5,y5;int i,j;float max=0.0,t=0.0;printf(please input 5 numbers:);printf(横坐标:);for(i=0;i5;i+)scanf(%f,&xi);printf(纵坐标:);for(i=0;i5;i+)scanf(%f,&yi);for(i=0;i4;i+)for(j=i;j4;j+)t=fun(xi,xj+1,yi,yj+1);if(maxt)max=t;printf(the longest distance=%.2fn,max);输入点数:5输入5个点的坐标:1 2.53.2 3.76.5 2.35.1 0.63.6 1.2最长距离是5.50方法二:#include#includevoid main( ) float a202,b2020,x,y; int n,i,j,row,cel; printf(输入点数:); scanf(%d,&n); printf(输入%d点的坐标:,n); for (i=0;in;i+) for (j=0;j2;j+) scanf(%f,&aij); printf(n); for (i=0;in;i+) for (j=0;jn;j+) x=ai0-aj0; y=ai1-aj1;bij=hypot(x,y); printf(n); for (i=0;in;i+) for (j=0;jn;j+) printf(%.2ft ,bij); printf(n); row=0;cel=0; for (i=0;i5;i+) for (j=0;jbrowcel) row=i;cel=j; printf(n第%d点到第%d点距离最大是%.2fn ,row+1,cel+1,browcel);5编程,输入一个n行m列(n=4,m=4)的数组,先以n行m列的格式输出该数组,然后找出该数组中值最小的元素,输出该元素及其行下标和列下标。程序如下:#includevoid main()int n,m,i,j,a44,min,max,min_row,min_col,max_row,max_col;printf(输入行数);scanf(%d,&n);printf(输入列数);scanf(%d,&m);for(i=0;i=n-1;i+)for(j=0;j=m-1;j+)scanf(%d,&aij);for(i=0;i=n-1;i+)for(j=0;j=m-1;j+)printf(%3d,aij);printf(n);min_row=min_col=0;min=a00;for(i=0;i=n-1;i+)for(j=0;j=m-1;j+)if(aijmin)min=aij;min_row=i; min_col=j;max=a00;for(i=0;i=n-1;i+)for(j=0;jmax)max=aij;max_row=i; max_col=j;printf(最大值是:a%d%d=%d,最小值是:a%d %d=%dn,max_row,max_col,max,min_row,min_col,min);运行结果输入行数3输入列数21 2 3 4 5 6 1 2 3 4 5 6最大值是:a21=6,最小值是:a0 0=1Press any key to continue6.编程输出以下的杨辉三角形(输出前10行) 源程序:#includevoid main()int i,j,a1010;for(i=0;i10;i+)ai0=1;aii=1;for(i=2;i10;i+)for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;i10;i+)for(j=0;j=i;j+)printf(%4d,aij);printf(n);运行结果: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1Press any key to continue指针作业:1比较n(n10)个字符串排序输出源程序:#include#includevoid sort(char array20,int n);void main()char str1020;int i,j,k,n;printf(input n(n=10):);scanf(%d,&n);printf(input %d string:n,n);for(i=0;i=n;i+)gets(stri);sort(str,n);for(i=0;i=n;i+)puts(stri);void so

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论