一、代码、编译和程序
二、Windows环境搭建
下载地址:Download CLion: A Smart Cross-Platform IDE for C and C++ (jetbrains.com)
可以使用激活助手,激活至2099年
激活工具:
https://lty9211.lanzout.com/izs4e29jlada
三、第一个C++程序
#include "iostream" using namespace std; int main() { cout <<"I love C++" << endl; return 0; }
四、C++代码的基础结构
五、单工程多main函数设置
六、手动编译代码并运行
看到下面这个就代表已经安装好了:
g++ -v
下面是把.cpp文件变为.exe文件:
七、【扩展】VScode环境配置
Visual Studio Code 配置 (yuque.com)
八、cout打印输出
#include "iostream" using namespace std; int main() { cout <<"I love C++" << endl; cout << 10 << endl; cout <<"I am " << 10 << " years old and you?" << endl; return 0; }
输出:
I love C++ 10 I am 10 years old and you?
#include "iostream" using namespace std; int main() { cout << "If you want to learn IT,come to itheima." << endl; cout << "If you want to " << "learn IT," << "come to itheima." << endl; return 0; }
输出:
If you want to learn IT,come to itheima. If you want to learn IT,come to itheima.
九、代码注释
#include "iostream" using namespace std; int main() { cout << "If you want to learn IT,come to itheima." << endl; // 这行代码向屏幕中显示信息 /* 下面是多行注释 * 前面的*号是软件自动添加的 * 可以任意换行 * */ cout << "If you want to " << "learn IT," << "come to itheima." << endl; return 0; }
十、CLion软件的设置
1、汉化
2、更改字体字号
3、更改软件主题
4、快捷键
十一、字面常量——反义词变量
#include "iostream" using namespace std; int main() { cout << "Hello, World!" << endl; //整型、实型、字符、字符串 20240912; // 整型:整数;只要不报错,写法就没有问题 180.5; // 实型:小数 'A'; // 字符:''进行包围,单个字符 'cd'; //只能提供一个字符,不能是0个字符或更多 "hello word!"; //标准字符串,""进行包围,任意个字符 ""; //空字符串,里面是0个字符 "c"; //标准字符串 //通过cout将这些内容全部打印到控制台 cout << 20240912 << endl; cout << 180.5 << endl; cout << 'A' << endl; cout << 'cd' << endl; cout << "hello word!" << endl; cout << "" << endl; cout << "c" << endl; return 0; }
输出:
Hello, World! 20240912 180.5 A 25444 hello word!
c
十二、标识符和关键字——取名字
十三、符号常量
#include "iostream" //#include "windows.h" using namespace std; #define FAT_BMI 28 #define J2C_RATE 4.19 //焦耳转卡路里的比率 // 符号常量:#define 名称(标识符) 常量值 //符号常量定义在代码的头部 //符号常量的定义不需要分号结尾 int main() { //SetConsoleOutputCP(CP_UTF8); system("chcp 65001"); // 使用符号常量的语句,就是正常代码了,要写在main函数中 // 如何使用:使用符号常量 就直接用它的名字即可 cout << FAT_BMI << endl; cout << "焦耳转卡路里需要除以:" << J2C_RATE << endl; /*中文乱码解决: * 1)引入windows.h库。#include "windows.h";SetConsoleOutputCP(CP_UTF8); * 2)system("chcp 65001");*/ return 0; }
javacaoyu/黑马程序员C++学习 – 码云 – 开源中国 (gitee.com)
#include "iostream" #include "windows.h" using namespace std; #define NAME_ZHOU "周杰伦" #define AGE 21 #define HEIGHT 180.5 #define WEIGTH 56 int main() { SetConsoleOutputCP(CP_UTF8); //中文乱码解决 cout << "我是" << NAME_ZHOU << ",今年" << AGE << "岁" << endl; cout << "身高" << HEIGHT << "cm,体重" << WEIGTH << "KG" << endl; return 0; }
输出:
我是周杰伦,今年21岁 身高180.5cm,体重56KG
十四、变量的基础使用
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); int age; //变量的声明(定义),变量类型 变量名 float height; //实型变量声明 char gender; //字符型变量声明 string name; //字符串型变量声明 age = 21; //变量的赋值,变量名 = 变量值 height =180.5; gender = 'm'; name = "小明"; cout << name << "的年纪:"<< age << endl; cout << name << "的性别:"<< gender << endl; cout << name << "的身高:"<< height << endl; return 0; }
输出:
小明的年纪:21 小明的性别:m 小明的身高:180.5
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); string name = "周杰伦"; int age = 21; float height =180.5; int weight = 56; cout << "我是" << name << ",今年" << age << "岁。" << endl; cout << "身高" << height << "cm,体重" << weight << "KG。" << endl; return 0; }
输出:
我是周杰伦,今年21岁。 身高180.5cm,体重56KG。
十五、变量的特征
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); int BMI = 30; //声明并赋值 cout << "小明的BMI是:" << BMI << endl; BMI = 26; // 再次赋值 cout << "经过一个月后,小明的BMI是:" << BMI << endl; //可以进行数学运算,+、-、*、/ BMI = BMI -2; cout << "又经过一个月,小明的BMI是:" << BMI << endl; return 0; }
输出:
小明的BMI是:30 经过一个月后,小明的BMI是:26 又经过一个月,小明的BMI是:24
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); int money = 50; cout << "小明余额:" << money << "元。" << endl; money = money - 5; cout << "购买冰淇淋花费5元,余额剩余:" << money << "元。" << endl; money = money + 10; cout << "转卖冰淇淋得到10元,余额剩余:" << money << "元。" << endl; money = money - 2; cout << "购买彩票花费2元,余额剩余:" << money << "元。" << endl; money = money * 2; cout << "彩票中奖余额翻倍,余额剩余:" << money << "元。" << endl; return 0; }
输出:
小明余额:50元。 购买冰淇淋花费5元,余额剩余:45元。 转卖冰淇淋得到10元,余额剩余:55元。 购买彩票花费2元,余额剩余:53元。 彩票中奖余额翻倍,余额剩余:106元。
十六、变量的快速定义
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); //中文乱码解决 int a = 10,b = 20,c = 30; //一次性快捷声明 cout << a << b << c << endl; return 0; }
输出:
102030
十七、标识符的命名规范
十八、标识符的限制规则
十九、数据类型-整型
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); //中文乱码解决 short a = 21; int b = 10; long c = 20; long long d = 30; cout << a << b << c << d << endl; //sizeof函数,用法:sizeof(数据),会告知得到数据所占用的字节 cout << "short变量,占用字节:" << sizeof(a) << endl; cout << "int变量,占用字节:" << sizeof(b) << endl; cout << "long变量,占用字节:" << sizeof(c) << endl; cout << "long long变量,占用字节:" << sizeof(d) << endl; return 0; }
输出:
21102030 short变量,占用字节:2 int变量,占用字节:4 long变量,占用字节:4 long long变量,占用字节:8
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); //中文乱码解决 int a = 20; float b = 20.5; char c; string hello; //sizeof函数,用法:sizeof(数据),会告知得到数据所占用的字节 cout << "a,占用字节:" << sizeof(a) << endl; cout << "b,占用字节:" << sizeof(b) << endl; cout << "char,占用字节:" << sizeof(c) << endl; cout << "string变量,占用字节:" << sizeof("hello") << endl; return 0; }
输出:
a,占用字节:4 b,占用字节:4 char,占用字节:1 string变量,占用字节:6
二十、无符号和有符号数字
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); //中文乱码解决 //有符号:signed(可选),无符号:unsigned(必选) signed int a = 10; //有符号int int b = -20; //有符号int cout << a << "," << b << endl; unsigned int c = -30; //无符号数必须大于等于0 cout << c << endl; //无符号的int、short、long的快捷写法 u_short d =100; //等同于unsigned short u_int e = 200; //等同于unsigned int u_long f = 300; //等同于unsigned long cout << d << "," << e << "," << f <<endl; return 0; }
输出:
10,-20 4294967266 100,200,300
二十一、数据类型-实型
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); // float单精度浮点数,4字节,6~7位准确输出 float num1 = 1234567890; //只提供了前7位的有效输出 float num2 = 1.234567890;//只提供了前7位的有效输出 //有效位:整数位、小数点、小数位 cout << fixed; //设置为小数显示 cout.width(20); //设置显示的最大宽度(最大位数) cout << num1 << "," << sizeof(num1) << endl; cout << num2 << "," << sizeof(num2) << endl; cout << "----------------------------" << endl; // double双精度浮点数,8字节,15~16位有效位 double num3 = 1234567890.1234567890; cout << num3 << "," << sizeof(num3) << endl; cout << "----------------------------" << endl; // long double长精度(多精度)浮点数,16字节,18~19位有效位 long double num4 = 1234567890.1234567890; cout << num4 << "," << sizeof(num4) << endl; return 0; }
输出:
1234567936.000000,4 1.234568,4 ---------------------------- 1234567890.123457,8 ---------------------------- 1234567890.123457,16
二十二、C++常量类型的确定
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); // 不带有后缀的数字的类型确定,整数的类型最小是int,小数的类型最小是double cout << "10的字节数是:" << sizeof(10) << endl; cout << "99999999999的字节数是:" << sizeof(99999999999) << endl; cout << "3.14的字节数是:" << sizeof(3.14) << endl; // 带有后缀的 // U无符号的意思 10U; // 无符号整数int // L是long的意思 cout << "10L的字节数是:" << sizeof(10L) << endl; // F是float的意思 cout << "3.14F的字节数是:" << sizeof(3.14F) << endl; cout << "3.14的字节数是:" << sizeof(3.14) << endl; cout << "3.14D的字节数是:" << sizeof(3.14D) << endl; return 0; }
输出:
10的字节数是:4 99999999999的字节数是:8 3.14的字节数是:8 10L的字节数是:4 3.14F的字节数是:4 3.14的字节数是:8 3.14D的字节数是:8
二十三、数据类型-字符型
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); char ch = 65; //A的ASCII码位65 cout << ch << endl; char ch2 = 'a'; //a的ASCII码为97 cout << ch2 + 1 << endl; char ch3 = 'a' + 2; cout << ch3 << endl; //c的ASCII码为99 return 0; }
输出:
A 98 b
二十四、转义字符
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); // 转义字符:将普通的字符使用\作为开头,将其含义进行转换,对照得到ASCII表的控制字符的功能 // \n换行 \t制表符 \表示一个反斜杠本身 \'表示单引号 \"表示双引号 cout << "你好呀 \n 我喜欢你" << endl; //效果等同于Enter键 cout << "----------------" << endl; cout << "hello\titheima" << endl; //效果等同于Tab键,一个Tab可以补充到8个字符位 cout << "a\titcast" << endl; cout << "----------------" << endl; cout << "\"" << endl; cout << "\" << endl; cout << "\'" << endl; return 0; }
输出:
hello itheima a itcast ---------------- " \ '
二十五、数字类型之字符串
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); char s1[] = "itheima";//C语言风格的字符串,数组 char *s2 = "itcast"; //C语言风格的字符串,指针 string s3 = "C++ string";//C++风格的字符串 cout << s1 << endl; cout << s2 << endl; cout << s3 << endl; //s1 = "666";//C语言数组只读 s2 = "777"; s3 = "888"; cout << s1 << endl; cout << s2 << endl; cout << s3 << endl; return 0; }
输出:
itheima itcast C++ string itheima 777 888
二十六、字符串的拼接
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); string name = "小黑"; string major = "物理"; int age = 21; double height = 172.50; string msg = "我叫做" + name + ",我的专业是" + major; //to_string函数可以将内容转换为字符串类型,用法:to_string(内容) string msg1 = "我叫做" + name + ",我的专业是" + major + ",年龄是" + to_string(age) + ",身高是" + to_string(height); cout << msg << endl; cout << msg1 << endl; return 0; }
输出:
我叫做小黑,我的专业是物理 我叫做小黑,我的专业是物理,年龄是21,身高是172.500000
二十七、数据类型之布尔型
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); //中文乱码解决 // 布尔:bool 字面常量仅仅有2个:true或false bool flag1 = true; bool flag2 = false; cout << flag1 << endl; cout << flag2 << endl; return 0; }
输出:
1 0
二十八、cin数据输入
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); //中文乱码解决 // cin >> 变量; int num1; cout << "请输入一个整数:" << endl; cin >> num1; double num2; cout << "请输入一个实型数字:" << endl; cin >> num2; char c; cout << "请输入一个字符:" << endl; cin >> c; string s; cout << "请输入一个字符串:" << endl; cin >> s; cout << "输入的整数:" << num1 << endl; cout << "输入的小数值:" << num2 << endl; cout << "输入的字符:" << c << endl; cout << "输入的字符串:" << s << endl; return 0; }
输出:
请输入一个整数: 12 请输入一个实型数字: 3.14 请输入一个字符: A 请输入一个字符串: freedali 输入的整数:12 输入的小数值:3.14 输入的字符:A 输入的字符串:freedali
二十九、cin中文乱码解决
#include "iostream" #include "windows.h" using namespace std; int main() { SetConsoleOutputCP(CP_UTF8); //中文乱码解决 // 试一下中文输入 string str; cout << "请输入一个字符:" << endl; cin >> str; cout << "输入的字符为:" << str << endl; return 0; }
压根就输入不了(Clion版本为CLion 2024.2.1)
我这个CLion取消勾选那个还是不行,哎。完了
后面发现,复制粘贴是可以的。
#include "iostream" using namespace std; int main() { // 试一下中文输入 string str; cout << "请输入一个字符:" << endl; cin >> str; cout << "输入的字符为:" << str << endl; return 0; }
输出:
请输入一个字符: hh 输入的字符为:hh
#include "iostream" using namespace std; int main() { string name; float height; int age; cout << "请输入您的姓名:" << endl; cin >> name; cout << "请输入您的身高(CM):" << endl; cin >> height; cout << "请输入您的年龄:" << endl; cin >> age; cout << "----------" << endl; cout << "信息输入完成,您的信息如下:" << endl; cout << "姓名:" << name << endl; cout << "身高:" << height << "cm" << endl; cout << "年龄:" << age << endl; return 0; }
输出:
请输入您的姓名: 周杰伦 请输入您的身高(CM): 180.5 请输入您的年龄: 21 ---------- 信息输入完成,您的信息如下: 姓名:周杰伦 身高:180.5cm 年龄:21
三十、算术运算符
#include "iostream" using namespace std; int main() { // 单目(只有1个操作数)操作符:+、- int num1 = +10; int num2 = -10; cout << num1 << "," << num2 << endl; // 双目(有2个操作数)操作符:+、-、*、/、% int num3 = 5 + 5; // 相加 int num4 = 5 - 3; // 相减 int num5 = 5 * 5; // 相乘 int num6 = 10 / 3;// 相除,如果两个操作数都属整数,是整除结果 int num7 = 10 % 3;// 取余 cout << "5 + 5 =" << num3 << endl; cout << "5 - 3 =" << num4 << endl; cout << "5 * 5 =" << num5 << endl; cout << "10 / 3 =" << num6 << endl; cout << "10 % 3 =" << num7 << endl; //单目操作符:++(+1)、--(-1) int a = 2; int b = ++a; //前置递增(+1),在赋值语句(=)之前,先执行加1的操作,先自增再赋值 cout << "a = " << a << ",b = " << b << endl; int c = 2; int d = c++; //后置递增,在赋值语句之后,再执行加1的操作,先赋值再自增 cout << "c = " << c << ",d = " << d << endl; int e = 2; int f = --e; //先自减再赋值 cout << "e = " << e << ",f = " << f << endl; int g = 2; int h = g--; //先赋值再自减 cout << "g = " << g << ",h = " << h << endl; return 0; }
输出:
10,-10 5 + 5 =10 5 - 3 =2 5 * 5 =25 10 / 3 =3 10 % 3 =1 a = 3,b = 3 c = 3,d = 2 e = 1,f = 1 g = 1,h = 2
三十一、赋值运算符
#include "iostream" using namespace std; int main() { //+=、-=、*=、/=、%= int num = 2; num = num +3; cout << num << endl; num += 3; cout << num << endl;//num=8 num -= 3; cout << num << endl;//num=5 num *= 5; cout << num << endl;//num=25 num /= 5; cout << num << endl;//num=5 num %= 3; cout << num << endl;//num=2 return 0; }
输出:
5 8 5 25 5 2
#include "iostream" using namespace std; int main() { int money = 50; cout << "小明余额:" << money << "元。" << endl; money -= 5; cout << "购买冰淇淋花费5元,余额剩余::" << money << "元。" << endl; money += 10; cout << "转卖冰淇淋得到10元,余额剩余::" << money << "元。" << endl; money -= 2; cout << "购买彩票花费2元,余额剩余::" << money << "元。" << endl; money *= 2; cout << "彩票中奖余额翻倍,余额剩余::" << money << "元。" << endl; return 0; }
输出:
小明余额:50元。 购买冰淇淋花费5元,余额剩余::45元。 转卖冰淇淋得到10元,余额剩余::55元。 购买彩票花费2元,余额剩余::53元。 彩票中奖余额翻倍,余额剩余::106元。
三十二、比较运算符
#include "iostream" #include "cstring" //C语言的字符串库 using namespace std; int main() { // ==相等,!=不等,<小于,>大于,<=小于等于,>=大于等于 //0 false假,1 true 真 int num1 = 3; int num2 = 5; bool r1 = num1 == num2; bool r2 = num1 != num2; cout << "num1 == num2," << r1 << endl; cout << "num1 != num2," << r2 << endl; cout << "3 < 5 ," << (3 < 5) << endl; cout << "3 > 5 ," << (3 > 5) << endl; cout << "3 <= 5 ," << (3 <= 5) << endl; cout << "3 >= 5 ," << (3 >= 5) << endl; //字符串的比较 //C语言风格字符串 char[] chat *s "hello" strcmp() //C语言风格字符串,直接应用比较运算符,比较的是内存地址,而不是内容 char s1[] = "hello"; char *s2 = "hello"; cout << "s1 == s2," << (s1 == s2) << endl; //strcmp进行比较,0相等,-1 s1<s2,1 s1>s2 cout << "s1 == s2," << strcmp(s1,s2) << endl; char s3[] = "a"; char *s4 = "b"; cout << "s3和s4的比较结果:" << strcmp(s3,s4) << endl; cout << "字符串字面量 c 是否大于 a?," << strcmp("c","a") << endl; //C++风格字符串,string类型的都是C++风格字符串 //再比较中只要有1个C++风格字符串 就可以用比较运算符了 string s5 = "a"; char s6[] = "a"; cout << "s5是否等于s6:" << (s5 == s6) << endl; return 0; }
输出:
num1 == num2,0 num1 != num2,1 3 < 5 ,1 3 > 5 ,0 3 <= 5 ,1 3 >= 5 ,0 s1 == s2,0 s1 == s2,0 s3和s4的比较结果:-1 字符串字面量 c 是否大于 a?,1 s5是否等于s6:1
三十三、逻辑运算符
#include "iostream" #include "cstring" //C语言的字符串库 using namespace std; int main() { // bool 1真 0假 // !非 bool b1 = !(1 == 1); //假 bool b2 = !(1 == 2); //真 cout << b1 << endl; cout << b2 << endl; //&&与,两个条件都要同时为true 结果为真,否则只要有一个为假,结果就为假 bool b3 = 1 == 1 && 2 == 2; //真 bool b4 = 1 == 2 && 2 == 2; //假 cout << b3 << endl; cout << b4 << endl; //||或 只要有1个为真,结果就为真。 bool b5 = 1 == 1 || 1 == 2; //真 bool b6 = 1 == 2 || 1 == 2; //假 cout << b5 << endl; cout << b6 << endl; return 0; }
输出:
0 1 1 0 1 0
三十四、三元运算符
#include "iostream" #include "cstring" //C语言的字符串库 using namespace std; int main() { // 表达式? v1 : v2; int num1 , num2; cout << "请输入num1的值:" << endl; cin >> num1; cout << "请输入num2的值:" << endl; cin >> num2; string value = num1 > num2? "num1大于num2" : "num1小于num2"; cout << value << endl; return 0; }
输出:
请输入num1的值: 99 请输入num2的值: 100 num1小于num2
#include "iostream" #include "cstring" //C语言的字符串库 using namespace std; int main() { float score1; float score2; cout << "请输入小明第一次考试成绩(0-100):" << endl; cin >> score1; cout << "请输入小明第二次考试成绩(0-100):" << endl; cin >> score2; string value = score2 > score1? "买糖" : "不买糖"; cout << value << endl; return 0; }
输出1:
请输入小明第一次考试成绩(0-100): 90 请输入小明第二次考试成绩(0-100): 96 买糖
输出2:
请输入小明第一次考试成绩(0-100): 99 请输入小明第二次考试成绩(0-100): 96 不买糖
三十五、if逻辑判断语句
#include "iostream" using namespace std; int main() { cout << "今天发工资了" << endl; cout << "请输入小明发的工资:" << endl; int money; cin >> money; if(money >= 10000){ cout << "买个新电脑去,花费9900元!" << endl; money -= 9900; } cout << "今天发的工资还剩:" << money << "元!" << endl; return 0; }
输出1:
今天发工资了 请输入小明发的工资: 10000 买个新电脑去,花费9900元! 今天发的工资还剩:100元!
输出2:
今天发工资了 请输入小明发的工资: 8000 今天发的工资还剩:8000元!
#include "iostream" using namespace std; int main() { cout << "欢迎来到黑马儿童游乐场,儿童免费,成人收费!" << endl; cout << "请输入你的年龄:" << endl; int age; cin >> age; if(age < 18){ cout << "您未成年,免费游玩,欢迎你小朋友!" << endl; } cout << "祝您游玩愉快!!!" << endl; return 0; }
输出1:
欢迎来到黑马儿童游乐场,儿童免费,成人收费! 请输入你的年龄: 15 您未成年,免费游玩,欢迎你小朋友! 祝您游玩愉快!!!
输出2:
欢迎来到黑马儿童游乐场,儿童免费,成人收费! 请输入你的年龄: 20 祝您游玩愉快!!!
输出3:
欢迎来到黑马儿童游乐场,儿童免费,成人收费! 请输入你的年龄: 18 祝您游玩愉快!!!
三十六、AI大模型辅助编程
三十七、if_else语句
#include "iostream" using namespace std; int main() { int love; cout << "小美你喜欢我吗?喜欢扣1,不喜欢扣0" << endl; cin >> love; if(love){ cout << "小美我也喜欢你!!!" << endl; } else{ cout << "伤心,我去追求小新去了!" << endl; } return 0; }
输出1:
小美你喜欢我吗?喜欢扣1,不喜欢扣0 1 小美我也喜欢你!!!
输出2:
小美你喜欢我吗?喜欢扣1,不喜欢扣0 0 伤心,我去追求小新去了!
#include "iostream" using namespace std; int main() { int height; cout << "欢迎来到黑马动物园。 " << endl; cout << "请输入你的身高(cm): "; cin >> height; if(height > 120){ cout << "您的身高超出120cm,游玩需要购票10元。" << endl; }else{ cout << "您的身高未超出120cm,可以免费游玩。" << endl; } cout << "祝您游玩愉快。" << endl; return 0; }
输出1:
欢迎来到黑马动物园。 请输入你的身高(cm): 130 您的身高超出120cm,游玩需要购票10元。 祝您游玩愉快。
输出2:
欢迎来到黑马动物园。 请输入你的身高(cm): 111 您的身高未超出120cm,可以免费游玩。 祝您游玩愉快。
三十八、else if语句
#include "iostream" using namespace std; int main() { bool xiaomei = true; bool xiaotian = false; if(xiaomei){ cout << "小美我也喜欢你!" << endl; } else if(xiaotian){ cout << "小甜我也喜欢你!" << endl; } else{ cout << "小新我喜欢你!!!" << endl; } return 0; }
输出:
小美我也喜欢你!
#include "iostream" using namespace std; int main() { int guess; int num = 5; cout << "请输入一个猜想的数字(1~10): " << endl; cin >> guess; if(guess >= 1 && guess <= 10){ if(guess == num){ cout << "你猜对了,真棒!" << endl; }else if(guess < num){ cout << "你猜小了!!!" << endl; }else{ cout << "你猜大了!!!" << endl; } } return 0; }
输出1:
请输入一个猜想的数字(1~10): 5 你猜对了,真棒!
输出2:
请输入一个猜想的数字(1~10): 1 你猜小了!!!
输出3:
请输入一个猜想的数字(1~10): 10 你猜大了!!!
输出4:
请输入一个猜想的数字(1~10): 20
三十九、逻辑判断语句的嵌套
#include "iostream" using namespace std; int main() { int love;//1表示喜欢,0表示不喜欢 int weather;//1表示好天气,0表示坏天气 cout << "小美对我的态度是怎么样的?1是喜欢,0是不喜欢" << endl; cin >> love; if(love){ cout << "很高兴,小美喜欢我,我也喜欢小美!" << endl; cout << "今天天气怎么样?1是好天气,0是坏天气" << endl; cin >> weather; if(weather){ cout << "今天是个好天气,带小美一起去踏青!" << endl; }else{ cout << "今天天气不好,去看电影吧!" << endl; } } else{ cout << "很伤心,我去追求小新了!" << endl; } return 0; }
输出1:
小美对我的态度是怎么样的?1是喜欢,0是不喜欢 1 很高兴,小美喜欢我,我也喜欢小美! 今天天气怎么样?1是好天气,0是坏天气 1 今天是个好天气,带小美一起去踏青!
输出2:
小美对我的态度是怎么样的?1是喜欢,0是不喜欢 1 很高兴,小美喜欢我,我也喜欢小美! 今天天气怎么样?1是好天气,0是坏天气 0 今天天气不好,去看电影吧!
输出3:
小美对我的态度是怎么样的?1是喜欢,0是不喜欢 0 很伤心,我去追求小新了!
#include "iostream" using namespace std; int main() { int guess; int num = 5; cout << "请输入第一次猜想的数字: "; cin >> guess; if(guess == num){ cout << "第一次就猜对了,你真棒!" << endl; }else{ cout << "不对,请再猜一次:" << endl; cin >> guess; if(guess == num){ cout << "第二次猜对了,你真棒!" << endl; }else{ cout << "不对,再猜最后一次:" << endl; cin >> guess; if(guess == num){ cout << "第三次猜对了,你真棒!" << endl; }else{ cout << "Sorry,全部猜错啦,我想的是:" << num << endl; } } } return 0; }
输出1:
请输入第一次猜想的数字: 5 第一次就猜对了,你真棒!
输出2:
请输入第一次猜想的数字: 1 不对,请再猜一次: 5 第二次猜对了,你真棒!
输出3:
请输入第一次猜想的数字: 1 不对,请再猜一次: 2 不对,再猜最后一次: 5 第三次猜对了,你真棒!
输出4:
请输入第一次猜想的数字: 1 不对,请再猜一次: 2 不对,再猜最后一次: 3 Sorry,全部猜错啦,我想的是:5
四十、逻辑判断的综合案例
#include "iostream" #include "random" using namespace std; //生产一个1到10的随机数 int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main() { //int num = get_random_num(1, 10); //cout << num << endl; //第一份信息:1~10的数字,代表扑克牌1~10 int num = get_random_num(1, 10); //第二份信息:字符串,红色或黑色,代表扑克牌的花色 string color = get_random_num(0, 1)? "红色" : "黑色"; //第三份信息:字符串,如果是红色产出红桃或方块,如果是黑色产出黑桃或梅花 string suit; if(color == "红色"){ suit = get_random_num(0,1)? "红桃" : "方块"; }else{ suit = get_random_num(0,1)? "黑桃" : "梅花"; } cout << num << ":" << color << ":" << suit << endl; //先猜数字,成功后猜颜色,再成功猜测具体花型 int guess_num; cout << "请输入猜测的扑克牌数字:" << endl; cin >> guess_num; if(guess_num == num){ //数字猜对了就要猜颜色 cout << "请猜测颜色,红色输入1,黑色输入0:" << endl; int color_num; cin >> color_num; if((color_num? "红色" : "黑色") == color){ //颜色猜对了 int suit_num; if(color == "红色"){ //要猜测是否红桃或方块 cout << "请猜测是否红桃或方块,红桃输入1,方块输入0:" << endl; cin >> suit_num; if((suit_num? "红桃" : "方块") == suit){ //花型正确 cout << "恭喜你游戏成功,花型猜测正确,游戏的花型是:" << suit << endl; }else{ cout << "游戏失败,花型猜测错误,游戏的正确花型是:" << suit << endl; } }else{ //要猜测是否黑桃或梅花 cout << "请猜测是否黑桃或梅花,黑桃输入1,梅花输入0:" << endl; cin >> suit_num; if((suit_num? "黑桃" : "梅花") == suit){ //花型正确 cout << "恭喜你游戏成功,花型猜测正确,游戏的花型是:" << suit << endl; }else{ cout << "游戏失败,花型猜测错误,游戏的正确花型是:" << suit << endl; } } }else{ //颜色猜错了 cout << "颜色猜错了,游戏结束" << endl; } }else{ cout << "数字猜错了,游戏结束" << endl; } return 0; }
输出1:
3:黑色:梅花 请输入猜测的扑克牌数字: 1 数字猜错了,游戏结束
输出2:
10:红色:方块 请输入猜测的扑克牌数字: 10 请猜测颜色,红色输入1,黑色输入0: 0 颜色猜错了,游戏结束
输出3:
10:红色:红桃 请输入猜测的扑克牌数字: 10 请猜测颜色,红色输入1,黑色输入0: 1 请猜测是否红桃或方块,红桃输入1,方块输入0: 0 游戏失败,花型猜测错误,游戏的正确花型是:红桃
输出4:
8:红色:红桃 请输入猜测的扑克牌数字: 8 请猜测颜色,红色输入1,黑色输入0: 1 请猜测是否红桃或方块,红桃输入1,方块输入0: 1 恭喜你游戏成功,花型猜测正确,游戏的花型是:红桃
四十一、基于逻辑运算符完成复杂判断
#include "iostream" using namespace std; int main() { int age,height; cout << "请输入你的年龄: "; cin >> age; cout << "请输入你的身高: "; cin >> height; //必须同时满足年龄小于18且身高小于120才可以免费 if(age < 18 && height < 120) cout<<"免费游玩!!" << endl; else cout<<"不能免费游玩!" << endl; //||满足年龄小于18或身高小于120才可以免费 if(age < 18 || height < 120) cout<<"免费游玩!!" << endl; else cout<<"不能免费游玩!" << endl; return 0; }
输出1:
请输入你的年龄: 10 请输入你的身高: 110 免费游玩!! 免费游玩!!
输出2:
请输入你的年龄: 12 请输入你的身高: 130 不能免费游玩! 免费游玩!!
输出3:
请输入你的年龄: 19 请输入你的身高: 110 不能免费游玩! 免费游玩!!
输出4:
请输入你的年龄: 19 请输入你的身高: 130 不能免费游玩! 不能免费游玩!
四十二、switch控制语句
#include "iostream" using namespace std; int main() { //输入数字1-7输出星期几 int num; cout << "请输入数字1-7:"; cin >> num; switch (num) { case 1: cout << "今天是星期一" << endl; break; case 2: cout << "今天是星期二" << endl; break; case 3: cout << "今天是星期三" << endl; break; case 4: cout << "今天是星期四" << endl; break; case 5: cout << "今天是星期五" << endl; break; case 6: cout <<"今天是星期六" << endl; break; case 7: cout << "今天是星期日" << endl; break; default: cout << "输入错误" << endl; } return 0; }
输出1:
请输入数字1-7:5 今天是星期五
输出2:
请输入数字1-7:0 输入错误
输出3:
请输入数字1-7:8 输入错误
#include "iostream" using namespace std; int main() { int num; cout << "请给电影打分,10和9是优秀、8和7是一般、6和5是普通、低于5是垃圾:" << endl; cin >> num; switch (num) { case 10: case 9:{ cout << "优秀" << endl; break; } case 8: case 7:{ cout << "一般" << endl; break; } case 6: case 5:{ cout << "普通" << endl; break; } default: cout << "垃圾" << endl; } return 0; }
#include "iostream" using namespace std; int main() { int num; cout << "请选择直播的场景,输入对应的场景代码数字。" << endl; cout << "1仅输出屏幕 ,2输出屏幕+摄像头画面, 3仅输出摄像头:"; cin >> num; switch (num) { case 1: cout << "已经切换为场景1,用户只能看到屏幕画面。" << endl; break; case 2: cout << "已经切换为场景2,用户可以看到屏幕和摄像头画面。" << endl; break; case 3: cout << "已经切换为场景3,用户仅可看到摄像头画面。" << endl; break; default: cout << "您输入的代码有误,无法识别具体场景。" << endl; } return 0; }
输出1:
请选择直播的场景,输入对应的场景代码数字。 1仅输出屏幕 ,2输出屏幕+摄像头画面, 3仅输出摄像头:1 已经切换为场景1,用户只能看到屏幕画面。
输出2:
请选择直播的场景,输入对应的场景代码数字。 1仅输出屏幕 ,2输出屏幕+摄像头画面, 3仅输出摄像头:2 已经切换为场景2,用户可以看到屏幕和摄像头画面。
输出3:
请选择直播的场景,输入对应的场景代码数字。 1仅输出屏幕 ,2输出屏幕+摄像头画面, 3仅输出摄像头:3 已经切换为场景3,用户仅可看到摄像头画面。
输出4:
请选择直播的场景,输入对应的场景代码数字。 1仅输出屏幕 ,2输出屏幕+摄像头画面, 3仅输出摄像头:6 您输入的代码有误,无法识别具体场景。
四十三、枚举类型
#include "iostream" using namespace std; int main() { /* * enum 枚举类型名称{ * 枚举元素, * 枚举元素, * 。。。 * 。。。 * } * */ // 询问小朋友喜欢的颜色,红黄蓝三种选1个 enum Color{ RED, //默认是0 YELLOW,//默认是1 BLUE //默认是2 }; int num; cout << "小朋友们,你们喜欢什么颜色?0红色 1黄色 2蓝色" << endl; cin >> num; switch (num) { case RED: cout << "小朋友喜欢红色!!" << endl; break; case YELLOW: cout << "小朋友喜欢黄色!!" << endl; break; case BLUE: cout << "小朋友喜欢蓝色!!" << endl; break; default: cout << "输入有误,请重新输入" << endl; } return 0; }
输出:
小朋友们,你们喜欢什么颜色?0红色 1黄色 2蓝色 1 小朋友喜欢黄色!!
其他输出省略。
四十四、while循环语句
#include "iostream" using namespace std; int main() { bool is_run = true; //循环控制因子 int num = 0; //控制变量 while (is_run){ //false就结束while循环了,true就继续执行循环体 cout << "hello" << endl; num++; if (num == 5){ is_run = false; //控制因子的更新 } } return 0; }
输出:
hello hello hello hello hello
小美表白10次:
#include "iostream" using namespace std; int main() { //我要向小美表白,每一天都表白,连续表白十天 int day = 1; while (day <= 10){ cout << "今天是第" << day << "天向小美表白,小美我喜欢你!!!" << endl; day++; } return 0; }
输出:
今天是第1天向小美表白,小美我喜欢你!!! 今天是第2天向小美表白,小美我喜欢你!!! 今天是第3天向小美表白,小美我喜欢你!!! 今天是第4天向小美表白,小美我喜欢你!!! 今天是第5天向小美表白,小美我喜欢你!!! 今天是第6天向小美表白,小美我喜欢你!!! 今天是第7天向小美表白,小美我喜欢你!!! 今天是第8天向小美表白,小美我喜欢你!!! 今天是第9天向小美表白,小美我喜欢你!!! 今天是第10天向小美表白,小美我喜欢你!!!
#include "iostream" using namespace std; int main() { int n = 0 , sum = 0; while(n < 100) { n++; sum = sum + n; if(n == 100) cout << "从1累加到100的和 = " << sum << endl; } return 0; }
输出:
从1累加到100的和 = 5050
扩展:从n1累加到n2的值,n1>n2。
#include "iostream" using namespace std; int main() { int n1,n2,sum = 1; cout << "请输入开始累加的整数:"; cin >> n1; cout << "请输入结束累加的整数:"; cin >> n2; int n3 = n1; if(n1 < n2){ while(n1 <= n2) { n1++; sum = sum + n1; if(n1 == n2) cout << "从" << n3 << "累加到" << n2 << "的和 = " << sum << endl; } } else cout << "输入的数字有误!" << endl; return 0; }
输出1:
请输入开始累加的整数:1 请输入结束累加的整数:10 从1累加到10的和 = 55
输出2:
请输入开始累加的整数:100 请输入结束累加的整数:1 输入的数字有误!
老师讲解的1到100累加:
#include "iostream" using namespace std; int main() { int n = 1 , sum = 0; while(n < 101) { sum += n; n++; } cout << "从1累加到100的和 = " << sum << endl; return 0; }
四十五、while循环猜数字案例
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main() { int num = get_random_num(1, 100); int n = 0; cout << num << endl; while(1) { int guess; cout << "请输入一个数字(1-100):"; cin >> guess; n++; if(guess > num) { cout << "太大了" << endl; } else if(guess < num) { cout << "太小了" << endl; } else { cout << "猜对了" << endl; break; } } cout << "你总共猜了" << n << "次" << endl; return 0; }
输出1:
77 请输入一个数字(1-100):80 太大了 请输入一个数字(1-100):60 太小了 请输入一个数字(1-100):70 太小了 请输入一个数字(1-100):75 太小了 请输入一个数字(1-100):77 猜对了 你猜了5次
输出2:
53 请输入一个数字(1-100):53 猜对了 你总共猜了1次
四十六、do while循环
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main() { int num = get_random_num(1, 100); int n = 0; int count = 0; cout << num << endl; do { cout << "请输入一个数字:"; cin >> n; count++; if (n > num) { cout << "太大了" << endl; } else if (n < num) { cout << "太小了" << endl; } else { cout << "猜对了" << endl; } } while (n != num); cout << "你总共猜了" << count << "次" << endl; return 0; }
输出1:
9 请输入一个数字:8 太小了 请输入一个数字:10 太大了 请输入一个数字:9 猜对了 你总共猜了3次
输出2:
73 请输入一个数字:73 猜对了 你总共猜了1次
四十七、while循环嵌套
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main() { bool is_continue = true; while (is_continue){ cout << "今天又是新的一天,开始向小美表白" << endl; //每一天表白的流程 每一次都送三朵玫瑰花 int i = 0; while (i < 3){ //内层循环控制因子 cout << "送给小美一朵玫瑰花!!!" << endl; i++; //内层循环控制因子的更新 } cout << "小美,我喜欢你!" << endl; int num = get_random_num(1, 20); cout << "num = " << num << endl; if (num == 1){ //模拟5%的几率 //成功 is_continue = false; } cout << endl; } return 0; }
#include "iostream" using namespace std; int main() { cout << "有点胖需要减肥10斤体重,计划5天,每天目标2斤体重。加油!" << endl; int day = 1; int fuwocheng = 1,chongcipao = 1,weightdown = 0; while (day <= 5){ cout << "今天是减肥的第" << day << "天" << endl; while (fuwocheng <= 3){ cout << "开始做减肥第" << day << "天的第" << fuwocheng << "个俯卧撑!" << "\t"; fuwocheng++; } cout << endl; weightdown += 1; cout << "减肥第" << day << "天的3个俯卧撑做完,体重减少1斤,目前累计减少体重:" << weightdown << "斤!!" << endl; while (chongcipao <= 3){ cout << "开始减肥第" << day << "天的第" << chongcipao << "批次400米冲刺跑!" << "\t"; chongcipao++; } cout << endl; weightdown += 1; cout << "减肥第" << day << "天的3批次400米冲刺跑完成,体重减少1斤,目前累计减少体重:" << weightdown << "斤!!" << endl; cout << endl; day++; fuwocheng = 1; chongcipao = 1; } cout << "5天减肥完成,体重累计减少:" << weightdown << "斤体重!" << endl; return 0; }
输出:
有点胖需要减肥10斤体重,计划5天,每天目标2斤体重。加油! 今天是减肥的第1天 开始做减肥第1天的第1个俯卧撑! 开始做减肥第1天的第2个俯卧撑! 开始做减肥第1天的第3个俯卧撑! 减肥第1天的3个俯卧撑做完,体重减少1斤,目前累计减少体重:1斤!! 开始减肥第1天的第1批次400米冲刺跑! 开始减肥第1天的第2批次400米冲刺跑! 开始减肥第1天的第3批次400米冲刺跑! 减肥第1天的3批次400米冲刺跑完成,体重减少1斤,目前累计减少体重:2斤!! 今天是减肥的第2天 开始做减肥第2天的第1个俯卧撑! 开始做减肥第2天的第2个俯卧撑! 开始做减肥第2天的第3个俯卧撑! 减肥第2天的3个俯卧撑做完,体重减少1斤,目前累计减少体重:3斤!! 开始减肥第2天的第1批次400米冲刺跑! 开始减肥第2天的第2批次400米冲刺跑! 开始减肥第2天的第3批次400米冲刺跑! 减肥第2天的3批次400米冲刺跑完成,体重减少1斤,目前累计减少体重:4斤!! 今天是减肥的第3天 开始做减肥第3天的第1个俯卧撑! 开始做减肥第3天的第2个俯卧撑! 开始做减肥第3天的第3个俯卧撑! 减肥第3天的3个俯卧撑做完,体重减少1斤,目前累计减少体重:5斤!! 开始减肥第3天的第1批次400米冲刺跑! 开始减肥第3天的第2批次400米冲刺跑! 开始减肥第3天的第3批次400米冲刺跑! 减肥第3天的3批次400米冲刺跑完成,体重减少1斤,目前累计减少体重:6斤!! 今天是减肥的第4天 开始做减肥第4天的第1个俯卧撑! 开始做减肥第4天的第2个俯卧撑! 开始做减肥第4天的第3个俯卧撑! 减肥第4天的3个俯卧撑做完,体重减少1斤,目前累计减少体重:7斤!! 开始减肥第4天的第1批次400米冲刺跑! 开始减肥第4天的第2批次400米冲刺跑! 开始减肥第4天的第3批次400米冲刺跑! 减肥第4天的3批次400米冲刺跑完成,体重减少1斤,目前累计减少体重:8斤!! 今天是减肥的第5天 开始做减肥第5天的第1个俯卧撑! 开始做减肥第5天的第2个俯卧撑! 开始做减肥第5天的第3个俯卧撑! 减肥第5天的3个俯卧撑做完,体重减少1斤,目前累计减少体重:9斤!! 开始减肥第5天的第1批次400米冲刺跑! 开始减肥第5天的第2批次400米冲刺跑! 开始减肥第5天的第3批次400米冲刺跑! 减肥第5天的3批次400米冲刺跑完成,体重减少1斤,目前累计减少体重:10斤!! 5天减肥完成,体重累计减少:10斤!
四十七、while循环嵌套案例-九九乘法表
下面for循环由AI生成
#include "iostream" using namespace std; //主函数 int main() { //输出九九乘法表 for(int i=1; i<=9; i++) { for(int j=1; j<=i; j++) { //输出乘法表达式及其结果 cout<<j<<"*"<<i<<"="<<i*j<<"\t"; } //换行,开始新的乘法表达式行 cout<<endl; } //程序执行结束,返回0表示正常结束 return 0; }
输出:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
简直不要太强大!!!
while:
#include "iostream" using namespace std; int main() { //输出九九乘法表 //1、通过外层循环输出9行 int line = 1; while(line <= 9) { //内层循环 int num = 1; while(num <= line) { cout << num << "×" << line << "=" << num * line << "\t"; num++; } cout << endl; line++; } return 0; }
输出:
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 1×4=4 2×4=8 3×4=12 4×4=16 1×5=5 2×5=10 3×5=15 4×5=20 5×5=25 1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36 1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
四十八、for循环语句
基础for循环 打印1-10的数字
#include "iostream" using namespace std; int main() { //基础for循环 打印1-10的数字 for(int i = 1;i <= 10;i++) { cout << i << endl; } return 0; }
输出:
1 2 3 4 5 6 7 8 9 10
打印1-20的奇数:
#include "iostream" using namespace std; int main() { //基础for循环 打印1-20的奇数 for(int i = 1;i <= 20;i += 2) { cout << i << endl; } return 0; }
输出:
1 3 5 7 9 11 13 15 17 19
条件判断可以省略 不建议
#include "iostream" using namespace std; int main() { //条件判断可以省略 不建议 for (int i = 0;; i++) { cout << i << endl; } return 0; }
循环控制因子可以省略
#include "iostream" using namespace std; int main() { //循环控制因子可以省略 int i = 0; for ( ; i < 100; ++i) { cout << i << endl; } return 0; }
循环控制因子的更新 可以省略
#include "iostream" using namespace std; int main() { //循环控制因子的更新 可以省略 for (int i = 0; i < 100; ) { cout << i << endl; } return 0; }
#include "iostream" using namespace std; int main() { int sum = 0; for (int i = 0; i <= 100; i += 2) { //cout << i << endl; sum += i; } cout << "1到100的偶数和:" << sum << endl; return 0; }
输出:
1到100的偶数和:2550
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main() { int num = get_random_num(1, 10); int guess; cout << num << endl; for(int i = 0; i < 1 ; ){ cout << "请输入你猜想的数字(1-10):"; cin >> guess; if(guess < 1 || guess > 10){ cout << "输入有误,请重新输入" << endl; continue; } if(guess > num){ cout << "猜大了" << endl; }else if(guess < num){ cout << "猜小了" << endl; }else{ cout << "猜对了" << endl; break; } } return 0; }
输出:
1
请输入你猜想的数字(1-10):0 输入有误,请重新输入 请输入你猜想的数字(1-10):99 输入有误,请重新输入 请输入你猜想的数字(1-10):5 猜大了 请输入你猜想的数字(1-10):2 猜大了 请输入你猜想的数字(1-10):1 猜对了
四十九、for循环的嵌套
#include "iostream" using namespace std; // 主函数 int main() { // 外层循环:遍历1到9的乘法行 for(int lin = 1; lin <= 9; lin++){ // 内层循环:遍历当前行的所有乘法项 for(int col = 1; col <= lin; col++){ // 输出乘法表的具体项,包括两个乘数和结果 cout << col << "×" << lin << "=" << col*lin << "\t"; } // 每完成一行的输出后换行 cout << endl; } // 程序正常结束,返回0 return 0; }
输出:
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 1×4=4 2×4=8 3×4=12 4×4=16 1×5=5 2×5=10 3×5=15 4×5=20 5×5=25 1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36 1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
#include "iostream" using namespace std; /c++ // 主函数 int main() { // 外层循环:遍历乘法表的每一行 for (int lin = 1; lin <= 9; lin++) { // 初始化列变量col,从1开始,最大到当前行号lin int col = 1; // 内层循环:遍历当前行的每一个元素 while (col <= lin) { // 输出乘法表的一个元素,包括两个操作数和结果 cout << col << "×" << lin << "=" << col*lin << "\t"; // 增加列变量col,准备输出下一个元素 col++; } // 输出换行符,准备输出下一行的乘法表 cout << endl; } // 主函数执行结束,返回0表示正常结束 return 0; }
输出:
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 1×4=4 2×4=8 3×4=12 4×4=16 1×5=5 2×5=10 3×5=15 4×5=20 5×5=25 1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36 1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
五十、for循环的嵌套例题讲解
自己写的:
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main(){ int num = get_random_num(1, 10); int guess; cout << num << endl; cout << "请输入一个1-10的整数:"; cin >> guess; for (int i = 0; i < 1; ) { if(guess > num){ cout << "猜大了" << endl; cout << "请输入一个1-10的整数:"; cin >> guess; }else if(guess < num){ cout << "猜小了" << endl; cout << "请输入一个1-10的整数:"; cin >> guess; }else{ cout << "猜对了" << endl; break; } } return 0; }
输出:
5 请输入一个1-10的整数:1 猜小了 请输入一个1-10的整数:6 猜大了 请输入一个1-10的整数:5 猜对了
视频中的:
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main(){ int num = get_random_num(1, 10); int guess; cout << num << endl; cout << "请输入一个1-10的整数:"; cin >> guess; for (bool is_continue = true; is_continue;) { if(guess == num){ cout << "恭喜你猜对了!" << endl; is_continue = false; }else if(guess > num){ cout << "猜大了,请重新输入:"; cin >> guess; }else{ cout << "猜小了,请重新输入:"; cin >> guess; } } return 0; }
输出:
5
请输入一个1-10的整数:1 猜小了,请重新输入:9 猜大了,请重新输入:5 恭喜你猜对了!
五十一、变量的作用域
五十二、循环中断语句continue和break
#include "iostream" using namespace std; int main(){ //continue 跳过本次循环,进入下一次的流程 //break 直接停止所在循环的执行 //通过for循环输出1-20之间的奇数 for(int i = 1;i <= 20;i++){ if(i % 2 == 0){ continue; //跳过偶数 } cout << i << "\t"; } cout << endl; cout << "----------------" << endl; //通过for循环输出1-20之间的数字 for(int i = 1; true; i++){ cout << i << "\t"; if(i == 20){ break; //跳出循环 } } cout << endl; cout << "----------------" << endl; //通过while循环输出1-20之间的偶数 int j = 1; while(j <= 20){ if(j % 2 == 0){ j++; continue; } cout << j << "\t"; j++; } cout << endl; cout << "----------------" << endl; for (int num = 1; num <=5 ; num++) { int j = 1; while(j <= 20){ if(j % 2 == 0){ j++; break; } cout << j << "\t"; j++; } } return 0; }
输出:
1 3 5 7 9 11 13 15 17 19 ---------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ---------------- 1 3 5 7 9 11 13 15 17 19 ---------------- 1 1 1 1 1
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main(){ //小明喜欢小美,计划每天都去表白,共表白30天 int num1 = get_random_num(1, 10); int num2 = get_random_num(1, 10); cout << num1 << endl; //愤怒值 cout << num2 << endl; // 不高兴值 for (int i = 0; i < 30; i++) { if (num1 > 1){ //小美10%愤怒了 cout << "第" << i + 1 << "天,小明去表白了" << endl; cout << "送花、说喜欢、邀请一起看电影" << endl; }else{ cout << "第" << i + 1 << "天,小明表白失败了" << endl; break; } if(num2 <= 5 ){ cout << "今天表白结束,第二天继续吧!" << endl; continue; } } return 0; }
五十三、循环综合案例——发工资
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main(){ int money = 10000; //定义一个变量,记录金额 for(int id = 1; id <= 20; id++){ //for循环进入发工资流程 //如果工资发完了,结束发工资 if(money <= 0){ cout << "发工资结束" << endl; break; } //随机得到绩效分 int score = get_random_num(1, 10); if(score < 5){ cout << "员工" << id << "绩效分:" << score << ",小于5分,未发工资" << endl; continue; }else{ //发工资 cout << "员工" << id << "绩效分" << score << ",发工资1000,当前余额:" << money-1000 << "元。" <<endl; money -= 1000; } } return 0; }
输出:
员工1绩效分:3,小于5分,未发工资 员工2绩效分6,发工资1000,当前余额:9000元。 员工3绩效分10,发工资1000,当前余额:8000元。 员工4绩效分5,发工资1000,当前余额:7000元。 员工5绩效分5,发工资1000,当前余额:6000元。 员工6绩效分6,发工资1000,当前余额:5000元。 员工7绩效分10,发工资1000,当前余额:4000元。 员工8绩效分5,发工资1000,当前余额:3000元。 员工9绩效分9,发工资1000,当前余额:2000元。 员工10绩效分6,发工资1000,当前余额:1000元。 员工11绩效分9,发工资1000,当前余额:0元。 发工资结束
五十四、_goto语句
#include "iostream" using namespace std; int main(){ a: cout << "a" << endl; b: cout << "b" << endl; goto d; c: cout << "c" << endl; d: cout << "d" << endl; int i = 1; loop: cout << i << endl; i++; if(i <= 10) goto loop; return 0; }
输出:
a b d 1 2 3 4 5 6 7 8 9 10
五十五、数组的定义
#include "iostream" using namespace std; int main(){ //11,22,33,44,55放入数组中 int v[5]; //得到一个可以存放5个元素的整形数组 //可以用下标索引访问每日一歌元素(格格),下标索引从0开始 v[0] = 11; v[1] = 22; v[2] = 33; v[3] = 44; v[4] = 55; cout << "数组的第一个元素是:" << v[0] << endl; cout << "数组的第二个元素是:" << v[1] << endl; cout << "数组的第三个元素是:" << v[2] << endl; cout << "数组的第四个元素是:" << v[3] << endl; cout << "数组的第五个元素是:" << v[4] << endl; //数组声明和赋值的快速写法 // 数组类型 数组名[] = {元素,...,...,...} int v2[] = {11,22,33,44,55}; cout << "v2数组的第一个元素是:" << v2[0] << endl; cout << "v2数组的第二个元素是:" << v2[1] << endl; cout << "v2数组的第三个元素是:" << v2[2] << endl; cout << "v2数组的第四个元素是:" << v2[3] << endl; cout << "v2数组的第五个元素是:" << v2[4] << endl; return 0; }
输出:
数组的第一个元素是:11 数组的第二个元素是:22 数组的第三个元素是:33 数组的第四个元素是:44 数组的第五个元素是:55 v2数组的第一个元素是:11 v2数组的第二个元素是:22 v2数组的第三个元素是:33 v2数组的第四个元素是:44 v2数组的第五个元素是:55
简单一点:
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main(){ int random = get_random_num(1, 10); cout << "随机数是:" << random << endl; int guess[10]; int count = 0; for(int i = 0; i < 10; i++){ cout << "请输入你猜的10个数字:"; cin >> guess[i]; if(guess[i] == random){ count++; } } cout << "猜对了" << count << "次!" << endl; return 0; }
输出1:
随机数是:8 请输入你猜的10个数字:1 请输入你猜的10个数字:2 请输入你猜的10个数字:3 请输入你猜的10个数字:4 请输入你猜的10个数字:5 请输入你猜的10个数字:6 请输入你猜的10个数字:7 请输入你猜的10个数字:8 请输入你猜的10个数字:9 请输入你猜的10个数字:10 猜对了1次!
输出2:
随机数是:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 请输入你猜的10个数字:2 猜对了10次!
五十六、数组定义例题讲解
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main(){ int random = get_random_num(1, 10); //获得随机数 cout << "随机数是:" << random << endl; int guess[10]; //10个元素的int数组 int count = 0; for(int i = 0; i < 10; i++){ cout << "请输入你猜的10个数字(第" << i+1 << "个):"; cin >> guess[i]; if(guess[i] == random){ count++; } } cout << "猜对了" << count << "次!" << endl; return 0; }
输出1:
随机数是:6 请输入你猜的10个数字(第1个):1 请输入你猜的10个数字(第2个):2 请输入你猜的10个数字(第3个):3 请输入你猜的10个数字(第4个):4 请输入你猜的10个数字(第5个):5 请输入你猜的10个数字(第6个):6 请输入你猜的10个数字(第7个):7 请输入你猜的10个数字(第8个):8 请输入你猜的10个数字(第9个):9 请输入你猜的10个数字(第10个):10 猜对了1次!
输出2:
随机数是:1 请输入你猜的10个数字(第1个):1 请输入你猜的10个数字(第2个):1 请输入你猜的10个数字(第3个):1 请输入你猜的10个数字(第4个):1 请输入你猜的10个数字(第5个):1 请输入你猜的10个数字(第6个):1 请输入你猜的10个数字(第7个):1 请输入你猜的10个数字(第8个):1 请输入你猜的10个数字(第9个):1 请输入你猜的10个数字(第10个):1 猜对了10次!
五十七、数组的特点
五十八、数组遍历(高级for循环语法)
#include "iostream" using namespace std; int main(){ int arr[] = {1,2,3,4,5}; //while int i = 0; // 循环控制因子,从0开始 while(i < sizeof(arr) / sizeof(arr[0])){ cout << "while循环取出的内容:" << arr[i] << endl; i++; } //for for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){ cout << "for循环取出的内容:" << arr[i] << endl; } //高级for循环 for(int element : arr){ cout << "高级for循环取出的内容:" << element << endl; } return 0; }
输出:
while循环取出的内容:1 while循环取出的内容:2 while循环取出的内容:3 while循环取出的内容:4 while循环取出的内容:5 for循环取出的内容:1 for循环取出的内容:2 for循环取出的内容:3 for循环取出的内容:4 for循环取出的内容:5 高级for循环取出的内容:1 高级for循环取出的内容:2 高级for循环取出的内容:3 高级for循环取出的内容:4 高级for循环取出的内容:5
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main(){ int random_arr[10], random_num; for (int i = 0; i < 10; i++) { random_num = get_random_num(1, 100); random_arr[i] = random_num; //cout << random_num << endl; } cout << "随机数组为:" ; for(int i = 0; i < 10; i++){ cout << random_arr[i] << ","; } for(int i = 0; i < 10; i++){ for(int j = i + 1; j < 10; j++){ if(random_arr[i] > random_arr[j]){ int temp = random_arr[i]; random_arr[i] = random_arr[j]; random_arr[j] = temp; } } } cout << endl; cout << "排序后数组为:"; for(int i = 0; i < 10; i++){ cout << random_arr[i] << ","; } cout << endl; cout << "此随机数组中最小的元素为:" << random_arr[0] << endl; cout << "此随机数组中最大的元素为:" << random_arr[9] << endl; return 0; }
输出1:
随机数组为:13,49,77,14,94,45,53,29,53,79, 排序后数组为:13,14,29,45,49,53,53,77,79,94, 此随机数组中最小的元素为:13 此随机数组中最大的元素为:94
输出2:
随机数组为:61,33,72,14,46,19,70,99,18,91, 排序后数组为:14,18,19,33,46,61,70,72,91,99, 此随机数组中最小的元素为:14 此随机数组中最大的元素为:99
每次输出都不一样。
五十九、字符数组
#include "iostream" using namespace std; int main(){ "hello"; //底层就是字符数组,会额外添加一个\0作为最后一个元素,当作结束标记 char s[] = "hello"; cout << s[0] << endl; cout << s[1] << endl; cout << s[2] << endl; cout << s[3] << endl; cout << s[4] << endl; cout << s[5] << endl; cout << sizeof(s) << endl; for(char i: s){ cout << i; } return 0; }
输出:
h e l l o 6 hello
六十、多维数组
#include "iostream" using namespace std; int main(){ int v1[2][2]; //多维数组的长度不可省略 v1[0][0] = 11; v1[0][1] = 22; v1[1][0] = 33; v1[1][1] = 44; cout << "v1数组的第二个元素内的第一个元素是:" << v1[1][0] << endl; int v2[2][2] = {{11,22},{33,44}}; cout << "v2数组的第一个元素内的第二个元素是:" << v2[0][1] << endl; int v3[2][2][2]; v3[0][0][0] = 111; v3[0][0][1] = 222; v3[0][1][0] = 333; v3[0][1][1] = 444; v3[1][0][0] = 555; v3[1][0][1] = 666; v3[1][1][0] = 777; v3[1][1][1] = 888; cout << "v3数组的第二个元素内的第二个元素内的第一个元素是:" << v3[1][1][0] << endl; int v4[2][2][2] = { {{111,222},{333,444}}, {{555,666},{777,888}} }; cout << "v4数组的第一个元素内的第二个元素内的第一个元素是:" << v4[0][1][0] << endl; return 0; }
输出:
v1数组的第二个元素内的第一个元素是:33 v2数组的第一个元素内的第二个元素是:22 v3数组的第二个元素内的第二个元素内的第一个元素是:777 v4数组的第一个元素内的第二个元素内的第一个元素是:333
六十一、多维数组的遍历
#include "iostream" using namespace std; int main(){ int v1[2][3] = { {1,2,3}, {4,5,6} }; for(int i = 0; i <sizeof(v1) / sizeof(v1[0]); i++){ for(int j = 0; j < sizeof(v1[0]) / sizeof(v1[0][0]); j++){ cout << v1[i][j] << " "; } cout << endl; } int v2[2][2][3] = { {{1,2,3},{4,5,6}}, {{7,8,9},{10,11,12}} }; for(int i = 0; i < sizeof(v2) / sizeof(v2[0]); i++){ for(int j = 0; j < sizeof(v2[0]) / sizeof(v2[0][0]); j++){ for(int k = 0; k < sizeof(v2[0][0]) / sizeof(v2[0][0][0]); k++){ cout << v2[i][j][k] << " "; } cout << endl; } } return 0; }
输出:
1 2 3 4 5 6 1 2 3 4 5 6 7 8 9 10 11 12
string names[] = {"Landon" , "Avery" , "Kamden" , "Bentley" , "Finnegan" , "Nash" , "Emmett" , "Greyson" , "Noah" , "Jace" , "Jaxton" , "Sawyer" , "Zachary" , "Eli" , "Keegan" , "Lincoln" , "Isaac" , "Asher" , "Declan" , "Thea" , "Levi" , "Dominic" , "Austin" , "Wyatt" , "Carter" , "Logan" , "Luke" , "Max" , "Ethan" , "Miles" , "Oliver" , "Hudson" , "Owen" , "William" , "Joshua" , "Benjamin" , "Henry" ,"Lucas" , "Alexander" , "Jackson" , "Mason" , "Grayson" , "Ryder" , "Elijah" , "Liam" , "Caleb" , "Thomas" , "Cooper" , "Hunter" , "Connor"};
这个题我不太会欸~呜呜呜
#include "iostream" #include "random" using namespace std; int get_random_num(int min, int max) { //创建一个随机数生成器 random_device rd; mt19937 gen(rd()); //定义一个均匀分布的证书范围 uniform_int_distribution<> dis(min, max); //生成一个随机数并输出 int random_number = dis(gen); return random_number; } int main(){ string names[] = {"Landon" , "Avery" , "Kamden" , "Bentley" , "Finnegan" , "Nash" , "Emmett" , "Greyson" , "Noah" , "Jace" , "Jaxton" , "Sawyer" , "Zachary" , "Eli" , "Keegan" , "Lincoln" , "Isaac" , "Asher" , "Declan" , "Thea" , "Levi" , "Dominic" , "Austin" , "Wyatt" , "Carter" , "Logan" , "Luke" , "Max" , "Ethan" , "Miles" , "Oliver" , "Hudson" , "Owen" , "William" , "Joshua" , "Benjamin" , "Henry" ,"Lucas" , "Alexander" , "Jackson" , "Mason" , "Grayson" , "Ryder" , "Elijah" , "Liam" , "Caleb" , "Thomas" , "Cooper" , "Hunter" , "Connor"}; string info[2][2][5]; for(int i = 0; i < sizeof(info) / sizeof(info[0]); i++){ for(int j = 0; j < sizeof(info[0]) / sizeof(info[0][0]); j++){ for(int k = 0; k < sizeof(info[0][0]) / sizeof(info[0][0][0]); k++){ string major = i == 0 ? "物理" : "计算机"; string class_name = j == 0 ? "一班" : "二班"; int seat_number = k + 1; string name = names[get_random_num(0, sizeof(names) / sizeof(names[0])-1)]; string msg = major + "专业," + class_name + "," + "座位号" + to_string(seat_number) + "的同学叫" + name; info[i][j][k] = msg; } } } cout << "信息准备完成,现在开始输出:" << endl; for(int i = 0; i < sizeof(info) / sizeof(info[0]); i++){ for(int j = 0; j < sizeof(info[0]) / sizeof(info[0][0]); j++){ for(int k = 0; k < sizeof(info[0][0]) / sizeof(info[0][0][0]); k++){ cout << info[i][j][k] << endl; } } }; return 0; }
输出:
信息准备完成,现在开始输出: 物理专业,一班,座位号1的同学叫Luke 物理专业,一班,座位号2的同学叫Caleb 物理专业,一班,座位号3的同学叫Oliver 物理专业,一班,座位号4的同学叫Alexander 物理专业,一班,座位号5的同学叫Benjamin 物理专业,二班,座位号1的同学叫Avery 物理专业,二班,座位号2的同学叫Elijah 物理专业,二班,座位号3的同学叫Thea 物理专业,二班,座位号4的同学叫Thea 物理专业,二班,座位号5的同学叫Ethan 计算机专业,一班,座位号1的同学叫Benjamin 计算机专业,一班,座位号2的同学叫Logan 计算机专业,一班,座位号3的同学叫Owen 计算机专业,一班,座位号4的同学叫Lincoln 计算机专业,一班,座位号5的同学叫Lincoln 计算机专业,二班,座位号1的同学叫Hudson 计算机专业,二班,座位号2的同学叫Hudson 计算机专业,二班,座位号3的同学叫Sawyer 计算机专业,二班,座位号4的同学叫Declan 计算机专业,二班,座位号5的同学叫Nash
六十二、指针基础
#include "iostream" using namespace std; int main(){ int num = 10; //标准的int类型变量,存放了一个int值 10 int *p; //声明了一个p指针变量,这个指针变量中记录的地址(内存区域)存的是int //指针变量(如上的p变量),值用来记录内存地址 p = # //将num变量的地址,赋予了p指针 cout << "&num取地址的结果是:" << &num << endl; cout << "指针变量p中记录的地址是:" << p << endl; cout << "取指针变量记录地址中存放的数值是:" << *p << endl; cout << "---------------------" << endl; //直接展示对内存的操作 *p = 20; cout << "直接对指针变量p中的地址进行修改,修改后的数值是:" << *p << endl; cout << "直接对num变量进行修改,修改后的数值是:" << num << endl; return 0; }
输出:
&num取地址的结果是:0xdea97ff924 指针变量p中记录的地址是:0xdea97ff924 取指针变量记录地址中存放的数值是:10 --------------------- 直接对指针变量p中的地址进行修改,修改后的数值是:20 直接对num变量进行修改,修改后的数值是:20
六十三、野指针和空指针——不是好东西
就好比,你到餐厅吃饭,你吃完了,你刚走,下一个人又继续坐下来吃你的残羹剩菜,这样肯定是不可以的,你肯定会说,老板收拾一下,换一份新的。
#include "iostream" using namespace std; int main(){ int *p; //声明了一个指针变量p(p就被分配了8字大小的内存空间) *p = 10; cout << "hello" << endl; return 0; }
输出:
进程已结束,退出代码为 -1073741819 (0xC0000005)
上面做法有安全隐患,指针为脏指针。应该把指针清空。
#include "iostream" using namespace std; int main(){ //int *p; //声明了一个指针变量p(p就被分配了8字大小的内存空间) int *p1 = NULL; //将指针标记为空 int *p2 = nullptr; //将指针标记为空 *p1 = 10; *p2 = 20; cout << "hello" << endl; return 0; }
输出:
进程已结束,退出代码为 -1073741819 (0xC0000005)
六十三、指针运算
#include "iostream" using namespace std; int main(){ int num = 10; int *p = # cout << "指针变量p 中记录的地址是:" << p << endl; p++; // int 类型占4个字节,所以指针p+1,就是指针p指向的内存地址加上4个字节 cout << "指针变量p+1中记录的地址是:" << p << endl; cout << "---------------------------" << endl; double num2 = 10; double *p2 = &num2; cout << "指针变量p2 中记录的地址是:" << p2 << endl; p2++; // double 类型占8个字节,所以指针p2+1,就是指针p2指向的内存地址加上8个字节 cout << "指针变量p2+1中记录的地址是:" << p2 << endl; p2 += 4; // double 类型占8个字节,所以指针p2+4,就是指针p2指向的内存地址加上4*8个字节 cout << "指针变量p2+4中记录的地址是:" << p2 << endl; //地址为十六进制写法 return 0; }
输出:
指针变量p 中记录的地址是:0xfde1fffaec 指针变量p+1中记录的地址是:0xfde1fffaf0 --------------------------- 指针变量p2 中记录的地址是:0xfde1fffae0 指针变量p2+1中记录的地址是:0xfde1fffae8 指针变量p2+4中记录的地址是:0xfde1fffb08
0xb08-0xae8=20,再换为十进制为:32
#include "iostream" using namespace std; int main(){ int v[] = {1,2,3,4,5}; // 内存连续排列,每个元素的地址差是4字节(int) int *vp = v; //v默认记录v数组0下标的地址 cout << "数组的第一个元素是:" << *vp << endl; cout << "数组的第一个元素是:" << v[0] << endl; cout << "数组的第二个元素是:" << *(vp+1) << endl; // 内存地址加4字节 cout << "数组的第二个元素是:" << v[1] << endl; cout << "数组的第三个元素是:" << *(vp+2) << endl; // 内存地址加4字节 cout << "数组的第三个元素是:" << v[2] << endl; *(vp+2) = 6;//使用地址操作对数组进行修改 cout << "数组的第三个元素是:" << v[2] << endl; return 0; }
输出:
数组的第一个元素是:1 数组的第一个元素是:1 数组的第二个元素是:2 数组的第二个元素是:2 数组的第三个元素是:3 数组的第三个元素是:3 数组的第三个元素是:6
#include "iostream" using namespace std; int main(){ int v1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; char v2[] = {'a', 'b', 'c', 'd', 'e'}; int *v1p = v1; char *v2p = v2; for(int i = 0; i < 10; i++){ cout << *v1p << endl; v1p++; } for(int j = 0; j < 5; j++){ cout << *v2p << endl; v2p++; } return 0; }
输出:
1 2 3 4 5 6 7 8 9 10 a b c d e
六十四、动态内存管理
#include "iostream" using namespace std; int main(){ int *p = new int; *p = 10; cout << "new申请的4字节空间内,存放的是:" << *p << endl; delete p; //int num = 10; //cout << num << endl; //delete # int *p_arr = new int[5]; //申请5元素可以存放的int类型的数组空间 //p_arr的地址,就是数组空间的内存区域的开头(第一个元素的位置) p_arr[0] = 10; //等同于*p_arr = 10; p_arr[1] = 20; //等同于*(p_arr+1) = 10; p_arr[2] = 30; p_arr[3] = 40; p_arr[4] = 50; cout << "数组中第一个元素是:" << p_arr[0] << endl; cout << "数组中第二个元素是:" << p_arr[1] << endl; cout << "数组中第三个元素是:" << p_arr[2] << endl; cout << "数组中第四个元素是:" << p_arr[3] << endl; cout << "数组中第五个元素是:" << p_arr[4] << endl; delete[] p_arr; return 0; }
输出:
new申请的4字节空间内,存放的是:10 数组中第一个元素是:10 数组中第二个元素是:20 数组中第三个元素是:30 数组中第四个元素是:40 数组中第五个元素是:50
With AI:
#include "iostream" using namespace std; int main(){ int *p_arr = new int[10]; for(int i = 0; i < 10; i++){ p_arr[i] = i; } for(int i = 0; i < 10; i++){ cout << p_arr[i] << endl; } delete[] p_arr; return 0; }
输出:
0 1 2 3 4 5 6 7 8 9
六十五、数组元素的移除
#include "iostream" using namespace std; int main(){ int *pArr = new int[5]{1, 3, 5, 7, 9};//示例数组 for(int i = 0; i < 5; i++){ cout << "老数组的元素是:" << pArr[i] << endl; } cout << "--------------------" << endl; //创建一个新的数组,将需要保留的复制到新数组中 int *pNewArr = new int[4]; //循环去遍历老的数组,将需要的元素放入新的数组中(不要的要跳过) for(int i = 0; i < 5; i++){ if(i == 2){ continue; } if(i > 2){ pNewArr[i - 1] = pArr[i]; } else{ pNewArr[i] = pArr[i]; } } delete []pArr;//可选:释放老数组 pArr = pNewArr;//可选,将新数组的地址赋给老数组 for(int i = 0; i < 4; i++){ cout << "新数组的元素是:" << pNewArr[i] << endl; } return 0; }
输出:
老数组的元素是:1 老数组的元素是:3 老数组的元素是:5 老数组的元素是:7 老数组的元素是:9 -------------------- 新数组的元素是:1 新数组的元素是:3 新数组的元素是:7 新数组的元素是:9
3和66干掉,参照上面的例子写的
#include "iostream" using namespace std; int main(){ int *pArr = new int[10] {3,5,1,11,99,66,22,2,8,6}; //3和66干掉 cout << "老元素是:"; for(int i = 0; i < 10; i++){ cout << pArr[i] << " "; } int *pNewArr = new int[8]; for(int i = 0; i < 10; i++){ if(i == 0 || i == 5){ continue; } if(i > 5){ pNewArr[i-2] = pArr[i]; } else if (0 < i < 5){ pNewArr[i-1] = pArr[i]; } else{ pNewArr[i] = pArr[i]; } pNewArr[i] = pArr[i]; } delete []pArr; pArr = pNewArr; cout << endl << "新元素是:"; for(int i = 0; i < 8; i++){ cout << pNewArr[i] << " "; } return 0; }
输出:
老元素是:3 5 1 11 99 66 22 2 8 6 新元素是:5 1 11 99 22 2 8 6
讲解:
每跳过一个元素,offset就+1。
#include "iostream" using namespace std; int main(){ int *pArr = new int[10] {3,5,1,11,99,66,22,2,8,6}; //3和66干掉 cout << "老元素是:"; for(int i = 0; i < 10; i++){ cout << pArr[i] << " "; } int *pNewArr = new int[8]; int offset = 0;//新数组的偏移量 for(int i = 0; i < 10; i++){//for循环遍历,将需要的元素一个个放入新数组中 if(i == 0 || i == 5){ //这两个元素是不要的 offset++; //每跳过一个不要的元素,offset+1,可以让后续的元素减去offset得到准确的新数组的下标 continue; } pNewArr[i-offset] = pArr[i]; } delete[] pArr; pArr = pNewArr; //可选 cout << endl << "新元素是:"; for(int i = 0; i < 8; i++){ cout << pNewArr[i] << " "; } return 0; }
输出:
老元素是:3 5 1 11 99 66 22 2 8 6 新元素是:5 1 11 99 22 2 8 6
六十六、数组元素的插入
#include "iostream" using namespace std; int main(){ int *pArr = new int[5] {1,3,5,7,9}; //在下标1和3插入数字11和66 cout << "老元素是:"; for(int i = 0; i < 5; i++){ cout << pArr[i] << " "; } int *pNewArr = new int[7]; int offset = 0;//新数组的偏移量 for(int i = 0; i < 7; i++){//循环数组,挨个进行元素填充(非掺入的位置填充老数组的元素,插入位置填充新数组元素) if(i == 1){ //下标走到了1,应当插入11 pNewArr[i] = 11; offset++; continue; }else if(i == 3){//下标走到了3,应当插入11 pNewArr[i] = 66; offset++; continue; } //不是插入位置,从老数组中提取元素放入新数组中 //公式:老数组的元素下标 + offset = 新数组的元素下标 //当前循环的i是新数组的下标 pNewArr[i] = pArr[i - offset]; } delete[] pArr; pArr = pNewArr; //可选 cout << endl << "新元素是:"; for(int i = 0; i < 7; i++){ cout << pNewArr[i] << " "; } return 0; }
输出:
老元素是:1 3 5 7 9 新元素是:1 11 3 66 5 7 9
六十七、指针悬挂
#include "iostream" using namespace std; int main(){ int *p1 = new int; *p1 = 10; int *p2 = p1; // 指针之间的相互赋值 cout << "p1指针指向的内存区域的值是:" << *p1 << endl; delete p1; cout << "p2指针指向的内存区域的值是:" << *p2 << endl;//p2为悬挂指针 return 0; }
输出1:
p1指针指向的内存区域的值是:10 p2指针指向的内存区域的值是:-1113231200
输出2:
p1指针指向的内存区域的值是:10 p2指针指向的内存区域的值是:871919776
每刷新一下,值都不一样。
六十八、常量指针
#include "iostream" using namespace std; int main(){ // 1、指向const(常量)的指针,指向可变,数据不可变 int num1 = 10, num2 = 100; const int *p = &num1; cout << "指针p当前指向的数据是:" << *p << endl; //*p = 20; p = &num2; cout << "指针p当前指向的数据是:" << *p << endl; cout << "-----------------------" << endl; // 2、const指针,指向不可变,数据可变 int num3 = 10, num4 = 100; int *const p1 = &num3; cout << "指针p1当前指向的数据是:" << *p1 << endl; *p1 = 20; //p1 = &num2; cout << "指针p1当前指向的数据是:" << *p1 << endl; cout << "-----------------------" << endl; //3、指向const的const指针,指向和数据都不可变 int num5 = 10, num6 = 100; const int *const p2 = &num5; cout << "指针p2当前指向的数据是:" << *p2 << endl; //*p2 = 20; //p2 = &num2; cout << "指针p2当前指向的数据是:" << *p2 << endl; return 0; }
输出:
指针p当前指向的数据是:10 指针p当前指向的数据是:100 ----------------------- 指针p1当前指向的数据是:10 指针p1当前指向的数据是:20 ----------------------- 指针p2当前指向的数据是:10 指针p2当前指向的数据是:10
六十九、数组和指针综合案例
先找到所有元素中的最小值,然后和第一个元素交换;接着再在剩下的元素中寻找最小值,然后和第二个元素交换,依次执行。寻找数组长度减一次的最小值即可,因为最后一个元素不需要换位。
#include "iostream" using namespace std; int main() { int *pArr = new int[10] {3, 5, 1, 11, 99, 66, 22, 2, 8, 6}; cout << "原数组为:"; for (int i = 0; i < 10; i++) { cout << pArr[i] << " "; } for (int i = 0; i < 9; i++) { for(int j = i; j < 10; j++){ if(pArr[i] > pArr[j]){ int temp = pArr[i]; pArr[i] = pArr[j]; pArr[j] = temp; } } } cout << endl; cout << "新数组为:"; for (int i = 0; i < 10; i++) { cout << pArr[i] << " "; } return 0; }
输出:
原数组为:3 5 1 11 99 66 22 2 8 6 新数组为:1 2 3 5 6 8 11 22 66 99
#include "iostream" using namespace std; int main() { int *pArr = new int[10] {3, 5, 1, 11, 99, 66, 22, 2, 8, 6}; cout << "原数组为:"; for (int i = 0; i < 10; i++) { cout << pArr[i] << " "; } for (int i = 0; i < 9; i++) { for(int j = i; j < 10; j++){ if(pArr[i] <= pArr[j]){ int temp = pArr[i]; pArr[i] = pArr[j]; pArr[j] = temp; } } } cout << endl; cout << "新数组为:"; for (int i = 0; i < 10; i++) { cout << pArr[i] << " "; } return 0; }
输出:
原数组为:3 5 1 11 99 66 22 2 8 6 新数组为:99 66 22 11 8 6 5 3 2 1
七十、结构体的基本应用
#include "iostream" using namespace std; int main() { struct Student{ //新的数据类型 string name; //成员1 姓名 int age; //成员2 年龄 string gender;//成员3 性别 }; //结构体变量的声明,可以在前面带上struct关键字(可以省略不不写) //建议写上,可以清晰的知道变量是自定义结构体类型 struct Student stu1; stu1 = {"周杰伦",11,"男"}; //cout << stu1 << endl; //结构体变量是一个整体的包装,无法直接cout输出 //需要访问它的每一个成员进行输出,访问语法:结构体变量。成员名称 cout << stu1.name << endl; cout << stu1.age << endl; cout << stu1.gender << endl; cout << "------------------------------------------------" << endl; struct Student stu2 = {"林俊杰",11,"男"}; cout << "二号学生的姓名是:" << stu2.name << endl; cout << "二号学生的年龄是:" << stu2.age << endl; cout << "二号学生的性别是:" << stu2.gender << endl; return 0; }
输出:
周杰伦 11 男 ------------------------------------------------ 二号学生的姓名是:林俊杰 二号学生的年龄是:11 二号学生的性别是:男
#include "iostream" using namespace std; int main() { struct Student{ string name; int age; string address; }; int i = 1; struct Student stu; while (1){ cout << "正在录入学生" << i << "的信息:" << endl; cout << "请输入学生姓名:"; cin >> stu.name; cout << "请输入学生年龄:"; cin >> stu.age; cout << "请输入学生地址:"; cin >> stu.address; cout << "学生" << i << "信息录入完成。" << endl; cout << "学生" << i << "信息核对:" << "姓名:" << stu.name << ",年龄:" << stu.age << ",地址:" << stu.address << "。" << endl; i++; } return 0; }
输出:
正在录入学生1的信息: 请输入学生姓名:小明 请输入学生年龄:11 请输入学生地址:珠海 学生1信息录入完成。 学生1信息核对:姓名:小明,年龄:11,地址:珠海。 正在录入学生2的信息: 请输入学生姓名:李佟勇 请输入学生年龄:22 请输入学生地址:杭州 学生2信息录入完成。 学生2信息核对:姓名:李佟勇,年龄:22,地址:杭州。 正在录入学生3的信息: 请输入学生姓名:胡杰 请输入学生年龄:29 请输入学生地址:绍兴 学生3信息录入完成。 学生3信息核对:姓名:胡杰,年龄:29,地址:绍兴。 正在录入学生4的信息: 请输入学生姓名:罗旭东 请输入学生年龄:30 请输入学生地址:绍兴 学生4信息录入完成。 学生4信息核对:姓名:罗旭东,年龄:30,地址:绍兴。 正在录入学生5的信息: 请输入学生姓名: 进程已结束,退出代码为 -1
以上代码使用了while(1),可以无限输入输出。
七十一、结构体成员的默认值
#include "iostream" using namespace std; int main() { struct Student{ string name; //成员1,姓名 string major_code = "003032"; //成员2专业代码,拥有默认值003032 int dormitory_num = 1; // 成员3宿舍楼号,默认是1号楼 }; struct Student s1 = {"周杰伦"}; struct Student s2 = {"林俊杰", "003001", 3}; cout << "学生1的姓名:" << s1.name << endl; cout << "学生1的专业代码:" << s1.major_code << endl; cout << "学生1的宿舍楼号:" << s1.dormitory_num << endl; cout << endl; cout << "学生2的姓名:" << s2.name << endl; cout << "学生2的专业代码:" << s2.major_code << endl; cout << "学生2的宿舍楼号:" << s2.dormitory_num << endl; return 0; }
输出:
学生1的姓名:周杰伦 学生1的专业代码:003032 学生1的宿舍楼号:1 学生2的姓名:林俊杰 学生2的专业代码:003001 学生2的宿舍楼号:3
#include "iostream" using namespace std; int main() { struct Student{ string name; int age = 11; string address; }; for(int i = 1; i < 6; i++){ struct Student stu; cout << "请输入第" << i << "个学生的姓名:"; cin >> stu.name; cout << "请输入第" << i << "个学生的地址:"; cin >> stu.address; cout << "姓名:" << stu.name << " 年龄:" << stu.age << " 地址:" << stu.address << endl; } return 0; }
输出:
七十二、结构体数组
#include "iostream" using namespace std; int main() { struct Student{ string name; int age; string gender; }; struct Student arr[3]; arr[0] = {"周杰伦", 18, "男"}; arr[1] = {"林俊杰", 18, "男"}; arr[2] = {"蔡依林", 18, "女"}; for(int i = 0; i < 3; i++){ cout << "当前下标:" << i << "姓名是:" <<arr[i].name << endl; cout << "当前下标:" << i << "年龄是:" <<arr[i].age << endl; cout << "当前下标:" << i << "性别是:" <<arr[i].gender << endl; cout << endl; } cout << "-------------------------------" << endl; //数组声明赋值同步写法 struct Student arr2[2] = { {"小明", 18, "男"}, {"小红", 18, "男"}, }; for(int i = 0; i < 2; i++){ cout << "当前下标:" << i << "姓名是:" <<arr2[i].name << endl; cout << "当前下标:" << i << "年龄是:" <<arr2[i].age << endl; cout << "当前下标:" << i << "性别是:" <<arr2[i].gender << endl; cout << endl; } return 0; }
输出:
当前下标:0姓名是:周杰伦 当前下标:0年龄是:18 当前下标:0性别是:男 当前下标:1姓名是:林俊杰 当前下标:1年龄是:18 当前下标:1性别是:男 当前下标:2姓名是:蔡依林 当前下标:2年龄是:18 当前下标:2性别是:女 ------------------------------- 当前下标:0姓名是:小明 当前下标:0年龄是:18 当前下标:0性别是:男 当前下标:1姓名是:小红 当前下标:1年龄是:18 当前下标:1性别是:男
#include "iostream" using namespace std; int main() { struct Student{ string name; int age; string address; }; struct Student stu; for(int i = 1;i < 6;i++){ cout << "正在录入第" << i << "个学生的信息:" << endl; cout << "请输入姓名:"; cin >> stu.name; cout << "请输入年龄:"; cin >> stu.age; cout << "请输入地址:"; cin >> stu.address; cout << "学生" << i << "信息录入完成。" << endl; cout << "--------------------------------" << endl; cout << "学生" << i << "信息核对:姓名" << stu.name << ",年龄:" << stu.age << ",地址:" << stu.address << endl; cout << "--------------------------------" << endl; } return 0; }
输出:
C:\Users\lty13\CLionProjects\untitled\duoshuchu_lianxi.exe 正在录入第1个学生的信息: 请输入姓名:小明 请输入年龄:11 请输入地址:北京 学生1信息录入完成。 -------------------------------- 学生1信息核对:姓名小明,年龄:11,地址:北京 -------------------------------- 正在录入第2个学生的信息: 请输入姓名:李华 请输入年龄:21 请输入地址:上海 学生2信息录入完成。 -------------------------------- 学生2信息核对:姓名李华,年龄:21,地址:上海 -------------------------------- 正在录入第3个学生的信息: 请输入姓名:小美 请输入年龄:23 请输入地址:珠海 学生3信息录入完成。 -------------------------------- 学生3信息核对:姓名小美,年龄:23,地址:珠海 -------------------------------- 正在录入第4个学生的信息: 请输入姓名:胡杰 请输入年龄:28 请输入地址:绍兴 学生4信息录入完成。 -------------------------------- 学生4信息核对:姓名胡杰,年龄:28,地址:绍兴 -------------------------------- 正在录入第5个学生的信息: 请输入姓名:罗旭东 请输入年龄:32 请输入地址:深圳 学生5信息录入完成。 -------------------------------- 学生5信息核对:姓名罗旭东,年龄:32,地址:深圳 -------------------------------- 进程已结束,退出代码为 0
七十三、结构体指针
#include "iostream" using namespace std; int main() { struct Student{ string name; int age; string gender; }; //先创建一个标准的结构体对象(静态内存管理) struct Student stu = {"周杰伦",18,"男"}; //创建结构体指针,指向结构体对象的地址 struct Student *p = &stu; //通过结构体指针,访问结构体成员,要使用的符号是:-> cout << "结构体中成员的name:" << p->name << endl; cout << "结构体中成员的age:" << p->age << endl; cout << "结构体中成员的gender:" << p->gender << endl; cout << "--------------------" << endl; //通过new操作符,申请结构体的空间 struct Student *p2 = new Student {"林俊杰",18,"男"}; cout << "结构体中成员的name:" << p2->name << endl; cout << "结构体中成员的age:" << p2->age << endl; cout << "结构体中成员的gender:" << p2->gender << endl; delete p2; return 0; }
输出:
结构体中成员的name:周杰伦 结构体中成员的age:18 结构体中成员的gender:男 -------------------- 结构体中成员的name:林俊杰 结构体中成员的age:18 结构体中成员的gender:男
七十四、结构体指针数组
#include "iostream" using namespace std; int main() { struct Student{ string name; int age = 11; string gender = "男"; }; struct Student arr1[3] = {{"周杰伦"}, {"林俊杰"}, {"王力宏"}}; struct Student *p1 = arr1; // 数组的对象本质上就是地址(指向数组的第一个元素的位置) cout << "数组的第一个元素中记录的name是:" << p1->name << endl; cout << "数组的第一个元素中记录的name是:" << p1[0].name << endl;//和上面的输出一样 cout << "数组的第二个元素中记录的name是:" << p1[1].name << endl; cout << "数组的第三个元素中记录的name是:" << p1[2].name << endl; //通过new操作符,自行申请结构体数组的空间,可以通过delete回收 struct Student *p2 = new Student[3] {{"周杰伦"}, {"林俊杰"}, {"王力宏"}}; cout << "数组2的第一个元素中记录的name是:" << p2[0].name << endl;//和上面的输出一样 cout << "数组2的第二个元素中记录的name是:" << p2[1].name << endl; cout << "数组2的第三个元素中记录的name是:" << p2[2].name << endl; delete []p2; return 0; }
输出:
数组的第一个元素中记录的name是:周杰伦 数组的第一个元素中记录的name是:周杰伦 数组的第二个元素中记录的name是:林俊杰 数组的第三个元素中记录的name是:王力宏 数组2的第一个元素中记录的name是:周杰伦 数组2的第二个元素中记录的name是:林俊杰 数组2的第三个元素中记录的name是:王力宏
With AI:
#include "iostream" using namespace std; int main() { struct Student{ string name; int age; string address; }; struct Student *p = new Student[5]; for(int i = 0; i < 5; i++){ cout << "请输入第" << i+1 << "个学生的姓名:"; cin >> p[i].name; cout << "请输入第" << i+1 << "个学生的年龄:"; cin >> p[i].age; cout << "请输入第" << i+1 << "个学生的地址:"; cin >> p[i].address; cout << endl; } cout << "---------------------------------" << endl; cout << "下面是校验信息:" << endl; for(int i = 0; i < 5; i++){ cout << "第" << i+1 << "个学生的信息为:"; cout << p[i].name << " " << p[i].age << " " << p[i].address << endl; } delete [] p; return 0; }
输出:
请输入第1个学生的姓名:小明 请输入第1个学生的年龄:11 请输入第1个学生的地址:北京 请输入第2个学生的姓名:小美 请输入第2个学生的年龄:21 请输入第2个学生的地址:上海 请输入第3个学生的姓名:李华 请输入第3个学生的年龄:23 请输入第3个学生的地址:广州 请输入第4个学生的姓名:胡杰 请输入第4个学生的年龄:22 请输入第4个学生的地址:深圳 请输入第5个学生的姓名:罗旭东 请输入第5个学生的年龄:32 请输入第5个学生的地址:绍兴 --------------------------------- 下面是校验信息: 第1个学生的信息为:小明 11 北京 第2个学生的信息为:小美 21 上海 第3个学生的信息为:李华 23 广州 第4个学生的信息为:胡杰 22 深圳 第5个学生的信息为:罗旭东 32 绍兴
七十五、函数的概念
七十六、函数的基础语法
#include "iostream" using namespace std; /* 返回值类型 函数名(参数1类型 参数1名称,参数2类型 参数2名称, ·.… *函数体; *return 返回值; *需求:编写一个函数,接收2个int数字传入,返回两者中最大的数值 */ int get_max(int a, int b) { int max; //标记最大值 max = a; if(b > max) { max = b; } return max;//对外提供最大值 } int main() { //函数的使用在main函数内 //函数调用:函数名称(传入参数) int max = get_max(3,5); cout << "函数的结果是:" << max << endl; int max2 = get_max(11,6); cout << "函数的结果是:" << max2 << endl; return 0; }
输出:
函数的结果是:5 函数的结果是:11
#include "iostream" using namespace std; int get_min(int a, int b, int c) { int min = a; if (b < min) min = b; if (c < min) min = c; return min; } int main() { int a, b, c; cout << "请输入要比较的三个数(输入一个数字后用回车确认):" << endl; cin >> a >> b >> c; cout << "最小的数是:" << get_min(a, b, c) << endl; return 0; }
输出:
请输入要比较的三个数(输入一个数字后用回车确认): 55 921 888 最小的数是:55
七十七、无返回值函数和void类型
#include "iostream" using namespace std; void say_hello(string name) { cout << name << "你好,我是黑马程序员!" << endl; } int main() { say_hello("周杰伦"); say_hello("刘德华"); say_hello("张学友"); return 0; }
输出:
周杰伦你好,我是黑马程序员! 刘德华你好,我是黑马程序员! 张学友你好,我是黑马程序员!
#include "iostream" using namespace std; void love_xm(int count) { for (int i = 0; i < count; i++) { cout << "小美,我第" << i + 1 << "次喜欢你!!!" << endl; } } int main() { int count; cout << "请输入喜欢的次数:"; cin >> count; love_xm(count); return 0; }
输出:
请输入喜欢的次数:10 小美,我第1次喜欢你!!! 小美,我第2次喜欢你!!! 小美,我第3次喜欢你!!! 小美,我第4次喜欢你!!! 小美,我第5次喜欢你!!! 小美,我第6次喜欢你!!! 小美,我第7次喜欢你!!! 小美,我第8次喜欢你!!! 小美,我第9次喜欢你!!! 小美,我第10次喜欢你!!!
七十八、空参函数
#include "iostream" using namespace std; //功能:对小美说5次我喜欢你 void i_like_you() //()是需要写的 { for(int i = 0;i < 5;i++) cout << "小美,我喜欢你!!!" << endl; } int main() { // 调用的时候()是需要写的 i_like_you(); return 0; }
输出:
小美,我喜欢你!!! 小美,我喜欢你!!! 小美,我喜欢你!!! 小美,我喜欢你!!! 小美,我喜欢你!!!
#include "iostream" using namespace std; void self_introduction() { cout << "我是黑马程序员,我的股票代码是:003032。" << endl; cout << "学IT就来黑马,我是曹老师,带你畅游C++。" << endl; cout << "作业由FreedaLi完成。" << endl; } int main() { self_introduction(); return 0; }
输出:
我是黑马程序员,我的股票代码是:003032。 学IT就来黑马,我是曹老师,带你畅游C++。 作业由FreedaLi完成。
七十九、函数的嵌套调用
#include "iostream" using namespace std; void send_food() { cout << "小美,我给你买了早餐!" << endl; } void send_flower() { cout << "小美,我给你买了玫瑰花,你真好看!" << endl; } void say_love() { cout << "小美,我很喜欢你!" << endl; } void watch_movie() { cout << "小美,我们一起看电影吧!" << endl; } void i_like_you(int num) { switch (num) { case 1: send_food(); send_flower(); say_love(); break; case 2: send_flower(); say_love(); watch_movie(); break; case 3: watch_movie(); send_flower(); say_love(); break; default: cout << "今天不追求小美了,打球去!" << endl; } } int main() { cout << "今天天气不错,执行方案3追求小美!" << endl; i_like_you(3); cout << "--------------------------" << endl; cout << "第二天,天气也不错,执行方案2" << endl; i_like_you(2); return 0; }
输出:
今天天气不错,执行方案3追求小美! 小美,我们一起看电影吧! 小美,我给你买了玫瑰花,你真好看! 小美,我很喜欢你! -------------------------- 第二天,天气也不错,执行方案2 小美,我给你买了玫瑰花,你真好看! 小美,我很喜欢你! 小美,我们一起看电影吧!
没读太懂这个题目的意思是什么?
#include "iostream" using namespace std; int get_min(int a, int b) { int min = a < b ? a : b; return min; } int get_max(int a, int b) { int max = a > b ? a : b; return max; } int get_srt(int a, int b) { struct Compare{ int max; int min; }; cout << "最大值是:" << get_max(a, b) << endl; cout << "最小值是:" << get_min(a, b) << endl; } int main() { cout << "请输入两个数:" << endl; int a, b; cin >> a; cin >> b; get_srt(a, b); return 0; }
输出:
请输入两个数: 5 6 最大值是:6 最小值是:5
讲解:
#include "iostream" using namespace std; int get_min(int a, int b) { if(a < b){ return a; }else{ return b; } } int get_max(int a, int b) { if(a > b){ return a; }else{ return b; } } struct MinAndMax { int min; int max; }; struct MinAndMax get_min_and_max(int a, int b) { int min = get_min(a, b); int max = get_max(a, b); struct MinAndMax v = {min, max}; return v; } int main() { struct MinAndMax v = get_min_and_max(3, 5); cout << "结构体中的min:" << v.min << endl; cout << "结构体中的max:" << v.max << endl; return 0; }
输出:
结构体中的min:3 结构体中的max:5
八十、函数的值传递和地址传递
#include "iostream" using namespace std; void switch_num(int a, int b) { int temp = a; a = b; b = temp; } void switch_num_pointer(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 1; int y = 2; switch_num(x, y);//值传递,函数内对形参的修改,不会影响实参 cout << "x=" << x << endl; cout << "y=" << y << endl; cout << "-------------------------" << endl; switch_num_pointer(&x, &y); //地址传递,函数内对形参的修改,会影响实参 cout << "x=" << x << endl; cout << "y=" << y << endl; return 0; }
输出:
x=1 y=2 ------------------------- x=2 y=1
八十一、函数综合案例
#include "iostream" using namespace std; void query_money(const string * const name, int * const money) //查询余额 { cout << "---------------查询余额---------------" << endl; cout << *name << "您好,您的余额剩余:" << *money << "元" << endl; } void save_money(const string * const name, int * const money, int num) //存钱 { cout << "---------------存钱---------------" << endl; cout << *name << "您好,您存入" << num << "元成功" << endl; *money += num; //余额打赏变更 cout << *name << "您好,您的余额剩余:" << *money << "元" << endl; } void get_money(const string * const name, int * const money, int num) //取钱 { cout << "---------------取款---------------" << endl; cout << *name << "您好,您取款" << num << "元成功" << endl; *money -= num; //余额打赏变更 cout << *name << "您好,您的余额剩余:" << *money << "元" << endl; } int menu(const string * const name) //主菜单 { cout << "---------------主菜单---------------" << endl; cout << *name << ",您好,欢迎来到黑马银行ATM,请选择操作:" << endl; cout << "查询余额\t[输入1]" << endl; cout << "存款\t[输入2]" << endl; cout << "取款\t[输入3]" << endl; cout << "退出\t[输入4]" << endl; cout << "请输入您的选择:"; int num; cin >> num; return num; } int main() { //启动要求输入用户姓名 string name; cout << "请输入您的用户名:"; cin >> name; //初始化用户余额 int *money = new int; *money = 500000;//余额默认500000 //主循环 bool is_run = true; while (is_run) { int select_num = menu(&name); switch (select_num) { case 1: // 查询余额 query_money(&name, money); break; case 2: // 存钱 int num_for_save_money; cout << "请输入您要存的金额:"; cin >> num_for_save_money; save_money(&name, money, num_for_save_money); break; case 3: int num_for_get_money; cout << "请输入您要取的金额:"; cin >> num_for_get_money; get_money(&name, money, num_for_get_money); break; default: cout << "程序退出!" << endl; is_run = false; } } delete money; return 0; }
输出:
请输入您的用户名:周杰伦 ---------------主菜单--------------- 周杰伦,您好,欢迎来到黑马银行ATM,请选择操作: 查询余额 [输入1] 存款 [输入2] 取款 [输入3] 退出 [输入4] 请输入您的选择:1 ---------------查询余额--------------- 周杰伦您好,您的余额剩余:500000元 ---------------主菜单--------------- 周杰伦,您好,欢迎来到黑马银行ATM,请选择操作: 查询余额 [输入1] 存款 [输入2] 取款 [输入3] 退出 [输入4] 请输入您的选择:2 请输入您要存的金额:50000 ---------------存钱--------------- 周杰伦您好,您存入50000元成功 周杰伦您好,您的余额剩余:550000元 ---------------主菜单--------------- 周杰伦,您好,欢迎来到黑马银行ATM,请选择操作: 查询余额 [输入1] 存款 [输入2] 取款 [输入3] 退出 [输入4] 请输入您的选择:3 请输入您要取的金额:1000 ---------------取款--------------- 周杰伦您好,您取款1000元成功 周杰伦您好,您的余额剩余:549000元 ---------------主菜单--------------- 周杰伦,您好,欢迎来到黑马银行ATM,请选择操作: 查询余额 [输入1] 存款 [输入2] 取款 [输入3] 退出 [输入4] 请输入您的选择:4 程序退出!
八十二、函数传入数组
#include "iostream" using namespace std; //void func1(int arr[1]) //{ // cout << "在func1函数内统计的数组总大小:" << sizeof(arr) << endl; //} void func(int arr[],int length) { for(int i = 0; i < length; i++){ cout << arr[i] << endl; } } int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //cout << "在main函数内统计的数组总大小:" << sizeof(arr) << endl; func(arr,10); return 0; }
输出:
1 2 3 4 5 6 7 8 9 10
有点懵:听听讲解吧
#include "iostream" using namespace std; void sort_arr(int arr[], int length) { int min, min_index; for (int i = 0; i < length - 1; i++) { for (int j = i; j < length; j++) { //本次内层循环的第一个元素直接放入min和记录min_index if (j == 1) { min = arr[j]; min_index = j; } //非本次内层循环的第一个元素,就要比较大小 else if (arr[j] < min) { min = arr[j]; min_index = j; } } int temp = arr[i]; arr[i] = arr[min_index]; arr[min_index] = temp; } } int main() { int arr[] = {11,33,55,99,66,77,44,22,5,3}; cout << "排序前:"; for (int i = 0; i < 10; i++) { cout << arr[i] << " "; } sort_arr(arr,10); cout << endl << "排序后:"; for (int i = 0; i < 10; i++) { cout << arr[i] << " "; } return 0; }
输出:
排序前:11 33 55 99 66 77 44 22 5 3 排序后:3 5 33 55 99 66 77 44 22 11
八十三、引用的基本概念
#include "iostream" using namespace std; int main() { int a = 10; int &b = a; cout << "a = " << a << endl; cout << "b = " << b << endl; a = 20; cout << "a = " << a << endl; cout << "b = " << b << endl; b = 30; cout << "a = " << a << endl; cout << "b = " << b << endl; double d1 = 3.14; double &d2 = d1; cout << "d1 = " << d1 << endl; cout << "d2 = " << d2 << endl; d1 = 5.67; cout << "d1 = " << d1 << endl; cout << "d2 = " << d2 << endl; return 0; }
输出:
a = 10 b = 10 a = 20 b = 20 a = 30 b = 30 d1 = 3.14 d2 = 3.14 d1 = 5.67 d2 = 5.67
八十四、引用传参
#include "iostream" using namespace std; void switch_num1(int a, int b) //值传递 { int temp; temp = a; a = b; b = temp; } void switch_num2(int *a, int *b) //地址传递 { int temp; temp = *a; *a = *b; *b = temp; } void switch_num3(int &a, int &b) //引用传递 { int temp; temp = a; a = b; b = temp; } int main() { int x = 1, y = 2; switch_num1(x, y); cout << "x = " << x << endl; cout << "y = " << y << endl; cout << "------------------" << endl; switch_num2(&x, &y); cout << "x = " << x << endl; cout << "y = " << y << endl; cout << "------------------" << endl; switch_num3(x, y); cout << "x = " << x << endl; cout << "y = " << y << endl; return 0; }
输出:
x = 1 y = 2 ------------------ x = 2 y = 1 ------------------ x = 1 y = 2
八十五、函数返回指针及局部变量的作用域问题
#include "iostream" using namespace std; //返回指针的函数,就在函数返回值声明和函数名之间添加*即可 int * add(int a, int b) { int *sum = new int; *sum = a + b; return sum; } int main() { int *result1 = add(1, 2); cout << *result1 << endl; delete result1; return 0; }
输出:
3
八十六、static关键字
#include "iostream" using namespace std; //返回指针的函数,就在函数返回值声明和函数名之间添加*即可 int * add(int a, int b) { static int sum; //静态变量,比较浪费内存 sum = a + b; return ∑ } int main() { int *result1 = add(1, 2); cout << *result1 << endl; return 0; }
输出:
3
static:
#include "iostream" using namespace std; //返回指针的函数,就在函数返回值声明和函数名之间添加*即可 int * max_num(int arr[],int n) { static int max = arr[0]; for(int i = 1;i < n;i++) { if(arr[i]>max) { max = arr[i]; } } return &max; } int main() { int n; cout << "请输入要比较几个数字:" << endl; cin >> n; cout << "请输入数字:" << endl; int arr[n]; for(int i = 0;i < n;i++) { cin >> arr[i]; } cout << "最大的数字是:" << *max_num(arr,n) << endl; return 0; }
输出:
请输入要比较几个数字: 5 请输入数字: 159 249 139 345 852 最大的数字是:852
new和delete不太会写。
八十七、函数返回数组
#include "iostream" using namespace std; //返回指针的函数,就在函数返回值声明和函数名之间添加*即可 int * func1() { int arr[] = {1,2,3};//局部变量数组 return arr; } int main() { int *p1 = func1(); for(int i = 0;i < 3;i++) { cout << p1[i] << endl; } return 0; }
输出:
C:\Users\lty13\CLionProjects\untitled\duoshuchu_lianxi.exe 进程已结束,退出代码为 -1073741819 (0xC0000005)
static:
#include "iostream" using namespace std; //返回指针的函数,就在函数返回值声明和函数名之间添加*即可 int * func1() { static int arr[] = {1,2,3};//static 关键字,表示函数返回的数组是静态的,不会被释放 return arr; } int main() { int *p1 = func1(); for(int i = 0;i < 3;i++) { cout << p1[i] << endl; } return 0; }
输出:
1 2 3
new&deldete:
#include "iostream" using namespace std; //返回指针的函数,就在函数返回值声明和函数名之间添加*即可 int * func1() { int *arr = new int[3]{1,2,3};//static 关键字,表示函数返回的数组是静态的,不会被释放 return arr; } int main() { int *p1 = func1(); for(int i = 0;i < 3;i++) { cout << p1[i] << endl; } delete [] p1; return 0; }
输出:
1 2 3
函数外声明:
#include "iostream" using namespace std; int arr[3] = {1,2,3}; int * func1() { return arr; } int main() { int *p1 = func1(); for(int i = 0;i < 3;i++) { cout << p1[i] << endl; } return 0; }
输出:
1 2 3