C++基础入门(二)
程序流程结构
C/C++支持最基本的3种程序运行结构:顺序结构 选择结构 循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:根据条件是否满足,有选择的执行相应功能
- 循环结构:根据条件是否满足,循环多次执行某段代码
选择结构
if语句
作用:执行满足条件的语句
三种形式:
单行格式if语句:if(条件){条件满足执行语句}

多行格式if语句:if(条件){条件满足执行语句}else{条件不满足执行语句};

多条件的if语句:if(条件1){条件1满足执行的语句}else if(条件2){条件2满足执行语句}…else{都不满足执行的语句}

示例1:
#include<iostream>
using namespace std;
int main() {
//选择结构 单行if语句
//用户输入分数,如果分数大于600,视为考上一本大学,在屏幕上输出
//1、用户输入分数
int score = 0;
cout << "请输入一个分数" << endl;
cin >> score;
//2、打印用户输入的分数
cout << "您输入的分数为:" << score << endl;
//3、判断分数是否大于600,如果大于,那么输出
//注意事项:if条件后面不要加分号
if (score > 600) {
cout << "恭喜您考上了一本大学" << endl;
}
system("pause");
return 0;
}
示例2:
#include<iostream>
using namespace std;
int main() {
//选择结构 多行if语句
//输入考试分数,大于600输出考上一本大学,小于600则输出没考上一本大学
//1、输出考试分数
int score = 0;
cout << "请输入一个考试分数:" << endl;
cin >> score;
//2、提示用户输入分数
cout << "您输入的分数为:" << score << endl;
//3、判断 如果大于600,打印考上一本,否则打印未考上一本
if (score > 600) //大于600分执行下面大括号中的内容
{
cout << "恭喜,考上了一本大学" << endl;
}
else //不大于600分,执行else后大括号中的内容
{
cout << "未考上一本大学" << endl;
}
system("pause");
return 0;
}
示例3:
#include<iostream>
using namespace std;
int main() {
//选择结构 多条件if语句
//输入一个考试分数,如果大于600分,视为考上一本大学,在屏幕输出
//大于500,视为考上二本大学,屏幕输出
//大于400,视为考上三本大学,屏幕输出
//小于等于400分,视为未考上本科,屏幕输出
//1、用户输入分数
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
//2、提示用户输入的分数
cout << "您输入的考试分数为:" << score << endl;
//3、判断
//如果大于600,考上一本
//如果大于500,考上二本
//如果大于400,考上三本
//前三个都没有满足,未考上本科
if (score > 600) {
cout << "恭喜您考上了一本大学" << endl;
}
else if(score>500)//第二个条件判断
{
cout << "恭喜您考上了二本大学" << endl;
}
else if (score > 400) {
cout << "恭喜您考上了三本大学" << endl;
}
else {
cout << "未考上本科大学" << endl;
}
system("pause");
return 0;
}
嵌套if语句
在if语句中,可以嵌套使用if语句,达到更精确的条件判断。
思考题:三只小猪称体重,谁最重?
#include<iostream>
using namespace std;
int main() {
//三只小猪称体重,判断哪只最重
//创建三只小猪的体重变量
int num1 = 0;
int num2= 0;
int num3 = 0;
//让用户输入三只小猪的重量
cout << "请输入小猪A的重量" << endl;
cin >> num1 ;
cout << "请输入小猪B的重量" << endl;
cin >> num2;
cout << "请输入小猪C的重量" << endl;
cin >> num3;
cout << "小猪A的体重为:" << num1 << endl;
cout << "小猪B的体重为:" << num2 << endl;
cout << "小猪C的体重为:" << num3 << endl;
//判断哪只最重
if (num1 > num2) {//A比B重
if (num1 > num3) //A比C重
{
cout << "小猪A最重" << endl;
}
else //C比A重
{
cout << "小猪C最重" << endl;
}
}
else //B比A重
{
if (num2 > num3) //B比C重
{
cout << "小猪B最重" << endl;
}
else//C比B重
{
cout << "小猪C最重" << endl;
}
}
system("pause");
return 0;
}
三目运算符
作用:通过三目运算符实现简单的判断。
语法:表达式1?表达式2:表达式3
解释:
如果表达式1的值为真,执行表达式2,返回表达式2的结果
如果表达式1的值为假,执行表达式3,返回表达式3的结果
switch语句
作用:执行多条件分支语句
#include<iostream>
using namespace std;
int main() {
//switch语句
//给电影进行打分
//10~9 经典
//8~7 非常好
//6~5 一般
//5以下 烂片
//1、提示用户给电影评分
cout << "请给电影打分" << endl;
//2、用户开始进行打分
int score = 0;
cin >> score;
cout << "您打的分数为:" << score<< endl;
//3、根据用户输入的分数来提示用户的结果
switch (score) {
case 10:
cout << "您认为是经典电影" << endl;
break;//退出当前分支
case 9:
cout << "您认为是经典电影" << endl;
break;
case 8:
cout << "您认为是好电影" << endl;
break;
case 7:
cout << "您认为是好电影" << endl;
break;
case 6:
cout << "您认为是电影一般" << endl;
break;
case 5:
cout << "您认为是电影一般" << endl;
break;
default:
cout << "您认为这是烂片" << endl;
break;
}
//if和switch区别?
//switch缺点:判断时候只能是整型或者字符型,不可以是一个区间
//switch优点:结构清晰,执行效率更高
system("pause");
return 0;
}
循环结构
while循环语句
作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句}
解释:只要循环条件的结果为真,就执行循环语句

