栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ primer 第五版 学习笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ primer 第五版 学习笔记

本文记录第五章的练习题,加油哇。

5.1节练习

练习5.1

只含有一个单独的分号的语句称为空语句。

如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。

练习5.2

块也被称为复合语句,是指用花括号括起来的(可能为空的)语句和声明的序列。

如果在程序的某个地方,语法上需要一条语句,但是逻辑上需要多条语句,则应该使用块。

练习5.3

int main() 
{
	int sum = 0;
	for (int val = 1; val <= 10; sum += val, ++val)
		;
	cout << sum << endl;
}

个人感觉因为例子比较简单,可读性变化不大,但还是使用块的更胜一筹吧。

5.2节练习

练习5.4

(a)含义:判断 iter 是否到达 s 末尾;iter 没有初始化,应先在语句外部为 iter 赋初值,修改后的代码如下:

int main() 
{
	string::iterator iter = s.begin();
	while ( iter != s.end())
		++iter;
}

(b)定义在控制结构中的变量 status 只作用于while内部,在循环外部 if 处无法访问 status,修改后的代码如下:

int main() 
{
	bool status;
	while (status = find(word))
	{
		
	}
	if(!status)
	{
		 
	}
}

练习5.5

int main() 
{
	vector scores{ "F", "D", "C", "B", "A", "A++" };
	int grade;
	string lettergrade;
	cin >> grade;
	if (grade >= 60)
		lettergrade = scores[(grade - 50) / 10];
	else
		lettergrade = scores[0];
	cout << lettergrade << endl;
}

练习5.6

int main() 
{
	vector scores{ "F", "D", "C", "B", "A", "A++" };
	int grade;
	string lettergrade;
	cin >> grade;
	grade < 60 ? lettergrade = scores[0] : lettergrade = scores[(grade - 50) / 10];
	cout << lettergrade << endl;
}

练习5.7

(a)ival = ival2;

(b){

           minvalue = ival;

           occurs = 1;

         }

(c)在语句外部定义变量ival;

int ival;

(d)if(ival == 0)

练习5.8

if 分支多余 else 分支时,找出给定的else和哪个if相匹配。

5.3.2节练习

练习5.9

int main() 
{
	string ch;
	int cnt = 0;
	while (cin >> ch)
	{
		for(auto c : ch)
		if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
			++cnt;

	}
	cout << cnt << endl;
}

练习5.10

int main() 
{
	char ch;
	int cnt = 0;
	while (cin >> ch)
	{
		switch (ch)
		{
		case 'a':
		case 'A':
		case 'e':
		case 'E':
		case 'i':
		case 'I':
		case 'o':
		case 'O':
		case 'u':
		case 'U':
			++cnt;
			break;
		}

	}
	cout << cnt << endl;
}

练习5.11

int main() 
{
	char ch;
	int cnt = 0,cnt1 = 0;
	while (cin.get(ch))
	{
		switch (ch)
		{
		case 'a':
		case 'A':
		case 'e':
		case 'E':
		case 'i':
		case 'I':
		case 'o':
		case 'O':
		case 'u':
		case 'U':
			++cnt;
			break;
		case ' ':
		case 'n':
		case 't':
			++cnt1;
			break;
		}

	}
	cout << cnt << cnt1 << endl;
}

本题只要注意输入时不能直接用cin了,因为会忽视掉空格、制表符,改用cin.get()。

练习5.12

我太菜了写不好。然后在网上找到的答案。

int main() 
{
	char ch, prech = '';
	unsigned int ffcnt = 0,flcnt = 0,ficnt = 0;
	while (cin >> ch)
	{
		bool bl = true;
		if (prech == 'f')
		switch (ch)
		{
		case 'f':
			++ffcnt;
			break;
		case 'l':
			++flcnt;
			break;
		case 'i':
			++ficnt;
			break;
		}
		if (!bl)
			prech = '';
		else
			prech = ch;

	}
	cout << ffcnt << " " << flcnt << " " << ficnt << endl;
}

练习5.13

(a)case ’a‘ 和 case ’e‘ 后未加 break,可能会导致无法得到想要的结果;

(b)程序的执行流程可能会绕开下面的初始化语句,所以case1不合法。可以把 ix 定义在switch 语句之前;

(c)case标签中不能放置多个值,分开单列即可;

(d)case标签的内容不能是变量,将 ival 、jval、kval 的类型改为 const unsigned即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917213.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号