C案例教程源程序

上传人:优*** 文档编号:58995249 上传时间:2022-03-01 格式:DOC 页数:63 大小:214KB
返回 下载 相关 举报
C案例教程源程序_第1页
第1页 / 共63页
C案例教程源程序_第2页
第2页 / 共63页
C案例教程源程序_第3页
第3页 / 共63页
点击查看更多>>
资源描述
真诚为您提供优质参考资料,若有不当之处,请指正。第2章 简单C程序2.1.1 显示一行文字/*显示一行文字“Welcome to C World!”的程序*/#includemain()printf(”Welcome to C World!n”);2.1.2 两个整数求和/*计算并显示两整数之和的程序*/#includemain()int a,b,sum; /*变量声明*/printf(”Input first integer n”); /*显示提示信息*/scanf(”%d”,&a); /*读取一个整数*/printf(”Input second integer n”); /*显示提示信息*/scanf(”%d”,&b); /*读取一个整数*/sum=a+b; /*两数相加*/printf(”Sum is %d n”,sum); /*显示两数之和*/ return 0; /*返回0表示程序成功地结束*/2.2.1 算术运算#includemain()printf(“nL1:40%7=%d”, 40%7);printf(“nL2:40%7=%d”, 40%7);printf(“nL3:3.0/-4.0+1.6*2.0/5.0=%f”, 3.0/-4.0+1.6*2.0/5.0);printf(“nL4:2/3*1000=%d”, 2/3*1000);printf(“nL5:2/3*1000=%f”, 2/3*1000);printf(“nL6:2/3*1000=%e”, 2/3*1000);printf(“nL7:2.0/3*1000=%f”, 2.0/3*1000);printf(“nL8:2f/3*1000=%f”, 2f/3*1000);printf(“nL9:Size of 3 is %d”,sizeof(3);printf(“nL10:Size of 3.0 is %d”,sizeof(3.0);2.2.2 赋值运算#includemain()int k,x,y;k=5;x=k+; /*后缀运算,先把k的值赋给x,然后k的值加1*/printf(nL1:k=%d,x=%d,k,x);k=5;y=+k; /*前缀运算,先使k的值加1,然后将k的值赋给y */printf(nL2:k=%d,y=%d,k,y);x=y=5;printf(nL3:-x is %d,y- is %d,-x,y-);k=x=y=5;k=+x-+y;printf(nL4:%d,%d,%d,k,x,y);k=+x+y+;printf(nL5:%d,%d,%d,k,x,y);k=x-+-y;printf(nL6:%d,%d,%d,k,x,y);k=-x+y;printf(nL7:%d,%d,%d,k,x,y);x=y=5;printf(nL8:x+=x-=x*x is %d,x+=x-=x*x);printf(nL9:y+=y-=y*=y is %d ,y+=y-=y*=y);2.2.3 printf中输出表列求值#includevoid main()int i=8;printf(%d,%d,%d,%d,%dn,+i,-i,i-,i+,-i-);2.2.4 交换两个变量的值#includemain()int a,b,tem;printf(”Input integer a and bn”);scanf(”%d,%d”,&a, &b);tem=a;a=b;b=tem;printf(”a=%d,b=%dn”,a,b);2.2.5 四舍五入#include#includemain()double a,b;printf(Input real a n);scanf(%lf,&a);b=floor(a*100+0.5)/100;printf(b=%.2fn,b);第4章 分支程序设计4.1.1 求绝对值#include”stdio.h”main() int x, y;scanf(“%d”,&x);y=x;if(xmax) max=b; if(cmax) max=c; printf(“the maximum is:%dn”,max);min=a; if(minb) min=b; if(minc) min=c; printf(“the minimum is:%dn”,min);4.2.1 两数的比较#include”stdio.h”main()int x,y;printf(“input x,y:”);scanf(“%d,%d”,&x,&y);if(xy) printf(“the maximum is:%d”,x);else printf(“the maximum is:%d”,y);4.2.2 判定一数能否被另一数整除 main() int x,y; printf(“input x,y:”); scanf(“%d,%d”,&x,&y); if(x%y) printf(“NO”); else printf(“YES”);4.3.1 分段函数求解main() int x,y;scanf(“%d”,&x);if (x=0) if(x0) y=x+1; else y=x;else y=x-1;printf(“x=%d,y=%dn”,x,y);4.3.2 一元二次方程求解#includemath.hmain()float a,b,c,d,a2,x1,x2; printf(Input a,b,cn); scanf (%f,%f,%f,&a,&b,&c); if (a=0) /*解一元一次方程*/x1=-c/b;printf(root=%fn,x1); /*输出一次方程根*/else /*解一元二次方程*/ d=b*b-4*a*c; a2=2*a; x1=-b/a2;if(d=0) x2=sqrt(d)/a2;printf(real root:n); /*输出实根*/printf(root1=%f, root2=%fn,x1+x2,x1-x2); else x2=sqrt(-d)/a2;printf(complex root:n); /*输出复根*/printf(root1=%f+%fin,x1,x2);printf(root2=%f-%fin,x1,x2); 4.3.3 闰年判断问题#include”stdio.h”main()int year,leap=0;/* leap=0:预置为非闰年*/printf(Please input the year:);scanf(%d,&year);if (year % 100!=0) if (year % 4 = 0) leap=1;else if (year%400=0) leap=1; if (leap) printf(%d is a leap year.n,year);else printf(%d is not a leap year.n,year);4.3.4显示学生成绩与等级 main()int x; printf(“please input x(0=x100|x=90) printf(“x=%d is grade A!n”,x); else if (x=80) printf(“x=%d is grade B!n”,x); else if(x=60)printf(“x=%d is grade C!n”,x); else printf(“x=%d is grade D! n”,x);4.3.5 个人所得税计算(1)用嵌套的if语句编写程序main()float s,m,t;printf(please input the income:);scanf(%f,&s);s=s-1600;if(s100000) m=s-100000; t=m*0.45+20000*0.4+20000*0.35+20000*0.3+20000*0.25 +15000*0.2+3000*0.15+1500*0.1+500*0.05; else if(s80000) m=s-80000; t=m*0.4+20000*0.35+20000*0.3+20000*0.25 +15000*0.2+3000*0.15+1500*0.1+500*0.05; else if(s60000) m=s-60000; t=m*0.35+20000*0.3+20000*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; else if(s40000) m=s-40000; t=m*0.3+20000*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; else if(s20000) m=s-20000; t=m*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; else if(s5000) m=s-5000; t=m*0.2+3000*0.15+1500*0.1+500*0.05; else if(s2000) m=s-2000; t=m*0.15+1500*0.1+500*0.05; else if(s500) m=s-500; t=m*0.1+500*0.05; else m=s; t=m*0.05; printf(the tax is:%7.2fn,t); getch();(2)用switch语句编写程序main() float m,s,r; int t; printf(input the income:); scanf(%f,&s); s=s-1600; t=s/10000; switch(t) case 0:if(s=500) m=s*0.05; printf(the tax is:%f,m); else if(s=2000) s=s-500; m=s*0.1+500*0.05; printf(the tax is:%f,m); else if(s=5000) s=s-2000; m=s*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); else if(s=10000) s=s-5000; m=s*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); break; case 1:s=s-5000; m=s*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); break; case 2:if(s=20000) s=s-5000; m=s*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); case 3:s=s-20000; m=s*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); break; case 4:if(s=40000) s=s-20000; m=s*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); case 5:s=s-40000; m=s*0.3+20000*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); break; case 6:if(s=60000) s=s-40000; m=s*0.3+20000*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); case 7:s=s-60000; m=s*0.35+20000*0.3+20000*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); break; case 8:if(s=80000) s=s-60000; m=s*0.35+20000*0.3+20000*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); case 9:s=s-80000; m=s*0.4+20000*(0.35+0.3+0.25)+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); break; if(s=100000) s=s-80000; m=s*0.4+20000*(0.35+0.3+0.25)+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); else s=s-100000; m=s*0.45+20000*(0.4+0.35+0.3+0.25)+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(the tax is:%f,m); 第5章 循环程序设计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+; /* 把通项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;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*fac(n-1); /* 递归关系 */ return (f); main() int n; long y; printf(input n:); scanf(%d,&n); y=fac(n); printf(%d!=%ldn,n,y); 5.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+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; 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 牛顿迭代法解方程#includefloat 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,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); 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=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+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);continue; /* 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 完全数#include 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=b2,去掉一个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+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整除问题main() 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:); scanf(%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+) /* 控制循环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=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); 第6章 数组程序设计6.1.1 Fibonacci数列/* Fibonacci数列递推求解 */main()int k,n; long s,f50; printf(求数列的第n项与前n项和,请输入n:); scanf(%d,&n); f1=1;f2=1;s=2; /* 数组元素与和变量赋初值 */ for(k=3;k=n;k+) fk=fk-1+fk-2; /* 实施递推 */ s+=fk; /* 实施求和 */ printf(F数列第%d项为:%ldn,n,fn); printf(F数前%d项之和为:%ldn,n,s); 6.1.2 幂序列/* 幂序列程序 */main()int k,n; long a,b,s,f100; printf(求数列的第n项与前n项和,请输入n:); scanf(%d,&n); a=2;b=3;s=0; for(k=1;k=n;k+) if(ab) fk=a;a=a*2; /* 用2的幂给fk赋值 */ else fk=b;b=b*3; /* 用3的幂给fk赋值 */ s+=fk; printf(数列的第%d项为:%ldn,n,fn); printf(数列的前%d项之和为:%ldn,n,s);6.1.3 双关系递推数列/* 双关系2x+1,3x+1递推 */main()int n,i,j,h,m1500;m1=1;scanf(%d,&n);for(i=1;i=n;i+) m2*i=2*mi+1;m2*i+1=3*mi+1; for(j=i+2;jmj) /* m(i+1)与m(j)比较 */ h=mj; mj=mi+1;mi+1=h; /* 交换,使m(i+1)最小 */ if(mi+1=mj) mj=20000+j; /* 置m(j)为一出界大数,以避免重复 */for(i=1;i=n;i+) printf( %4d,mi); if(!(i%10) printf(n);6.1.4 复杂递推数列/* 2x+3y递推程序 */main() int m,n,t,k,i,h,j,w,a30000; printf(n input m:); scanf(%d,&m); a1=1;a2=2;t=2;n=0; for(k=2;k=m;k+) for(i=1;i=k-1;i+) w=2*ak+3*ai; if(w=m & ak!=ai) a+t=w; /* 判断 w是否为递推项 */ w=2*ai+3*ak; if(w=m & ak!=ai) a+t=w; /* 判断 w是否为递推项 */ for(j=1;j=m;j+) for(k=1;k=t;k+) if(ak=j) n+;printf(%4d(%3d) ,j,n);break; printf(n n=%d,n); 6.2.1 折叠方阵/* 层叠方阵 */main() int a,i,j,m,n,x,y,z2020; printf(输入方阵的行数m:n); scanf(%d,&m); printf(输入方阵的起始数a:n); scanf(%d,&a); z11=a;n=a; for(i=2;i=m;i+) x=1;y=i;n+;zxy=n; /* 每一层的起始元素赋值 */ while(x1) n+;y-;zxy=n; /* 每一层的横元素赋值 */ for(x=1;x=m;x+) for(y=1;y=m;y+) printf(%4d,zxy); /* 循环打印层叠方阵 */ printf(n); 6.2.2 矩阵的和与转置main() int i,j,m,n,x,y,a45,b45; printf(输入a矩阵:n); for(i=1;i=3;i+) for(j=1;j=4;j+) scanf(%d,&aij); /* 输入a矩阵的元素 */ printf(输入b矩阵:n); for(i=1;i=3;i+) for(j=1;j=4;j+) scanf(%d,&bij); /* 输入b矩阵的元素 */ printf(a矩阵:n); for(i=1;i=3;i+) for(j=1;j=4;j+) printf(%3d,aij); /* 打印a矩阵 */ printf(n); printf(b矩阵:n); for(i=1;i=3;i+)
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!