c primer plus第六版 第七章




/*1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格
数、换行符数和所有其他字符的数量。*/
#include<stdio.h>
#include<ctype.h>
int main(void)
{
unsigned auto short space_d=0;//空格
unsigned auto short enter_d=1;//换行
unsigned auto short other_d=0;//所有字符
unsigned auto short characte=0;//标点

char ch;
whil:ch=getchar();
{

	if(ispunct(ch))
		characte++;
	if(ch==' ')
		space_d++;
	if(ch=='\n')
		++enter_d;
	else
		other_d++;
	putchar(ch);
	if(ch=='#')
		goto done;
	goto whil;
}
done: printf("\ncharacte==%hu  space==%hu enter==%hu other==%hu\n",characte,space_d,enter_d,other_d); 
printf("Done!\n");
return 0;
}
/*2.编写一个程序读取输入,读到#字符停止。程序要打印每个输入
的字符以及对应的ASCII码(十进制)。一行打印8个字符。建议:使用
字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。*/
#include<stdio.h>
#define SIZE 8
int main(void)
{
unsigned auto int size=1;
int ch;
while('#'!=(ch=getchar()))
{

	if(size++<=SIZE)
		printf("%c==%d\t",ch,ch);
	else if(size%SIZE==0)
		putchar('\n');
}

return 0;
}

```c
/*3.编写一个程序,读取整数直到用户输入 0。输入结束后,程序应
报告用户输入的偶数(不包括 0)个数、这些偶数的平均值、输入的奇
数个数及其奇数的平均值。*/
#include<stdio.h>
int main(void)
{
unsigned auto short odd=0;
float odd_d=0;
unsigned  auto short even=0;
float even_d=0;
unsigned auto short x;
while((scanf("%hu",&x)==1) && x!=0 )
{
	if(x%2==0)
	{
		even_d+=x;
		even++;
	}
	else
	{
		odd_d+=x;
	odd++;
	}
}
printf("odd==%hu\teven==%hu\nodd_average==%.2f\teven_average==%.2f\n",odd,even,odd_d/odd,even_d/even);

return 0;
}
/*4.使用if else语句编写一个程序读取输入,读到#停止。用感叹号替
换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替
换。*/
#include<stdio.h>
int main(void)
{
unsigned auto int ch,c[3];
unsigned auto short count=0;
in:ch=getchar();
   if(ch!='#')
   {
	if(ch=='!')
	{
	c[0]=ch;
	c[1]='!';
		count++;

	printf("%s",c);
	}
	putchar(ch);
   goto in;
   }
printf("\n%hu\nDone!\n",count);
return 0;
}
/*5.使用switch重写练习4*/
#include<stdio.h>
int main(void)
{
unsigned auto short count=0;
unsigned auto ch,c[3];
whil:ch=getchar();
switch(ch)
{
	case '#':
	goto done;
	case '!':
	{
		c[0]='!';
		c[1]=ch;
		count++;
		printf("%s",c);
	}
	default:
	{
	putchar(ch);
	goto whil;
	}

}
done:printf("一共替换了%hu次\nDone!\n",count);
return 0;
}

/*6.编写程序读取输入,读到#停止,报告ei出现的次数。
注意
该 程 序 要 记 录 前 一 个 字 符 和 当 前 字 符 。 用 “Receive  your  eieio
award”这样的输入来测试。*/
#include<stdio.h>
int main(void)
{
unsigned auto short  count=0;
char ch,c1='\n',c2='\n';//读取输入
while('#'!=(ch=getchar()))
{
if(ch=='e')
{
	c1=ch;
}
if(ch=='i')
{
c2=ch;
if(c1=='e'&&c2=='i')
	count++;
}

}
printf("count==%hu\n",count);
return 0;
} 

``
7用#define定义符号常量。不用在意是否符合当前的税法。*/
#include<stdio.h>
#define BASE_AY 1000//基本工资
#define WORK_TIME 40 //每周40小时
#define OVERTIME_PAY 1.5//加班1.5倍时间
#define THREE_PAY 300//前三百美元
#define THREE_TAX 0.15//前三百美元的税率
#define CONTINUED_PAY 150//续150美元
#define CONTINUED_TAX 0.2//续150美元的税率
#define MORE_TAX 0.25//余下的税率
int main(void)
{
printf("请输入一周的工作时间\n");
unsigned auto short int week;
double pay=0.0;
float tax=0.0;
double net_income=0.0;
scanf("%hu",&week);
        if(week>WORK_TIME)
        pay=BASE_AY+( week-WORK_TIME)*OVERTIME_PAY;
        else
                pay=BASE_AY;
        if(pay<=THREE_PAY)
        tax=pay*THREE_TAX;
        else if(pay>THREE_PAY && pay<=(THREE_PAY+CONTINUED_PAY))
                tax=pay*CONTINUED_TAX;
        else
                tax=pay*MORE_TAX;
        net_income=pay-tax;
        printf("工资总额=%.2f\n税金=%.2f\n净收入=%.2f\n",pay,tax,net_income);
}

```c/*8.修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单。使用switch完成工>>资等级选择。运行程序后,显示的菜单应该类似这样:

*****************************************************************

Enter the number corresponding to the desired pay rate or action:

1) $8.75/hr              2) $9.33/hr

3) $10.00/hr             4) $11.20/hr

5) quit

******************************************************************/
#include<stdio.h>
//#define BASE_PAY 1000//本工资
#define WORK_TIME 40 //每周40小时
#define OVERTIME_PAY 1.5//加班1.5倍时间
#define THREE_PAY 300//前三百美元
#define THREE_TAX 0.15//前三百美元的税率
#define CONTINUED_PAY 150//续150美元
#define CONTINUED_TAX 0.2//续150美元的税率
#define MORE_TAX 0.25//余下的税率
                                                             
