第五章 语句

5.1

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

用到空语句的情况:当循环的全部工作在条件部分就可以完成时,我们通常会用到空语句。

 

5.2

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

用到块的情况:在程序的某个地方,语法上需要一条语句,但是逻辑上需要多条语句时,就用块将多条语句括起来。

 

5.3

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

代码的可读性降低了!

 

5.4

(a):迭代器应在外部创建并初始化

(b):if语句条件中的status变量没定义过

 

5.5

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 char gradeToLevel(int n)
15 {
16     if (n >= 95)    return 'A';
17     else if (n >= 85)    return 'B';
18     else if (n >= 75)    return 'C';
19     else if (n >= 60)    return 'D';
20     else    return 'E';
21 }
22 
23 int main() 
24 {
25     int grade;
26     cin >> grade;
27     char level = gradeToLevel(grade);
28     cout << level << endl;
29     return 0;
30 }
View Code

 

5.6

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 char gradeToLevel(int n)
15 {
16     return (n >= 95) ? 'A' : (n >= 85) ? 'B' : (n >= 75) ? 'C' : (n >= 60) ? 'D' : 'E'; 
17 }
18 
19 int main() 
20 {
21     int grade;
22     cin >> grade;
23     char level = gradeToLevel(grade);
24     cout << level << endl;
25     return 0;
26 }
View Code

 

5.8

悬垂else:if分支多余else分支时,怎么知道某个else是和哪个if匹配的。

C++处理else子句:规定else与离它最近的且尚未匹配的if匹配。

 

5.9

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 int main() 
15 {
16     char ch;
17     int vowelCnt = 0;
18     while (cin >> ch) {
19         if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
20             vowelCnt++;
21     }
22     cout << vowelCnt << endl;
23     return 0;
24 }
View Code

 

5.10

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 int main() 
15 {
16     char ch;
17     int vowelCnt = 0;
18     while (cin >> ch) {
19         switch (ch) {
20             case 'a':
21             case 'e':
22             case 'i':
23             case 'o':
24             case 'u':
25             case 'A':
26             case 'E':
27             case 'I':
28             case 'O':
29             case 'U':
30                 vowelCnt++;
31                 break;
32         }
33     }
34     cout << vowelCnt << endl;
35     return 0;
36 }
View Code

 

5.11

 1 #include <iostream>  
 2 #include <string>  
 3 #include <vector>  
 4 using namespace std;  
 5 void main()  
 6 {     
 7     char cval;  
 8     int char_a = 0,char_e = 0,char_i = 0,char_o = 0,char_u = 0,sum_space = 0,sum_table = 0,sum_newline = 0;  
 9     while (cin >> std::noskipws >> cval) // 此处的std::noskipws表示的是不忽略任何地方的空白(包括制表符和空格等)  
10     {  
11         switch (cval)  
12         {  
13             case 'a':  
14             case 'A':  
15                 ++char_a;  
16                 break;  
17             case 'e':  
18             case 'E':  
19                 ++char_e;  
20                 break;  
21             case 'i':  
22             case 'I':  
23                 ++char_i;  
24                 break;  
25             case 'o':  
26             case 'O':  
27                 ++char_o;  
28                 break;  
29             case 'u':  
30             case 'U':  
31                 ++char_u;  
32                 break;  
33             case ' ':  
34                 ++sum_space;  
35                 break;  
36             case '\t':  
37                 ++sum_table;  
38                 break;  
39             case '\n':  
40                 ++sum_newline;  
41                 break;  
42         }  
43     }  
44     cout<<"元音字母a的个数为:"<<char_a<<endl;  
45     cout<<"元音字母e的个数为:"<<char_e<<endl;  
46     cout<<"元音字母i的个数为:"<<char_i<<endl;  
47     cout<<"元音字母o的个数为:"<<char_o<<endl;  
48     cout<<"元音字母u的个数为:"<<char_u<<endl;  
49     cout<<"空格的个数为:"<<sum_space<<endl;  
50     cout<<"制表符的个数为:"<<sum_table<<endl;  
51     cout<<"换行符的个数为:"<<sum_newline<<endl;  
52 } 
View Code

 

5.12

 1 #include <iostream>  
 2 #include <string>  
 3 #include <vector>  
 4 using namespace std;  
 5 void main()  
 6 {     
 7     char cval, char_before = '\0'; //计算机中的0值表示的为'\0',可防止它的初始值(随机的)碰巧是某个字符的值.  
 8     int char_a = 0, char_e = 0, char_i = 0, char_o = 0, char_u = 0, sum_space = 0, sum_table = 0, sum_newline = 0,  
 9         sum_ff = 0, sum_fl = 0, sum_fi = 0;  
10     while (cin >> std::noskipws >> cval) // 此处的std::noskipws表示的是不忽略任何地方的空白(包括制表符和空格等)  
11     {  
12         switch (cval)  
13         {  
14             case 'a':  
15             case 'A':  
16                 ++char_a;  
17                 break;  
18             case 'e':  
19             case 'E':  
20                 ++char_e;  
21                 break;  
22             case 'i':  
23                 if (char_before == 'f')  
24                 {  
25                     ++sum_fi;  
26                 }  
27             case 'I':  
28                 ++char_i;  
29                 break;  
30             case 'o':  
31             case 'O':  
32                 ++char_o;  
33                 break;  
34             case 'u':  
35             case 'U':  
36                 ++char_u;  
37                 break;  
38             case ' ':  
39                 ++sum_space;  
40                 break;  
41             case '\t':  
42                 ++sum_table;  
43                 break;  
44             case '\n':  
45                 ++sum_newline;  
46                 break;  
47             case 'f':  
48                 if (char_before == 'f')  
49                 {  
50                     ++sum_ff;  
51                 }  
52                 break;  
53             case 'l':  
54                 if (char_before == 'f')  
55                 {  
56                     ++sum_fl;  
57                 }  
58                 break;  
59         }  
60         char_before = cval;//将当前的字符赋给char_before,作为下次判断的依据  
61         //如果下次判断中char_before为f字符,那么只要再判断当前字符是否为f、l、i即可  
62     }  
63     cout<<"元音字母a的个数为:"<<char_a<<endl;  
64     cout<<"元音字母e的个数为:"<<char_e<<endl;  
65     cout<<"元音字母i的个数为:"<<char_i<<endl;  
66     cout<<"元音字母o的个数为:"<<char_o<<endl;  
67     cout<<"元音字母u的个数为:"<<char_u<<endl;  
68     cout<<"空格的个数为:"<<sum_space<<endl;  
69     cout<<"制表符的个数为:"<<sum_table<<endl;  
70     cout<<"换行符的个数为:"<<sum_newline<<endl;  
71     cout<<"字符序列ff的个数为:"<<sum_ff<<endl;  
72     cout<<"字符序列fl的个数为:"<<sum_fl<<endl;  
73     cout<<"字符序列fi的个数为:"<<sum_fi<<endl;  
74 } 
View Code

 

