C Primer Plus(第五版)学习(五)

来源:互联网 发布:淘宝导航栏编辑器 编辑:程序博客网 时间:2024/05/22 05:28

第7章《C控制语句:分支和跳转》是我觉得用来开发具有智能行为的基础,所以这一章我也用了好长时间去研读。关键字:continue,break,goto(为了避免程序胡乱跳,最好不用),if else,while,switch。还有如何判断素数,如何让用户不断输入等等这些都是让我思考的问题。

我做的课后编程习题如下(如有不对的地方请指出来其一探讨,谢谢):

1.编写以个程序。该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。

#include <stdio.h>#define STOP '#'//以#号作为结尾#include <ctype.h>int main(void){char c;//读入的字符int n_space=0;//空格数目int n_line=0;//换行符数目int n_words=0;//其他字符数目printf("请输入一段内容(以#结尾):");while((c=getchar())!=STOP){if(c=='\n')n_line++;//统计行if(isspace(c))n_space++;//统计空格n_words++;//统计其他字符}printf("空格数目=%d, 换行符数目=%d, 其他字符数目=%d\n",n_space,n_line,n_words);return 0;}

2.编写一个程序。该程序读取输入直到遇到#字符。是程序打印每个输入的字符以及它的十进制ASCII码。每行打印8个字符/编码对。建议:利用字符计数和模运算符(%)在每8个循环周期时打印一个换行符。

#include <stdio.h>#define STOP '#'int main(void){char c;//用户读取字符int n=0;//用来计数字符数printf("输入的字符以及对应的ASCII码如下.\n");printf("用户输入一段内容(以#号结束):");while ((c=getchar())!=STOP){n++;printf("%2c/%2d",c,c);if(0==n%8)printf("\n");}printf("\n");return 0;}

3.编写一个程序。该程序读取整数,直到输入0.输入终止后,程序应该报告输入的偶数(不包括0)总个数、偶数的平均值,输入的奇数总个数以及奇数的平均值。

#include <stdio.h>#define STOP '0'int main(void){int nu;int sum_a=0;int cout_a=0;//偶数个数int sum_b=0;int cout_b=0;//奇数个数printf("请输入整数(以0结束):\n");while((nu=getchar())!=STOP){if('\n'==nu)//以回车符作为输入整数的间隔符continue; nu=nu-48;//用自己的数值进行计算,不用ASCII码if(nu%2==0)//如果是偶数{cout_a++;sum_a+=nu;}else//如果是奇数{cout_b++;sum_b+=nu;}}printf("偶数的个数 %d,偶数的平均数%d.\n",cout_a,sum_a/cout_a);printf("奇数个数 %d, 奇数的平均数%d.\n",cout_b,sum_b/cout_b);return 0;}

4.利用switch重做第3题。

#include <stdio.h>#define STOP '0'int main(void){int nu;int sum_a=0;int cout_a=0;//偶数个数int sum_b=0;int cout_b=0;//奇数个数printf("请输入整数(以0结束):\n");while((nu=getchar())!=STOP){if('\n'==nu)//以回车符作为输入整数的间隔符continue;nu=nu-48;//用自己的数值进行计算,不用ASCII码switch(nu%2){case 0://偶数情况cout_a++;sum_a+=nu;break;case 1://奇数情况cout_b++;sum_b+=nu;break;default:break;}}printf("偶数的个数 %d,偶数的平均数%d.\n",cout_a,sum_a/cout_a);printf("奇数个数 %d, 奇数的平均数%d.\n",cout_b,sum_b/cout_b);return 0;}


5.编写程序,要求输入一周中的工作小时数,然后打印工资总额、税金以及净工资。作如下假设:

  a.基本工资等级=10.00美元/小时

  b.加班(超过40小时)=1.5倍的时间

  c.税率  前300美元为15%;下一个150美元为20%;余下的为%25.

用#define定义常量。

#include <stdio.h>#define FOUD 10//基本工资10美元/小时#define RAT_1 0.15//税率前300美元为15%#define RAT_2 0.20//下一个150美元为20%#define RAT_3 0.25//余下的为25%#define B_T 40//加班时间分界点#define BREAK_1 300//分界点300美元#define BREAK_2 450//分界点450美元#define BASE_1 (FOUD*B_T)//工作40小时总工资double tax(double fg);//用来计算税金int main(void){double total=0,taxes=0,netpay=0;//总额,税金,净工资int time;//一周工作时间printf("请输入您一周工作时间:");scanf("%d",&time);if (time<=B_T){total=FOUD*time;taxes=tax(total);netpay=total-taxes;}else{total=BASE_1+FOUD*(time-B_T)*1.5;taxes=tax(total);netpay=total-taxes;}printf("您的工资总额 %.1f,税金 %.1f,净工资 %.1f.\n",total,taxes,netpay);return 0;}double tax(double fg){if (fg<=BREAK_1)return (fg*RAT_1);else if(fg<=BREAK_2)//总额在300美元到450美元之间return ((fg-BREAK_1)*RAT_2+BREAK_1*RAT_1);else//总额超过450美元的时候 return (BREAK_1*RAT_1+(BREAK_2-BREAK_1)*RAT_2+(fg-BREAK_2)*RAT_3);}



0 0
原创粉丝点击