45gfg9
本帖最后由 45gfg9 于 2020-3-17 21:47 编辑


索引贴
答案帖


Prev: C++Ⅰ:基本概念
Next: C++Ⅲ:数据类型,数组,指针



2021.12 数据,可能有更多内容


索引贴
答案帖

Prev: C++Ⅰ:基本概念
Next: C++Ⅲ:数据类型,数组,指针



1 if语句


1.1 做出选择
if语句检测如果条件为true,就执行代码。
语法:
```cpp
if (条件) {
   语句
}
```
条件condition指明了一个要计算的表达式。如果条件为true,在花括号内的语句会被执行。
如果条件为false,语句会被直接略过,程序会从if语句的主体之后继续执行。

Part题:
下面哪个选项展示了C++中if语句的正确语法?
A. if test
B. IF test
C. if (test) { }


1.2 if语句
使用关系运算符relational operators来计算条件。
举个例子:
```cpp
if (7 > 4) {
cout <<"Yes";
}


// 输出"Yes"
```
if语句先计算条件 (7>4),发现它为true,然后执行cout语句。
如果我们将大于运算符改为小于运算符 (7<4),cout语句不会被执行,也就没有什么输出。
if语句中的条件不需要分号。

Part题:
填空以比较变量,并输出"你吼"到屏幕。
```cpp
int x = 5;
int y = 3;
__ (x > _) {
cout << "你吼";
}
```


1.3 关系运算符(一)
其他的关系运算符:



运算符
描述
举例
>=
大于等于
7 >= 4 真
<=
小于等于
7 <= 4 假
==
等于
7 == 4 假
!=
不等于
7 != 4 真



例子:
```cpp
if (10 == 10) {
cout <<"Yes";
}


// 输出"Yes"
```


Part题:
下面哪个运算符用于检测相等?
A. =
B. <<
C. *=
D. ==


1.4 关系运算符(二)
不等于运算符比较两个操作数是否不相等。如果不相等,条件就被算作true。
举个例子:
```cpp
if (10 != 10) {
cout <<"Yes";
}
```
上面的条件被算作false,所以代码块没有被执行。

Part题:
填空以比较变量,并输出"不相等"到屏幕。
```cpp
int x = 10;
int y = 8;
if (x != _) {
cout << "不相等";
}
```


1.5 关系运算符(三)
你可以在if语句中用关系运算符比较变量。
举个例子:
```cpp
int a = 55;
int b = 33;
if (a > b) {
cout << "a大于b";
}


// 输出"a大于b"
```


Part题:
填空以输出最大的变量的值。
```cpp
int a = 98;
int b = 76;
if (_ > b) {
cout << "最大的是" << a << endl;
}
if (_ > a) {
____ << "最大的是" << b << endl;
}
```



2 else语句


2.1 else语句(一)
一个if语句后面可以跟一个可选的else语句,当条件为false时被执行。
语法:
```cpp
if (条件) {
//语句
}
else {
//语句
}
```


上面的代码会测试条件:
  • 当算作true时,if语句中的代码被执行。
  • 当算作false时,else语句中的代码被执行。

当if或else只包含一条语句时,可以略去花括号。

Part题:
填空以检测变量age是否大于18:
```cpp
int age = 25;
__ (___ > 18) {
cout << "成人";
}
```


2.2 else语句(二)
举个例子:
```cpp
int mark = 90;


if (mark < 50) {
cout << "不及格。" << endl;
}
else {
cout << "你通过了。" << endl;
}


// 输出"你通过了。"
```


Part题:
补全下列代码:
```cpp
int x = 22;
__ (x > 33) {
cout << "x大于33" << endl;
}
____ {
cout << "x不大于33" << endl;
}
```


2.3 else语句(三)
在所有之前的例子中,if/else语句内只用了一条语句,但你可以想放多少放多少。
举个例子:
```cpp
int mark = 90;


if (mark < 50) {
cout << "不及格。" << endl;
cout << "抱歉" << endl;
}
else {
cout << "恭喜!" << endl;
cout << "你通过了。" << endl;
cout << "你真棒!" << endl;
}


/* 输出
恭喜!
你通过了。
你真棒!
*/
```