5.14

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 int main() 
15 {
16     int cnt = 1, maxCnt = 0;
17     string ss, s1, s2;
18     while (cin >> ss) {
19         if (ss == s1) {
20             cnt++;
21         }
22         else {
23             cnt = 1;
24         }
25         if (cnt > maxCnt) {
26             s2 = ss;
27             maxCnt = cnt;
28         }
29         s1 = ss;
30     }
31     if (maxCnt > 1) 
32         cout << s2 << "连续出现了"<< maxCnt << "次。" << endl;
33     else    cout << "任何单词都没有连续出现过。" << endl; 
34     return 0;
35 }
View Code

 

5.17

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 int main() 
15 {
16     vector<int> a1 = {1, 2, 3, 4, 5, 6};
17     vector<int> a2 = {1, 2, 3, 4,};
18     int flag = 0;
19     int minNum = (a1.size() > a2.size() ? a2.size() : a1.size());
20     for (int i = 0; i < minNum; i++) {
21         if (a1[i] != a2[i]) {
22             cout << "No!" << endl;
23             flag = 1;
24             break;
25         }
26     }
27     if (!flag)    cout << "Yes!" << endl;
28     return 0;
29 }
View Code

 

5.19

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 int main() 
15 {
16     string s1, s2;
17     do {
18         cout << "输入两个string对象:";
19         cin >> s1 >> s2;
20         cout << (s1.size() > s2.size() ? s2 : s1) << endl; 
21     } while (cin);            //这个条件我服 
22     return 0;
23 }
View Code

 

5.20

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 int main() 
15 {
16     int flag = 0;
17     string s1, s2;
18     while (cin >> s1) {
19         if (s1 == s2) {
20             cout << s1 << endl;
21             flag = 1;
22             break;
23         }
24         s2 = s1;
25     } 
26     if (!flag)    cout << "没有任何单词是连续重复出现的!" << endl;
27     return 0;
28 }
View Code

 

5.21

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <string>
 6 #include <cstring>
 7 
 8 using std::cin;
 9 using std::cout;    
10 using std::endl;
11 using std::vector;
12 using std::string;
13 
14 int main() 
15 {
16     int flag = 0;
17     string s1, s2;
18     while (cin >> s1) {
19         if (s1 == s2) {
20             if(s1[0] >= 'A' && s1[0] <= 'Z') {
21                 cout << s1 << endl;
22                 flag = 1;
23                 break;
24             }
25             continue;
26         }
27         s2 = s1;
28     } 
29     if (!flag)    cout << "没有任何单词是连续重复出现的!" << endl;
30     return 0;
31 }
View Code

 

5.22

	int sz;
	while ((sz = get_size()) <= 0)	;

  

5.24

 1 #include <iostream>
 2 #include <vector>
 3 #include <cctype>
 4 #include <iterator>
 5 #include <stdexcept>
 6 #include <string>
 7 #include <cstring>
 8 
 9 using std::cin;
10 using std::cout;    
11 using std::endl;
12 using std::vector;
13 using std::string;
14 
15 int main() 
16 {
17     int a, b;
18     cin >> a >> b;
19     if (!b) {
20         throw std::runtime_error("除数不能为0!");
21     }
22     cout << a / b << endl;
23     return 0;
24 }
View Code

发生:

 

5.25

#include <iostream>
#include <vector>
#include <cctype>
#include <iterator>
#include <stdexcept>
#include <string>
#include <cstring>

using std::cin;
using std::cout;    
using std::endl;
using std::vector;
using std::string;
using std::runtime_error;

int main() 
{
	int a, b;
	reinput:	cin >> a >> b;		//带标签语句,作为goto的目标 
	try {
		if (!b) {
			throw runtime_error("除数不能为0!");
		}
		cout << a / b << endl;
	}
	//err是runtime_error类的一个实例 
	catch (runtime_error err) {	
		cout << err.what();		//what是runtime_error类中的成员函数 
		cout << "\n是否需要重新输入? Enter y or n:" << endl;  
		char ch;
		cin >> ch;
		if (ch == 'n')  
            cout << "bye!\n"; 
        else
        	goto reinput;		//reinput是用于标识一条语句的标识符 
	}
    return 0;
}

  

 

posted @ 2017-10-12 17:05  GGBeng  阅读(225)  评论(0编辑  收藏  举报