《C语言程序设计》部分例题及课后习题参考程序1.编程计算如下分段函数:y={2x+3 x≥104x 0≤x<105x−6 x<0[参考程序]#include <stdio.h>int main(){float x,y;printf("input x:"); scanf("%f",&x);if(x>=10)y=2*x+3;else if(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。
[参考程序]#include <stdio.h>int main(){float score;char rank;printf("input a score:");scanf("%f",&score);if(score>100||score<0){printf("invalid score input\n");exit(-1);}switch((int)score/10){case 10:case 9:rank='A';break;case 8:rank='B';break;case 7:rank='C';break;case 6:rank='D';break;default:rank='E';}printf("%.2f:%c\n",score,rank);return 0;}3.编程判断以从键盘输入的三个数为边长,是否能构成三角形。
[参考程序]#include <stdio.h>int main(){float a,b,c;printf("input a,b,c:");scanf("%f%f%f",&a,&b,&c);if(a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a)printf("(%.2f,%.2f,%.2f)能围成三角形\n",a,b,c);elseprintf("(%.2f,%2.2f,%.2f)不能围成三角形\n",a,b,c);}4.编程实现将从键盘输入的一个正整数逆序输出,如输入1234,输出3421 [参考程序]#include <stdio.h>int main(){int n;printf("input a number:");scanf("%d",&n);do{printf("%d",n%10);n/=10;} while(n!=0);return 0;}5.输入一个1~10范围内的整数,计算该数的阶乘。
[参考程序]#include <stdio.h>int main(){int n,s=1,i;printf("input a number(1~10):");scanf("%d",&n);for(i=2;i<=n;i++)s*=i;printf("%d!=%d\n",n,s);return 0;}6.从键盘输入的一行字符,统计其含有多少个字符。
【参考程序】#include <stdio.h>int main(){char ch;int cnt=0;printf("input a char line:");ch=getchar();while(ch!='\n'){cnt++;ch=getchar();}printf("%d\n",cnt);return 0;}7.打印乘法口诀表。
【参考程序】#include <stdio.h>int main(){int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-3d",j,i,i*j);printf("\n");}return 0;}8.在屏幕上打印如下规律的图形,具体行数由键盘输入。
************************************【参考程序】#include <stdio.h>int main(){int i,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");}return 0;}9.从键盘输入一个正整数,编程判断其是否为素数(质数). 【参考程序】#include <stdio.h>int main(){int i,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);return 0;}10.从键盘输入100个整数,求其中正整数的和。
【参考程序】#include <stdio.h>#define N 100int main(){int n,s=0,i;for(i=1;i<=N;i++){printf("请输入第%d个整数:",i);scanf("%d",&n);if(n<0)continue;s+=n;}printf("%d\n",s);return 0;}11.从键盘输入1000个学生某门课程的百分制成绩,分别统计其中80分以上(即大于或等于80)、60分以上及低于60分的人数。
【参考程序】#include <stdio.h>#define N 1000int main(){int m,n,k,i;float score;m=n=k=0;for(i=1;i<=N;i++){printf("请输入第%d个成绩:",i);scanf("%f",&score);if(score>100||score<0){printf("输入的成绩不符合百分制成绩要求,本成绩输入作废,请重新输入第%d个成绩:",i);i--;continue;}if(score>=80)m++;else if(score>=60)n++;elsek++;}printf("%d:%d:%d\n",m,n,k);return 0;}12.运用如下公式计算圆周率的近似值,当最后一项的绝对值小于10-6时,停止计算。
π=1−1+1−1+?+(−1)n−11+?【参考程序】#include <stdio.h>int main(){double pi=0.0,t=1.0;int sgn=1;while(t<1000000){pi+=sgn/t;sgn=-sgn;t+=2;}printf("Pi=%.6lf\n",4*pi);return 0;}13.古代某工地需要搬运砖块,已知男人每人每次搬3块,女人每人每次搬2块,小孩两人每次抬一块,现有45人一次正好搬完全部砖块,请问男人、女人、小孩各几人?【参考程序】#include <stdio.h>int main(){int w,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);}return 0;}14.从键盘输入两个正整数到m、n中,求它们的最大公约数和最小公倍数。
【参考程序】#include <stdio.h>int main(){int m,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);return 0;}14.编程计算如下式子的值,直到n等于100。
1−12+13−14+?+(−1)n−11n+?【参考程序】#include <stdio.h>int main(){double s=0.0,t=1.0;int sgn=1;while(t<=100){s+=sgn/t;sgn=-sgn;t+=1;}printf("s=%.6lf\n",s);return 0;}15.计算如下规律式子的值。
其中a与n的值都是由键盘输入确定。
如当a为2,n为3时,该式子表示的含义为2+22+222,故结果为246。
a+aa+aaa+?+aaa?a(n个a)【参考程序】#include <stdio.h>int main(){int a,n,s=0,t;printf("input a,n:");scanf("%d%d",&a,&n);t=a;while(n>0){s+=t;t=t*10+a;n--;}printf("%d\n",s);return 0;}16.计算如下式子的值。