1、我的c语言程序我的c语言程序1.求a的开方#include#includeint main() float x0,x1,a; scanf(%f,&a); x0=a/2; x1=(x0+a/x0)/2; do x0=x1; /循环体中这个必须先执行 x1=(x0+a/x0)/2; while (fabs(x0-x1)=1e-5); printf(%fn,x0); return 0;2.完数:一个数等于他的因子之和(6=1+2+3)输出1000之内所有完数和其因子#includeint main() int n,i,s; for(n=2;n=1000;n+) s=0; /循环体中这个必须先执行 f
2、or(i=1;in;i+) if (n%i)=0) s=s+i; if(s=n) printf(%d its factors are ,n); for(i=1;in;i+) if(n%i)=0) printf(%d ,i); putchar(n); return 0;3.近似求的值,同时输出最后一位循环精度以及循环次数#includeint main() int i; double j=1,t,s=0; for(i=1;1/j=1e-8;i=i+2) /此精度可以改 j=i; /必须要这样做,要把i变为double型才能分之一 if(i%4=1)t=1/j; else t=-1/j; s=s+
3、t; i=i/2+1; printf(=%15.14fn循环精度%15.14fn循环次数%dn,s*4,t,i) return 0; /我的这个程序(for语句)显然比书上的算法简单4.输出100到200之间的所有素数#includeint main() int n,i,s; for(n=101;n=200;n+) /数据范围可以更改 s=0; /每次必须将s赋值为0 for(i=2;in;i+=2) if(n%i=0) s=s+i; if(s=0) printf(%d ,n); putchar(n); return 0;5.输入两个数,求其最大公约数与最小公倍数#includeint mai
4、n() int m,n,i,t; scanf(%d,%d,&m,&n); if(mn) t=m;m=n;n=t; for(i=1;i=n;i+) if(n%i=0)&(m%i=0) t=i;break; printf(最大公约数为%dn,t); for(i=m;i+) if(i%n=0)&(i%m=0) t=i;break; printf(最小公倍数为%dn,t); return 0;6.用二分法求方程的根#includeint main() double xa,xb,fa,fb; for(xa=-10,xb=10;(xb-xa)=1e-15;) /范围可以改变 fa=2*xa*xa*xa-4
5、*xa*xa+3*xa-6; /方程可以改变 fb=2*xb*xb*xb-4*xb*xb+2*xb-6; if(fa+fb)/20) xb=(xa+xb)/2; printf(方程的解为x=%fn,xa); return 0;6.几个数从小到大排序(用数组)选择法#includeint main() printf(请输入五个整数:n); int a5; /数的个数可以改 int i,j,m; for(i=0;i5;i+) scanf(%d,&ai); for(i=0;i5;i+) for(j=i+1;j5;j+) if(ajai) m=aj;aj=ai;ai=m; for(i=0;i5;i+)
6、 printf(%d ,ai); putchar(n); return 0; /又比老师的程序简单冒泡法排序#includeint main() printf(请输入五个整数:n); int a5; int i,j,m,o; /定义o简化算法 for(i=0;i5;i+) scanf(%d,&ai); for(i=0;i4;i+) o=0; for(j=0;jaj+1) m=aj;aj=aj+1;aj+1=m;o+; if(o=0)break; for(i=0;i5;i+) printf(%d ,ai); putchar(n); return 0;7.求矩阵的转制#includeint mai
7、n() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i=1;i+) for (j=0;j=2;j+) printf(%5d,aij); bji=aij; putchar(n); printf(array b:n); for (i=0;i=2;i+) for (j=0;j=1;j+) printf(%5d,bij); putchar(n); return 0; /优化讲义上所得8.用筛选法求10000以内所有素数#include#includeint main() int i,j,n,a10001; /范围可改 a1
8、=0; for(i=2;i=sqrt(10000);i+) for(j=2;j*i=10000;j+)aj*i=0; for(i=1,n=0;i=10000;i+) if(ai!=0) printf(%6d,i);n+; /用n计数,每十个换行 if(n=10) putchar(n);n=0; putchar(n); return 0;9.输出杨辉三角#include#define N 10 /符号常量N为输出杨辉三角的行数,可一改全改int main() /上面的几个可改数字的程序也可以如此做,方便简单 int i,j,aN+1N+1; for(i=1;i=N;i+) ai1=1; for(
9、j=1;j=N;j+) aij=1; for(i=3;i=N;i+) for(j=2;ji;j+) aij=ai-1j-1+ai-1j; for(i=1;i=N;i+) for(j=1;j=i;j+) printf(%5d,aij); putchar(n); putchar(n); return 0;10.得意之作!打印2014年年历表。#includeint main() int i,j,k,n=2; /i月份,j天数,k每月前空格,n列数计数 int m13=0,31,28,31,30,31,30,31,31,30,31,30,31; /m数组记每月天数 printf( 2014年年历表n
10、n); for(i=1;i=12;i+) switch(i) case 1:printf(一月n);break; case 2:printf(二月n);break; case 3:printf(三月n);break; case 4:printf(四月n);break; case 5:printf(五月n);break; case 6:printf(六月n);break; case 7:printf(七月n);break; case 8:printf(八月n);break; case 9:printf(九月n);break; case 10:printf(十月n);break; case 11:
11、printf(十一月n);break; case 12:printf(十二月n);break; printf(n 一 二 三 四 五 六 日n); for(k=1;k=n;k+)printf( ); for(j=1;j=mi;j+) printf(%3d,j); n+; if(n=7) putchar(n);n=0; printf(nn); return 0; 11.hanoi移盘子问题,运用函数递归,难! #includevoid move(char x,char y) printf(%c-%cn,x,y);void hanoi(int n,char a,char b,char c) if(
12、n=1)move(a,c); else hanoi(n-1,a,c,b); move(a,c); hanoi(n-1,b,a,c); int main() int m; printf(hanoi问题,将n个盘子从A借助B移动到C。n请输入盘子数n:); scanf(%d,&m); printf(移动方法为:n); hanoi(m,A,B,C);12.函数求最大公约数与最小公倍数#includeint Y(int a,int b) /最大公约数用递归函数的辗转相除法求得 int c,d,x; c=a/b,d=a%b; if(d=0)x=b; else x=Y(b,d); return x; in
13、t B(int a,int b) return(a*b/Y(a,b); /两数乘积等于其最大公约数与最小公倍数相乘int main() int a,b; printf(请输入两个整数:); scanf(%d%d,&a,&b); printf(最大公约数为%dn最小公倍数为%dn,Y(a,b),B(a,b); return 0;13,用函数求方程的根,判别式的情况都要考虑#include#includevoid root(double a,double b,double c);void root1(double a,double b,double c);void root2(double a,d
14、ouble b,double c);void root3();int main() double a,b,c; scanf(%lf %lf %lf,&a,&b,&c); root(a,b,c); return 0;void root(double a,double b,double c) double x=b*b-4*a*c; if(x0) root1(a,b,c); else if(x=0) root2(a,b,c); else root3();void root1(double a,double b,double c) double x=sqrt(b*b-4*a*c); printf(Th
15、e roots is%f,%fn,(-b-x)/(2*a),(-b+x)/(2*a);void root2(double a,double b,double c) printf(The root is%fn,-b/(2*a);void root3() printf(无实根n); /并不高级,但是对于练习函数的用法有很大帮助14.算法:n个人围成一圈1,2,3报数,报到3退出,问最后剩下的人是原来的第几个?(经过耗费脑细胞的优化算法,终于得到最简单的程序!累死!)#include#define n 10int main() int an+1,i,j; for(i=1;i=n;i+)ai=1; f
16、or(i=1,j=0;j!=3*n;i+) if(i=n+1)i=1; if(ai!=0)j+; if(j%3=0)ai=0; printf(%dn,i-1); return 0; #include#define n 10#define t 3int main() int an+1,i,j; for(i=1;i=n;i+)ai=1; for(i=1,j=0;j!=t*n;i+) if(i=n+1)i=1; if(ai!=0)j+; if(j%t=0)&(ai!=0)ai=0;printf(%3dn,i); return 0; 15.关于四个学生五门成绩的一些处理(没什么的,只是它长,练习之用,
17、留下以作纪念)。P292 15题#includeint main() void average1(int (*a)5); void search1(int (*a)5); void search2(int (*a)5); int a45=77,88,99,44,55,65,54,98,78,23,85,95,96,94,100,45,100,100,100,15; for(int *p=*a,i=1;p=*a+19;p+,i+) printf(%4d,*p); if(i%5=0)putchar(n); average1(a); search1(a); search2(a); return 0;
18、int average(int *p) for(int i=1,s=0;i=5;i+,p+) s=s+*p; return(s/5);void average1(int (*a)5) for(int i=1,s=0;i=4;i+,a+) s=s+*a; printf(average=%dn,s/5);void search1(int (*a)5) for(int i=1,s=0;i=4;i+,a+) for(int j=0,t=0;j5;j+) if(*(*a+j)1) printf(%d fail.nher/his scores is:,i+1); for(int j=0;j5;j+) printf(%d ,*(*a+j); printf(naverage score:%dn,average(*a); void search2(int (*a)5) for(int i=1,s=0;i=4;i+,a+) for(int j=0,t1=0,t2=0;j=85) t1+; if(*(*a+j)=95) t2+; if(t11|t20) printf(%d winsn,i+1);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1