《C语言环程序-精品文档资料整理.doc》由会员分享,可在线阅读,更多相关《C语言环程序-精品文档资料整理.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、环程序5.1.1 累加和程序1:应用for循环设计/* for循环求s=1*2+2*3+99*100 */main() long i,s; s=0; for(i=1;i=99;i+) /* 设置循环i=1,2,99 */ s+=i*(i+1); /* 把通项i*(i+1)累加到s中 */ printf(1*2+2*3+99*100=%ldn,s); 程序2: 应用while循环设计 /* while循环求s=1*2+2*3+99*100 */main() long i,s; i=1;s=0; while(i=99) /* 设置循环i=1,2,99 */ s+=i*(i+1);i+; /* 把通
2、项i*(i+1)累加到s中 */ printf(1*2+2*3+99*100=%ldn,s); 程序3: 应用do while循环设计/* do while循环求s=1*2+2*3+99*100 */main() long i,s; i=1;s=0; do s+=i*(i+1);i+; /* 把通项i*(i+1)累加到s中 */ while(i=99); /* 设置循环i=1,2,99 */ printf(1*2+2*3+99*100=%ldn,s); 5.1.2 代数和/* 求s=1-1/2+1/3-1/4+-1/100 */main()int k,n;float s=0; for(k=1;
3、k=100;k+) if(k%2=1) s+=1.0/k; /* 应用分支实现符号一正一负 */ else s-=1.0/k; printf(s=%9.6f,s); 5.1.3 阶乘计算/* 循环累乘求阶乘n! */main()int i,n; long t;scanf(%d,&n);t=1; /* 积变量t赋初值1 */for(i=1;i=n;i+) t=t*i; /* 循环变量i累乘到t,体现阶乘运算 */printf(%d!=%ldn,n,t);/* 递归求阶乘N!*/float fac(n)int n;long f; if(n=0) f=1; /* 初始条件 */ else f=n*f
4、ac(n-1); /* 递归关系 */ return (f); main() int n; long y; printf(input n:); scanf(%d,&n); y=fac(n); printf(%d!=%ldn,n,y); .1.4 定积分计算#includemath.hmain() int i,n=1000; float a,b,h,t1,t2,s,x; printf(请输入积分限a,b:); scanf(%f,%f,&a,&b); h=(b-a)/n; for(s=0,i=1;i=n;i+) x=a+(i-1)*h;t1=exp(-x*x/2);t2=exp(-(x+h)*(x
5、+h)/2); s+=(t1+t2)*h/2; /* 梯形面积累加 */ printf(梯形法算得积分值:%f.n,s);5.2.1 百鸡问题main()int x,y,z; for(x=1;x=19;x+) for(y=1;y=33;y+) for(z=1;z=100;z+) if(z%3=0 & x+y+z=100 & 5*x+3*y+z/3=100) printf(x=%d,y=%d,z=%dn,x,y,z); /* 同时满足时打印 */ 5.2.2 解 Pell方程/* 解 PELL方程: x2-ny2=1. */#include main()int n,m,t; long a,x,y
6、; printf(解PELL方程: x2-ny2=1.n); printf(请输入非平方正整数 n:); scanf(%d,&n); m=sqrt(n); if(m*m=n) printf(n为平方数,方程无正整数解!n); return; printf(解PELL方程:x2-%dy2=1n,n); for(y=1;y=10000;y+) /* 实施穷举,约定10000内 */ a=n*y*y;x=sqrt(a+1); if(x*x=a+1)printf(方程的基本解为:); printf( x=%ld , y=%ldn,x,y); break; 5.2.3 牛顿迭代法解方程#includef
7、loat solut(a,b,c,d)float a,b,c,d; float x=1,x0,f,f1; do x0=x; /* 在循环中实施迭代 */ f=(a*x0+b)*x0+c)*x0+d; f1=(3*a*x0+2*b)*x0+c; x=x0-f/f1; while(fabs(x-x0)=1e-5); return(x);main()float a,b,c,d;printf(input a,b,c,d:n);scanf(%f,%f,%f,%f,&a,&b,&c,&d);printf(n x=%10.6fn,solut(a,b,c,d);5.2.4 水手分椰子main() int k,
8、n; long x,y; printf(n=); scanf(%d,&n); /* 输入水手个数n */ for(x=n-1;x1000000;x+=n-1) y=x; for(k=1;kn) y=y/(n-1)*n+1; printf(%d个水手分椰子,原有椰子至少有:%ld个.n,n,y); for(k=1;k=n;k+) printf(第%d个分:%ld=%d*%ld+1,k,y,n,(y-1)/n); y=(y-1)/n*(n-1); printf(分后剩余:%ld=%d*%ldn,y,n-1,y/(n-1); printf(最后一起分:%ld=%d*%ld+1,y,n,(y-1)/n
9、); break; 5.3.1 探求区间素数main() long int a,b,k,t,j,n; n=0; printf(请输入区间:); scanf(%ld,%ld,&a,&b); printf(%ld-%ldn,a,b); for(k=a;k=b;k+) t=0; for(j=2;j=k/2;j+) /* 实施试商判别 */if(k%j=0) t=1; if(t=0) n+; printf(n n=%ldn,n); 5.3.2 梅森素数#includemain() long int k,t,j,m,n,x; x=0;t=2; for(n=2;n=30;n+) t*=2;k=t-1;m=
10、0; for(j=3;j=sqrt(k);j+=2) /* 实施试商判别 */ if(k%j=0) m=1; if(m=0) x+;printf(2%ld-1=%ldn,n,k); printf(x=%ld n,x); 5.3.3 合数世纪#include main()long a,b,k; int s,x; for(a=21;a200000;a+) /* 在约定区间内穷举世纪 */ s=0; for(b=a*100-99;b=a*100-1;b+=2) /* 穷举每个奇数年号b */ x=0; for(k=3;k=sqrt(b);k+=2) if(b%k=0) x=1;break; s=s+
11、x; /* 年号b为合数时,x=1,s增1 */ if(s=50) /* s=50,即有50个合数 */ printf(最早出现的合数世纪为:%ld 世纪!n,a);break; 5.3.4 质因数分解 /* 质因数分解乘积形式 */#includemath.hmain()long int b,i,k,m,n,w=0;printf(m,n中整数分解质因数.n);printf(请输入m,n:);scanf(%ld,%ld,&m,&n);for(i=m;i=n;i+) /* i为待分解的整数 */printf(%ld=,i); b=i;k=2; while(k1) printf(%ld*,k);c
12、ontinue; /* k为质因数,返回 */ if(b=1) printf(%ldn,k); k+; if(b1 & b0) a=b;b=r;r=a%b; /* 实施辗转相除 */ printf(最大公约数为:%ldn,b); printf(最小公倍数为:%ldn,k/b);5.4.2 水仙花数main()int i,j,k,n; for(n=100;n1000;n+) i=n/100;j=(n/10)%10;k=n%10; /* 分离n各位数字i,j,k */ if(n=i*i*i+j*j*j+k*k*k) /* 检验是否符合条件 */ printf(%d ,n); 5.4.3 完全数#i
13、nclude math.h main() int b,i,k,m,n,c100; long a,s,x,y,d100; printf(求区间x,y中的完全数.); printf(请输入整数x,y:); scanf(%ld,%ld,&x,&y); printf(%ld,%ld中的完全数有:n,x,y); for(a=x;a=y;a+) s=1;n=0;b=sqrt(a); for(k=2;k=b;k+) /* 试商寻求a的因数k */if(a%k=0) s=s+k+a/k;n+;cn=k;dn=a/k; /* a/k也是a的因数 */ if(a=b*b) s=s-b;m=n-1; /* 若a=b
14、2,去掉一个b重复因数 */ else m=n; if(a=s)printf(%ld=1,a); /* 分两段从小到大打印因数之和 */ for(i=1;i=1;i-) printf(+%ld,di); if(a%2=1) printf( 奇完全数!); printf(n); 5.4.4 勾股数/* 勾股数组 */#include “math.h”main()long a,b,x,y,z,d,n=0; scanf(“%ld,%ld”,&a,&b); printf(“在%ld,%ld范围内,寻求勾股数组:n”); for(x=a;x=b-2;x+) /* 设xyz,循环判别 */ for(y=x
15、+1;y=b-1;y+)d=x*x+y*y; z=sqrt(d);if(d=z*z & z=b) n+; printf(“%ld,%ld,%ldn”,x,y,z); printf(“共有%ld组勾股数。”,n); 5.4.5 倍反序数main()int n,k,t,m,j=0; for(n=1000;n=9999;n+) /* n穷举四位数 */ m=0;t=n; for(k=1;k=4;k+) m=m*10+t%10;t=t/10; /* 求四位数n的反序数m */ if(m=4*n) j+;printf(%d n,n); printf(共%d个解.n,j);5.5.1 n个1整除问题mai
16、n() int a,b,c,n;printf(“input b=”);scanf(“%d”,&b);n=4;c=1111;while(c!=0) /* 余数为零时结束 */ a=c*10+1;c=a%b;n+; /* 模拟整数除法 */printf(nn=%dn,n);5.5.2 尾数前移问题 /* 模拟除法求解尾数前移问题 */main()int a,b,m,x,y,z; printf(把整数n的尾数a前移到n的最前面,n); printf(其值为原n值的b倍,原数n记为n(a,b).n); printf(整数a,b满足:2ba9 n); printf(请输入整数n的指定尾数a:); sca
17、nf(%d,&a); /* 输入处理数据 */ printf(请输入尾数a前移后为n的倍数b:); scanf(%d,&b); x=a/b;y=a%b;m=1; /* 确定初始条件 */ printf(n(%d,%d)=%d,a,b,x); while(y!=0 | x!=a) /* 递推试商处理 */ z=y*10+x;x=z/b;y=z%b;m+; /* 模拟整数除法 */ printf(%d,x); printf(n共%d位。n,m);5.6.1 金字塔main()int n,k,m; printf(请输入金字塔的行数n:); scanf(%d,&n); for(k=1;k=n;k+)
18、/* 控制循环n次,打印n行 */for(m=1;m=50-k;m+) printf(%c,32); /* 每行先打印50-k个空格 */for(m=1;m=2*k-1;m+) printf(%c,42); /* 接着打印2k-1个”*” */ printf(n); 5.6.2 空心菱形#includemain()int d,e,n,k,m; printf(请输入菱形的行数n(奇数):); scanf(%d,&n); d=(n+1)/2; for(k=1;k=n;k+) /* 控制循环n次,打印n行 */ e=fabs(k-d); /* 菱形上下对称,应用fabs(k-d)函数 */for(m
19、=1;m=e+45;m+) printf(%c,32); /* 打印每行前面空格 */ printf(%c,42); /* 打印每行的前一个星号 */ if(ed-1)for(m=1;m=2*(d-e)-3;m+) printf(%c,32); /* 打印中间空格 */ printf(%c,42); /* 打印中间各行的后一个星号 */ printf(n); 5.6.3 数字菱形#includemain()int d,e,n,k,m; printf(请输入菱形的行数n(奇数):); scanf(%d,&n); d=(n+1)/2; for(k=1;k=n;k+) /* 控制循环n次,打印n行 */ e=fabs(k-d);for(m=1;m=2*e+45;m+) printf(%c,32); /* 打印每行前的空格 */for(m=1;m=d-e;m+)printf(%d,d-e); /* 打印前d-e个数字 */ if(ed-1)for(m=0;m=2*(d-e-1)-2;m+)printf(%c,32); /* 打印每行中空格 */for(m=1;m=d-e;m+) printf(%d,d-e); /* 打印后d-e个数字 */ printf(n);
限制150内