c++基本语法12.17-12.18

c++基本语法

运算符

首先假设a=2,b=3

运算符描述实例
+把两个操作数相加a+b=5
-从第一个操作数中减去第二个操作数b-a=1
*把两个操作数相乘a*b=6
/分子除以分母b/a=1
%取模运算符,整除后的余数b%a=1
++自增运算符,整数值增加1b++=4
自减运算符,整数值减少1a–=1

关系运算符

还是先假设a=2,b=3

运算符描述实例
==检查两个操作数的值是否相等,如果相等则条件为真。(A==B)不为真。
!=检查两个操作数的值是否相等,如果不相等则条件为真。(A!=B)为真。
>检查左操作数的值是否大于右操作数的值,如果是则条件为真。(A>B)不为真。
<检查左操作数的值是否小于右操作数的值,如果是则条件为真。(A<B)为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A>=B)不为真。
<=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。(A<=B)为真。
|

赋值运算符

这个很少会用到,只做理解要求

运算符描述实例
=简单的赋值运算符,把右边操作数的值赋给左边操作数C=A+B将把A+B的值赋给C
+=加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数C+=A相当于C=C+A
-=减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数C-=A相当于C=C-A
*=乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数C=A相当于C=CA
/=除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数C/=A相当于C=C/A
%=求模且赋值运算符,求两个操作数的模赋值给左边操作数C%=A相当于C=C%A

i++与++i的区别

其实这个不是很难理解
i++其实就是先把这一行运行 i这个值/赋值什么的 完成以后,再在下一步增加一行i++
而++i就相反
i++其实就是先在上一步增加 i++ 完成以后,再在下一步用i++后的值进行运算

下面来看下实例
在这里插入图片描述
首先我们来看
第一行,先对i进行了赋值
然后第二行,是sum=i++
根据我们上面所说的
那么我们可以改写为
在这里插入图片描述
所以说,sum被赋值的值是 7!!!
而不是 i++后的8
所以最后输出的还是7

但是我们要注意一下以下的情况
在这里插入图片描述
先算一算结果是多少吧?

首先到了第三行的时候

在这里插入图片描述
所以我们知道
最后,sum=3+4+5=12
而 i 是 6

逻辑运算符

这次假设a=1,b=0

运算符描述实例
&&称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A&&B)为假。
||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(A||B)为真
!称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A&&B)为真。
其实也就是
&&是并,全部是,才是 || 是或,有一个是就行

数组

其实和python里面的列表是一模一样的,就是他可以放的东西比较局限,只能放入数字,
创建数组的方法

int list[x];

其实和设置变量是差不多的,如果你在变量后面加上了 [ ]
那么他就是一个 数组

[] 里面的 x 代表的是这个列表有多长

如何赋值捏?

第一种全部赋值法,只能用于初始化数组的时候,后面就只能一个个赋值

int a[3] =  {0,1,2}; 
int b[]  =  {1,2,3,4};	//b和a的效果是一样
int aa[2][2] = {0,1, 5,6}; //二维数组

第二种,就像python一样那样子赋值

int list[20];
list[0]=10;
list[1]=11;
.
.
.
.

所以没什么好说的?
但是!!!!
初始化数组的时候里面的全部数据都是随机的
例如上面的

int list[2];
cout << list[1];

输出

2600960

所以如何让数组全为0,捏?

第一种方法
把数组开在i主函数的外面
第二种方式

int list[2]={0};

那么就全是0了

字符数组

和上面一样,不多赘叙
特别地,字符数组不能放入单词或是中文。。。
定义

char c[3];
c[0] = 'a';
c[1] = 'b';
c[2] = 'c';

等价于

char c[3] = {'a','b','c'};

又等价于

char [] = {'a','b','c'};

又等价于

char [] = 'abc';

又等价于

char [] = {'abc'};

如果出现单词,那么数组会自动把单词拆分为一个个字母并录入数组当中

几个函数

sizeof() : 获取的是字符数组的大小,而不是字符数组里字符的长度,也就是整个数组的长度

strlen():字符数组里字符的长度(长度不算’\0’) size_t strlen(char *str)
仅仅只是数组里面含有内容的长度

char a[20]="sunday";
sizeof(a);  //结果是20不是6
strlen(a);  //6

strcpy():将后面的字符串赋值到前面的字符数组中
就是后面的替代了前面的

char list[20]= "abc";
	strcpy(list,"d");
	for (int i = 0; i < strlen(list); i++)
	{
		putchar(list[i]);
	}

输出的是

d

strcmp():比较两个字符串的大小 int strcmp(const char *str1,const char *str2)

