本文记录第五章的练习题,加油哇。
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即可。



