《C语言程序设计》部分例题及课后习题参考程序1.编程计算如下分段函数:y={2𝑥+3𝑥≥104𝑥0≤𝑥105𝑥−6𝑥0[参考程序]#includestdio.hintmain(){floatx,y;printf(inputx:);scanf(%f,&x);if(x=10)y=2*x+3;elseif(x=0)y=4*x;elsey=5*x-6;printf(y=%.2f\n,y);}2.编程将从键盘输入的百分制成绩转换为等级分,转换方法如下:90以上(大于或等于90,下同)为A,80分以上为B,70分以上为C,60分以上为D,60分以下,即低于60分为E。[参考程序]#includestdio.hintmain(){floatscore;charrank;printf(inputascore:);scanf(%f,&score);if(score100||score0){printf(invalidscoreinput\n);exit(-1);}switch((int)score/10){case10:case9:rank='A';break;case8:rank='B';break;case7:rank='C';break;case6:rank='D';break;default:rank='E';}printf(%.2f:%c\n,score,rank);return0;}3.编程判断以从键盘输入的三个数为边长,是否能构成三角形。[参考程序]#includestdio.hintmain(){floata,b,c;printf(inputa,b,c:);scanf(%f%f%f,&a,&b,&c);if(a0&&b0&&c0&&a+bc&&a+cb&&b+ca)printf((%.2f,%.2f,%.2f)能围成三角形\n,a,b,c);elseprintf((%.2f,%2.2f,%.2f)不能围成三角形\n,a,b,c);}4.编程实现将从键盘输入的一个正整数逆序输出,如输入1234,输出3421[参考程序]#includestdio.hintmain(){intn;printf(inputanumber:);scanf(%d,&n);do{printf(%d,n%10);n/=10;}while(n!=0);return0;}5.输入一个1~10范围内的整数,计算该数的阶乘。[参考程序]#includestdio.hintmain(){intn,s=1,i;printf(inputanumber(1~10):);scanf(%d,&n);for(i=2;i=n;i++)s*=i;printf(%d!=%d\n,n,s);return0;}6.从键盘输入的一行字符,统计其含有多少个字符。【参考程序】#includestdio.hintmain(){charch;intcnt=0;printf(inputacharline:);ch=getchar();while(ch!='\n'){cnt++;ch=getchar();}printf(%d\n,cnt);return0;}7.打印乘法口诀表。【参考程序】#includestdio.hintmain(){inti,j;for(i=1;i=9;i++){for(j=1;j=i;j++)printf(%d*%d=%-3d,j,i,i*j);printf(\n);}return0;}8.在屏幕上打印如下规律的图形,具体行数由键盘输入。************************************【参考程序】#includestdio.hintmain(){inti,j,n;printf(请输入打印图形的行数:);scanf(%d,&n);for(i=1;i=n;i++){for(j=1;j=n-i;j++)printf();for(j=1;j=2*i-1;j++)printf(*);printf(\n);}return0;}9.从键盘输入一个正整数,编程判断其是否为素数(质数).【参考程序】#includestdio.hintmain(){inti,n;printf(请输入一个正整数:);scanf(%d,&n);for(i=2;i*i=n;i++){if(n%i==0)break;}if(i*i=n||n==1)printf(%d不是一个素数.\n,n);elseprintf(%d是一个素数.\n,n);return0;}10.从键盘输入100个整数,求其中正整数的和。【参考程序】#includestdio.h#defineN100intmain(){intn,s=0,i;for(i=1;i=N;i++){printf(请输入第%d个整数:,i);scanf(%d,&n);if(n0)continue;s+=n;}printf(%d\n,s);return0;}11.从键盘输入1000个学生某门课程的百分制成绩,分别统计其中80分以上(即大于或等于80)、60分以上及低于60分的人数。【参考程序】#includestdio.h#defineN1000intmain(){intm,n,k,i;floatscore;m=n=k=0;for(i=1;i=N;i++){printf(请输入第%d个成绩:,i);scanf(%f,&score);if(score100||score0){printf(输入的成绩不符合百分制成绩要求,本成绩输入作废,请重新输入第%d个成绩:,i);i--;continue;}if(score=80)m++;elseif(score=60)n++;elsek++;}printf(%d:%d:%d\n,m,n,k);return0;}12.运用如下公式计算圆周率的近似值,当最后一项的绝对值小于10-6时,停止计算。𝜋4=1−13+15−17+⋯+(−1)𝑛−112𝑛−1+⋯【参考程序】#includestdio.hintmain(){doublepi=0.0,t=1.0;intsgn=1;while(t1000000){pi+=sgn/t;sgn=-sgn;t+=2;}printf(Pi=%.6lf\n,4*pi);return0;}13.古代某工地需要搬运砖块,已知男人每人每次搬3块,女人每人每次搬2块,小孩两人每次抬一块,现有45人一次正好搬完全部砖块,请问男人、女人、小孩各几人?【参考程序】#includestdio.hintmain(){intw,m,c;for(m=0;m=15;m++)for(w=0;w=22;w++){c=45-m-w;if(m*3+w*2+c*.5==45)printf(%d:%d:%d\n,m,w,c);}return0;}14.从键盘输入两个正整数到m、n中,求它们的最大公约数和最小公倍数。【参考程序】#includestdio.hintmain(){intm,n,m1,n1,r;printf(请输入两个正整数:);scanf(%d%d,&m,&n);m1=m;n1=n;r=m%n;while(r!=0){m=n;n=r;r=m%n;}printf(gcd(%d,%d)=%d\n,m1,n1,n);printf(lcm(%d,%d)=%d\n,m1,n1,m1*n1/n);return0;}14.编程计算如下式子的值,直到n等于100。1−12+13−14+⋯+(−1)𝑛−11𝑛+⋯【参考程序】#includestdio.hintmain(){doubles=0.0,t=1.0;intsgn=1;while(t=100){s+=sgn/t;sgn=-sgn;t+=1;}printf(s=%.6lf\n,s);return0;}15.计算如下规律式子的值。其中a与n的值都是由键盘输入确定。如当a为2,n为3时,该式子表示的含义为2+22+222,故结果为246。a+aa+aaa+⋯+aaa⋯a(n个a)【参考程序】#includestdio.hintmain(){inta,n,s=0,t;printf(inputa,n:);scanf(%d%d,&a,&n);t=a;while(n0){s+=t;t=t*10+a;n--;}printf(%d\n,s);return0;}16.计算如下式子的值。1+32+54+76+⋯+101100【参考程序】#includestdio.hintmain(){intn;floats=0.0;for(n=2;n=100;n+=2){s+=(float)(n+1)/n;}printf(%.6f\n,s);return0;}17.如数列第1项为2,此后各项的值均为其前一项的2倍再加3,编程计算该数列的前10项之和。【参考程序】#includestdio.hintmain(){intn,s=0,i;n=2;for(i=1;i=3;i++){s+=n;n=n*2+3;}printf(%d\n,s);return0;}18.现要求将1角钱换成1分、2分或5分的硬币,请问有多少种换法,并输出每一种换法。【参考程序】#includestdio.hintmain(){intone,two,five,cnt=0;for(five=0;five=2;five++)for(two=0;two=5;two++){one=10-five*5-two*2;if(one=0){printf(%d:%d:%d\n,one,two,five);cnt++;}}printf(一共有%d种换法\n,cnt);return0;}20.编程统计并输出200到300以内的全部素数。【参考程序】#includestdio.hintmain(){intm,i,k=0;for(m=201;m300;m+=2){for(i=3;i*i=m;i+=2)if(m%i==0)break;if(i*im){k++;printf(%8d,m);if(k%5==0)printf(\n);}}printf(\n200到300之间一共有%d个素数\n,k);return0;}21.打印所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数自身。如153【参考程序】#includestdio.hintmain(){intm,n,k;for(m=1;m=9;m++)for(n=0;n=9;n++)for(k=0;k=9;k++)if(m*m*m+n*n*n+k*k*k==m*100+n*10+k)printf(%5d,m*100+n*10+k);printf(\n);return0;}22.输出200到300之间满足如下条件的数,即各位数字之和为12,数字之积为42.【参考程序】#includestdio.hintmain(){intm,n;for(m=0;m=9;m++)for(n=0;n=9;n++)if(m+n==10&&m*n==21)printf(%5d,200+m*10+n);printf(\n);return0;}23.编程将一个正整数进行质因数分解,例如输入90,须在屏幕上打印出90=2*3*3*5【参考程序】#includestdio.hintmain(){intm,n;scanf(%d,&m);printf(%d=,m);n=2;while(m!=1){while(m%n==0){printf(%d,n);if(m!=n)printf(*);m/=n;}n++;}printf(\n);return0;}24.输入一行字符,分别统计其中英文字母、空格、数字及其他字符的个数。【参考程序】#includestdio.hintmain(){charch;intletter,space,digit,o