收藏 分销(赏)

c语言课后习题源程序.doc

上传人:仙人****88 文档编号:9401156 上传时间:2025-03-24 格式:DOC 页数:75 大小:682.50KB 下载积分:10 金币
下载 相关 举报
c语言课后习题源程序.doc_第1页
第1页 / 共75页
c语言课后习题源程序.doc_第2页
第2页 / 共75页


点击查看更多>>
资源描述
 第2章 C语言概述 2.3 参照例题,编写一个C语言程序,输出以下信息: ****************************          Hello,World! **************************** 程序代码如下: #include <stdio.h> /*编译预处理命令*/ void main(void) /* 主函数*/ { printf(“****************************\n”); /*输出一行**/ printf(“ Hello World!\n”); /*输出Hello World!*/ printf(“****************************\n”); /*输出一行**/ } 2.4 编写一个C语言程序,输入a、b、c三个数,输出其中最大者。 程序代码如下: #include <stdio.h> void main ( ) /* 主函数*/ { int max(int x,int y); /*函数声明*/ int a,b,c,d; /*声明部分,定义变量*/ scanf("%d,%d,%d",&a,&b,&c); /*输入变量a、b、c的值*/ d=max(a,b); /*调用max函数,将得到的值赋给d*/ d=max(d,c); /*调用max函数,将得到的值赋给d*/ printf("max=%d\n",d); /*输出d的值*/ getch(); } int max(int x,int y) /*定义max函数,函数值为整型,形式参数x,y为整型*/ { int z; /* max函数中的声明部分,定义本函数中用到的变量z为整型*/ if(x>y) z=x; else z=y; return (z); /*将z的值返回,通过add带回调用处*/ } 第3章 数据类型、运算符与表达式 3.7 编写程序,输入两个字符,利用条件运算符,输出其中较小字符的ASCII 码值。 程序代码如下: void main() { char c1,c2; int i; printf("input two letters:"); scanf("%c,%c",&c1,&c2); /*注意:输入的两个字符之间要用逗号隔开*/ i= c1<c2?c1:c2; printf("minimum ASCII is %d\n",i); } 第4章 程序控制结构 4.1 用*号输出大写字母“C”的图案。 程序代码如下: #include <stdio.h> void main() { printf(" ****\n"); printf(" *\n"); printf(" * \n"); printf(" ****\n"); } 4.2 从键盘输入一个大写字母,要求分别用大小写字母形式输出该字母及对应的ASCII码值。 程序代码如下: #include <stdio.h> void main() { char c1,c2; printf("Input a uppercase letter: "); c1=getchar(); /*输入大写字母*/ c2=c1+32; /*将大写字母转换成对应的小写字母*/ printf("%c,%d\n",c1,c1); /*输出大写字母及对应的ASCII码值*/ printf("%c,%d\n",c2,c2); /*输出小写字母及对应的ASCII码值*/ } 4.3 输入一个整数,判断它能否被3或7整除,若能整除,输出“YES”,否则输出“NO”。 程序代码如下: #include <stdio.h> void main() { int n; scanf("%d",&n); if (n%3==0||n%7==0) /*判断能否被3或7整除*/ printf("YES\n"); else printf("NO\n"); } 4.4 输入x和a的值,按下列公式计算y的值。 程序代码一: #include <stdio.h> #include <math.h> void main() { float x,a,y; printf ("\nPlease input x,a: "); scanf("%f,%f",&x,&a); if (x>-a&&x<a) /*或fabs(x)<a */ y=sqrt(a*a-x*x); if (x==a || x== -a) /*或fabs(x)==a */ y=0; if (x<-a || x>a ) /*或fabs(x)>a*/ y=x-1; printf("x=%g,a=%g,y=%g\n",x,a,y); } 程序代码二: #include <stdio.h> #include <math.h> void main() { float x,a,y; printf ("\nPlease input x,a: "); scanf("%f,%f",&x,&a); if (fabs(x)<a) /*或 x>-a&&x<a */ y=sqrt(a*a-x*x); else if (fabs(x)==a ) /*或x==a || x== -a */ y=0; else y=x-1; printf("x=%g,a=%g,y=%g\n",x,a,y); } 程序代码三: #include <stdio.h> #include <math.h> void main() { float x,a,y; printf ("\nPlease input x,a: "); scanf("%f,%f",&x,&a); if (fabs(x)<=a) if (fabs(x)< a) y=sqrt(a*a-x*x); else y=0; else y=x-1; printf("x=%g,a=%g,y=%g\n",x,a,y); } 4.5 输入四个不相等的数,找出其中的最小数。 程序代码一: #include <stdio.h> void main() { int a,b,c,d,min; printf("\nPlease input 4 numbers:"); scanf("%d%d%d%d",&a,&b,&c,&d); min=a; /* 先假设a为最小数min */ if (b<min) min=b; /* 若b比min小,min改为b */ if (c<min) min=c; /* 若c比min小,min改为c */ if (d<min) min=d; /* 若d比min小,min改为d */ printf("The minimum number is:%d\n",min); } 程序代码二: #include <stdio.h> void main() { int a,b,c,d,t1,t2,min; printf("\nPlease input 4 numbers:"); scanf("%d%d%d%d",&a,&b,&c,&d); t1=(a<b)? a:b; /* 比较a与b,较小者存入t1 */ t2=(c<d)? c:d; /* 比较c与d,较小者存入t2 */ min=(t1<t2)? t1:t2; /* 比较t1、t2,较小者即为4个数中的最小数 */ printf("The minimum number is:%d\n",min); } 4.6 输入三个整数,分别放入x,y,z中,要求程序把数据重新按从小到大的顺序放入x,y,z中,然后输出x,y,z中的值。 程序代码如下: #include <stdio.h> void main() { int x,y,z,t; scanf("%d%d%d",&x,&y,&z); if (x>y) { t=x;x=y;y=t;} /*交换x,y的值*/ if(x>z) { t=z;z=x;x=t;} /*交换x,z的值*/ if(y>z) { t=y;y=z;z=t;} /*交换z,y的值*/ printf("small to big: %d %d %d\n",x,y,z); } 4.7 输入一个不多于4位的正整数,求它的位数,并按逆序输出各位数字。 程序代码一: #include <stdio.h> void main() { int i, a,b,c,d; printf("\nPlease input a number(0-9999):"); scanf("%ld",&i); if( i<0 || i>9999) printf("Error input."); else { if (i<=9) n=1; /* 求i的位数 */ else if (i<=99) n=2; else if (i<=999) n=3; else n=4; printf("There are %d digits.\n",n); a=i%10; /* 求i的个位数 */ b=i/10%10; /* 求i的十位数 */ c=i/100%10; /* 求i的百位数 */ d=i/1000%10; /* 求i的千位数 */ printf("Reverse digit: "); switch (n) { case 1: printf("%d\n", a); break; case 2: printf("%d,%d\n", a,b); break; case 3: printf("%d,%d,%d\n", a,b,c); break; case 4: printf("%d,%d,%d,%d\n", a,b,c,d); } } } 程序代码二: #include <stdio.h> void main() { int i, a,b,c,d; printf("\nPlease input a number(0-9999): "); scanf("%d",&i); a=i%10; /* 求i的个位数 */ b=i/10%10; /* 求i的十位数 */ c=i/100%10; /* 求i的百位数 */ d=i/1000%10; /* 求i的千位数 */ if (d!=0 ) /* 千位数非0时 */ { printf("There are 4 digits.\n"); /* 4位数 */ printf("Reverse digit: %d,%d,%d,%d\n", a,b,c,d); } else if ( c!=0 ) /* 千位数为0但百位数非0时 */ { printf("There are 3 digits.\n"); /* 3位数 */ printf("Reverse digit: %d,%d,%d\n", a,b,c); } else if ( b!=0 ) /* 千、百位数为0但十位数非0时 */ { printf("There are 2 digits.\n"); /* 2位数 */ printf("Reverse digit: %d,%d\n", a,b); } else /* 千、百、十位数为0时 */ { printf("There are 1 digits.\n"); /* 1位数 */ printf("Reverse digit: %d\n", a); } } 4.8 输入一个年份和一个月份,输出该年的这个月有多少天。用switch语句编程。 程序代码如下: #include <stdio.h> void main() { unsigned y,m,d; printf("\nInput year-month:"); scanf("%u-%u",&y,&m); switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: d=31; break; case 2: /*2月份要考虑是否闰年*/ d=(y%4==0&&y%100!=0||y%400==0)?29:28; break; case 4: case 6: case 9: case 11: d=30; break; } printf("There are %u days this month.\n",d); } 4.9 编制程序,计算某个学生奖学金的等级,以三门课程成绩为评奖依据。奖学金评奖标准如下: 符合下列条件之一者获一等奖: (1)平均分大于95分者; (2)有两门成绩是100分,且第三门课程成绩不低于80分者。 符合下列条件之一者获二等奖: (1)平均分大于90分者; (2)有一门成绩是100分,且其他课程成绩不低于75分者。 符合下列条件者获三等奖: 各门功课成绩不低于70分。 符合条件者就高不就低,只能获得高的那一项奖学金。要求显示获奖的等级。 程序代码如下: #include <stdio.h> void main() { int s1,s2,s3; float aver; printf("\nInput three scores: "); scanf("%d,%d,%d",&s1,&s2,&s3); aver=(s1+s2+s3)/3.0; if ( aver>95 || s1==100&&s2==100&s3>=80 || s1==100&&s3==100&s2>=80 || s2==100&&s3==100&s1>=80 ) printf("Grade: 1\n"); else if ( aver>90 || s1==100&&s2>=75&s3>=75 || s2==100&&s1>=75&s3>=75 || s3==100&&s1>=75&s2>=75 ) printf("Grade:2\n"); else if ( s1>=70&&s2>=70&s3>=70 ) printf("Grade:3\n"); } 4.10 输入华氏温度F,利用公式C=5/9*(F-32)转换成摄氏温度C,根据转换结果C的不同值,按以下要求给出相应的提示。 C>40时,打印“Hot” 30<C≤40时,打印“Warm” 20<C≤30时,打印“Room Temperature” 10<C≤20时,打印“Cool” 0<C≤10时,打印“Cold” C≤0时,打印“Freezing” 程序代码如下: #include <stdio.h> void main() { float f,c; printf("Input the fahrenheit temperature: "); scanf("%f",&f); c=5.0/9.0*(f-32); /*将华氏温度转换成摄氏温度*/ if (c>40) printf("Hot\n"); else if (c>30) printf("Warm\n"); else if (c>20) printf("Room Temperature\n"); else if(c>10) printf("Cool\n"); else if(c>0) printf("Cold\n"); else printf("Freezing\n"); } 4.11 某商场开展购物打折活动,若购物款x在下述范围内,所付款y按对应折扣支付: x (x<1000) y= 0.9x (1000≤x<2000) 0.8x (2000≤x<3000) 0.7x (x≥3000) 从键盘输入购物款x,求实际所付款y。 程序代码一: #include <stdio.h> void main() { float x,y; printf("Input x: "); scanf("%f",&x); if (x<0) printf("Input error.\n"); else { if (x<1000) y=x; else if (x<2000) y=0.9*x; else if (x<3000) y=0.8*x; else y=0.7*x; printf("x=%.2f,y=%.2f\n",x,y); } } 程序代码二: #include <stdio.h> void main() { float x,y; int c; printf("Input x: "); scanf("%f",&x); if (x<0) printf("Input error.\n"); else { c=x/1000; switch (c) { case 0: y=x; break; case 1: y=0.9*x; break; case 2: y=0.8*x; break; default: y=0.7*x; } printf("x=%.2f,y=%.2f\n",x,y); } } 4.12 企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%;高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数。 程序代码一: #include <stdio.h> void main() { float x,y; printf("\nInput the profit x= "); scanf("%f",&x); if (x<=0) printf("No prize.\n"); else { if ( x<=10e4 ) y=x*0.1; else if ( x<=20e4 ) y=10e4*0.1+(x-10e4)* 0.075; else if ( x<=40e4 ) y=10e4*0.1+10e4*0.075+(x-20e4)* 0.05; else if ( x<=60e4 ) y=10e4*0.1+10e4*0.075+20e4*0.05+(x-40e4)* 0.03; else if ( x<=100e4 ) y=10e4*0.1+10e4*0.075+20e4*0.05+20e4*0.03+(x-60e4)* 0.015; else y=10e4*0.1+10e4*0.075+20e4*0.05+20e4*0.03+40e4*0.015+(x-100e4) 0.01; printf ("Total prize y= %.2f\n",y); } } 程序代码二: #include <stdio.h> void main() { float x,y; printf("\nInput the profit x= "); scanf("%f",&x); if (x<=0) printf("No prize.\n"); else { y10=10e4*0.1; /*利润为10万的奖金*/ y20=y10+10e4*0.075; /*利润为20万的奖金*/ y40=y20+20e4*0.05; /*利润为40万的奖金*/ y60=y40+20e4*0.03; /*利润为60万的奖金*/ y100=y60+40e4*0.015 /*利润为100万的奖金*/ if ( x<=10e4 ) y=x*0.1; else if ( x<=20e4 ) y= y10+(x-10e4)* 0.075; else if ( x<=40e4 ) y=y20+(x-20e4)* 0.05; else if ( x<=60e4 ) y=y40+(x-40e4)* 0.03; else if ( x<=100e4 ) y=y60+(x-60e4)* 0.015; else y=y100+ (x-100e4) 0.01; printf ("Total prize y= %.2f\n",y); } } 4.13 输入一个用24小时制表示的时间(h:m),把它转换为用12小时制表示的时间并输出。如:输入9:05,输出9:05AM;输入12:10,输出12:10PM;输入14:30,输出2:30PM。 程序代码如下: #include <stdio.h> void main() { int h,m; printf("24 hour time: "); scanf("%d:%d",&h,&m); if(h>=24||m>=60) printf("Input error.\n"); else if(h<12) printf("12 hour time: %d:%02dAM\n",h,m); else if(h<13) printf("12 hour time: %d:%02dPM\n",h,m); else printf("12 hour time: %d:%02dPM\n",h-12,m); } 4.14 输入一个学生的生日(年y1、月m1、日d1),再输入当前日期(年y2、月m2、日d2),求该生的实足年龄。 程序代码一: #include <stdio.h> void main() { int y1,m1,d1,y2,m2,d2,age; printf("Enter the birthday (yyyy-mm-dd): "); scanf("%d-%d-%d",&y1,&m1,&d1); printf("Enter the current date (yyyy-mm-dd): "); scanf("%d-%d-%d",&y2,&m2,&d2); if(m1>m2) age=y2-y1-1; else if(m1<m2) age=y2-y1; else /* m1==m2的情形*/ if(d1>d2) age=y2-y1-1; else age=y2-y1; printf("Age= %d\n",age); } 程序代码二: #include <stdio.h> void main() { int y1,m1,d1,y2,m2,d2,age; printf("Enter the birthday (yyyy-mm-dd): "); scanf("%d-%d-%d",&y1,&m1,&d1); printf("Enter the current date (yyyy-mm-dd): "); scanf("%d-%d-%d",&y2,&m2,&d2); if(m1>m2|| (m1==m2&&d1>d2) ) age=y2-y1-1; else age=y2-y1; printf("Age= %d\n ",age); } 程序代码三: #include <stdio.h> void main() { int y1,m1,d1,y2,m2,d2,age; printf("Enter the birthday (yyyy-mm-dd): "); scanf("%d-%d-%d",&y1,&m1,&d1); printf("Enter the current date (yyyy-mm-dd): "); scanf("%d-%d-%d",&y2,&m2,&d2); age=y2-y1-(m1>m2|| (m1==m2&&d1>d2) ); printf("Age= %d\n ",age); } 4.15 输出1-300之间能同时被3和5整除的所有数。 程序代码一: #include<stdio.h> void main() { int i,k; for(i=1,k=0;i<=300;i++,k++) if(i%3!=0 || i%5!=0) continue; /*当i不被3或5整除时,继续下一次循环*/ else { if(k%5==0) { printf("\n");k=0; } /*当k为5的倍数时换行,即每行输出5个数*/ k++; printf("%6d",i); } } 程序代码二: 上面的for循环可以改写为: for(i=1,k=0;i<=300;i++,k++) if(i%3==0 && i%5==0) { if(k%5==0) { printf("\n"); k=0; } k++; printf("%6d",i); } 4.16 任意输入n个数,输出其中最大数和最小数,并输出它们在序列中的位置。 程序代码如下: #include<stdio.h> void main() { int i,n,max_location=1,min_location=1; float x,max=0,min=0; printf("input n:"); scanf("%d",&n); /*输入数的个数*/   printf("input x:"); scanf("%f",&x); /*输入第一个数*/ max=min=x; /*假设第一个数既是最大数,也是最小数*/ for(i=2;i<=n;i++) /*从第二个数开始循环,所以i=2*/ { scanf("%f",&x);   if(x>max)     { max=x; max_location=i;      } /*如果x>max,则赋给max,并记下位置*/   if(x<min)    { min=x; min_location=i;    } /*如果x<min,则赋给mix,并记下位置*/   }   printf("\nmax=%6.2f,max_location =%d\n",max,max_location);   printf("\nmin=%6.2f,min_location =%d\n",min,min_location); } 4.17 计算多项式12+22+32+…+1002的值。 程序代码如下: #include<stdio.h> void main() { int i; long sum=0; for(i=1;i<=100;i++) sum+=i*i; /*每项直接累加,相当于sum=1+2*2+3*3+……*/ printf("sum=%ld\n",sum); } 4.18 计算多项式7+72+73+······+7n的值,n由键盘输入。 程序代码一: #include<stdio.h> void main() { int i,n; long t=1,s=0; printf("please input n:"); scanf("%d",&n); for(i=1;i<=n;i++) { t*=7; s+=t; /*每次循环t乘于7以后各单项累加*/ } /* printf("7+7*7+7*7*7+...=%d\n",s); } 程序代码二: #include<stdio.h> void main() { int i,j,n; long t,s=0; printf("please input n:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(t=1,j=1;j<=i;j++)t*=7; /*每个单项都用一个循环实现*/ s+=t; } /*各单项累加*/ printf("7+7*7+7*7*7+...=%d\n",s); } 4.19 输入x值,按照下列公式计算cos(x)的值,直到最后一项小于10-6为止。 程序代码如下: #include<stdio.h> #include<math.h> void main() { float sum , term=1,x ; int k=1 ,sign=1; printf("please input x:"); scanf ("%f",&x ) ; sum=1 ; /*第一项直接赋值*/ while( fabs(term)>=1e-6) { k=k+2; term*=x*x /k / (k-1) ; /*计算单项值*/ sign=-sign ; /*符号变量,用来实现正负号转换*/ sum+= sign* term ; /*累加*/ } printf ("sum =%6.2f\n" , sum ) ; } 4.20 输入若干个数,如:2.3、-11.2、66.7、······ 、116.9,求它们的和,并统计个数(个数≤100)。 程序代码如下: #include<stdio.h> #include<math.h> void main() { int i; float x,sum=0; for(i=1;i<=100;i++) { scanf("%f",&x); if(fabs(x)<0.000001)break; sum+=x; } printf ("sum=%f,count=%d\n",sum,i-1); /*判别是否结束前,i总是先加1,项数为i-1*/ } 4.21 编写输出如下字母塔的程序: A ABA ABCBA ABCDCBA ……………… …………………… ………………………… ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA 程序代码如下: #include<stdio.h> #include<math.h> void main() { int a,b; for (a=1;a<=26;a++) /*循环26次,输出26行*/ { for( b=1;b<=26-a;b++) printf(""); /*输出每行左边的空格*/ for(b=1;b<=a;b++) printf("%c",b+64); /*输出每行左边(包括中间)的字母*/ for(b=a-1;b>=1;b--) printf("%c",b+64); /*输出每行右边(不包括中间)的字母*/ printf("\n"); /*每行输出以后换行*/ } } 4.22 “鸡兔同笼”是一个中国古算题,最早出现在《孙子算经》中。笼中有若干只鸡和兔子,它们共有88个头,244只脚,问鸡和兔各有多少只? 程序代码如下: #include<stdio.h> voi
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服