C++基础2(运算符、程序结构流程、数组)

本文介绍了C++的基础知识,包括运算符的使用,如算术、赋值、比较和逻辑运算符;程序流程控制结构,如if、switch、while、do…while和for循环,以及跳转语句break和continue;还详细讲解了一维和二维数组的概念、定义和应用。通过实例展示了如何在实际编程中运用这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运算符

运算符类型作用
算术运算符用于处理四则运算
赋值运算符用于将表达式的值赋给变量
比较运算符用于表达式的比较,并返回一个真值或假值
逻辑运算符用于根据表达式的值返回真值或假值

算术运算符

用于处理四则运算

算术运算符包括以下符号:

运算符术语示例结果
+正号+33
-负号-3-3
+10 + 515
-10 - 55
*10 * 550
/10 / 52
%取模(取余)10 % 31
++前置递增a=2; b=++a;a=3; b=3;
++后置递增a=2; b=a++;a=3; b=2;
前置递减a=2; b=–a;a=1; b=1;
后置递减a=2; b=a–;a=1; b=2;

示例1:

#include<iostream>
using namespace std;
//加减乘除
int main() {

	int a1 = 10;
	int b1 = 3;

	cout << a1 + b1 << endl;
	cout << a1 - b1 << endl;
	cout << a1 * b1 << endl;
	cout << a1 / b1 << endl;  //两个整数相除结果依然是整数

	int a2 = 10;
	int b2 = 20;
	cout << a2 / b2 << endl; 

	int a3 = 10;
	int b3 = 0;
	//cout << a3 / b3 << endl; //报错,除数不可以为0

	//两个小数可以相除
	double d1 = 0.5;
	double d2 = 0.25;
	cout << d1 / d2 << endl;
	return 0;
}
13
7
30
3
0
2

示例2:

#include<iostream>
using namespace std;
//取模
int main() {
	int a1 = 10;
	int b1 = 3;

	cout << 10 % 3 << endl;

	int a2 = 10;
	int b2 = 20;

	cout << a2 % b2 << endl;

	int a3 = 10;
	int b3 = 0;

	//cout << a3 % b3 << endl; //取模运算时,除数也不能为0

	//两个小数不可以取模
	double d1 = 3.14;
	double d2 = 1.1;

	//cout << d1 % d2 << endl;
	return 0;
}
1
10

只有整型变量可以进行取模运算

示例3:

#include<iostream>
using namespace std;
//递增
int main() {
	//后置递增
	int a = 10;
	a++; //等价于a = a + 1
	cout << a << endl; // 11

	//前置递增
	int b = 10;
	++b;
	cout << b << endl; // 11
	//区别
	//前置递增先对变量进行++,再计算表达式
	int a2 = 10;
	int b2 = ++a2 * 10;
	cout << b2 << endl;
	//后置递增先计算表达式,后对变量进行++
	int a3 = 10;
	int b3 = a3++ * 10;
	cout << b3 << endl;
	return 0;
}
11
11
110
100

赋值运算符

用于将表达式的值赋给变量

赋值运算符包括以下几个符号:

运算符术语示例结果
=赋值a=2; b=3;a=2; b=3;
+=加等于a=0; a+=2;a=2;
-=减等于a=5; a-=3;a=2;
*=乘等于a=2; a*=2;a=4;
/=除等于a=4; a/=2;a=2;
%=模等于a=3; a%2;a=1;

示例:

#include<iostream>
using namespace std;
int main() {
	//赋值运算符
	// =
	int a = 10;
	a = 100;
	cout << "a = " << a << endl;

	// +=
	a = 10;
	a += 2; // a = a + 2;
	cout << "a = " << a << endl;

	// -=
	a = 10;
	a -= 2; // a = a - 2
	cout << "a = " << a << endl;

	// *=
	a = 10;
	a *= 2; // a = a * 2
	cout << "a = " << a << endl;

	// /=
	a = 10;
	a /= 2;  // a = a / 2;
	cout << "a = " << a << endl;

	// %=
	a = 10;
	a %= 2;  // a = a % 2;
	cout << "a = " << a << endl;
	return 0;
}
a = 100
a = 12
a = 8
a = 20
a = 5
a = 0

