ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-07-18 13:02:45  阅读:200  来源: 互联网

标签:count char ch get choice 第六版 Plus printf Primer


前言:这章是昨日刚打完的,其实第五题不是很满意,我也有点搞的一头雾水,当然其他章肯定有点小细节问题我还没发现,突然想起作者写到的有句话“不管你的程序提示打完多好,总会有人吐槽这个程序有多烂”,前几个我输入验证做的不是很完美(其实是当时有点烦就懒得做了),如被小伙伴学习参考,My pleasure.

仅供参考,新手勿喷。

CH08 Code answer 1:

#include <stdio.h>
#include <string.h>
int main(void)
{
	char ch;
	int count = 0;
	while((ch = getchar()) != EOF)			//这里会把换行符也读取 
		count++;
	printf("%d",count);
 } 

CH08 Code answer 2:

#include <stdio.h>
int main()
{
	char ch;
	int count = 0;
	while((ch = getchar()) != EOF)			//有个问题就是一换行就触发了 
	{
		count++;
		if(ch < ' ')
		{
			if(ch == '\t')
				printf("\\t-%d ",ch);
			else if(ch == '\n')
				printf("\\n-%d ",ch);
			else
				printf("^%c-%d ",ch+64,ch);
		}
		else
			printf("%c-%d ",ch,ch);
		count%10 == 0  ? count=0,printf("\n") : count ;
	 } 
 } 

CH08 Code answer 3:

#include <stdio.h>
#include <ctype.h>
int main(void)
{
	char ch;
	int lower_count=0,upper_count=0;
	while((ch = getchar()) != EOF)
	{
		if(islower(ch))
			lower_count++;
		else if(isupper(ch))
			upper_count++;
	}
	printf("upper:%d lower:%d",lower_count,upper_count);
}

CH08 Code answer 4:

#include <stdio.h>
#include <ctype.h>
int main(void)
{
	int later_count,word_count,flag;
	char ch;
	later_count=word_count=flag=0;
	while((ch = getchar()) != EOF)
	{
		if((isupper(ch) || islower(ch)) && !ispunct(ch))
		{
			later_count++;
			flag = 1;
		}
		else if(isspace(ch) && flag == 1)
		{
			word_count++;
			flag = 0;
		}
	}
	printf("later:%d word:%d avg:%f",later_count,word_count,(float)later_count/(float)word_count);
}

CH08 Code answer 5:

#include <stdio.h>
int main(void)
{
	int low=0,high=100;
    int guess = (high+low)/2;
    char ch;
    
    printf("Pick an integer from 1 to 100. I will try to guess ");
    printf("it.\nRespond with a y if my guess is right and with");
    printf("\nan n if it is wrong.\n");
    printf("Uh...is your number %d?\n", guess);
    while ((ch = getchar()) != 'y')      /* get response, compare to y */
    {
    	if(ch == 'h')
    	{
    		low = 0;
    		high = guess;
    		guess = (low+high)/2;
    		printf("Well, then, is it %d?\n", guess);
		}
    	else if(ch == 'l')
    	{
    		low = guess;
    		high = 100;
    		guess = (low+high)/2;
    		printf("Well, then, is it %d?\n", guess);
		}
		while(getchar() != '\n')
			continue;
	}    
    printf("I knew I could do it!\n");
    
    return 0;
}

CH08 Code answer 6:

#include <stdio.h>
#include <ctype.h>
int main(void)
{
	char ch;
	while( isspace(ch = getchar()) )		//获取第一个非空字符 
		continue;
		
	putchar(ch);							//输出第一个字符	
	
	while(getchar() != '\n')				//将多余的缓冲区输入排除 
		continue;
}

CH08 Code answer 7:

这个是修改之前的程序,所以有些宏定义还留着。

#include <stdio.h>
#include <ctype.h>

#define SALARY 10
#define OVERTIME 40
#define Q300 0.15
#define X150 0.2
#define OM 0.25

#define r1 8.75
#define r2 9.33
#define r3 10.00
#define r4 11.20

void Print(void); 
char get_choice(void);
char get_first(void);

