C++菜鸟教程 - 从入门到精通 第三节

上节课的题

上节课的题,大家都做出来了吗?

看一下这道题:

题目描述

N!=1*2*...*N;
例5!=1*2*3*4*5=120.
编程求1!+2!+3!+...+N!.

输入

输入一行,只有一个整数n (1<=n<=10) 

输出

输出只有一行(这意味着末尾有一个回车符号),包括1个整数。

代码 

#include <iostream>
#include <cstdio>
using namespace std;
int n,c=1,v;            //变量,n是题目中的,c是单次阶乘的积,v是总和
int main(){
	cin>>n;             //输入
	for(int i=1;i<=n;i++){                 //从1~n,进行的n次阶乘
		for(int j=1;j<=i;j++){             //阶乘,(为什么是"j=1;j<=i;j++"呢),因为第一次阶乘乘到1,第二次乘到2........
			c*=j;                          //一次一次乘
		}
		v+=c;                              //一个数乘完后,加给总和
		c=1;                               //重置
	} 
	cout<<v<<endl;                         //最后输出
	return 0;
}

好了,非好不多说,我们直接进入正课.

五.大名鼎鼎的while循环

1.while格式

学过Python的朋友应该知道while.

while的格式是:

while(条件){
    需要执行的代码(循环节);
    ......
}

非常的简单.

2.通俗易懂的讲解

while循环,用Scratch的话来说,就是循环执行至...

但在C++中,while是: 只要.....,就循环

它是这样的,如上述代码,每次循环,while循环都会进行一次判断.

若条件成立(返回值为true),执行"循环节"

若条件不成立(返回值为false),跳出循环,来到循环下面,继续执行

3.while循环的好处 

while循环的好处有以下几点:

1. 灵活性:while循环允许根据特定的条件来重复执行一段代码,因此可以根据不同的情况来灵活地控制循环的次数。

2. 可读性:while循环的结构相对简单,易于理解和阅读。它只需要检查条件是否为真,然后执行循环体中的代码,这使得代码的逻辑更加直观。

3. 适用性:while循环适用于不确定循环次数的情况。当循环次数不能提前确定时,可以使用while循环来实现灵活的循环控制。

4. 有效性:由于while循环只需要检查条件是否为真,而不需要进行其他额外的操作,因此执行效率相对较高。

5. 可控性:while循环可以结合其他控制语句(如break和continue)来实现更复杂的控制流程,从而更灵活地控制循环的执行。

总的来说,while循环具有灵活性、可读性、适用性、有效性和可控性等优点,能够满足各种循环需求,是程序中常用的循环结构之一。

4.and or not

这三个东西,想必大家都不陌生

        (1).and

and,与的意思,在代码中,and的左右两头各接一个表达式,起到胶水的作用.

int a=8;
int b=4;
if(a>b and a/b==2){
    cout<<"Yes";
}

你说代码会输出什么?

答案:输出Yes

and两头有两个条件

a>b

a/b==2

先看第一个,a是8,b是4,a>b,成立

第二个,a/b=8/4=2   成立

故输出Yes

and两边只要有false,不管有几个,都返回false,只有都是true的情况下,才返回true,明白了吗? 

        (2).or 

or,或的意思,在代码中,or的左右两头也是各接一个表达式

int a=4;
int b=12;
if(a>b or a*3==b){
    cout<<"Yes";
}
​

来,看第一个条件表达式,a>b,4不大于十二,不成立(False)

第二个条件表达式,a*3==b,4*3=12,成立(True)

or和and不同,只要两边有true,不管几个,都返回true

如果全是false,那就返回false

         (3).not

这里的not,是取反的意思,它后面只跟一个条件表达式,但它可以让那个表达式的结果反转

not 1>3

看上面代码,1>3,很显然是False

但前面有个not,就不一样了,not可以让True变False

也可以让False变True

所以,not 1>3 的结果是:True 

 5.优先级那些事

优先级大全一览 

C++andornot运算符的优先级从高到低分别为not、and、or‌。not运算符的优先级最高,and运算符次之,or运算符的优先级最低‌1。

运算符的优先级顺序

在C++中,运算符的优先级顺序如下:

  1. 圆括号【()】‌:最高优先级,用于改变运算顺序。
  2. 下标运算符【[]】‌:第二级,用于访问数组元素。
  3. 成员访问运算符【.】和指向成员运算符【->】‌:第三级,用于访问对象的成员。
  4. 逻辑非运算符【!】‌:第四级,用于逻辑非操作。
  5. 按位取反运算符【~】‌:第五级,用于按位取反操作。
  6. 自增自减运算符【++ --】‌:第六级,用于自增和自减操作。
  7. 负号运算符【-】‌:第七级,用于取负值。
  8. 类型转换运算符【(类型)】‌:第八级,用于类型转换。
  9. 指针运算符和取地址运算符【*和&】‌:第九级,用于指针操作。
  10. 长度运算符【sizeof】‌:第十级,用于获取对象或类型的大小。
  11. 乘法运算符【*】和除法运算符【/】‌:第十一级,用于乘法除法运算。
  12. 取余运算符【%】‌:第十二级,用于取余操作。
  13. 加法运算符【+】和减法运算符【-】‌:第十三级,用于加法和减法运算。
  14. 左移运算符【<<】和右移运算符【>>】‌:第十四级,用于位移操作。
  15. 关系运算符【< > <= >=】‌:第十五级,用于比较操作。
  16. 等于运算符【==】和不等于运算符【!=】‌:第十六级,用于等于和不等于比较。
  17. 按位与运算符【&】‌:第十七级,用于按位与操作。
  18. ‌按位异或运算符【^】‌:第十八级,用于按位异或操作。
  19. ‌按位或运算符【|】‌:第十九级,用于按位或操作。
  20. 逻辑与运算符【&&】‌:第二十级,用于逻辑与操作。
  21. 逻辑或运算符【||】‌:第二十一级,用于逻辑或操作。
  22. 条件运算符【?:】‌:第二十二级,用于条件判断。
  23. 赋值运算符【= += -= *= /= %= >>= <<= &= |= ^=】‌:第二十三级,用于赋值操作。
  24. 逗号运算符【,】‌:第二十四级,用于顺序执行多个表达式‌。