比较运算符

用于表达式的比较,并返回一个真值或假值

比较运算符有以下符号:

运算符术语示例结果
==相等于4 == 30
!=不等于4 != 31
<小于4 < 30
>大于4 > 31
<=小于等于4 <= 30
>=大于等于4 >= 11

示例:

#include<iostream>
using namespace std;
int main() {
	int a = 10;
	int b = 20;

	cout << (a == b) << endl; // 0 

	cout << (a != b) << endl; // 1

	cout << (a > b) << endl; // 0

	cout << (a < b) << endl; // 1

	cout << (a >= b) << endl; // 0

	cout << (a <= b) << endl; // 1
	return 0;
}
> 注意:C和C++ 语言的比较运算中, ==“真”用数字“1”来表示, “假”用数字“0”来表示。== 

逻辑运算符

用于根据表达式的值返回真值或假值

逻辑运算符有以下符号:

运算符术语示例结果
!!a如果a为假,则!a为真; 如果a为真,则!a为假。
&&a && b如果a和b都为真,则结果为真,否则为假。
||a || b如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

示例1:逻辑非

#include<iostream>
using namespace std;
//逻辑运算符  --- 非
int main() {
	int a = 10;
	cout << !a << endl; // 0
	cout << !!a << endl; // 1
	return 0;
}

总结: 真变假,假变真

示例2:逻辑与

#include<iostream>
using namespace std;
//逻辑运算符  --- 与
int main() {
	int a = 10;
	int b = 10;
	cout << (a && b) << endl;// 1

	a = 10;
	b = 0;
	cout << (a && b) << endl;// 0 

	a = 0;
	b = 0;
	cout << (a && b) << endl;// 0
	
	return 0;
}

总结:逻辑运算符总结: 同真为真,其余为假

示例3:逻辑或

#include<iostream>
using namespace std;
//逻辑运算符  --- 或
int main() {

	int a = 10;
	int b = 10;
	cout << (a || b) << endl;// 1

	a = 10;
	b = 0;
	cout << (a || b) << endl;// 1 

	a = 0;
	b = 0;
	cout << (a || b) << endl;// 0
	return 0;
}

逻辑运算符总结: 同假为假,其余为真

程序流程结构

C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构:依据条件是否满足,有选择的执行相应功能
  • 循环结构:依据条件是否满足,循环多次执行某段代码

选择结构

if语句

执行满足条件的语句

if语句的三种形式:

  • 单行格式if语句

  • 多行格式if语句

  • 多条件的if语句

  1. 单行格式if语句:if(条件){ 条件满足执行的语句 }

    在这里插入图片描述

    示例:

#include<iostream>
using namespace std;
int main() {
 	//选择结构-单行if语句
 	//输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印
 
 	int score = 0;
 	cout << "请输入一个分数:" << endl;
 	cin >> score;
 	cout << "您输入的分数为: " << score << endl;
 
 	//if语句
 	//注意事项,在if判断语句后面,不要加分号
 	if (score > 600)
 	{
 		cout << "我考上了一本大学!!!" << endl;
 	}
 	return 0;
 }
699
您输入的分数为: 699
我考上了一本大学!!!
  1. 多行格式if语句:if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };

在这里插入图片描述

示例:

#include<iostream>
using namespace std;
int main() {
	int score = 0;
	cout << "请输入考试分数:" << endl;
	cin >> score;
	if (score > 600)
	{
		cout << "我考上了一本大学" << endl;
	}
	else
	{
		cout << "我未考上一本大学" << endl;
	}
	return 0;
}
500
我未考上一本大学
  1. 多条件的if语句:if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}

在这里插入图片描述

示例:

#include<iostream>
using namespace std;
	int main() {
	int score = 0;
	cout << "请输入考试分数:" << endl;
	cin >> score;
	if (score > 600)
	{
		cout << "我考上了一本大学" << endl;
	}
	else if (score > 500)
	{
		cout << "我考上了二本大学" << endl;
	}
	else if (score > 400)
	{
		cout << "我考上了三本大学" << endl;
	}
	else
	{
		cout << "我未考上本科" << endl;
	}
	return 0;
}

嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断

