典型例题例1:求main(){inti,sum;for(sum=0,i=1;i=100;i++)sum=sum+i;printf(1+2+3+…+100=%d\n,sum);}1+2+3+…+100=50501001nn例2:计算1~5的阶乘main(){inti,fact;for(fact=1,i=1;i=5;i++){fact=fact*i;printf(\t%d!=%d\n,i,fact);}}1!=1(每次循环都进行输出))2!=23!=64!=245!=120例3:计算某班32位学生某门课的平均成绩,并输出最高分、最低分。main(){inti,score,max=0,min=100;floatsum=0;for(i=1;i=32;i++){scanf(%d,&score);sum=sum+score;if(scoremax)max=score;if(scoremin)min=score;}printf(average=%-8.2f\n,sum/32);printf(max=%d,min=%d\n,max,min);}例4:按下列形式打印乘法九九表i:11*1=122*1=22*2=433*1=33*2=63*3=944*1=44*2=84*3=124*4=16┇┇┇┇99*1=99*2=189*3=27……9*9=81j1239被乘数i取值1~9;i每取一值,乘数j取值1~imain(){inti,j,k;for(i=1;i=9;i++){for(j=1;j=i;j++){k=i*j;printf(%d*%d=%-4d,i,j,k);}printf(“\n”);}getch();/*加getch();每行暂停*/}例5:输入5个最多8位的正整数,将各数按位颠倒输出。main(){inti;longn,d;for(i=1;i=5;i++){printf(“Enteradata(1-99999999):”);scanf(“%ld”,&n);while(n!=0){d=n%10;printf(“%d”,d);n=n/10;}}}例6:计算半径为1到10的各圆面积,直到面积大于100为止。半径的范围控制——r:1~10附加控制——area100main(){intr;floatarea;for(r=1;r=10;r++){area=3.141592*r*r;if(area100)break;printf(“r=%d,area=%-7.2f\n”,r,area);}}例7:把100~200之间不能被3整除的数输出;并控制一行输出10个数据。main(){intn,c=0;printf(“\n”);for(n=100;n=200;n++){if(n%3==0)continue;printf(“%d”,n);c++;printf(“%s”,c%10==0?”\n”:””);}}例8:输入两个正整数m和n,求其最大公约数和最小公倍数。算法1:(穷举法)1)找出m、n中的较小者t;最大公约数肯定在t、t-1、t-2、…1之间;2)测试m%i和n%i是否同时为0;除数i依次取t、t-1、t-2…1;测试条件成立时的i值即为最大公约数;3)最小公倍数:m×n/最大公约数;main(){intm,n,t,i;printf(“Enterm,n:”);scanf(“%d,%d”,&m,&n);t=mn?m:n;for(i=t;i=1;i--)if(m%i==0&&n%i==0)break;printf(“GCD=%d,SCM=%d\n”,i,m*n/i);}18,12↙17,3↙GCD=6,SCM=36GCD=1,SCM=51算法2:(辗转相除法)main(){inta,b,m,n,r,t;printf(“Entera,b:”);scanf(“%d,%d”,&a,&b);m=a,n=b;/*产生a、b副本*/if(mn){t=m;m=n;n=t;}r=m%n;while(r!=0){m=n;n=r;r=m%n;}printf(“GCD=%d,SCM=%d”,n,a*b/n);}输入a、bam,bnTFØmn求m%nrr!=0?nmrnm%nr输出n、a*b/nmn?例9:判断m是否素数素数:除1和它本身之外再无别的约数;算法:判断m%i==0成立否?i取值:2~(m-1)或:2~m(int)#includemath.hmain(){intm,i,k;printf(\tEnterm:);scanf(%d,&m);k=sqrt(m);for(i=2;i=k;i++)if(m%i==0)break;if(ik)printf(%disaprimenumber.\n,m);elseprintf(%disnotprimenumber.\n,m);}例10:求100~200之间的全部素数,并控制换行。算法:外循环控制m取100~200之间的奇数。#includemath.hmain(){intm,i,k,c=0;printf(\n);for(m=101;m200;m=m+2){k=sqrt(m);for(i=2;i=k;i++)if(m%i==0)break;if(ik)/*ik成立表示未出现约数*/{printf(%-6d,m);c++;if(c%10==0)printf(\n);}}}例11:用公式求的近似值,直到最后一项的绝对值小于10-4为止。考虑问题:1)需循环累加,但累加项数不确定;2)有规律的量分母n的取值:1、3、5、7…奇偶项符号s的变化:+、-、+、-3)循环条件:fabs(t)=10-4循环,t为某项值。...71513114#includemath.hmain(){ints;floatn,t,pi;n=1.0;s=1;t=1./n;pi=0;while(fabs(t)=1e-4)/*判断某项*/{pi=pi+t;/*累加和*/n=n+2.0;/*改变分母*/s=-s;/*符号变反*/t=s/n;}/*计算下一项*/printf(PI=%10.6f\n,pi*4);getch();}例12:求Fibonacci数列的前40个数,并按一行4个数排列输出。1,1,2,3,5,8,13,21…考虑问题:1)属递推问题:从前一项或几项推出下一项结果;2)定义两个变量:f1=f2=1;f1=f1+f2;f2=f2+f1;由前两项相加求得下一项后第一项可覆盖,即变量的值是不断更迭的(迭代法)。main(){longf1,f2,i;f1=f2=1;for(i=1;i=20;i++){printf(%12ld%12ld,f1,f2);if(i%2==0)printf(\n);/*每行4项*/f1=f1+f2;/*一次递推两项*/f2=f2+f1;}getch();}例13:输入一个数,输出其因子连乘表达式main(){intn,f,i=2;printf(“Inputanintegern:”);scanf(“%d”,&n);f=n;printf(“%d=1”,n);do{if(f%i==0){f=f/i;printf(“*%d”,i);}elsei++;}while(i=n);printf(“\n”);}例14:用字符’*’打印出钻石图案分析:将上半三角、下半三角分别处理,找出行数、空格数、星号数之间的关系;前四行:行空格星号131223315407规律:i4–ii×2–1后三行:115223331规律:ii7–i×2*************************main(){inti,j;for(i=1;i=4;i++){for(j=4-i;j0;j--)printf(””);for(j=i*2-1;j0;j--)printf(”*”);printf(”\n”);}for(i=1;i=3;i++){for(j=i;j0;j--)printf(””);for(j=7-i*2;j0;j--)printf(”*”);printf(”\n”);}}例15:输入一行英文文本(最长80),分别统计文本中字母、数字、空格字符个数及所有字符个数。#includestdio.hmain(){inti,l,n,s,all;charstr[80],t;l=n=s=all=0;gets(str);for(i=0;(t=str[i])!='\0';i++)/*t:提高效率*/{if(t='A'&&t='Z'||t='a'&&t='z')l++;elseif(t='0'&&t='9')n++;elseif(t=='')s++;all++;}printf(l=%d,n=%d,s=%d,all=%d\n,l,n,s,all);}例16:将一维数组各元素顺序输出、倒序输出、选偶数项输出。inta[100],i;for(i=0;i100;i++)a[i]=i+1;/*生成数组*/for(i=0;i100;i++){if(i%10==0)printf(“\n”);/*换行控制*/printf(”%-5d”,a[i]);}for(i=99;i=0;i--)printf(”%d,”,a[i]);for(i=1;i=99;i=i+2)printf(”%5d”,a[i]);例17:编写函数,用冒泡法对数组从小到大排序main(){intx[10],i;voidsort(inta[],intn)for(i=0;i10;i++)scanf(%d,&x[i]);sort(x,10);for(i=0;i10;i++)printf(%d,x[i]);printf(\n);}voidswap(int*p1,int*p2){intt;t=*p1;*p1=*p2;*p2=t;}voidsort(inta[],intn){inti,j;for(i=0;in-1;i++)for(j=0;jn-1-i;j++)if(a[j]a[j+1])swap(&a[j],&a[j+1]);}例18:用选择法对一数列按降序排序(由大到小)#defineN5main(){inta[N],i,j,p,t;for(i=0;iN;i++)scanf(%d,,&a[i]);for(i=0;iN-1;i++){p=i;for(j=i+1;jN;j++)if(a[j]a[p])p=j;/*条件成立更新p*/if(p!=i){t=a[i];a[i]=a[p];a[p]=t;}}┇/*输出*/}例19:利用折半查找法实现一维数组的查找#defineN10main(){inta[N]={2,3,5,6,12,15,23,46,50,100};intnum,low,high,mid,mark=-1;printf(Enterchecknumber:);scanf(%d,&num);low=0;high=N-1;┇┇low=0;high=N-1;while(low=high){mid=(high+low)/2;/*计算中间位置*/if(num==a[mid]){mark=1;break;}elseif(numa[mid])high=mid-1;elselow=mid+1;}if(mark==1)printf(%dfoundin%d\n,num,mid+1);elseprintf(Notbefound!\n);}例20:编程在二维数组中生成10行的杨辉三角。11112113311464115101051161520156117213535217118285670562881193684126126843691#defineN10main(){staticinta[N][N],i,j;for(i=0;iN;i++)/*生成1元素*/a[i][0]=a[i][i]=1;for(i=2;iN;i++)/*生成其余元素*/for(j=1;ji;j++)a[i][j]=a[i-1][j-1]+a