逻辑运算符的优先级和用法

  • not(!)‌:逻辑非运算,优先级最高。例如:!a表示a为假时结果为真。
  • and(&&)‌:逻辑与运算,优先级高于or(||)。例如:a && b表示a和b都为真时结果为真。
  • or(||)‌:逻辑或运算,优先级最低。例如:a || b表示a或b为真时结果为真‌。

小知识

not可简写为!

and可简写为&&

or可简写为|| 

我标蓝的是位运算,大家注意一下

6.来个题 

题目描述

所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。

输入

一个正整数N(N <= 2,000,000)

输出

从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。如果输入为1,直接输出"End"。

样例输入

5

样例输出

5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End

代码 

#include <iostream>                      //头文件
#include <cstdio>
using namespace std;
int n;                                   //n,为初始数
int main(){
	cin>>n;                              //输入n
	while(n!=1){                         //进行"角谷猜想"的运算(到1为止)
		if(n%2==0){                      //n只要除得开2,就是偶数
			cout<<n<<"/2="<<n/2<<endl;   //按格式输出一步
			n/=2;                        //n进行除以2的运算
		} 
		else if(n%2==1){                 //n只要除不开2,就是奇数
			cout<<n<<"*3+1="<<n*3+1<<endl;    //按格式输出一步
			n=n*3+1;                     //对n进行乘3加1的运算
		} 
	} 
	cout<<"End";                         //输出"End"
	return 0;                            //没有return 0就毁了
}

好了.这个题到这,不再做赘述

六.一维数组登场

一维数组,是由数字组成的以单纯的排序结构排列的结构单一的数组,是计算机程序中最基本的数组。二维及多维数组可以看作是一维数组的多次叠加产生的。

在程序中可以使用下标变量,即说明这些变量的整体为数组,数组中的每个变量的数据类型是相同的。

当数组中每个元素都只带有一个下标时,称这样的数组为一维数组。

数组是计算机编程中的重要概念,运用数组可以方便地处理大规模的数据。

定义

数组的定义格式如下:

类型标识符 数组名[常量表达式]

说明:

①数组名的命名规则与变量名的命名规则一致

②常量表达式表示数组元素的个数。可以是常量或符号常量,不能为变量。

例如:      

int a[10];         //数组a的定义是合法的     int a[n];         //若n为变量,则数组a的定义是非法的

 使用

一维数组的引用主要通过下标法来实现,引用格式为:数组名[下标]。‌ 在C语言中,数组的下标从0开始,因此一个具有N个元素的数组,其下标的范围是0到N-1。例如,定义一个数组int a;后,可以通过a来引用数组中第7个元素(因为下标从0开始计数)。‌12

一维数组的定义和初始化

一维数组的定义格式为:类型说明符 数组名[常量表达式];例如,int a;定义了一个包含10个整数的数组。在定义数组时,可以初始化部分或全部元素,例如:

  • int a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 初始化前5个元素,其余自动填充为0
  • int a = {0, 1, 2, 3, 4}; 初始化前5个元素,其余自动填充为0
  • int a[] = {1, 2, 3, 4, 5}; 不指定数组长度,编译器会自动计算长度。

一维数组的引用示例

假设有一个数组int a = {1, 2, 3, 4, 5};,可以通过以下方式引用其元素:

  • a引用第一个元素,值为1。
    a[0]
  • a引用第五个元素,值为5。
a[4]

一维数组的遍历

由于一维数组的元素只能逐个引用,不能一次性引用所有元素,通常需要使用循环语句逐个输出各元素的值。例如:

for (int i = 0; i < 5; i++) {
    printf("%d ", a[i]);
}

这段代码会输出数组a的所有元素。

也可以在后面定义

int a = {1, 2, 3, 4, 5};
......
......
......
a[0]=100;
a[1]=200;

像这样

练习

题目描述

给你m个整数,将其逆序输出

输入

第一行一个整数m(3 <= m <= 100 ):数的个数 第二行m个整数(空格隔开)(这些数在0-9999999之间)

输出

m个整数(空格隔开)

样例输入

3
1 7 5

样例输出

5 7 1

代码 

#include<iostream>
using namespace std;
int n[101];                    //它说最多100个数,但要有预留空间
int m;                         //这就是题中的m
int main(){
    cin>>m;                    //先输入
    for(int i=0;i<m;i++){      //从0开始,到m-1结束(正好m次)
        cin>>n[i];             //输入
    }
    for(int j=m-1;j>=0;j--){   //从m-1开始,到0结束(正好反着来)[这里是j--]
        cout<<n[j]<<" ";       //别忘空格
    }
    return 0;
}

ok.

好了,今天的学习就到这里,我们下节课见.

下节预告

1.进行and or not 的练习

2.二维数组来了

3.一些零碎,但有用的知识

4.冒泡排序(初步尝试)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值