Part题:
if的括号中可以放多少语句?
A. 1
B. 2
C. 任意


2.4 嵌套if语句
你也可以在一个if语句中包含,或叫做嵌套nest,另一个if语句。
举例:
```cpp
int mark = 100;


if (mark >= 50) {
cout << "你通过了。" << endl;
if (mark == 100) {
    cout <<"满分!" << endl;
}
}
else {
cout << "不及格。" << endl;
}


/*输出
你通过了。
满分!
*/
```


Part题:
补全嵌套的if语句以输出"成了!"。
```cpp
int x = 37;
if (x > 22) {
__ (x > 31) {
    ____ << "成了!" << endl;
}
}
```


2.5 嵌套if-else语句
C++允许你嵌套无数的if/else语句。
举例:
```cpp
int age = 18;
if (age > 14) {
if(age >= 18) {
    cout << "成人";
}
else {
    cout << "青少年";
}
}
else {
if (age > 0) {
    cout << "孩子";
}
else {
    cout << "你逗我玩呢";
}
}
```


记住,所有的else语句都必须有对应的if语句。

Part题:
一个if语句可以嵌套多少if语句?
A. 0
B. 2
C. 多少都行


2.6 if-else语句
在if/else语句中,一条单独的语句可以不被花括号包围。
```cpp
int a = 10;
if (a > 4)
cout << "Yes";
else
cout << "No";
```
写上花括号仍然是一个好习惯,因为它明确了代码界限,使其更易读。

Part题:
填空以比较变量,并输出"else中的输出"到屏幕。
```cpp
int x = 10;
int y = 20;
if (_ > _) {
cout << "其他东西" << endl;
}
else {
cout << "else中的输出" << endl;
}
```



3 while循环


3.1 循环
一个循环loop持续执行一组语句,直到满足某个条件。


一个while循环持续执行一组语句,只要给定的条件为true
语法:
```cpp
while (条件) {
语句;
}
```


只要条件为true,循环会一直执行。
当条件为false时,程序的执行会从循环的下一行继续。

Part题:
下面哪个时while循环的正确语法?
A. WHILE bacon <= 5 { cout << "text"; }
B. while bacon <= 5 cout << "text";
C. while (bacon <= 5) { cout << "text"; }


3.2 while循环(一)
循环的主体body是在花括号范围内的代码块。
举例:
```cpp
int num = 1;
while (num < 6) {
cout << "数字:" << num << endl;
num = num + 1;
}


/* 输出
数字:1
数字:2
数字:3
数字:4
数字:5
*/
```


上面的例子先声明了一个值为1的变量 (int num = 1)。
while循环检查条件 (num < 6),然后执行它主体中的代码,而且每次循环执行时会将num加一。
在第5次循环之后,num值为6,条件算作false,循环随即停止。

Part题:
填空使其输出x的值到屏幕5次。
```cpp
int x = 1;
_____ (x <= 5) {
cout << "值为" << x << endl;
x = _ + 1;
}
```


3.3 while循环(二)
变量增加的值可以改变。如果改变了,循环的次数也会改变。
```cpp
int num = 1;
while (num < 6) {
cout << "数字:" << num << endl;
num = num + 3;
}


/* 输出
数字:1
数字:4
*/
```


如果条件不会被算作false,那么循环会永远执行下去。

Part题:
填空使bacon的值增加2,并且只输出偶数。
```cpp
int bacon = 0;
_____ (bacon <= 20) {
cout << "bacon为"<< bacon <<endl;
bacon = bacon + _;
}
```



4 运用while循环


4.1 使用自增/自减运算符
自增或自减运算符可以用来改变循环中的值。
举例:
```cpp
int num = 1;
while (num < 6) {
cout << "数字:" << num << endl;
num++;
}


/* 输出
数字:1
数字:2
数字:3
数字:4
数字:5
*/
```


num++等同于num = num + 1。

Part题:
填空以输出x的值从1到5。用++运算符增加x的值。
```cpp
int x = 1;
_____ (x <= 5) {
cout << x << endl;
x__;
}
```