案例需求:

  • 提示用户输入一个高考考试分数,根据分数做如下判断
  • 分数如果大于600分视为考上一本,大于500分考上二本,大于400考上三本,其余视为未考上本科;
  • 在一本分数中,如果大于700分,考入北大,大于650分,考入清华,大于600考入人大。

示例:

#include<iostream>
using namespace std;
int main() {
	int score = 0;
	cout << "请输入考试分数:" << endl;
	cin >> score;
	if (score > 600)
	{
		cout << "我考上了一本大学" << endl;
		if (score > 700)
		{
			cout << "我考上了北大" << endl;
		}
		else if (score > 650)
		{
			cout << "我考上了清华" << endl;
		}
		else
		{
			cout << "我考上了人大" << endl;
		}
	}
	else if (score > 500)
	{
		cout << "我考上了二本大学" << endl;
	}
	else if (score > 400)
	{
		cout << "我考上了三本大学" << endl;
	}
	else
	{
		cout << "我未考上本科" << endl;
	}
	return 0;
}

练习案例: 三只小猪称体重

有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?

#include <iostream>
using namespace std;
int main() {
    int maxw=0;
    int temp =0;
    cout << "请输入第一只小猪的体重:"<<endl;
    cin >> temp;
    if (temp > maxw){
        maxw = temp;
    }
    cout << "请输入第二只小猪的体重:"<<endl;
    cin >> temp;
    if (temp > maxw){
        maxw = temp;
    }
    cout << "请输入第三只小猪的体重:"<<endl;
    cin >> temp;
    if (temp > maxw){
        maxw = temp;
    }
    cout<<"最重的小猪的体重是:" << maxw <<endl;
}

三目运算符

语法:表达式1 ? 表达式2 :表达式3

解释:

如果表达式1的值为真,执行表达式2,并返回表达式2的结果;

如果表达式1的值为假,执行表达式3,并返回表达式3的结果。

示例:

#include <iostream>
using namespace std;
int main() {
	int a = 10;
	int b = 20;
	int c = 0;
	c = a > b ? a : b;
	cout << "c = " << c << endl;
	//C++中三目运算符返回的是变量,可以继续赋值
	
	(a > b ? a : b) = 100;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	return 0;
}

和if语句比较,三目运算符优点是短小整洁,缺点是如果用嵌套,结构不清晰

switch语句

语法:

switch(表达式)
{
	case 结果1:执行语句;break;
	case 结果2:执行语句;break;
	...
	default:执行语句;break;
}

示例:

#include <iostream>
using namespace std; 
int main() {

	//请给电影评分 
	//10 ~ 9   经典   
	// 8 ~ 7   非常好
	// 6 ~ 5   一般
	// 5分以下 烂片

	int score = 0;
	cout << "请给电影打分" << endl;
	cin >> score;

	switch (score)
	{
	case 10:
	case 9:
		cout << "经典" << endl;
		break;
	case 8:
		cout << "非常好" << endl;
		break;
	case 7:
	case 6:
		cout << "一般" << endl;
		break;
	default:
		cout << "烂片" << endl;
		break;
	}
	return 0;
}

注意1:switch语句中表达式类型只能是整型或者字符型
注意2:case里如果没有break,那么程序会一直向下执行
总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间

循环结构

while循环语句

语法:while(循环条件){ 循环语句 }

解释:只要循环条件的结果为真,就执行循环语句

在这里插入图片描述
示例:

#include <iostream>
using namespace std; 
int main() {
	int num = 0;
	while (num < 10)
	{
		cout << "num = " << num << endl;
		num++;
	}
	return 0;
}
num = 0
num = 1
num = 2
num = 3
num = 4
num = 5
num = 6
num = 7
num = 8
num = 9

do…while循环语句

语法: do{ 循环语句 } while(循环条件);

**注意:**与while的区别在于do…while会先执行一次循环语句,再判断循环条件

在这里插入图片描述
示例:

#include <iostream>
using namespace std; 
int main() {
	int num = 0;
	do
	{
		cout << num << endl;
		num++;

	} while (num < 10);
	return 0;
}
0
1
2
3
4
5
6
7
8
9

练习案例:水仙花数

**案例描述:**水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身

