C语言经典问题.doc_第1页
C语言经典问题.doc_第2页
C语言经典问题.doc_第3页
C语言经典问题.doc_第4页
C语言经典问题.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

C语言经典程序1.求1-1/2+1/3-1/4+1/99-1/100的值#include void main()int sign=1;float sum=1;int i=2;while(i=100) sign=-sign; sum=sum+sign*(1.0/i); i+; printf(该式子的值为%d,sum); 2.判断一个年份是不是闰年#includevoid main()int year;printf(Please input a year:n); scanf(%d,&year);if(year%4=0)&(year%100!=0)|(year%100=0)&(year%400=0)printf(%d is a leap yearn,year);else printf(%d is not a leap yearn0,year);3.海伦公式求三角形面积#include#includevoid main()float a,b,c,p,area; printf(请输入三角形的三边长n); scanf(%f,%f,%f,&a,&b,&c);p=1.0/2*(a+b+c);if(a+bc&b+ca&a+cb) area=sqrt(p*(p-a)*(p-b)*(p-c);printf(三角形的面积为:%7.2fn,area); else printf(不能构成三角形n);(1)此程序还可加入一个函数判断三角形形形状,但是较为复杂(2)其他的凸多边形可以通过分割成若干三角形,用此公式计算各三角形面积后相加得多边形面积4.鸡兔同笼问题:鸡头兔头的总个数m,脚的总个数n计算鸡和兔的只数#includevoid main()int m,n,x,y;printf(请输入鸡、兔子的头以及脚的的个数和都应为偶数n);scanf(%d,%d,&m,&n);if(4*m-n0)&(n-2*m0)x=(4*m-n)/2;y=(n-2*m)/2;printf(鸡的个数为%d,兔子的个数为为%dn,x,y);elseprintf(不存在这样的组合n);2. 5.计算分段函数的函数值y= Sin x (-5x0)#include#includevoid main()float x,y;printf(请输入x的值:n); scanf(%f,&x);if(x-5&x0)y=3*x-3;printf(当x=%f时,y=%10.6f,x,y); 6.给出一百分制成绩,要求输出成绩等级A、B、C、D、E,90以上为A; 80-89为B,70-79为C,60-69分为D,60分以下为E #includevoid main() float score,i; char grade; printf(请输入学生的成绩n); scanf(%f,&score); i=score/10; while(score100) printf(输入的成绩值有误,重新输入n); scanf(%f,&score); switch(int)i) case 0:grade=E; break;case 1:case 2:case 3:case 4:case 5:case 6:grade=D; break;case 7:grade=C; break;case 8:grade=B; break;case 9:grade=A; break;case 10:; printf(输入的成绩为%8.2f,其对应的等级为%cn,score,grade); 7.用微元法(梯形法)计算积分:x3+2x2+4x在规定区间的值 #includevoid main()float f(float x0);float x0,x1,y=0;int n,i;printf(请输入区间等分数,值越大,结果越精确n);scanf(%d,&n);printf(输入函数的区间:n);scanf(%f,%f,&x0,&x1);for(i=1;i=n;i+) y=y+(f(x0+(x1-x0)*(i-1)/n)+f(x0+(x1-x0)*i/n)*(x1-x0)/n)*(1.0/2); printf(所求积分值为%8.2f,y);float f(float x0)float z;z=x0*x0*x0+2*x0*x0+4*x0;return(z);8.计算阶乘,用递归法#includevoid main()float num,z;float factor(int num);printf(输入要计算阶乘的正数:n);scanf(%f,&num);z=factor(num);if(num0)|(int)num-num)!=0) printf(无效的数值n);elseprintf(%8.0f !=%10.8f,num,z); float factor(int num) float f;if(num=0|num=1) f=1; elsef=factor(num-1)*num;return(f);9.求sqrt(2+sqrt(2+sqrt(2+)+sqrt(2),次数由键盘输入#include#includevoid main()float result=sqrt(2);int n,m;printf(请输入根号的个数:n);scanf(%d,&n);m=n;while(n1)result=sqrt(2+result);n-;printf(如果有%d个根号,则结果为%f,m,result);10计算形如Ax2+Bx+C=0的方程的解,按情况讨论#include#includevoid main()float a,b,c,di,x1,x2,p,q;printf(请依次输入方程的系数abcn);scanf(%f,%f,%f,&a,&b,&c);di=b*b-4*a*c;if(a=0)if(b!=0)x1=-c/b;printf(方程为一元一次方程,有一实根x=%8.2fn,x1);else if(c=0)printf(方程是一个恒等式,x可以取任意值n);elseprintf(这是一个矛盾式n);elseif(di0) p=-b/(2.0*a);q=sqrt(-di);x1=q;printf(该二元一次方程有两个复根x1=%6.2f+%6.2fi x2=%6.2f-%6.2fin,p,x1,p,x1);else if(di=0)x1=-b/(2.0*a);printf(该二元一次方程有一个实根x=%8.2fn,x1);elsex1=(-b/(2.0*a)+sqrt(di);x2=(-b/(2.0*a)-sqrt(di);printf(该二元一次方程有两个实根x1=%8.2f x2=%8.2fn,x1,x2);11设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积圆柱体积。由键盘输入数据,用宏定义圆周率,结果取两位小数。#include#define pi 3.14159void main()float r,h;float c,cs,bs,bv,zv;printf(请输入圆的半径以及圆柱体的高n);scanf(%f,%f,&r,&h);c=2.0*pi*r;cs=pi*r*r;bs=4*pi*r*r;bv=(4.0/3)*pi*r*r*r;zv=cs*h;printf(圆周长为%6.2f,圆面积为%6.2f,圆球表面积为%6.2f,圆球体积为%6.2f,圆柱体积为%6.2f,c,cs,bs,bv,zv);12.将输入的字母变为其后的第四个字母,若到z就返回字母表顶端的a,变换前后大小写一致,例如a-e,z-a#includevoid main()char c,s;printf(输入字符串n);while(c=getchar()!=n)if(c=a&c=A&c=w&c=w&c=z)s=c-22;printf(%c,s); printf(n);13.判断输入的字符串中是否含大写字母,若是大写字母将其转换为小写字母#includevoid main()char c,s;printf(输入字符串n);while(c=getchar()!=n)if(c=A&c=a&c=z) s=c;printf(%c,s); printf(n);14.打印出斐波那契数列的前20项:1,1,2,3,5,8,13 #includevoid main() intFibonacci(int num);int num,m=0; printf(斐波那契数列的前20项为n);for(num=1;num=20;num+)printf(%10d,Fibonacci(num);m+;if(m%5=0)printf(n);int Fibonacci(int num)int f;if(num=2|num=1)f=1; elsef=Fibonacci(num-1)+Fibonacci(num-2);return(f);15.输入两个整数,求它们相除的余数。用带参数的宏来定义。#include#define mod(a,b) a%bvoid main() int m,n; printf(从大到小依次输入两个整数n); scanf(%d,%d,&m,&n); printf(%d和%d相除的余数为%dn,m,n,mod(m,n);16.判断一个数是否为素数#include#includevoid main() int i,m,k; printf(请输入一个整数:n); scanf(%d,&m); for(i=2;i=sqrt(m);i+) if(m%i!=0) printf(%d是素数n,m); break; else printf(%d不是素数n,m); 17.分解合数#includevoid main() int m,k; printf(请输入一个数: n); scanf(%d,&m); printf(%d=,m); for(k=2;km;) if(m%k!=0) /不能被k整除,就让k自加1 k+; else /能被k整除,就让m等于被除后的数 printf(%d*,k); m=m/k; k=2; /让k重新等于2 printf(%d,k);18,计算两个数的最大公约数和最小公倍数#includevoid main() int mi(int,int);int di(int,int,int);int m,n,x,y;printf(请输入两个整数n);scanf(%d,%d,&m,&n);x=mi(m,n);y=(m*n)/x;printf(这两个数的最大公约数为%d,最小公倍数为%d,x,y);int mi(int u,int v)int r,t;if(vu)t=u;u=v;v=t;while(r=u%v)!=0)u=v;v=r;return v;int di(int u,int v,int h)return (u*v)/h);19完数:因子之和等于它本身的数,打印1000内的完数,例如6=1*2*3=1+2+3#includevoid main() int m,i,sum;printf(1000以内的完数如下所示:n);for(m=1;m=1000;m+)sum=0;for(i=1;im;i+)if(m%i)=0) sum=sum+i;if(sum=m)printf(%d its factors are:,m);for(i=1;im;i+)if(m%i)=0)printf(%d,i);20.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#includevoid main() int word=0,space=0,digit=0,other=0;char c;printf(输入一行字符n);while(c=getchar()!=n)if(c=a&c=A&c=0&c=9)digit+; else if(c= ) space+; else other+;printf(字母的个数为%dn,word);printf(空格的个数为%dn,space);printf(数字的个数为%dn,digit);printf(其他字符的个数为%dn,other);该题也可通过字符数组和gets(str)函数实现21求Sn=a+aa+aaa+,若n为a的位数,求一直到有n个a时多项式的值,a和n由键盘输入。#includevoid main() int tn=0,sn=0,a,n,i; printf(依次输入a,n的值:n); scanf(%d,%d,&a,&n); for(i=1;i=n;i+) tn=tn+a; sn=sn+tn; a=a*10; printf(sn=%dn,sn);22.输出所有水仙花数:指各位数字立方和等于该数的三位数#includevoid main() int m,a,b,c; printf(水仙花数如下所示n); for(m=100;m=999;m+) a=(m%100)%10; b=(m%100)-a)/10; c=(m-b*10-a)/100; if(m=a*a*a+b*b*b+c*c*c) printf(%6d,m); 23. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,有多吃了一个。以后每天都如此。第十天只剩下一个桃子。求第一天摘的桃子的总个数 #includevoid main() int sum=1,day; for(day=10;day1;day-) sum=2*(sum+1); printf(第一天摘的桃子总数为%dn,sum);24.用迭代法求x=sqrt(a),求平方根的迭代公式为:xn+1=1/2(xn+a/xn),要求前后两次求出的x的差的绝对值小于10-5#include#includevoid main() float a; float x0,x1; printf(请输入要求平方根的数:n); scanf(%f,&a); x0=a/2; x1=(x0+a/x0)/2; while(fabs(x0-x1)=1e-5) x0=x1; x1=(x0+a/x0)/2; printf(%6.2f的平方根为%8.5f,a,x1);25.(1)打印出一个由*构成的菱形图案(2)打印数字金字塔类似题型难点在于找出列控制与行控制变量间的关系(1)#includevoid main()int i,j,k;for(i=0;i=3;i+)for(j=0;j=2-i;j+)printf( );for(k=0;k=2*i;k+)printf(*); printf(n);for(i=0;i=2;i+)for(j=0;j=i;j+)printf( );for(k=0;k=4-2*i;k+)printf(*);printf(n);(2) 1121123211234321#include #define N 9/N可换为任意整数,由于没有设置格式,故超出9无法正确显示void main() int i,j,k,m;for(i=1;i=N;i+)for(j=1;j=N-i;j+)printf( ); for(k=1;k=2;m-)printf(%d,m-1);printf(n);26.两乒乓球队进行比赛,甲队ABC三人,乙队XYZ三人,已知A不和X比,C不和XZ比, 编程找出三队比赛名单。#includevoid main() int i,j,k; printf(比赛名单如下:n); for(i=X;i=Z;i+) for(j=X;j=Z;j+) if(i!=j) for(k=X;k%cnB-%cnC-%cn,i,j,k);27.用筛选法求100之内的素数#include#includevoid main() int i,j,a101;printf(0-100内的素数为:n); for(i=1;i=100;i+) ai=i; for(i=2;isqrt(100);i+) for(j=i+1;j=100;j+) if(ai!=0&aj!=0&(aj%ai=0) aj=0; for(i=1;i=100;i+) if(ai!=0) printf(%5d,ai); 28.对输入的数进行(1)选择排序(2)冒泡排序 (1) #includevoid main()int i,j,a10,min,t;printf(请输入要排序的数:n);for(i=0;i=9;i+)printf(a%d=,i);scanf(%d,&ai);printf(n);printf(待排序的数:n);for(i=0;i=9;i+)printf(%4d,ai);printf(n); for(i=0;i=9;i+)min=i;for(j=i+1;jaj) min=j;t=amin; amin=ai;ai=t;printf(排序后的数:n);for(i=0;i=9;i+)printf(%4d,ai); printf(n);(2) #includevoid main()void bubble(int a);int i,a10;printf(请输入要排序的数:n);for(i=0;i=9;i+)printf(a%d=,i);scanf(%d,&ai);printf(n);printf(待排序的数:n);for(i=0;i=9;i+)printf(%4d,ai);printf(n);bubble(a);printf(排序后的数:n);for(i=0;i=9;i+)printf(%4d,ai); printf(n);void bubble(int a)int i,j,t;for(j=0;j=9;j+)for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;29.有一个已经排好序的数组,今输入一个数要求按原来排列规律将其插入#includevoid main()int num,i,j,a11=1,2,5,7,8,9,11,34,55,65;printf(已经排好序的数为:n);for(i=0;ia9)a10=num;elsefor(i=0;inum) for(j=9;j=i;j-)aj+1=aj; ai=num;break;printf(插入数字后的数为:n);for(i=0;i=10;i+)printf(%4d,ai);printf(n);30.将一个数组中的值按逆序重新存放 #include#define N 5void main()int i,aN,t;printf(请输入要逆序存储的数:n);for(i=0;i=N-1;i+)printf(a%d=,i);scanf(%d,&ai);printf(n);printf(待逆序存储的数:n);for(i=0;i=N-1;i+)printf(%4d,ai);printf(n);for(i=0;iN/2;i+)t=ai;ai=aN-i-1;aN-i-1=t;printf(逆序后的数:n);for(i=0;i=N-1;i+)printf(%4d,ai); printf(n);31.输出杨辉三角形的前N行#include#define N 10/*通过改变N的值来改变行数,行数为N-1,例如现在是9行*/void main()int i,j,aNN;for(i=1;i=N-1;i+)ai1=1;aii=1;for(i=3;i=N-1;i+)for(j=2;j=i-1;j+)aij=ai-1j-1+ai-1j; for(i=1;i=N-1;i+)for(j=1;j=i;j+)printf(%5d,aij);printf(n);printf(n);*32.一些复杂问题33.不用strcat函数将两个字符串连接起来#includevoid main()char s110,s210;int i=0,j=0;printf(n请输入字符串1:n);scanf(%s,s1);printf(请输入字符串2:n);scanf(%s,s2);while(s1i!=0)i+;while(s2j!=0)s1i+=s2j+;s1i=0;printf(连接后的新字符串为%s,s1);也可通过函数实现34.卷入的数 1 2 3 4 5 6 7 14 13 12 11 10 9 8 15 16 17 18 19 20 21#include #define M 8#define N 8void main() void change(int aN);int m=0,i,j,aMN; for(i=0;i=M-1;i+) for(j=0;j=N-1;j+) aij=m+; change(a); for(i=0;i=M-1;i+) for(j=0;j=N-1;j+) printf(%5d,aij); printf(n); void change(int aN)int temp,i,j; for(i=0;i=M-1;i+)for(j=0;jN/2;i+)if(i%2!=0)temp=aij;aij=aiN-j-1;aiN-j-1=temp;else35.不用strcmp函数实现两个字符串比较,其差值为两字符串第一个不同字符的ASCII码之差#include void main()char str180,str280;int i=0,res;printf(请输入字符串1:n);gets(str1);printf(请输入字符串2:n);gets(str2);if(str10!=0&str20!=0)&str1i=str2i)i+;res=str1i-str2i;printf(两字符串差值为:%dn,res);可以用自己编写的函数完成所有string.h中封装好的函数!36.给定一个3*3的二位数组,写函数求其转置矩阵#include #define N 3int aNN;void main()void trans(int a3);int i,j;printf(请输入一个3*3二维数组:n);for(i=0;i=N-1;i+)for(j=0;j=N-1;j+)scanf(%d,&aij);printf(初始的3*3二维数组:n);for(i=0;i=N-1;i+)for(j=0;j=N-1;j+)printf(%5d,aij); printf(n);printf(转置后的的3*3二维数组:n);trans(a);void trans(int a3)int i,j,t,bNN;for(i=0;i=N-1;i+)for(j=0;j=N-1;j+)bij=aji;for(i=0;i=N-1;i+)for(j=0;j=N-1;j+)printf(%5d,bij); printf(n);37.编写一个函数,将一个字符串中的元音字母复制到另一个字符串中然后输出#include void main()void copy(char s,char c);char s80,c80;printf(输入一个字符串n);gets(s);copy(s,c);printf(其中的元音字母为%sn,c);void copy(char s,char c)int i,j=0; for(i=0;si!=0;i+) if(si=a|si=e|si=i|si=o|si=u|si=A|si=E|si=I|si=O|si=U)cj+=si;cj=0;38.编写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字字符之间空一格空格。如输下 1990,应输出1 9 9 0#include #include void main() void insert(char s);char s80;gets(s);insert(s);void insert(char s)int i;for(i=strlen(s);i0;i-)/从高到低遍历使得数组最大长度已定,不会动态改变s2*i=si;s2*i-1= ;printf(%s,s);39.用牛顿迭代法求方程的根,方程为ax3+bx2+cx+d=0,求x在1附近的实根#include #include void main() float solve(float a,float b,float c,float d);float a,b,c,d,x;printf(请输入a,b,c,d的值n);scanf(%f,%f,%f,%f,&a,&b,&c,&d);x=solve(a,b,c,d);printf(x=%7.2f,x);float solve(float a,float b,float c,float d)float f,f1,x=1,x0;dox0=x; f=a*x*x*x+b*x*x+c*x+d;f1=3*a*x*x+2*b*x+c;x=x0-(f/f1);while(fabs(x0-x)1e-3);return x;40.用递归方法求n阶勒让德多项式的值,递归公式为:Pn(x)= 1,n=0 x,n=1 (2n-1)xPn-1(x)-(n-1)Pn-2(x)/n,n1#include #include void main() float legen(int n,int x);int n,x;float y;printf(请输入n,x的值n);scanf(%d,%d,&n,&x);y=legen(n,x);printf(P%d(%d)=%6.2fn,n,x,y);float legen(int n,int x)if(n=0)return 1;else if(n=1)return x;elsereturn (2*n-1)*x*legen(n-1),x)-(n-1)*legen(n-2),x)/n;41. 十六进制转为十进制#include#include#define N 10void main() int trans(char a); char aN; int r; printf(请输入一个十六进制数:);gets(a); r=trans(a); printf(它的十进制形式为%dn,r); int trans(char a) int i,bN,sum=0; for(i=0;i=0&ai=A&ai=a&ai=f) bi=ai-a+10; for(i=0;istrlen(a);i+) sum=sum*16+bi; return sum; 42. 输入一个整数n用递归方法将其转换为字符串输出#includevoid main()void convert(int n);int num;printf(input an integer:); scanf(%d,&num);printf(output:);if(num0)putchar(-);num=-num;convert(num);putchar(n);void convert(int n)/递归要用到栈,特点是后进先出int i;if(i=n/10)!=0)convert(i);putchar(n%10+0);43. 输入年,月,日,判断该日是该年的第几天#includevoid main()int sum(int month,int day);int leap(int year);int year,month,day,days;printf(inputdate(year,month,day):);scanf(%d,%d,%d,&year,&month,&day);days=sum(month,day);if(leap(year)&month=3)days=days+1;printf(%d/%d/%d is the %dth day in this year.n,year,month,day,days);int sum(int month,int day)int tab13=0,31,28,31,30,31,30,31,31,30,31,30,31;int i;for(i=0;i=month-1;i+) day=day+tabi;return day;int leap(int year)/判断是否是闰年int leap;leap=(year%4=0)&(year%100!=0)|(year%100=0)&(year%400=0)=0;return leap;从此处开始涉及指针44. 输入三个整数按由小到大的顺序输出#includevoid main()void swap(int *p1,int *p2);int a,b,c;int *p1,*p2,*p3;printf(请输入三个数:);scanf(%d,%d,%d,&a,&b,&c);p1=&a;p2=&b;p3=&c;if(ab) swap(p1,p2);if(ac) swap(p1,p3);if(bc) swap(

温馨提示

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

评论

0/150

提交评论