ICode9

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

《C++ Primer》5th 课后练习 第五章 语句 1~10

2020-01-28 15:07:59  阅读:269  来源: 互联网

标签:语句 10 ++ 5th C++ else grade while sum


练习5.1 什么是空语句?什么时候用空语句?

空语句是不做任何操作的语句,当语法上需要一条语句但是逻辑上不需要的时候,可以使用空语句。

练习5.2 什么是块?什么时候会用到块?

块是指用花括号括起来的语句和声明序列,当语法上需要一条语句但是逻辑上需要一组语句的时候,可以使用块。

练习5.3 使用逗号运算符重写1.4.1节的 while 循环,使它不再需要块,观察改写之后的代码可读性提高了还是降低了。

while (val <= 10)
    sum += val, ++val;

我觉得代码确实变得简洁了,但是可读性有所降低。

练习5.4 说明下列例子的含义,如果存在问题,试着修改它。

(a) while (string::iterator iter != s.end()) { /* . . . */ }
(b) while (bool status = find(word)) { /* . . . */ }
		if (!status) { /* . . . */ }

(a)语句似乎想使用迭代器iter遍历s,但如果把迭代器iter定义写在while语句的判断条件中,会每次循环都重新定义iter,这显然错误。正确的写法应该把iter定义在while循环之外。

(b)while语句与if语句是相互独立两个代码块,所以定义在while语句中的变量status是不能在if中访问的,正确的写法应把status定义在while循环之前,或把if语句拿到while循环中去判断。

练习5.5 写一段自己的程序,使用if else 语句实现把数字转换为字母成绩的要求。

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
	int grade;
	vector<string> souce = { "F", "D", "C", "B", "A", "A++" };
	while(cin >> grade){
		string lettergrade;
		if (grade < 60) {
			lettergrade = souce[0];
		}
		else {
			lettergrade = souce[(grade - 50) / 10];
		}
		if (grade == 100 || grade < 60) {
		}
		else {
			if (grade % 10 > 7) {
				lettergrade += "+";
			}
			else if (grade % 10 < 3) {
				lettergrade += "-";
			}
		}
		cout << lettergrade << endl;
	}
	return 0;
}

练习5.6 改写上一题的程序,使用条件运算符代替if else语句。

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
	int grade;
	vector<string> souce = { "F", "D", "C", "B", "A", "A++" };
	while(cin >> grade){
		string lettergrade = grade < 60 ? souce[0] : souce[(grade - 50) / 10];
		lettergrade += (grade == 100 || grade < 60) ? "" : (grade % 10 > 7) ? "+" : (grade % 10 < 3) ? "-" : "";
		cout << lettergrade << endl;
	}
	return 0;
}

练习5.7 改写下列代码段中的错误。

(a) if (ival1 != ival2) 
		ival1 = ival2
    else 
    	ival1 = ival2 = 0;
(b) if (ival < minval) 
		minval = ival;
    	occurs = 1;
(c) if (int ival = get_value())
    	cout << "ival = " << ival << endl;
    if (!ival)
    	cout << "ival = 0\n";
(d) if (ival = 0)
    	ival = get_value();

(a)ival1 = ival2 语句后少了';'

(b)应该把minval = ival;occurs = 1;前后加上花括号。

©应该把if(!ival)改成else

(d)if (ival = 0) 应该改为 if (ival == 0)

练习5.8 什么是“悬垂else”?C++语言是如何处理else子句的?

C++规定else与距离它最近的尚未匹配的if匹配。

练习5.9 编写一段程序,使用一系列if语句统计从cin读入的文本中有多少元音字母。

#include<iostream>
using namespace std;
int main()
{
	char ch;
	int sum_a = 0, sum_e = 0, sum_i = 0, sum_o = 0, sum_u = 0;
	int vowelcnt = 0;
	while(cin >> ch){
		if (ch == 'a') {
			++sum_a;
			++vowelcnt;
		}
		else if(ch == 'e'){
			++sum_e;
			++vowelcnt;
		}
		else if (ch == 'i') {
			++sum_i;
			++vowelcnt;
		}
		else if (ch == 'o') {
			++sum_o;
			++vowelcnt;
		}
		else if (ch == 'u') {
			++sum_u;
			++vowelcnt;
		}
	}
	cout << "acnt is: " << sum_a << endl;
	cout << "ecnt is: " << sum_e << endl;
	cout << "icnt is: " << sum_i << endl;
	cout << "ocnt is: " << sum_o << endl;
	cout << "ucnt is: " << sum_u << endl;
	cout << "vowelcnt is: " << vowelcnt << endl;
	return 0;
}

练习5.10 我们之前实现的统计元音字母的程序存在一个问题:如果元音字母以大写形式出现,不会被统计在内。编写一段程序,既统计元音字母的小写形式,也统计元音字母的大写形式,也就是说,新程序遇到’a’和’A’都应该递增 aCnt 的值,以此类推。

#include<iostream>
using namespace std;
int main()
{
	char ch;
	int sum_a = 0, sum_e = 0, sum_i = 0, sum_o = 0, sum_u = 0;
	int vowelcnt = 0;
	while(cin >> ch){
		switch (ch)
		{
		case 'a':
		case 'A':
			++sum_a;
			++vowelcnt;
			break;
		case 'e':
		case 'E':
			++sum_e;
			++vowelcnt;
			break;
		case 'i':
		case 'I':
			++sum_i;
			++vowelcnt;
			break;
		case 'o':
		case 'O':
			++sum_o;
			++vowelcnt;
			break;
		case 'u':
		case 'U':
			++sum_u;
			++vowelcnt;
			break;
		default:
			break;
		}
	}
	cout << "acnt is: " << sum_a << endl;
	cout << "ecnt is: " << sum_e << endl;
	cout << "icnt is: " << sum_i << endl;
	cout << "ocnt is: " << sum_o << endl;
	cout << "ucnt is: " << sum_u << endl;
	cout << "vowelcnt is: " << vowelcnt << endl;
	return 0;
}
Focus5679 发布了276 篇原创文章 · 获赞 21 · 访问量 4万+ 私信 关注

标签:语句,10,++,5th,C++,else,grade,while,sum
来源: https://blog.csdn.net/qq_40758751/article/details/104099682

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

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

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

ICode9版权所有