例如: 1 3 + 5 3 + 3 3 = 153 1^3 + 5^3+ 3^3 = 153 13+53+33=153

请利用do…while语句,求出所有3位数中的水仙花数。

#include <iostream>
using namespace std;
int main() {
    int a=100;
    int n1,n2,n3;
    do {
        n1 = a % 10;
        n2 = a/10 % 10;
        n3 = a/100 % 10;
        if (a == n1*n1*n1+n2*n2*n2+n3*n3*n3){
            cout<<a<<endl;
        }
        a++;
    }while(a<1000);
}

for循环语句

语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }

示例:

#include <iostream>
using namespace std;
int main() {
	for (int i = 0; i < 10; i++)
	{
		cout << i << endl;
	}
	return 0;
}
0
1
2
3
4
5
6
7
8
9

详解:

在这里插入图片描述

总结:while , do…while, for都是开发中常用的循环语句,for循环结构比较清晰,比较常用

练习案例:敲桌子

案例描述:从1开始数到数字100, 如果数字个位含有7,或者数字十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。

#include <iostream>
using namespace std;
int main() {
    for (int i = 0; i < 101; ++i) {
        if (i%10==7 || i/10%10==7 || i%7==0){
            continue;
        }
        cout<<i<<endl;
    }
}

嵌套循环

示例:

#include <iostream>
using namespace std;
int main() {
	//外层循环执行1次,内层循环执行1轮
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			cout << "*" << " ";
		}
		cout << endl;
	}
	return 0;
}
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 

**练习案例:**乘法口诀表

案例描述:利用嵌套循环,实现九九乘法表

#include <iostream>
using namespace std;
int main() {
    //第一层循环
    for (int i = 1; i < 10; ++i) {
        //第二层循环
        for (int j = 1; j < i+1; ++j) {
            cout<<i<<"*"<<j<<"="<<i*j<<endl;
        }
    }
}

跳转语句

break语句

作用: 用于跳出选择结构或者循环结构

break使用的时机:

  • 出现在switch条件语句中,作用是终止case并跳出switch
  • 出现在循环语句中,作用是跳出当前的循环语句
  • 出现在嵌套循环中,跳出最近的内层循环语句

示例1:

#include <iostream>
using namespace std;
int main() {
	//1、在switch 语句中使用break
	cout << "请选择您挑战副本的难度:" << endl;
	cout << "1、普通" << endl;
	cout << "2、中等" << endl;
	cout << "3、困难" << endl;

	int num = 0;

	cin >> num;

	switch (num)
	{
	case 1:
		cout << "您选择的是普通难度" << endl;
		break;
	case 2:
		cout << "您选择的是中等难度" << endl;
		break;
	case 3:
		cout << "您选择的是困难难度" << endl;
		break;
	}
	return 0;
}

示例2:

#include <iostream>
using namespace std;
int main() {
	//2、在循环语句中用break
	for (int i = 0; i < 10; i++)
	{
		if (i == 5)
		{
			break; //跳出循环语句
		}
		cout << i << endl;
	}
	return 0;
}

示例3:

int main() {
	//在嵌套循环语句中使用break,退出内层循环
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			if (j == 5)
			{
				break;
			}
			cout << "*" << " ";
		}
		cout << endl;
	}
	return 0;
}

continue语句

**作用:**在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

示例:

#include <iostream>
using namespace std;
int main() {
	for (int i = 0; i < 100; i++)
	{
		if (i % 2 == 0)
		{
			continue;
		}
		cout << i << endl;
	}
	return 0;
}

goto语句

语法: goto 标记;

如果标记的名称存在,执行到goto语句时,会跳转到标记的位置

示例:

#include <iostream>
using namespace std;
int main() {
	cout << "1" << endl;
	goto FLAG;
	cout << "2" << endl;
	cout << "3" << endl;
	cout << "4" << endl;
	FLAG:
	cout << "5" << endl;
	return 0;
}
1
5

数组

概述

所谓数组,就是一个集合,里面存放了相同类型的数据元素

特点1:数组中的每个数据元素都是相同的数据类型

特点2:数组是由连续的内存位置组成的

一维数组

一维数组定义方式