4.2 运用while循环(一)
循环可以用来从用户获得多个输入。
让我们创造一个程序,使其允许用户输入5次数字,每次都将输入存储在一个变量中。
```cpp
int num = 1;
int number;


while (num <= 5) {
cin >> number;
num++;
}
```


上面的代码要求用户输入5次,每次都将输入存在number变量中。

Part题:
填空以用cin接受用户输入,并将值存在"number"变量中5次。
```cpp
int x = 1;
int number;
while (_ <= 5) {
___ >> number;
x++;
}
```


4.3 运用while循环(二)
现在让我们修改一下程序,使其计算用户输入数字的和。
```cpp
int num = 1;
int number;
int total = 0;


while (num <= 5) {
cin >> number;
total += number;
num++;
}
cout << total << endl;
```


上面的代码将每次循环中用户输入的值加到total变量中。当循环结束时,total的值被输出。这个值是所有用户输入的值的和。
注意变量total的初始值为0。

Part题:
填空使用户输入5个值并输出它们的和。将和存在变量total中。
```cpp
int x = 1;
int number;
int total = 0;
_____ (x <= 5) {
cin >> number;
_____ = total + number;
x++;
}
cout << "和:" << _____ << endl;
```



5 for循环


5.1 for循环(一)
for循环是一个循环类的控制结构,允许你高效地写一个执行指定次数的循环。
语法:
```cpp
for(初始化; 条件; 增量) {
语句;
}
```


初始化init步骤最先执行,并且只会被执行一次。
然后,条件condition被计算,当条件为真时循环主体被执行。
然后,增量increment语句更新控制循环的变量。
最后,循环的主体一直重复执行,直到条件被算作false


举例:
```cpp
for (int x = 1; x < 10; x++) {
// 一些代码
}
```


初始化增量语句如果不需要的话可以删去。但分号是必须的。

Part题:
下面哪个是"for"循环的正确语法?
A. for (int x = 1,, x < 10; x++; ) { }
B. FOR x = 1, x < 10, x++ { }
C. for int x = 1; y < 10; ++y { }
D. for (int x = 1; x < 10; x++) { }


5.2 for循环(二)
下面的例子用for循环输出从0到9的的数字。
```cpp
for (int a = 0; a < 10; a++) {
cout << a << endl;
}


/* 输出
0
1
2
3
4
5
6
7
8
9
*/
```


初始化阶段,我们声明了变量a并使其等于0。
a < 10是条件
在每次循环后,增量语句a++被执行。
a的值变为10时,条件算作false,循环停止。

Part题:
填空使输出x的值10次:
```cpp
___ (int x = 1; x <= 10; _++) {
cout << x << endl;
}
```


5.3 for循环(三)
增量语句可以改变。
```cpp
for (int a = 0; a < 50; a+=10) {
cout << a << endl;
}
/* 输出
0
10
20
30
40
*/
```


你也可以使用减量语句。
```cpp
for (int a = 10; a >= 0; a -= 3) {
cout << a << endl;
}


/* 输出
10
7
4
1
*/
```


当使用for循环时,不要忘记初始化条件之后的分号

Part题:
填空以用for循环输出0到20之间的偶数。
```cpp
for (int x = 0_ x <= ___ x += _) {
cout << _ << endl;
}
```



6 do...while循环


6.1 do...while循环(一)


不像forwhile循环这样在循环最开始的时候检查条件,do...while循环在循环结束的时候检查条件。
do...while循环和while循环相似。不同的地方是do...while循环保证至少运行一次。
语法:
```cpp
do {
   语句;
} while (条件);
```


举例,你可以从用户取得输入,然后检查。如果输入不正确,你可以再取一次。

Part题:
下面哪个是do...while循环的正确语法?
A. do while(test)
B. do { } while (test);
C. DO while test;


6.2 do...while循环(二)
这是一个例子:
```cpp
int a = 0;
do {
cout << a << endl;
a++;
} while(a < 5);


/* 输出
0
1
2
3
4
*/
```


别忘记while语句后的分号

Part题:
填空以输出变量x的值10次。
```cpp
int x = 0;
do {
cout << x << endl;
x++;
}
_____ (x < __);
```


