C primer plus第六版 第八章答案

//8.1
#include<stdio.h>
int main(void)
{
	char ch;
	int count = 0;
	
	while ((ch = getchar()) != EOF)
		count++;
	
	printf("%d",count);//重定向符號不算的話就是count -1;
		
	return 0;
}
//8.2
#include<stdio.h>
int main(void)
{
	int i = 0;
	char ch;

	while ((ch = getchar()) != EOF)
	{
			if (ch == '\n')
			{
				putchar('\\');
				putchar('n');
				printf(" %d\t",ch);
				i = 0;
			}
			else if (ch == '\t')
			{
				putchar('\\');
				putchar('t');
				printf(" %d\t",ch);
			}
			else if(ch < ' ')   
			{
				putchar('^');
				putchar(ch + 64);
				printf("%d\t",ch);
			}
			else
				printf("%c %d\t",ch,ch);

		if (i++ == 10)
		{
			printf("\n");
			i = 0;
		}
	}

	return 0;
}
//8.3
#include<stdio.h>
int main(void)
{
	int count_big = 0;
	int count_small = 0;
	char ch;

	while ((ch = getchar()) != EOF && ch != '#')
	{
		if (ch >= 'a' && ch <= 'z')
			count_small++;
		else if (ch >= 'A' && ch <= 'Z')
			count_big++;
	}
	printf("%d\n",count_big);    
	printf("%d\n",count_small);

	return 0;
}
//8.4
#include<stdio.h>
#include<ctype.h>
int main(void)
{
	int ch;
	int words = 0, sign = 0, count = 0;
	double average;
	
	while((ch = getchar()) != EOF)
	{
		if (!isspace(ch) && !sign)//書183頁,庫函數
		{
			words++;
			sign = 1;
		}
		if (isalpha(ch))
			count++;
		if (isspace(ch) && sign)	
			sign = 0;
	}
	average = (double)count / (double)words;
	printf("%d 個單詞,評價每個單詞有 %lf 個字母。\n",average);
	
	return 0;
}
//8.6
#include<stdio.h>
char get_first(void);
int main(void)
{
	char ch;
	ch = get_first();
	printf("%c",ch);

	return 0;
}
char get_first(void)
{
	int ch;

	while((ch = getchar()) == '\n' || ch == ' ' || ch == '\t')
	;

	return ch;
}
//8.7
#include<stdio.h>
#define NON_OVERTIME 40.00
#define BASIC 10.00
#define FIRST_HOUR 300.00
#define NEXT_HOUR 450.00
#define FIRST_RATE 0.15
#define NEXT_RATE 0.20
#define LAST_RATE 0.25
void interface(void);
char star(void);
char get_char(void);
int main(void)
{
	int x = 1;
	char num;
	float hour,sum,tax,gain,perhour;
		
	star();
	interface();
	star();
	
	scanf("%c",&num);
	while (x)
	{
		switch (num)
		{
			case 'a':
				perhour = 8.75;
				x = 0;
				break;
			case 'b':
				perhour = 9.33;
				x = 0;
				break;
			case 'c':
				perhour = 10.00;
				x = 0;
				break;
			case 'd':
				perhour = 11.20;
				x = 0;
				break;
			case 'q':
				return 0;
				break;
			default:
				printf("please input Letters from a to d(input q to quit): \n");
				continue;
		}
		printf("you have select $%.2lf\n",perhour);
        printf("Please enter you work hour a week.\n");
		scanf("%f",&hour);
		if (hour > NON_OVERTIME)
		hour = NON_OVERTIME + (hour - NON_OVERTIME) * 1.5;

		sum = perhour * hour;
		if (sum <= FIRST_HOUR)
		{
			tax = sum * 0.15;
			gain = sum - tax;
		}
		else if (sum > FIRST_HOUR && sum <= NEXT_HOUR)
		{
			tax = FIRST_HOUR * 0.15 + (sum - FIRST_HOUR) * 0.20;
			gain = sum - tax;
		}
		else
		{
			tax = FIRST_HOUR * 0.15 + 150 * 0.2 + (hour - 450) * 0.25;
			gain = sum - tax;
		}
		printf("real hour:%.f  perhour:%.2f  tax:%.2f  gain:%.2f", hour, perhour, tax, gain);
		
		x = 1;
		
	}
	
	return 0;
}
 
