IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 初识C语言--第二弹 -> 正文阅读

[C++知识库]初识C语言--第二弹

🦖作者:学写代码的恐龙
🦖博客主页:学写代码的恐龙博客主页
🦖专栏:【初级c语言】
🦖语录:?未来的你,一定会感谢现在努力奋斗的自己?
在这里插入图片描述

八:函数

大家先看下面这段代码:

#include <stdio.h>
int main()
{
	int num1 = 1;
	int num2 = 2;
	int sum = 0;
	sum = num1 + num2;
	printf("%d\n", sum);
	return 0;
}

这段代码执行了一个简单的求和操作,首先我们定义了两个变量num1和num2,然后定义了一个变量sum用来存储num1和num2的和,最后把sum打印出来就得到了我们想要的结果了。那么大家想一下,如果我还想求变量a和b的和,是不是需要重复上面的操作,如下面这段代码:

#include <stdio.h>
int main()
{
	int num1 = 1;
	int num2 = 2;
	int sum = 0;
	sum = num1 + num2;
	printf("%d\n", sum);
	int a = 3;
	int b = 4;
	int c = 0;
	c = a + b;
	printf("%d\n", c);
	return 0;
}

可以看出来,这段代码的4-8行和9-13行的格式一模一样。那我们如果还有100组或者更多组的数字求和岂不是要把4-8行或者9-13行这段代码重复写上几百遍?这当然是非常不方便的。此时我们的函数就出现了,函数就相当于一个工厂,我们可以把各种材料零件送去工厂,通过工厂的加工我们就可以得到一个完整的产品。**函数也是这样,我们可以把多组数据送进函数,通过函数的加工我们就可以得到我们想要的结果。**下面就让我们把求和这个操作封装成一个函数:

int add(int x, int y)
{
	int sum = 0;
	sum = x + y;
	return sum;
}

这就是一个函数,其中第一行的add叫做函数名add前面的int表示该函数的返回值是int类型,这时可能会有同学会疑惑了:返回值是什么?大家回想一下,我们这个函数实现的是两个数的求和操作,既然是求和,那我们就需要在函数求完和后把这个和给交出来,因此就有了返回值这个概念。那么这个函数的返回值就是函数所求得的两数和,因为它是一个整数,所以就是int类型。add后面还有一对括号里面的x和y叫做参数,这一点就和我们数学函数里的自变量是一个意思,不过这里的参数必须得规定它的类型,我们这个函数是用来求两数和的,那我们如果把字符型数据’a’和’b’作为参数传进函数里当然是不可以的,因此这里我们限制了这里的参数必须是int型。接着大括号{}里面就是我们的函数体,通过函数体的“加工”就可以得到我们想要的结果,这里我们先定义了一个变量sum用来存储两数和让sum等于x+y,最后return sum返回sum的值。这样我们整个求和函数就搞定了。接下来只需要在主函数里调用这个求和函数就可以,具体方法看下面这段代码:

#include <stdio.h>
int main()
{
	int num1 = 1;
	int num2 = 2;
	int sum = 0;
	sum = add(num1, num2);//第七行
	printf("%d\n", sum);
	int a = 7;
	int b = 6;
	int c = 0;
	c = add(a, b);//第十二行
	printf("%d\n", c);
	return 0;
}

int add(int x, int y)
{
	int sum = 0;
	sum = x + y;
	return sum;
}

在这段代码主函数中的第七行和第十二行,我们分别调用了add函数,第七行我们把num1和num2也就是1和2传给了add函数,第十二行我们把a和c传给了add函数。因为add函数有返回值,那么我们当然就需要一个变量来存储这个返回值,代码中我们分别用sum和c来存储返回值,这也就意味着,这时的sum就是num1和num2的和,也就是1+2的结果,那么sum此时就等于3,同理此时c就等于13。有关函数就先给大家讲解到这里,后面会单独详细的再介绍函数。

九:数组

C语言中给出了数组的定义:一组相同类型元素的集合。

9.1:数组的定义

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	char ch[5] = { 'a','b','c','d','e' };
	return 0;
}

上面这段代码就是创建和初始化数组的一种方法,其中arr和ch叫做数组名,int表示arr这个数组存的是整型元素char表示ch这个数组存的是字符型元素。[10]和[5]表示数组存储元素的个数,这里也就说明arr这个数组可以存10个元素并且每个都是整型,而ch这个数组可以存5个元素并且每个都是字符型。我们可以通过监视窗口来查看数组中存储元素的值,如下图:

在这里插入图片描述
关于数组这里还有一个小知识点就是,如果我定义了一个可以存放10个元素的数组,但实际上只给它初始化了5个元素,那结果会是什么样的呢?实践出真知,直接上截图:
在这里插入图片描述
在截图的代码中我们我们分别定义了整型数组arr和字符数组ch,他俩都可以存储10个元素,但在初始化的时候都只给了他们5个元素。通过监视窗口我们可看出,**对于整型数组没有初始化的全部默认为0,对于字符数组没有初始化的默认为’\0’。**这一点希望大家可以记住,这叫做数组的不完全初始化。

