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

第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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值