void interface(void)
{
	printf("Enter the number corresponding to the desired pay rate or action:\n");
	printf("a) $8.75/hr        b) $9.33/hr\n");
	printf("c) $10.00/hr       d) $11.20/hr\n");
	printf("q) quit\n");
}

char star(void)
{
	int i = 1;
	
	for (i;i < 100;i++)
		printf("*");
	printf("\n");
}

char get_char(void)
{
	int ch;
	
	ch = getchar();
	while((ch = getchar()) != '\n')
		continue;
	
	return ch;
} 
//8.8
#include<stdio.h>
char get_choice(void);
float first_input(void);
float last_input(void);
float add(void);
float subtract(void);
float multipy(void);
float divide(void);
int main(void)
{
	char choice;

	while ((choice = get_choice()) != 'q')
	{	
		switch(choice)
		{
			case 'a':add();
					 break;
			case 's':subtract();
					 break;
			case 'm':multipy();
					 break;
			case 'd':divide();
					 break;
			default :printf("Please input a right word.\n");
					 continue;
		}
	}
	printf("Done!\n");
	
	return 0;
}
char get_choice(void)
{
	char choice;
	
	printf("Enter the operation of your choice:\n");
	printf("a. add        s. subtract\n");
	printf("m. multiply   d. divide\n");
	printf("q. quit\n");
	
	choice = getchar();
	while (getchar() != '\n')
		continue;
		
	return choice; 
}
float first_input(void)
{
	float input;
	char ch;
	
	printf("Enter first number: \n");
	while (scanf("%f",&input) == 0)
	{
		while((ch = getchar()) != '\n')
			putchar(ch);
		printf(" is not a number.\n");
		printf("Please enter a number, such as 2.5, -1.78E8, or 3: \n");
	}
	while (getchar() != '\n')
		continue;
	
	return input;
}
float last_input(void)
{
	float input;
	char ch;
	
	printf("Enter second number: \n");
	while (scanf("%f",&input) == 0)
	{
		while((ch = getchar()) != '\n')
			putchar(ch);
		printf(" is not a number.\n");
		printf("Please enter a number, such as 2.5, -1.78E8, or 3: \n");
	}
	while (getchar() != '\n')
		continue;
	
	return input;
}
float add(void)
{
	float first_num, last_num;
	float result;
	

	first_num = first_input();
	last_num = last_input();
	result = first_num + last_num;
	printf("%.1f + %.1f = %.1f\n",first_num, last_num, result);
	
	return result;
}
float subtract(void)
{
	float first_num, last_num;
	float result;
	
	first_num = first_input();
	last_num = last_input();
	result = first_num - last_num;
	printf("%.1f - %.1f = %.1f\n",first_num, last_num, result);
	
	return result;
}
float multipy(void)
{
	float first_num, last_num;
	float result;
	
	first_num = first_input();
	last_num = last_input();
	result = first_num * last_num;
	printf("%.1f * %.1f = %.1f\n",first_num, last_num, result);
	
	return result;
}
float divide(void)
{
	float first_num, last_num;
	float result;

	first_num = first_input();
	last_num = last_input();
	if (last_num == 0)
	{
		printf("Enter a number other than 0: \n");
		last_num = last_input();
	}
	result = first_num / last_num;
	printf("%.1f / %.1f = %.1f\n",first_num, last_num, result);
	
	return result;
}
//8.6
#include<stdio.h>
char get_first(void);
int main(void)
{
	char ch;
	ch = get_first();
	printf("%c",ch);
	
	return 0;
}
char get_first(void)
{
	int ch;
	
	while((ch = getchar()) == '\n' || ch == ' ' || ch == '\t')
	;
	
	return ch;
}
//8.7
#include<stdio.h>
#define NON_OVERTIME 40.00
#define BASIC 10.00
#define FIRST_HOUR 300.00
#define NEXT_HOUR 450.00
#define FIRST_RATE 0.15
#define NEXT_RATE 0.20
#define LAST_RATE 0.25
void interface(void);
char star(void);
char get_char(void);
int main(void)
{
	int x = 1;
	char num;
	float hour,sum,tax,gain,perhour;
		
	star();
	interface();
	star();
	
	scanf("%c",&num);
	while (x)
	{
		switch (num)
		{
			case 'a':
				perhour = 8.75;
				x = 0;
				break;
			case 'b':
				perhour = 9.33;
				x = 0;
				break;
			case 'c':
				perhour = 10.00;
				x = 0;
				break;
			case 'd':
				perhour = 11.20;
				x = 0;
				break;
			case 'q':
				return 0;
				break;
			default:
				printf("please input Letters from a to d(input q to quit): \n");
				continue;
		}
		printf("you have select $%.2lf\n",perhour);
        printf("Please enter you work hour a week.\n");
		scanf("%f",&hour);
		if (hour > NON_OVERTIME)
		hour = NON_OVERTIME + (hour - NON_OVERTIME) * 1.5;

		sum = perhour * hour;
		if (sum <= FIRST_HOUR)
		{
			tax = sum * 0.15;
			gain = sum - tax;
		}
		else if (sum > FIRST_HOUR && sum <= NEXT_HOUR)
		{
			tax = FIRST_HOUR * 0.15 + (sum - FIRST_HOUR) * 0.20;
			gain = sum - tax;
		}
		else
		{
			tax = FIRST_HOUR * 0.15 + 150 * 0.2 + (hour - 450) * 0.25;
			gain = sum - tax;
		}
		printf("real hour:%.f  perhour:%.2f  tax:%.2f  gain:%.2f", hour, perhour, tax, gain);
		
		x = 1;
		
	}
	
	return 0;
}
 
