文章目录
循环结构
4.2.1 while循环语句
作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句}
解释:只要循环条件的结果为真,就执行循环语句
注意:在执行循环语句的时候,一定要设置循环的出口,避免死循环
#include<iostream>
using namespace std;
int main()
{
int a = 1, b = 0, n = 1, t=0;
cin >> t;
while (a <= t)
{
cout <<" " << a;
b++; //现在有几个数
if (b == n) /*判断是否达到了此时应该容纳的数的限额,如果达到了就要换行,没达到继续*/
{
cout<<"\n";
b = 0;
n ++; //那么下一行的数就要多容纳一个
}
a ++;
}
return 0;
}
4.2.2猜数字
#include<iostream>
using namespace std;
#include<ctime>
int main()
{
srand((unsigned int)time(NULL));
//系统生成随机数
int inp,t=1;
int num=rand () % 100 + 1;
while (t<=10)
{
cout << "请输入你猜的数:" << endl;
cin >> inp;
if (inp > num)
{
cout << "猜大了\n";
}
else if (inp < num)
{
cout << "猜小了\n";
}
else
{
cout << "恭喜你,猜对了\n";
break;
}
t=t+1;
}
}
do……while循环语句
作用:满足循环条件,执行循环语句
语法:do{循环语句}while{循环条件}
注意:与while的区别是do…while会先执行一次循环语句,再判断循环条件
#include<iostream>
using namespace std;
int main()
{
int a=1,b=0,n=1,t=0;
cout << "请输入一个数:";
cin >> t;//输出n个偶数,没有0.
while (a<=t)//输出范围内的某些数的循环结构
{
do
{
cout << 2 * a << " ";//输出偶数
b++;
a++;
} while (b < n);//b控制每行放的数的个数的变量,n是行数,是每行的最大限制数
if (b == n)///*判断是否达到了此时应该容纳的数的限额,如果达到了就要换行,没达到继续*/
{
cout << "\n";
b = 0;
n++;
}
}
}
练习案例:水仙花数
案例描述:水仙花数是指一个3位数,它的每个位上的数字的3次幕之和等于它本身
例如:13+53+33=153,请利用do…while语句,求出所有3位数中的水仙花数
1、将所有的三位数进行输出(100~999)
2、在所有三位数中找到水仙花数
3、判断条件
| 水仙花数 | 153 |
|---|---|
| 获取个位 | 153%10=3 ;对数字取模于10可以获取到个位 |
| 获取十位 | 先153/10=15,15%10=5;整除于10,得到两位数,再取模于10,得到十位 |
| 获取百位 | 整除100,得到百位数字 |
#include<iostream>
using namespace std;
int main()
{
int num = 100;
do
{
int a = num /100;
int b = num /10 %10;
int c = num %10;
if (a * a * a + b * b * b + c * c * c == num)
{
cout << a << "*100+" << b << "*10+" << c << "=" << num << endl;
}
num++;
} while (num <= 999);
}
4.2.3 for循环语句
作用:满足循环条件,执行循环
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}
#incluide<iostream>
using namespace std;
int main()
{
int a,n;
cin >> n;
for (a=1; a <= n; a++)
{
cout << 2 * a << " ";
}
}

练习案例:敲桌子
案例描述:
从1开始数到数字100如果数字个位含有7,或者数字十位合有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出
1、先输出1到100这些数字
2、从这100个数字中找到特殊数字,改为“敲桌子
特殊数字
| 7的倍数 | (7142128…) | %7=0 |
|---|---|---|
| 个位有7 | (7,17,27,37…) | %10=7 |
| 十位有7 | (70,71,72.73…) | /10=7 |
int main()
{
int num = 1;
for (num = 1; num <= 100; num++)
{
if (num % 7 == 0 || num % 10 == 7 || num / 10 == 7)
cout << "敲桌子--" << num << endl;
else
{
cout << num << endl;
}
}
}
嵌套循环
int main()
{
int i=0,j=0;
for (i = 1; i <= 10; i++)
{
for (j = 1; j <= 10; j++)
{
cout << "*";
}
cout << "\n";
}
}