int main(void)
{
start:
        printf("请选择每小时的薪水\n");
        printf("(1)$8.75\t");

                printf("(2)$9.33\n");

                           printf("(3)$10.0\t");

                        printf("(4)$11.20\n");

                        printf("(5)quit\n");

        unsigned auto short int select,time;
        printf("Enter the number corresponding to the desired pay rate or action:\n");
float pay=0.0;
        while(scanf("%hu",&select)==1 && select!=5)
                {
                                switch(select)
                                {
                                        case 1:
                                                                                                pay=8.75;
                                                break;
                                        case 2:
                                                pay=9.33;
                                                break;
                                        case 3:
                                                pay=10.0;
                                                break;
                                        case 4:
                                                pay=11.20;
                                                break;
                                        case 5:
                                                goto done;
                                        default :
                                                {
                                                printf("请正确选择时薪\n");
                                                printf("(1)$8.75/h\t");
                                                printf("(2)$9.33/h\n");
                                                printf("(3)$10.0/h\t");
                                                printf("(4)$11.20/h\n");
                                                printf("(5)Quit!\n");
                                                        continue;

                                                }            
              
                                }

        float base_pay=0,tax=0,net_income=0;
                printf("请输入加班时间\n");
        while(scanf("%hu",&time)==1 && time>=0)
        {
        if(time>WORK_TIME)
                base_pay=pay*time*OVERTIME_PAY;
                base_pay=pay*time;
        if(base_pay<=THREE_PAY)
        tax=base_pay*THREE_TAX;
        else if(base_pay<=(THREE_PAY+CONTINUED_PAY))
                tax=base_pay*CONTINUED_TAX;
        else if(base_pay>(THREE_PAY+CONTINUED_PAY))
                tax=base_pay*MORE_TAX;
        net_income=base_pay-tax;
        printf("总工资=%.2f\n税金=%.2f\n净收入=%.2f\n",base_pay,tax,net_income);
goto start;
        }

                }
done:printf("!Done\n");
        return 0;

}
//9.编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数
#include<stdio.h>
#include<stdbool.h>
int main(void)
{
unsigned  auto short int divisor,dividend=2,consult=0,product=0,sum=0;
conti:printf("请输入一个正整数:...\b\b\b");
while(scanf("%u",&divisor)==1)
{	putchar('\n');
	if(divisor<=dividend)
		goto conti;

	while(divisor>2)
	{

		dividend=2;
			consult=divisor/dividend;
		
			while(dividend<=consult)
		{

			sum=consult;
		while(sum>=1)
		{
		product=dividend*sum;
		if(product==divisor)
			goto brea;
		sum--;
		}
	dividend++;
	if(divisor==product)
		divisor=2;
		}
		if(divisor!=product)
printf("这个质数是:%hu\t",divisor);
brea:
		divisor--;
	}
	printf("\n请输入一个正整数\n");
}
	return 0;
}
/*10.1988年的美国联邦税收计划是近代最简单的税收方案。它分为4个类别,每个类别有两个等级。

下面是该税收计划的摘要(美元数为应征税的收入):


例如,一位工资为20000美元的单身纳税人,应缴纳税费0.15×17850+0.28×(20000−17850)美元。编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金。程序应通过循环让用户可以多次输入。*/