void interface(void)
{
	printf("Enter the number corresponding to the desired pay rate or action:\n");
	printf("a) $8.75/hr        b) $9.33/hr\n");
	printf("c) $10.00/hr       d) $11.20/hr\n");
	printf("q) quit\n");
}

char star(void)
{
	int i = 1;
	
	for (i;i < 100;i++)
		printf("*");
	printf("\n");
}

char get_char(void)
{
	int ch;
	
	ch = getchar();
	while((ch = getchar()) != '\n')
		continue;
	
	return ch;
} 
//8.8
#include<stdio.h>
char get_choice(void);
float first_input(void);
float last_input(void);
float add(void);
float subtract(void);
float multipy(void);
float divide(void);
int main(void)
{
	char choice;

	while ((choice = get_choice()) != 'q')
	{	
		switch(choice)
		{
			case 'a':add();
					 break;
			case 's':subtract();
					 break;
			case 'm':multipy();
					 break;
			case 'd':divide();
					 break;
			default :printf("Please input a right word.\n");
					 continue;
		}
	}
	printf("Done!\n");
	
	return 0;
}
char get_choice(void)
{
	char choice;
	
	printf("Enter the operation of your choice:\n");
	printf("a. add        s. subtract\n");
	printf("m. multiply   d. divide\n");
	printf("q. quit\n");
	
	choice = getchar();
	while (getchar() != '\n')
		continue;
		
	return choice; 
}
float first_input(void)
{
	float input;
	char ch;
	
	printf("Enter first number: \n");
	while (scanf("%f",&input) == 0)
	{
		while((ch = getchar()) != '\n')
			putchar(ch);
		printf(" is not a number.\n");
		printf("Please enter a number, such as 2.5, -1.78E8, or 3: \n");
	}
	while (getchar() != '\n')
		continue;
	
	return input;
}
float last_input(void)
{
	float input;
	char ch;
	
	printf("Enter second number: \n");
	while (scanf("%f",&input) == 0)
	{
		while((ch = getchar()) != '\n')
			putchar(ch);
		printf(" is not a number.\n");
		printf("Please enter a number, such as 2.5, -1.78E8, or 3: \n");
	}
	while (getchar() != '\n')
		continue;
	
	return input;
}
float add(void)
{
	float first_num, last_num;
	float result;
	

	first_num = first_input();
	last_num = last_input();
	result = first_num + last_num;
	printf("%.1f + %.1f = %.1f\n",first_num, last_num, result);
	
	return result;
}
float subtract(void)
{
	float first_num, last_num;
	float result;
	
	first_num = first_input();
	last_num = last_input();
	result = first_num - last_num;
	printf("%.1f - %.1f = %.1f\n",first_num, last_num, result);
	
	return result;
}
float multipy(void)
{
	float first_num, last_num;
	float result;
	
	first_num = first_input();
	last_num = last_input();
	result = first_num * last_num;
	printf("%.1f * %.1f = %.1f\n",first_num, last_num, result);
	
	return result;
}
float divide(void)
{
	float first_num, last_num;
	float result;

	first_num = first_input();
	last_num = last_input();
	if (last_num == 0)
	{
		printf("Enter a number other than 0: \n");
		last_num = last_input();
	}
	result = first_num / last_num;
	printf("%.1f / %.1f = %.1f\n",first_num, last_num, result);
	
	return result;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章