6.3 while vs. do...while
如果条件计算为falsedo中的语句还是会执行一次:
```cpp
int a = 42;
do {
cout << a << endl;
a++;
} while(a < 5);


// 输出42
```


do...while循环至少执行语句一次,然后测试条件。
while循环测试条件之后才决定是否执行语句。

Part题:
do...while循环和while循环有什么不同?
A. while循环先执行再测试
B. do...while循环先测试再执行
C. do...while循环至少执行一次


6.4 do...while循环(三)
和其他循环一样,如果循环条件永远不会被计算为false,循环会永远运行下去。
举例:
```cpp
int a = 42;
do {
cout << a << endl;
} while (a > 0);
```
这会一直向屏幕输出42。
经常检查你的循环,所以你能知道它们是不是按你期望的方法运行。

Part题:
填空以输出"这是个循环"到屏幕15次。
```cpp
int x = 1;
do {
cout << "这是个循环" << endl;
x++;
}
while (_ <= __);
```



7 switch语句


7.1 多个条件
有时候需要检测变量是否等于几个不同的值。这可以用几个if语句实现。
举例:
```cpp
int age = 42;
if (age == 16) {
cout << "图样";
}
if (age == 42) {
cout << "中年";
}
if (age == 70) {
cout << "长者";
}
```


switch语句在这种情况下会更优雅一些。

Part题:
填空以输出"你可以驾驶"如果变量"age"等于16,输出"可以买lottery ticket"如果"age"等于18。
```cpp
int age;
cin >> age;
if (age __ 16) {
cout << "你可以开车" << endl;
}
if (age == __) {
cout << "可以买lottery ticket" << endl;
}
```


7.2 switch语句
switch语句在一个列表中测试一个值,通常被叫做不同的情况cases,来判断值是否等于它们中的任意一个。
```cpp
switch (表达式) {
case 值1:
    语句;
    break;
case 值2:
    语句;
    break;
    ...
case 值N:
    语句;
    break;
}
```


switch先计算表达式来判断它是否等于case语句中的值。如果有对应值,就执行那个case中的语句。
一个switch可以包含任意个case语句,case后面跟着值和冒号。

Part题:
下面哪个是switch的正确语法?
A. SWITCH test { }
B. switch (test) { }
C. switch test;


7.3 switch语句
这是前面那个例子,用switch语句重写:
```cpp
int age = 42;
switch (age) {
case 16:
    cout << "图样";
    break;
case 42:
    cout << "中年";
    break;
case 70:
    cout << "长者";
    break;
}
```


上面的代码等同于3个if语句。
注意每个case后的关键字break;。马上讲到它。

Part题:
填空将变量age与16、18和21进行对比并输出对应文字。
```cpp
______ (age) {
case 16:
    cout << "你可以开车" << endl;
    break;
____ 18:
    cout << "买lottery ticket" << endl;
    _____;
case 21:
    cout << "买点啤酒" << endl;
    break;
}
```


7.4 default语句
在switch语句中,可选的default语句可以执行任务,如果所有的case都不符合。
举例:
```cpp
int age = 25;
switch (age) {
case 16:
    cout << "图样";
    break;
case 42:
    cout << "中年";
    break;
case 70:
    cout << "长者";
    break;
default:
    cout << "这是默认情况";
}


// 输出 "这是默认情况"
```


当没有任何case匹配switch语句的时候,default语句里的语句将会执行。
default语句必须放在switch语句的最后。

Part题:
填空来测试变量x的值;如果x是2,输出"是2"到屏幕;否则(默认情况),输出"默认情况"到屏幕。
```cpp
int x;
cin >> x;
switch ( _ ) {
case 2:
    cout << "是2" << endl;
    break;
_______:
    cout << "默认情况" << endl;
}
```


7.5 break语句
break语句的作用是终结switch语句。在变量匹配case的时候,这个case后的语句会继续执行,直到遇到break语句。换句话说,不写break语句会导致即使变量不匹配case,程序也会继续往下执行。
举例:
```cpp
int age = 42;
switch (age) {
case 16:
    cout << "图样" << endl;
case 42:
    cout << "中年" << endl;
case 70:
    cout << "长者" << endl;
default:
    cout <<"这是默认情况" << endl;
}
/* 输出
中年
长者
这是默认情况
*/
```