#include<stdio.h>
#define SINGLE 17850//单身
#define HEAD 23900//户主
#define MARRIED_G 29750//已婚,共有
#define MARRIED_L 14875//已婚,离异
#define E_TAX 0.28//超出的税率
#define TAX 0.15//税率
void select(int i);
void cat(void);
int main(void)
{
unsigned auto int pay,i;
float tax=0;
whiles:printf("请选择社会类别\n");
cat();
       scanf("%u",&i);
select(i);
if(i>=1&&i<=4)
{
	printf("请输入工资:.....\b\b\b\b\b\b");
while(scanf("%u",&pay)==1)
{
	if(pay>SINGLE&&i==1)
	tax=pay*TAX+E_TAX*(pay-SINGLE);	
	else if(pay<=SINGLE&&i==1)
		tax=pay*TAX;
	else if(pay>HEAD&& i==2)
		tax=pay*TAX+E_TAX*(pay-HEAD);
	else if(pay<=HEAD && i==2)
		tax=pay*TAX;
	else if(pay>MARRIED_G&&i==3)
		tax=pay*TAX+E_TAX*(pay-MARRIED_G);
	else if(pay<=MARRIED_G &&i==3)
		tax=pay*TAX;
	else if(pay>MARRIED_L&& i==4)
		tax=pay*TAX+E_TAX*(pay-MARRIED_L);
	else if(pay<=MARRIED_L&&i==4)
		tax=pay*TAX;
	printf("需要缴税%.2f\n",tax);
goto whiles;

}
}
else 
goto whiles;
putchar('\n');
return 0;
}
void select (int s)
{
switch(s)
{
	case 1:
	printf("你是单身\n");
	break;
	case 2:
	printf("你是户主\n");
	break;
	case 3:
	printf("你是已婚,共有\n");
	break;
	case 4:
	printf("你是已婚,离异\n");
	break;
}	
}
void cat(void)
{
	printf("(1)单身\t");
	printf("\t(2)户主\n");
	printf("(3)已婚/共有\t");
	printf("(4)已婚/离异\n");

}
*11.ABC 邮购杂货店出售的洋蓟售价为 2.05 美元/磅,甜菜售价为 1.15 美元/磅,胡萝卜售价为 1.09美元/磅。在添加运费之前,100美元的订单有5%的打折优惠。少于或等于5磅的订单收取6.5美元的运费和包装费,5磅~20磅的订单收取14美元的运费和包装费,超过20磅的订单在14美元的基础上每续重1磅增加0.5美元。编写一个程序,在循环中用switch语句实现用户输入不同的字母时有不同的响应,即输入a的响应是让用户输入洋蓟的磅数,b是甜菜的磅数,c是胡萝卜的磅数,q 是退出订购。程序要记录累计的重量。即,如果用户输入 4 磅的甜菜,然后输入 5磅的甜菜,程序应报告9磅的甜菜。然后,该程序要计算货物总价、折扣(如果有的话)、运费和包装费。随后,程序应显示所有的购买信息:物品售价、订购的重量(单位:磅)、订购的蔬菜费用、订单的总费用、折扣(如果有的话)、运费和包装费,以及所有的费用总额。*/
#include<stdio.h>
#define YANG 2.05
#define TIAN 1.15
#define HU 1.09
#define BAI 100
#define ZHE 0.05
#define WU 5
#define JIA 6.5
#define ER 20
#define JIA_E 14
#define C_JIA 0.5
void select ();
char insert(char ch);
int main(void)
{
	float yang=0,tian=0,hu=0,zhe=0,yun=0,pays=0;
	unsigned auto short int bang,yang_b=0,tian_b=0,hu_b=0,bangs=0;
	char ch,c='\n';

	select();
while('#'!=(ch=getchar()))
{
	switch(ch)
	{
		case 'a':
	{
		printf("请输入洋蓟的磅数\n");
		bang=0;
		while(scanf("%hu",&bang)==1 && bang>0)
		yang_b+=bang;
		printf("订购了%hu磅洋蓟\n",yang_b);
		printf("零售价:%.2f\n",YANG);
		yang=yang_b*YANG;
		c=insert(ch);
		putchar(c);
		printf("总价为:%.2f\n",c,yang);
		
		while(getchar()!='\n')
			continue;
		break;
		
	}
		case 'b':
	{
		printf("请输入甜菜的磅数\n");
		bang=0;
		while(scanf("%hu",&bang)==1 && bang>0)
			tian_b+=bang;
			printf("订购了%hu磅甜菜",tian_b);
printf("零售价:%.2f\n",TIAN);
		tian=tian_b*TIAN;
		c=insert(ch);
		putchar(c);
		printf("总价为:%.2f\n",tian);
		while(getchar()!='\n');
		continue;
	break;
	}
		case 'c':
	{
	printf("请输入胡萝卜的磅数\n");
	bang=0;
	while(scanf("%hu",&bang)==1 && bang>0)
	hu_b+=bang;
	printf("订购了%hu磅或萝卜\n",hu_b);
printf("零售价:%.2f\n",HU);
		hu=hu_b*HU;
		c=insert(ch);
		putchar(c);
		printf("总价为%.2f\n",hu);
		while(getchar()!='\n');
	break;
	}
		case 'q':
	goto exit;
	}
	select();
	continue;
}
exit:
bangs=yang_b+tian_b+hu_b;
pays=yang+tian+hu;
if(bangs<=WU)
		{
			yun=JIA;
			pays+=JIA;
			
		}
		else if(bangs>WU&&bangs<=ER)
		{
			yun=JIA_E;
			pays+=JIA_E;
		
		}
			else if(bangs>ER)
			{
				yun=JIA_E+pays*C_JIA;
			pays=pays+JIA_E+pays*C_JIA;
			}
			printf("运费是=%.2f\n",yun);
		if(pays>=BAI)
			zhe=pays*ZHE;
		printf("折扣是%.2f元\n",zhe);
		pays=pays-zhe;
		printf("打完折是:%.2f元\n",pays);


printf("退出订购!\n");
return 0;
}
char insert(char ch)
{
	switch(ch)
	{
		case 'a':
			printf("洋蓟");
			break;
		case 'b':
			printf("甜菜");
			break;
		case 'c':
			printf("胡萝卜");
			break;
	}

}
void select(void)
{
printf("(a)洋蓟\t");
printf("(b)甜菜\n");
printf("(c)胡萝卜\t");
printf("(q)退出订购\n");

}
### 回答1: 第七章主要介绍了C语言中的函数,包括函数的定义、调用、参数传递、返回值等方面的内容。具体内容包括: 1. 函数的定义和调用:介绍了如何定义函数以及如何调用函数,包括函数的返回类型、函数名、参数列表和函数体等。 2. 函数的参数传递:介绍了C语言中的参数传递方式,包括值传递和地址传递,以及如何在函数中使用参数。 3. 函数的返回值:介绍了函数的返回值类型和返回值的作用,以及如何在函数中使用返回值。 4. 函数的声明和定义:介绍了函数的声明和定义的区别,以及如何在不同的文件中使用函数。 5. 函数的递归:介绍了递归函数的概念和使用方法,以及递归函数的优缺点。 6. 函数指针:介绍了函数指针的概念和使用方法,以及如何在程序使用函数指针。 总的来说,第七章C语言中非常重要的一章,对于理解和使用函数有很大的帮助。 ### 回答2: 《C Primer Plus》第六版第七章主要介绍了C语言中的输入和输出函数。这章的内容包括标准I/O库、`printf()`、`scanf()`等函数以及文件输入输出等。 在这一章中,首先讲解了如何使用标准I/O库进行输入输出。标准I/O库提供了一组函数,可以用于从键盘读取输入,或将结果输出到屏幕上。`printf()`函数可以用于格式化输出,可以控制输出的格式,比如输出特定长度的整数、浮点数等。`scanf()`函数可以用于从键盘读取输入,并将其存储到变量中,也可以使用特定的格式来读取特定类型的数据。 接下来,讲解了如何使用`getchar()`和`putchar()`函数。`getchar()`函数用于从键盘读取单个字符,`putchar()`函数用于向屏幕输出单个字符。 此外,还介绍了文件的输入输出。通过使用`fopen()`函数打开文件,可以读取或写入文件的内容。使用`fprintf()`函数可以将数据写入文件中,使用`fscanf()`函数可以从文件中读取数据并存储到变量中。同时还介绍了如何使用`fclose()`函数关闭文件。 最后,本章还讲解了格式化输出的一些高级特性,比如控制字段宽度、对齐方式以及使用转换说明符等。 通过学习《C Primer Plus》第六版第七章,我们能够了解C语言输入输出的基本概念和原理,掌握使用输入输出库函数进行读写操作的方法,以及如何进行文件的读写操作。这对于日后编写C语言程序以及处理文件输入输出都有着重要的作用。 ### 回答3: C Primer Plus第六版第七章主要介绍了C语言中的函数。函数是一段完成特定任务的可重复使用的代码块,它可以接收输入参数并返回一个值。 在这一章中,我们学习了如何定义函数并明确函数的返回类型、函数名和参数列表。通过使用函数,我们可以将程序中的代码划分为更小、更可管理的部分。函数的主要好处之一是提高了代码的可读性和可维护性。 我们还学习了传递参数的不同方式,包括按值传递、按地址传递以及传递指针。这些方法允许我们在函数之间传递数据,并在函数内部对数据进行修改。 此外,我们还研究了递归函数的概念。递归函数是指可以调用自身的函数。使用递归可以通过将问题划分为更小的子问题来解决复杂的问题。 在这一章中,我们还学习了函数的作用域和生命周期。函数的作用域定义了函数内部和外部变量的可见性。函数的生命周期指的是函数在程序运行期间的保持状态的时间。 最后,我们还讨论了函数的多文件组织和调用。通过将函数定义和函数声明分离到不同的文件中,我们可以更好地组织和管理大型项目的代码。 通过学习C Primer Plus第六版第七章,我们可以更好地理解和应用函数在C语言中的重要性。掌握函数的知识将有助于我们编写更模块化、可读性更强、可维护性更高的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值