相等:返回0 str1<str2: 返回-1 str1>str2:返回1

注意:比的不是两个字符串的长度,而是字符在ascii码中对应的数值比如hello<how

int ret=strcmp("hello","how");
printf(ret);  //-1

strcat():将两个字符串连接到一起 char *strcat(char *str1,const crar *str2)

将后面的字符串拼接到前面的字符串后面,注意只有str2可以用const修饰

注意:拼接后的字符长度一定要小于str1的数组长度,否则无法容纳

char d[20]="haha";
char c[10]="xixi";
strcat(d,c);
puts(d);   //hahaxixi

gets类似于scanf函数,用于读取标准输入
区别是 停止的标准是 换行,而不是像scanf的空格

gets 函数从STDIN(标准输入)读取字符并把它们加载到str(字符串)中,直到遇到换行符(\n)或到达EOF。gets遇到\n后,不会存储\n,而是将其直接翻译为空字符’\0’

char a[10];
gets(a);
printf(a)

puts类似于printf函数,用于输出标准输出。

相对于printf函数,puts 只能用于输出字符串,同时多打印一个换行符。
等价于printf(“%s \n” , c);

char a[10];
	gets(a);
	puts(a);

getcharputchar也可以用于输入以及输出,但是只限于一个字符

判断语句

这个其实没什么好说的,和python的逻辑基本一致,只是写法不同
if

int a=1;
	int b=2;
	if (a+1==b)
	{
		/* code */
		printf("yes");
	}

输出

yes

while

int i=0;
int x=6;
while (i<=10)
{
	i++;
	cout << x << " ";
}

输出

6 6 6 6 6 6 6 6 6 6 6

另一种情况

int i=0;
	int x=6;
	
	do{
		i++;
		cout << x << " ";
	}while (i<=10);

酱紫是先循环在进行判断是否再循环,所以基本会比上一种情况多一次循环

输出

6 6 6 6 6 6 6 6 6 6 6

函数

这一部分其实和python是十分像的,所以也不多赘叙,只是简单地写一下他的语法

int fun(int a,int b)
{
    printf("%d",a+b);
    return 5;
}

int main()
{
    printf("\n%d",fun(1,2));
    // 先执行函数,再执行printf
    return 0;
}

输出

3
5

首先,一般的函数都会有返回值,默认返回值是1 !!!
如果想没有返回值,那么设置函数的类型可以使用 void

用法,其实一样

void c(int a,int b)
{
    printf("%d\n",(a+b)*2);
}

int main()
{
    c(1,2);

    return 0;
}

输出

6

酱紫就没有返回值了

结构体

其实这个和python的类是很像的,就是可能没有函数?只能储存变量

创建结构体

struct book
{
	string name;// 第一个变量,类型为字符串,可以存储长字符
	int prize;// 第二个变量,类型为 int
	string author;// 第一个变量,。。。
};

创建“对象”,并且初始化里面的变量

struct book
{
	string name;// 第一个变量,类型为字符串,可以存储长字符
	int prize;// 第二个变量,类型为 int
	string author;// 第一个变量,。。。
};

int main()
{
	book one;
	one.name = "hello";
	one.prize = 17;
	one.author = "yourself";
}

酱紫我们就可以调用结构体的变量数值

struct book
{
	string name;// 第一个变量,类型为字符串,可以存储长字符
	int prize;// 第二个变量,类型为 int
	string author;// 第一个变量,。。。
};

int main()
{
	book one;
	one.name = "hello";
	one.prize = 17;
	one.author = "yourself";
	cout << one.name;
}

输出

hello

另一种方式初始化数值

book two={"haha",20,"me"};
cout << two.name;

输出

haha

还可以嵌套结构体
但是好像没什么用

struct book
{
	string name;
	int prize;
	string author;
};
struct person
{
	string name1;
	int age;
	string gender;
	struct book haha;
};
int main()
{
	person jenny={"jenny",20,"gril"};
	jenny.haha ={"haha",10,"jenny"};
	cout << jenny.haha.prize;
	
}

其实就是相当于
在这里插入图片描述
相当于思维导图

递归

emm没什么好说的,其实就是return哪里的东西,和python基本一样,因为是个逻辑算法

就是有点费脑子

// 递归部分
int fac(int n)
{
	if(n==0) return 1;//如果参数是0或者1返回1
	else return n*fac(n-1);//否则返回n和下次递归的积
}
int main()
{
	int n;
	cin>>n;
	cout<<fac(n);//函数调用
	return 0;
}

就酱紫吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值