int main(void)
{
	
	float money;
	int ho;	
	
	char choice;
	float sa; 
	
	while((choice = get_choice()) != 'q')
	{
			switch (choice)
			{
				case 'a':
					sa = r1;
					break;
				case 'b':
					sa = r2;
					break;
				case 'c':
					sa = r3;
					break;
				case 'd':
					sa = r4;
					break;
			}
			
			printf("请输入你工作了多少小时:");
			scanf("%d",&ho);
			if(ho > 40)
				money = (ho-40)*1.5*sa + 40*sa;
			else
				money = ho*sa;

			if(money <= 300)
				money = money - Q300 * money;
			else if(money <= 450)
				money = money - ((money-300)*X150 + 300 * Q300);
			else
				money = money - ((money-450)*OM + 150*X150 + 300*Q300);
			printf("你的工资为%f\n",money);	
	}
	printf("bye!");
 } 
 
 void Print(void)
 {
 	printf("*****************************************************************\n");
	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/h                          d) $11.20/hr\n");
	printf("q) quit\n");
	printf("*****************************************************************\n");
	printf("请选择:");
  } 
  
  char get_first(void)
  {
  	char ch;
  	
	while( isspace(ch = getchar()) )		//获取第一个非空字符 
		continue;
		
	//putchar(ch);							//输出第一个字符	
	
	while(getchar() != '\n')				//将多余的缓冲区输入排除 
		continue;
		
	return ch;
  }
  
  char get_choice(void)
  {
  	char ch;

  	Print();
  	ch = get_first();
  	while( (ch < 'a' || ch > 'd') && ch != 'q' )
  	{
  		printf("please respond with a, b, c, d, or q!");
  		ch = get_first();
	}
  	return ch;	
  }

CH08 Code answer 8:

#include <stdio.h>
#include <ctype.h>

char get_choice(void);
char get_first(void);
float get_float(char choice);

int main(void)
{
	float a,b;
	char choice;
	
	while( (choice = get_choice()) != 'q')
	{
		printf("Enter first number:"); 
		a = get_float(choice);
		printf("Enter second number:");
		b = get_float(choice);
		switch(choice)
		{
			case 'a':
				printf("%f + %f = %f\n",a,b,a+b);
				break;
			case 's':
				printf("%f - %f = %f\n",a,b,a-b);
				break;
			case 'm':
				printf("%f * %f = %f\n",a,b,a*b);
				break;
			case 'd':
				printf("%f / %f = %f\n",a,b,a/b); 
				break;
			default:
				printf("program error!\n");	
		}
	}
	printf("bye!");	
	
	return 0;
} 

char get_choice(void)
{
	char ch;
	
	printf("**********************************\n");
	printf("Enter the operation of your choice\n");
	printf("a. add           s. subtract\n");
	printf("m. multiply      d. divide\n");
	printf("q. quit\n");
	printf("**********************************\n");
	
	ch = get_first();
	while( ch != 'a' && ch != 's' && ch != 'm' && ch != 'd' && ch != 'q')
	{
		printf("please respond a, s, m, d or q\n");
		ch = get_first();	
	} 
	return ch;
}

char get_first(void)
{
	char ch;
	
	while( isspace(ch = getchar()) )		//选到第一个非空字符 
		continue;
	while(getchar() != '\n')				//去掉多余字符				
		continue;
	return ch;	
} 

float get_float(char choice)
{
	float input;
	char ch;
	
	while(scanf("%f",&input) != 1)
	{
		while((ch = getchar()) != '\n')
			putchar(ch);
		printf(" is not an num.\nplease enter an num value,such as 2, -178 or 3.5:"); 
	}
	
	if(choice == 'd' && input == 0 )
	{
		printf("Enter a number other than 0:");
		input = get_float(choice);					//重新调用这个函数,当里面返回了正确的值要记得接受再向上返回 
	} 
	return input;
}

标签:count,char,ch,get,choice,第六版,Plus,printf,Primer
来源: https://blog.csdn.net/weixin_50166464/article/details/118875948

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有