正如你所见,程序执行了匹配的case语句,将"中年"输出到屏幕。但是由于没有明确写break语句,匹配的case之后的语句也将会运行。因此,其后所有其他的case语句都被执行了。这样的行为我们称之为fall-through
作为switch语句的最后一种情况,default情况不需要写break语句。
break语句也能被用作跳出一个循环。

Part题:
如果我们忘记在"case"后插入"break",会发生什么?
A. 在遇到break语句之前,剩下的所有情况都会被执行
B. 啥事没有
C. 一个编译错误



8 逻辑运算符


8.1 逻辑运算符
逻辑运算符logical operators来合并条件语句,并返回truefalse



(Ps. 原图中 (&& - Form) 中内容 "y && y"应该是误拼,因为(y && y)相当于y。)
运算符
运算符名
形式
&&
运算符
x && y
||
运算符
x || y
!
运算符
! x



AND运算符按这样的方式工作:



左操作数
右操作数
结果
false
false
false
false
true
false
true
false
false
true
true
true



对于与运算符来说,两个操作数都要是true,整个表达式才能是true。

Part题:
填空来测试if语句中的两个条件是否都为true。
```cpp
int age = 23;
int money = 4;
if (age > 21 __ money > 500) {
cout << "欢迎" <<endl;
}
```


8.2 与运算符(一)
举例:
```cpp
int age = 20;
if (age > 16 && age < 60) {
cout << "Accepted!" << endl;
}


// 输出 "Accepted!"
```


在上面的例子中,逻辑与运算符被用来合并两个表达式。


只有在两个条件都为true之后,if语句中的表达式才被算作true

Part题:
在什么情况下,"a && b"的值是true?
A. a b都为true
B. a b都为false
C. a b有一个是true


8.3 与运算符(二)
在一个if语句中,逻辑运算符可以被用来合并多个条件。
```cpp
int age = 20;
int grade = 80;


if (age > 16 && age < 60 && grade > 50) {
cout << "Accepted!" << endl;
}
```
只有当所有的条件都为true时,整个表达式才能算作true

Part题:
一个if语句中可以使用多少个&&运算符?
A. 一个
B. 两个
C. 随便多个


8.4 或运算符
OR运算符(||)在当两个操作数有一个为true的时候返回true。



左操作数
右操作数
结果
false
false
false
false
true
true
true
false
true
true
true
true



举例:
```cpp
int age = 16;
int score = 90;
if (age > 20 || score > 50) {
    cout << "Accepted!" << endl;
}


// 输出 "Accepted!"
```


你可以合并任意多个运算符。
多个运算符可以连接在一起。

Part题:
填空以输出"欢迎"到屏幕。
```cpp
int age = 26;
int money = 4;
if (age > 21 __ money > 500) {
cout << "欢迎" << endl;
}
```


8.5 逻辑非运算符
逻辑NOT运算符 ( ! ) 只需要一个操作数,且将其逻辑状态反相。因此,如果一个条件是true,非运算符会使它变成false,反之亦然。



右操作数
结果
true
false
false
true



```cpp
int age = 10;
if ( !(age > 16) ) {
cout << "你的年龄小于16" << endl;
}


// 输出 "你的年龄小于16"
```


这样用的时候要小心,因为 !false 就是 true。

Part题:
多选题:在什么情况下,a || b的结果是true?
A. a b都为true
B. a b都不为true
C. a b有一个是true



章末检测


1. 按要求填空:输入一个值并存储在变量x中,然后测试x如果大于20,就输出"x大"到屏幕,如果x小于10,就输出"x小"。
```cpp
int x;
cin >> x;
if (x _ 20) {
cout << "x大" << endl;
}
if (x < __) {
cout << "x小" << endl;
}
```


2. 按要求填空:用while循环输出"在循环中"到屏幕5次。
```cpp
int x = 1;
while (x <= _) {
cout << "在循环中" << endl;
_++;
}
```


3. 按要求填空:用for循环输出"在循环中"到屏幕7次。
```cpp
___ (int x = 0; _ < 7; x++) {
cout << "在循环中" << endl;
}
```