一维数组定义的三种方式:

  1. 数据类型 数组名[ 数组长度 ]; 如:int list[10]
  2. 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};如:int list[3] = {1,2,3}
  3. 数据类型 数组名[ ] = { 值1,值2 ...}; 如:int list[] = {1,2,3}

示例

#include <iostream>
using namespace std;
int main() {
	//定义方式1
	//数据类型 数组名[元素个数];
	int score[10];

	//利用下标赋值
	score[0] = 100;
	score[1] = 99;
	score[2] = 85;

	//利用下标输出
	cout << score[0] << endl;
	cout << score[1] << endl;
	cout << score[2] << endl;

	//第二种定义方式
	//数据类型 数组名[元素个数] =  {值1,值2 ,值3 ...};
	//如果{}内不足10个数据,剩余数据用0补全
	int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
	
	//逐个输出
	//cout << score2[0] << endl;
	//cout << score2[1] << endl;

	//一个一个输出太麻烦,因此可以利用循环进行输出
	for (int i = 0; i < 10; i++)
	{
		cout << score2[i] << endl;
	}

	//定义方式3
	//数据类型 数组名[] =  {值1,值2 ,值3 ...};
	int score3[] = { 100,90,80,70,60,50,40,30,20,10 };

	for (int i = 0; i < 10; i++)
	{
		cout << score3[i] << endl;
	}
	return 0;
}

一维数组数组名

一维数组名称的用途

  1. 可以统计整个数组在内存中的长度
  2. 可以获取数组在内存中的首地址

示例:

#include <iostream>
using namespace std;
int main() {

	//数组名用途
	//1、可以获取整个数组占用内存空间大小
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

	cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;
	cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;
	cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;

	//2、可以通过数组名获取到数组首地址
	cout << "数组首地址为: " << arr << endl;
	cout << "数组中第一个元素地址为: " << &arr[0] << endl;
	cout << "数组中第二个元素地址为: " << &arr[1] << endl;

	//arr = 100; 错误,数组名是常量,因此不可以赋值
	return 0;
}
整个数组所占内存空间为: 40
每个元素所占内存空间为: 4
数组的元素个数为: 10
数组首地址为: 0x7ffeede376f0
数组中第一个元素地址为: 0x7ffeede376f0
数组中第二个元素地址为: 0x7ffeede376f4

注意:数组名是常量,不可以赋值

总结1:直接打印数组名,可以查看数组所占内存的首地址

总结2:对数组名进行sizeof,可以获取整个数组占内存空间的大小

二维数组

二维数组定义方式

二维数组定义的四种方式:

  1. 数据类型 数组名[ 行数 ][ 列数 ];
  2. 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
  3. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
  4. 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};

建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性

示例:


int main() {
#include <iostream>
using namespace std;
	//方式1  
	//数组类型 数组名 [行数][列数]
	int arr[2][3];
	arr[0][0] = 1;
	arr[0][1] = 2;
	arr[0][2] = 3;
	arr[1][0] = 4;
	arr[1][1] = 5;
	arr[1][2] = 6;

	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

	//方式2 
	//数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
	int arr2[2][3] =
	{
		{1,2,3},
		{4,5,6}
	};

	//方式3
	//数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4  };
	int arr3[2][3] = { 1,2,3,4,5,6 }; 

	//方式4 
	//数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4  };
	int arr4[][3] = { 1,2,3,4,5,6 };
	return 0;
}

在定义二维数组时,如果初始化了数据,可以省略行数

二维数组数组名

  • 查看二维数组所占内存空间
  • 获取二维数组首地址

示例:

#include <iostream>
using namespace std;
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 << "二维数组第一个元素地址:" << &arr[0][0] << endl;
	cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
	return 0;
}
二维数组大小: 24
二维数组一行大小: 12
二维数组元素大小: 4
二维数组行数: 2
二维数组列数: 3
二维数组首地址:0x7ffee9b8e700
二维数组第一行地址:0x7ffee9b8e700
二维数组第二行地址:0x7ffee9b8e70c
二维数组第一个元素地址:0x7ffee9b8e700
二维数组第二个元素地址:0x7ffee9b8e704

总结1:二维数组名就是这个数组的首地址

总结2:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值