第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);
}