9.2:数组的使用

我们可以通过数组的下标来引用当前下标对应存储的元素,但是注意数组这里有一个小小的规定,数组的下标是从0开始的,也就意味着第一个元素对应的数组下标是0,第二个元素对应的数组下标是1,以此类推。这一点我们也可以通过上图的监视窗口看出来,最左边那一列[0],[1],[2]…就是下标,右边那一列就是同行左边下标所对应存储的元素。在这里插入图片描述
上面的代码截图中我们希望打印出arr[1]的值,也就是数组中的第二个元素值(因为数组下标从0开始,数组中第一个元素对应的下标是0),此时就把2打印出来了。我们还可以用一个while循环把数组中的所有元素都给打印出来,具体代码如下:

#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10};
	int i=0;
	while (i<10)
	{
		printf("%d ", arr[i]);
		i = i + 1;
	}
	return 0;
}

十:操作符

10.1算数操作符

算数操作符
+ - * / %

需要注意的是:这里的*代表数学里的乘号这里的/代表数学里的除号这里的%叫做取模或者取余。重点介绍一下/和%。

10.1.1:/操作符:

#include <stdio.h>
int main()
{
	int n = 10 / 4;
	printf("%d\n", n);
	return 0;
}

大家看上面这段代码,定义了一个整型的n等于10/4,大家猜猜此时的n应该等于多少呢,这时有很多小伙伴可能就会想到,既然这个/相当于数学中的除号,那不就是10除以4,结果不就是2.5,可事实真是如此嘛?
在这里插入图片描述
通过执行结果我们可以看出来,这里的n=2,并不像我们之前想的那样n不等于2.5。这时候有许多聪明的小伙伴可能又会想到n前面不是int嘛,int不是表示整型,那结果当然得是一个整数,所以这里直接就把后面的.5给省略了呗,那我们再来看看,如果我们把int换成float浮点型,这总该可以表示出小数了吧?
在这里插入图片描述
上图中我们已经把int改成了float(这里注意一下,float型对应的格式符为%f),但结果却是2.000000并不是我们想的得到的2.5。其实呀,如果/的两端都是整数,则执行整数除法,如果/两端至少有一个是浮点数,才执行浮点数的除法。

上图中我们只是在10的后面加了一个.0,这时就得到了我们想要的结果2.5。

10.1.2:%操作符:

%操作符的两端都必须是整数。
在这里插入图片描述
通过上面的代码我们可以看出来10%3的结果是1,其实就是10除以3的余数。

10.2:移位操作符

移位操作符
>> <<

10.3:位操作符

位操作符
& ^

还有这个 | 符号。(表格里打不进去)

10.4:赋值操作符

赋值操作符
= += -= *= /= &= ^= >>= <<=
#include <stdio.h>
int main()
{
	int a = 0;//这叫初始化
	a = 20;//这叫赋值
	return 0;
}

+=、-=、*=、/=、&=、^=。a=a+1就可以写成a+=1后面几个同理。

10.5:单目操作符

单目的意思是只有一个操作数。

  • !逻辑反操作符
  • 正值 +
  • 负值 -
  • & 取地址
  • sizeof 操作数的类型长度(以字节为单位)
  • ~ 对一个数的二进制按位取反
  • 前置、后置- -
  • 前置、后置++
  • 间接访问操作符(解引用操作符) *
  • (类型) 强制类型转换

10.5.1:!逻辑反操作符

要弄清!逻辑反操作符,那么我们首先要知道在C语言中规定用0来表示假,非0表示真。
在这里插入图片描述
如上图,我们定义了一个a等于5,按照上面介绍的非0为真,那此时a就代表真,if语句的执行条件就是当if后面括号里的表达式为真就执行if下面的语句,这里我们成功打印出了“hehe”,那么我们把代码稍作修改,在a前面加一个!会发生什么结果呢?
在这里插入图片描述
此时我们在a的前面加了一个!,由于!是逻辑反操作符,本来a=5(非0)为真,加上!后!a就表示假了,这也就导致程序没有执行if下面的语句,转而执行else下面的语句了。可见!可以把假的变成真,真的变成假。

10.5.2:正值 +和负值 -

在这里插入图片描述
看上面这段代码,我们先定义了一个a等于10,然后定义了一个b等于-a,此时打印出的b为-10,可见 - 号有取相反数的作用。那 + 号呢?如果我们让a等于 -10,再让b等于+a,此时b是多少呢?
在这里插入图片描述
可见此时b等于-10和a的值一样,没有什么变化,所以我们一般用不上 +