思考题:猜数字
系统随机生成一个1~100之间的数字,玩家进行猜测,如果猜错,提示数字过大或过小,如果猜对恭喜玩家胜利,并且退出游戏。
#include<iostream>
using namespace std;
//time系统时间头文件的包含
#include<ctime>
int main() {
//添加随机数种子 作用:利用当前系统时间生成随机数,防止每次随机数都一样
srand((unsigned int)time(NULL));
//1、系统生成随机数
int num=rand() % 100 + 1; //rand()%100 +1 生成0~99+1的随机数
//cout << num << endl;
//2、玩家进行猜测
int val = 0;//玩家输入的数据
while (1) {
cin >> val;
//3、判断玩家的猜测
//猜错 提示猜的结果 过大或过小 重新返回第二步
if (val > num) {
cout << "猜测过大" << endl;
}
else if (val < num) {
cout << "猜测过小" << endl;
}
else {
cout << "恭喜您猜对了" << endl;
break;//break,可以利用该关键字来退出当前循环
}//猜对 退出游戏
}
system("pause");
return 0;
}
do…while循环语句
作用:满足循环条件,执行循环语句
语法:do{循环语句}while(循环条件);
注意:与while区别在于do…while会先执行一次循环语句,再判断循环条件
思考题:水仙花数
水仙花数是指一个3位数,它的每个位上的数字的三次幂之和等于它本身
例如:13+53+3^3=153
请利用do…while语句,求出所有三位数中的水仙花数
#include<iostream>
using namespace std;
int main() {
//1、先打印所有的三位数
int num = 100;
do{
//2、从所有的三位数字中找到水仙花数
int a = 0;//个位
int b = 0;//十位
int c = 0;//百位
a = num % 10;//获取数字的个位
b = num / 10 % 10;//获取数字的十位
c = num / 100;//获取数字的百位
if (a*a*a+b*b*b+c*c*c==num)//如果是水仙花数,才打印
{
cout << num << endl;
}
num++;
} while (num < 1000);
system("pause");
return 0;
}
for循环语句
作用:满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}
思考题:敲桌子
从1开始数到数字100,如果数字个位含7,或者数字十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。
#include<iostream>
using namespace std;
int main() {
//敲桌子案例
//1、先输出1~100
for (int i = 1; i <= 100; i++) {
//2、从100个数字中找到特殊数字,打印“敲桌子”
//如果是7的倍数、个位有7、十位有7,打印敲桌子
if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7)//如果是特殊数字,打印敲桌子
{
cout << "敲桌子" << endl;
}
else//如果不是特殊数字,才打印数字
{
cout << i << endl;
}
}
system("pause");
return 0;
}
嵌套循环
作用:在循环体中再嵌套一层循环,解决一些实际问题
思考题:乘法口诀表
利用嵌套循环,实现九九乘法表
#include<iostream>
using namespace std;
int main() {
//乘法口诀表
//打印行数
for (int i = 1; i <= 9; i++) {
//cout << i << endl;
//2*2 2*3 说明列数一定小于行数
for (int j = 1; j <= i; j++) {
cout << j <<"*"<<i<<"="<<j*i<<" ";
}
cout << endl;
}
system("pause");
return 0;
}
跳转语句
break语句
作用:用于跳出选择结构和循环结构
break使用的时机:
- 出现在switch条件语句中,作用是终止case并跳出switch
- 出现在循环语句中,作用是跳出当前循环语句
- 出现在嵌套循环中,跳出最近的内层循环语句
continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
goto语句
作用:可以无条件跳转语句
语法:goto 标记;
解释:如果标记的名称存在,执行goto语句时,会跳转到标记的位置
数组
所谓数组,就是一个集合,里面存放了相同类型的数据元素
特点1:数组中每个数据元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
一维数组
一维数组定义的三种方式:
一维数组名称的用途:
思考题:5只小猪称体重
在一个数组中记录了5只小猪的体重,如:int arr[5]={300,350,200,400,250};找出并打印最重的小猪体重。
#include<iostream>
using namespace std;
int main() {
//1、创建5只小猪体重的数组
int arr[5] = { 300,350,300,400,250 };
//2、从数组中找到最大值
int max = 0;//先认定最大值为0
for (int i = 0; i < 5; i++) {
//cout << arr[i] << endl;
//如果访问的数组中的元素比我认定的最大值还要大,更新最大值
if (arr[i] > max) {
max = arr[i];
}
}
//3、打印最大值
cout << "最重的小猪体重为:" << max << endl;
system("pause");
return 0;
}
思考题2:数组元素逆置
请声明一个5个元素的数组,并且将元素逆置
如原数组元素为:1,3,2,5,4;逆置后输出的结果为:4,5,2,3,1;
#include<iostream>
using namespace std;
int main() {
//实现数组元素逆置
//1、创建数组
int arr[5] = { 1,3,2,5,3 };
cout << "元素数组逆置前:" << endl;
for (int i = 0; i < 5; i++) {
cout << arr[i] << endl;
}
//2、实现逆置
//2.1记录起始下标的位置
//2.2记录结束下标的位置
//2.3起始下标与结束下标元素互换
//2.4起始位置++ 结束位置–
//2,5循环执行2.1操作,直到起始位置>=结束位置
int start = 0;//起始下标
int end = sizeof(arr) / sizeof(arr[0]) – 1;//结束下标
while(start < end) {
//实现元素互换
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
//下标更新
start++;
end–;
}
//3、打印逆置后的数组
cout << "数组元素逆置后" << endl;
for (int i = 0; i < 5; i++) {
cout << arr[i] << endl;
}
system("pause");
return 0;
}
冒泡排序
作用:最常用的排序算法,对组内元素进行排序
#include<iostream>
using namespace std;
int main() {
//利用冒泡排序生成升序序列
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
cout << "排序前:" << endl;
for (int i = 0; i <9; i ++) {
cout << arr[i] << " ";
}
cout << endl;
//开始冒泡排序
// 排序总轮数=元素个数-1
// 每轮对比次数=元素个数-排序轮数-1
for (int i = 0; i < 9 – 1; i++) {
//内层循环对比
for (int j = 0; j < 9 – i – 1;j++) {
//如果第一个数字比第二个数字大,实现交换两个数字
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//排序后的结果
cout << "排序后:" << endl;
for (int i = 0; i < 9; i++) {
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
二维数组
二维数组定义的4种方式:
二维数组数组名
- 查看二维数组所占内存空间:sizeof(arr)
- 获取二维数组首地址:(int)arr (int)&arr[0] [0]
思考题:考试成绩统计
有三名同学(张三,李四,王五),在一次考试中成绩分别如下表,请分别输出三名同学的总成绩
| 张三 | 100 | 100 | 100 |
| 李四 | 90 | 50 | 100 |
| 王五 | 60 | 70 | 80 |
#include<iostream>
using namespace std;
#include<string>
int main() {
//二维数组案例–考试成绩统计
//1、创建二维数组
int score[3][3] = {
{100,100,100 },
{90,50,100 },
{60,70,80 }
};
string names[3] = { "张三","李四","王五" };
//2、统计每个人分数的总和分数
for (int i = 0; i < 3; i++) {
int sum = 0;//统计分数总和变量
for (int j = 0; j < 3; j++) {
sum += score[i][j];
//cout << score[i][j] << " ";
}
cout << names[i]<<"的总分为"<<sum << endl;
}
system("pause");
return 0;
}