4.下面的叙述哪条是正确的?
A. switch语句可以被认为是多个if语句的替代
B. switch语句必须包含一个default情况
C. switch语句与for循环等同


5. 多选题:选出关于&&和||运算符正确的叙述。
A. 如果a b都为true,那么a && b为false
B. 如果a b有一个为true,那么a && b为true
C. 如果a b有一个为true,那么a || b为true
D. 如果c为true,a b有一个为true,那么(a || b) && c为true


6. 按要求填空:如果变量a大于12且变量b小于等于76,输出"你真棒!"到屏幕。
```cpp
int a = 144;
int b = 33;
if (a > 12 __ b <= __) {
cout << "你真棒!" << endl;
}
```

ROF
D
if y
没看到cout以前我还以为是java233

45gfg9
ROF 发表于 2018-7-29 22:25
D
if y
没看到cout以前我还以为是java233

哇版主大佬!
捕捉!

God_Li
可以可以可以

思念丶···
为啥不用JAVA编写啊 0 0  C++ 和JAVA有什么区别

45gfg9
思念丶··· 发表于 2018-7-31 09:20
为啥不用JAVA编写啊 0 0  C++ 和JAVA有什么区别

emm这个问题我回答不来...
你可以看看这个
https://blog.csdn.net/mango9126/article/details/71403210

l20040322
楼主,我新做了一个软件,链接:https://pan.baidu.com/s/1MZ4hpEvunb0-AzS-up0fAg
你看一看,好的话可以帮我宣传吗

45gfg9
l20040322 发表于 2018-8-1 17:16
楼主,我新做了一个软件,链接:https://pan.baidu.com/s/1MZ4hpEvunb0-AzS-up0fAg
你看一看,好的话可以帮 ...

emm...用了两天,感觉还好
就是感觉现在的功能只是机械地加代码,而且生成的程序也挺简单
基本上就只有声明int变量和cout语句了,对吧
而且因为没有变量名合法检测,有时候变量名是C++保留字或数字开头之类的或者是//或/* */之类还是会直接加进程序
举个例子,会生成
  1. int 10 = 10;
  2. int float = 20;
  3. int !^@%U*&!#$(* = 30;
复制代码

诸如此类的...
其次,"基础设置"和"设置结尾"是可以按多次的...
而且在"设置结尾"以后还能继续加语句...
在cout的结尾换行用的是"\n",但查了查资料,在C++中使用endl换行更符合一些..

最后,贴上我"折磨"出来的代码吧...
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. #include <iostream>
  6. using namespace std;
  7. int main()
  8. {
  9. #include <iostream>
  10. using namespace std;
  11. int main()
  12. {
  13. cout << "4684543864\n";
  14. cout << "af2$@"<< Y$*!YEHC<< "\n";

  15. cout << ""<< rwarfsa<< "\n";

  16. int 314 = 1;int int = 11;int @&$(! = 111;int long = 2147483647;



  17. int LONG = 2147483647;
  18. int %#$@!$!*%!*&)(*$!&%+_~**=*/*+./,,<?>":{} = -2147483648;
  19. return 0;
  20. }return 0;
  21. }return 0;
  22. }int %#$@!$!*%!*&)(*$!&%+_~**=*/*+./,,<?>":{} = -2147483648;
  23. cout << ""<< rwarfsa<< "\n";

  24. #include <iostream>
  25. using namespace std;
  26. int main()
  27. {
  28. return 0;
  29. }
复制代码


总的来说,还是最初版吧...仍需努力,加油。

l20040322
45gfg9 发表于 2018-8-3 18:31
emm...用了两天,感觉还好
就是感觉现在的功能只是机械地加代码,而且生成的程序也挺简单
基本上就只有声 ...

嗯,谢谢你的尝试

jinxin192
没更新了嘛

45gfg9

emm 没动力了 咕咕咕

无奈敲里妈
这是C++吗,求个下载资源

Love_Story
感谢感谢

Garyjel
ROF 发表于 2018-7-29 22:25
D
if y
没看到cout以前我还以为是java233

也可以不用cout,printf也可以

辞音
哇 太感谢了

第一页 上一页 下一页 最后一页