10.5.3:sizeof与strlen的区别

sizeof是一个操作符用来计算变量或者类型所占用的内存空间大小,单位为字节
在这里插入图片描述
上面我们计算出变量a和b的大小都是4个字节。还可以把sizeof里面的a和b改成其对应的类型int和float其结果是一样的。

而strlen是库函数,是计算字符串的长度的,统计的是字符串中’\0’之前出现的字符个数,仅仅使用字符串。

10.5.4:前置、后置- -和前置、后置++

这里我们以前置、后置+ +为例来给大家说明。

10.5.4.1:前置++

在这里插入图片描述
通过结果可以看出a和b都是6,就说明这里的++a执行了两步操作,先让a加了1,然后把a+1后的结果也就是6赋值给了b,简单来说,++a是先对a进行++,然后再使用

上图代码就等同于下面这段代码:

#include <stdio.h>
int main()
{
	int a = 5;
	//int b = ++a;
	a = a + 1;
	int b = a;
	printf("a=%d b=%d", a, b);
	return 0;
}

10.5.4.2:后置++

在这里插入图片描述
通过运行结果可以看出,此时a为6,b为5。可见a++也执行了两个操作,他先是把a本来的值也就是5赋值给了b,然后再让a=a+1,简单来说,a++就是先使用a的值,然后再++。
上图的代码就等同于下面这段代码:

#include <stdio.h>
int main()
{
	int a = 5;
	//int b = a++;
	int b = a;
	a = a + 1;
	printf("a=%d b=%d", a, b);
	return 0;
}

通过上面的例子不难看出,不管是a++还是++a都是执行了两步操作,不同点在于a++是把a最初的值赋给了另一个变量,而++a则是把a+1后的值赋给了另一个变量,而它俩的共同点是a最终的值都是+1后的结果。

10.5.5:(类型) 强制类型转换

看下图代码,我们声明了一个整型变量a,同时给他初始化成3.14,3.14是浮点数,把它赋给a那岂不是牛头不对马嘴,这时编译器就会报警:
在这里插入图片描述

此时就可以用强制类型转换来消除警报,我们在3.14的前面加上(int),此时一个float型数据就被我们强制转换成了int型,代码没有报错也没有警告。
在这里插入图片描述
需要注意的是:将一个float型数据或者double型数据转换成int型数据只取整数部分。

10.6:关系操作符

关系操作符
> < >= <= != ==

其中!=是用来测试“不相等”,==是用来测试“相等”尤其是判断相等时一定要用两个等号。下面代码判断a是否等于5,如果a等于5则输出haha。
在这里插入图片描述
那如果我们不小心漏掉一个=呢?结果就变成下面这样:
在这里插入图片描述
因为漏了一个=,此时a=5就是一条赋值表达式,此时a变成5,只要if后面括号里为真就会执行if下面的语句,这里a=5,非0所以为真,最终打印出haha,但这显然与我们的意图不符。而且聪明的电脑也给我们提醒了应该用 ==。

10.7:逻辑操作符

  • && 逻辑与
  • | | 逻辑或

逻辑与就是我们日常生活中的“并且”,逻辑或就是我们日常生活中的“或者”,对于这两个操作符我们只关注真假。

aba&&ba逻辑与b

可见只有当a和b同时为真,a&&b才为真,a和b同时为假a||b才为假。

在这里插入图片描述
因为a=3为真,b=5为真,此时a&&b就为真,就会在屏幕上打印hehe。
在这里插入图片描述
此时a=0为假,所以a&&b为假,不输出hehe。
再举个栗子:当年龄在18–36岁,输出青年,18~36岁用逻辑表达式表示出来就是:age大于等于18同时age小于等于36,age>=18&&age<=36,下面用代码来实现:
在这里插入图片描述
注意:这里千万不能写成:18<=age<=36。因为如果当age等于2时,这个表达式从左往右执行,先是判断 18<=2 ,该表达式不成立也就是假,假就是0,此时18<=2变成0,接着判断0<=36,该表达式成立也就是真,真就是1,0<=36变成1,因此整个表达式18<=2<=36最后变成1,1就是真,但实际上2怎么可能大于18呢。大家可以看具体的代码执行结果:
在这里插入图片描述

10.8:条件操作符:

  • exp1 ? exp2 : exp3
    注:其中exp为表达式的意思。
    条件操作符的意思就是,如果exp1为真则返回exp2,为假则返回exp3。

下面代码执行的是一个输出较大数的操作:如果a>b则返回a,
在这里插入图片描述

10.9:下标引用、函数调用和结构成员

下标引用、函数调用和结构成员
[ ] () . ->

今天就分享到这里啦,喜欢的话可以点赞、评论和收藏哟!

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 20:56:54  更:2022-10-22 21:00:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 6:21:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码