C Primer Plus 第6版 编程练习答案(第八章)

C Primer Plus 第6版 各章编程练习答案 | 2021-04-17 23:00:29 | 阅读 141 次 | 评论(0)

8.1.c

#include <stdio.h>
int main(void) {
	int ch;
	int ct = 0;

	while ((ch = getchar()) != EOF)
		++ct;
	printf("%d characters read\n", ct);

	return 0;
}


8.2.c

#include <stdio.h>
int main(void) {
	int ch, ct;
	ct = 0;
	
	while((ch = getchar()) != EOF) {
		if(ct == 10) {
			printf("\n");
			ct = 0;
			ct++;
		}
		if(ch == '\n')
			printf("\\n ");
		else if(ch == '\t')
			printf("\\t ");
		else if(ch < ' ')
			printf("^%c ", ch + 64);
		else
			printf("%c = %d ", ch, ch);
		ct++;
	}
	
	return 0;
}


8.3.c

#include <stdio.h>
#include <ctype.h>
int main(void) {
	int ch;
	unsigned long uct = 0;
	unsigned long lct = 0;
	unsigned long oct = 0;

	while ((ch = getchar()) != EOF)
		if (isupper(ch))
			uct++;
		else if (islower(ch))
			lct++;
		else
			oct++;
	printf("%lu uppercase characters read\n", uct);
	printf("%lu lowercase characters read\n", lct);
	printf("%lu other characters read\n", oct);

	return 0;
}


8.4.c

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
int main(void) {
	int ch;
	int ct_letter = 0;
	int ct_word = 0;
	float num;
	bool isword = false;
	
	while((ch = getchar()) != EOF) {
		if(ispunct(ch))
			continue;
		if(isalpha(ch))
			++ct_letter;
		if(!isspace(ch) && !isword) {
			isword = true;
			++ct_word;
		}
		if(isspace(ch) && isword)
			isword = false;
	}
	num = (float)ct_letter / ct_word;
	
	printf("Total words: %d.\n", ct_word);
    printf("Total letters: %d.\n", ct_letter);
    printf("Average letters of words: %f.\n", num);
	
	return 0;
}


8.5.c

#include <stdio.h>
#include <ctype.h>
int main(void) {
	int high = 100;
	int low = 1;
	int guess = (high + low) / 2;
	char response;
	printf("Pick an integer from 1 to 100. I will try to guess ");
	printf("it.\nRespond with a y if my guess is right, with");
	printf("\na h if it is high, and with an l if it is low.\n");
	printf("Uh...is your number %d?\n", guess);
	while ((response = getchar()) != 'y') {
		if (response == '\n')
			continue;
		if (response != 'h' && response != 'l') {
			printf("I don't understand that response. Please enter h for\n");
			printf("high, l for low, or y for correct.\n");
			continue;
		}
		
		if (response == 'h')
			high = guess - 1;
		else if (response == 'l')
			low = guess + 1;
		guess = (high + low) / 2;
		printf("Well, then, is it %d?\n", guess);
	}
	printf("I knew I could do it!\n");
	return 0;
}


8.6.c

#include <stdio.h>
#include <ctype.h>
#define STOP '#'
int get_first(void);
int main(void) {
	int ch;

	while ((ch = get_first()) != STOP) {
		printf("%c\n", ch);
	}

	return 0;
}

int get_first(void) {
	int ch;

	do {
		ch = getchar();
	} while (isspace(ch));
	while (getchar() != '\n')
		continue;

	return ch;
}


8.7.c