int main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
cout << i << "x" << j <<"=" << i * j << " ";
}
cout << endl;
}
}

4.3跳转语句
4.3.1 break语句
作用:用于跳出选择结构或者循环结构
break使用的时机:
1 出现在switch条件语句中,作用是终止case并跳出switch
int main()
{
int select = 0;
cout << "请选择游戏难度:" << endl;
cout << "1、简单\n";
cout << "2、一般\n";
cout << "3、困难\n";
cin >> select;
switch (select)
{
case 1:
cout << "简单模式\n";
break;
case 2:
cout << "一般模式\n";
break;
case 3:
cout << "困难模式\n";
break;
defalut:
break;
}
2 出现在循环语句中,作用是跳出当前的循环语句
int main()
{
for (int i = 1; i < 10; i++)
{
cout << i << " ";
if (i == 5)
{
break;
}
}
}
3 出现在嵌套循环中,跳出最近的内层循环语句
int main()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << "*";
if (j == 5)
{
break;
}
}
cout << "\n";
}
}
4.3.2 continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
示例:
int main()
{
for (int i = 1; i < = 100; i++)
{
if (i % 10 == 0)
{
continue;
}
cout << i<<" ";
}
}
注意:continue并没有使整个循环终止,而break会跳出循环
4.3.3 goto语句
作用:可以无条件跳转语句】
语法:goto标记;
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
不建议使用,以免造成程序的混乱
int main()
{
cout << "1\n";
cout << "2\n";
goto flag;
cout << "3\n";
cout << "4\n";
flag:
cout << "5\n";
cout << "6\n";
}
数组
5.1概述
所谓数组,就是一个集合,里面存放了相同类型的数据元素
特点1:数组中的每个数据元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
5.2一维数组
5.2.1一维数组定义方式
一维数组定义的三种方式
1.数据类型 数组名[数组长度];
2.数据类型 数组名[数组长度]={值1,值2…};
3.数据类型 数组名[]={值1,值2…3}
int main()
{
//1.数据类型 数组名[数组长度];
int arr[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
for ( int i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}
cout << "----------------------------------\n";
//2.数据类型 数组名[数组长度]={值1,值2...};
int arr2[5] = { 10,20,30,40,50 };
for (int i = 0; i < 5; i++)
{
cout << arr2[i] << endl;
}
cout << "-----------------------------------\n";
//3.数据类型 数组名[]={值1,值2...3}
int arr3[] = { 10,20,30,040,50,60,70,80,90,100 };
for (int i = 0; i <= 9; i++)
{
cout << arr3[i] << endl;;
}
}
*数组从0开始检索
*数组名的命名规范和变量名一致,不要和变量名一样
*如果初始化数字的时候,没有全部填写,会默认初始化为0
*定义数组的时候,必须有初始长度
5.2.2 一维数组数组名
一维数组名称的用途
1可以统计整个数组在内存中的长度
1可以统计整个数组在内存中的长度
int main()
{
//1可以统计整个数组在内存中的长度
int arr[] = { 10,20,30,40,50,60,70,80,90,100 };
cout << "整个人数组所占的内存空间为:" << sizeof(arr) << endl;
cout << "m每个元素所占的内存空间为:" << sizeof(arr[0]) << endl;
cout << "数组中的元素个数;" <<sizeof (arr)/ sizeof(arr[0]) << endl;
//1可以统计整个数组在内存中的长度
cout << "数组的首地址为:" << arr << endl;
cout << "数组的首地址为:" << (int)arr << endl;
cout << "数组的首地址为:" << (int)&arr[0] << endl;
cout << "数组的首地址为:" << (int)&arr[1] << endl;
//数组名是常量,不可以赋值
}
案例描述:找最重的小猪
在一个数组中记录了五只小猪的体重,如:intarr[5]={300,350,200,400,250}
找出并打印最重的小猪体重
int main()
{
int arr[] = {300,350,200,400,250 };
int max = 0;
for (int i=0; i < 5; i++)
{
if (max<arr[i])
{
max = arr[i];
}
}
cout <<"最重的小猪是:" << max << endl;
}
练习案例2:数组元素逆置
案例描述:请声明一个5个元素的数组,并且将元素逆置,如原数组元素为:1.3.2.5.4:逆置后输出结果为:(4.5.2.3.1)
//}
int main()
{
int arr[5] = {};
cout << "请输入你要倒置的为5个整数:\n";
for (int i = 0; i < 5; i++)
{
cin >> arr[i];
}
int star = 0;
int end = sizeof(arr) / sizeof(arr[0])-1;
while (star < end)
{
int temp = arr[star];
arr[star] = arr[end];
arr[end] = temp;
star++;
end--;
}
for (int i = 0; i < 5; i++)
{
cout << arr[i]<<" ";
}
}
5.2.3冒泡排序
作用:最常用的排序算法,对数组内元素进行排序
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个
2.对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值
3.重复以上的步骤,每次比较次数-1,直到不需要比较
int main()
{
int arr[] = { 2,4,0,5,7,1,3,8,9 };
for (int i = 0; i < 9; i++)
{
cout << arr[i]<<" ";
}
cout << "\n";
//开始冒泡排序
//总共排序轮数位为=元素个数-1;
for (int i = 0; i < 9 - 1; i++)
{
//内层循环对比次数=元素个数-当前轮数-1;
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 << "----------------------------------\n";
for (int i = 0; i < 9; i++)
{
cout << arr[i]<<" ";
}
}

5.3.1 二维数组定义方式
二维数组定义的四种方式
1数据类型 数组名[行数列数];
2.数据类型 数组名【行数】【列数】=(《数据1,数据2,《数据3,数据4;
3.数据类型 数组名[行数][列数】=(数据1,数据2,数据3,数据4;
4数据类型 数组名【】[列数】=数据1,数据2,数据3,数据4;
建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性
int main()
{
int arr[2][3]=
{
{1,2,3},
{4,5,6}
};
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr[i][j]<<" ";
}
cout << "\n";
}
}

5.3.2 二维数组数组名
1 查看二维数组所占内存空间
2 获取二维数组首地址
int main()
{
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二维数组的大小:" << sizeof(arr) << endl;
cout << "二维数组一行大小:" << sizeof(arr[0]) << endl;
cout << "二维数组元素大小:" << sizeof(arr[0][0]) << endl;
cout << "二维数组行数:" << sizeof(arr)/sizeof(arr[0]) << endl;
cout << "二维数组列数:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
//地址
cout << "二维数组首地址:" <<arr<< endl;
cout << "二维数组首行地址:" <<arr[0] << endl;
cout << "二维数组第二行地址:" <<arr[1] << endl;
cout << "二维数组第一个元素:" <<(int) & arr[0][0] << endl;
cout << "二维数组第二个元素:" <<(int) & arr[0][1] << endl;
}
二维数组的大小:24
二维数组一行大小:12
二维数组元素大小:4
二维数组行数:2
二维数组列数:3
二维数组首地址:000000D36231F5E8
二维数组首行地址:000000D36231F5E8
二维数组第二行地址:000000D36231F5F4
二维数组第一个元素:1647441384
二维数组第二个元素:1647441388
C:\Users\HP\Desktop\01 hello world\x64\Debug\01 hello world.exe (进程 17348)已退出,代码为 0。
按任意键关闭此窗口. . .
5.3.3二维数组应用案例
考试成绩统计:
案例描述:有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩
| 语文 | 数学 | 英语 | |
|---|---|---|---|
| 张三 | 100 | 100 | 100 |
| 李四 | 50 | 90 | 100 |
| 王五 | 60 | 70 | 80 |
int main()
{
int scores[3][3] =
{
{100,100,100},
{90,50,100},
{60,70,80}
};
string names[3] = { "张三","李四", "王五" };
for (int i=0;i< 3;i++)
{
int sum = 0;
for (int j = 0; j < 3; j++)
{
sum += scores[i][j];
}
cout << names[i] << "第" << i + 1 << "的总分是:" << sum << endl;
}
}