#include <stdio.h>
#include <ctype.h>
#define BASEPAY1 8.75 // $8.75 per hour
#define BASEPAY2 9.33 // $9.33 per hour
#define BASEPAY3 10.00 // $10.00 per hour
#define BASEPAY4 11.20 // $11.20 per hour
#define BASEHRS 40 // hours at basepay
#define OVERTIME 1.5 // 1.5 time
#define AMT1 300 // 1st rate tier
#define AMT2 150 // 2st rate tier
#define RATE1 0.15 // rate for 1st tier
#define RATE2 0.20 // rate for 2nd tier
#define RATE3 0.25 // rate for 3rd tier
int getfirst(void);
void menu(void);
int main(void) {
	double hours;
	double gross;
	double net;
	double taxes;
	double pay;
	char response;


	menu();
	while ((response = getfirst()) != 'q') {
		if (response == '\n')
			continue;
		response = tolower(response);
		switch (response) {
			case 'a':
				pay = BASEPAY1;
				break;
			case 'b':
				pay = BASEPAY2;
				break;
			case 'c':
				pay = BASEPAY3;
				break;
			case 'd':
				pay = BASEPAY4;
				break;
			default :
				printf("Please enter a, b, c, d, or q.\n");
				menu();
				continue;
		}
		printf("Enter the number of hours worked this week: ");
		scanf("%lf", &hours);
		if (hours <= BASEHRS)
			gross = hours * pay;
		else
			gross = BASEHRS * pay + (hours - BASEHRS) * pay * OVERTIME;
		if (gross <= AMT1)
			taxes = gross * RATE1;
		else if (gross <= AMT1 + AMT2)
			taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
		else
			taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
		net = gross - taxes;
		printf("gross: $%.2f; taxes: $%.2f; net: $%.2f\n", gross, taxes,
		       net);
		menu();
	}
	printf("Done.\n");

	return 0;
}
void menu(void) {
	printf("********************************************************"
	       "*********\n");
	printf("Enter the letter corresponding to the desired pay rate"
	       " or action:\n");
	printf("a) $%4.2f/hr b) $%4.2f/hr\n", BASEPAY1,
	       BASEPAY2);
	printf("c) $%5.2f/hr d) $%5.2f/hr\n", BASEPAY3,
	       BASEPAY4);
	printf("q) quit\n");
	printf("********************************************************"
	       "*********\n");
}
int getfirst(void) {
	int ch;
	ch = getchar();
	while (isspace(ch))
		ch = getchar();
	while (getchar() != '\n')
		continue;
	return ch;
}


8.8.c

#include <stdio.h>
int get_choice(void);
float get_input(void);
int main(void) {
	int ch;
	float n_first, n_second, value;
	
	while((ch = get_choice()) != 'q') {
		printf("Enter first number: ");
		n_first = get_input();
		printf("Enter second number: ");
		n_second = get_input();
		
		switch(ch) {
			case 'a':
				value = n_first + n_second;
				printf("%g + %g = %g\n", n_first, n_second, value);
				break;
			case 's':
				value = n_first - n_second;
				printf("%g - %g = %g\n", n_first, n_second, value);
				break;
			case 'm':
				value = n_first * n_second;
				printf("%g * %g = %g\n", n_first, n_second, value);
				break;
			case 'd':
				if(n_second == 0) {
					printf("Enter a number other than 0: ");
					n_second = get_input();
				}
				value = n_first / n_second;
				printf("%g / %g = %g\n", n_first, n_second, value);
				break;
		}
	}
	printf("Bye.\n");
	
	return 0;
}
int get_choice(void) {
	int ch;
	
	printf("Enter the operation of your choice:\n");
	printf("a. add s. subtract\n");
	printf("m. multiply d. divide\n");
	printf("q. quit\n");
	
	ch = getchar();
	while(ch != 'a' && ch != 'b' && ch != 'c' && ch != 'd' && ch != 'q') {
		printf("Please enter a,b,c,d or q\n");
		ch = getchar();
	}
	return ch;
}
float get_input(void) {
	float input;
	int ch;
	
	while(scanf("%f", &input) != 1) {
		while((ch = getchar()) != '\n')
			putchar(ch);
		printf(" is not an number.\n");
		printf("Please enter a number, such as 2.5, -1.78E8, or 3: ");
	}
	while(getchar() != '\n')
		continue;
			
	return input;
}

文章评论,共0条
作者仅允许登录用户评论,请后再评论
浏览1401次
文章归档
最新评论