什么是运算符?诶~,其实我们一直在用运算符,比如我们的 +,-,*,/ 等等都是运算符。今天我们就先来讲讲运算符。这是结合我自己的理解,我认为自己讲的肯定比一些教科书讲的要更清楚一些,我一般是用最少的字来解释这些东西,还是那句话,人民喜欢的艺术才是好艺术。
逻辑运算符
首先我们要知道,运算符其实还可以细分,分为很多种类。
但是我在这只讲逻辑运算符,和它跟着的关系运算符。因为我认为这是最重要的一种运算符,像+,-,*,/不需要我讲都知道是算数运算符,'='这种符号是赋值运算,但是像什么三目运算符,左移运算符.....等等又需要更深入的讲,而且大部分也不怎么常用。如果想知道这些,建议去看视频理解。
首先我们要知道,||这是逻辑或,&&是逻辑与。
讲逻辑运算我们先讲关系运算> < == 这三个
关系运算
我们直接举例子
注意我们判断相等是用 ==
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 10 == 10;//因为10==10条件为真所以赋值为1
int b = 10 > 20; //因为10>20条件为假为假所以赋值为0;
int c = 10 < 20; //因为10<20条件为真,所以赋值为1
printf("%d %d %d ", a, b, c);打印101
return 0;
}
运行代码:
还要注意一点:满足判断我们一般叫做真,一般值为1。不满足叫做假,一般值为0。
||逻辑或
其实在符号两边会放判断。我们直接举个列子
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);//等待输入一个数字
if (a > 10 || a < 5) 如果一个数字大于10,或者小于5都可以被打印
{
printf("%d", a);
}
return 0;
}
我么输入11试一试:
&&逻辑与
我们还是用刚才的那个例子,把或改为与试试:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if (a > 10 && a < 5)//a数字他是既要大于10又要小于5才能被打印,想想有这个数字吗?
{
printf("%d", a);
}
return 0;
}
所以不用试都知道没有这个数字。
总结:
我们知道了吧!||是只要其中一个满足就进入,&&是必须两个都满足才进入。
说着只讲逻辑运算符,其实已经讲了好几种运算符了。
含数:
在C语言的函数并不像数学那样的函数,C语言的函数更像是种工具。
我们先浅浅讲一下数组
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//在C语言像这样的就是对一个数组的初始化
//[10]表示有10个数字,arr是数组的名字,
//用{}这种括号讲值括起来
//每个值用,号隔开
我们对一个数组打印的化我们一般这样做
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i < 10; i++)//数组下标从0开始,将i初始化为0。
{
printf("%d ", arr[i]);访问每个值需要数组名(这里的数组名是arr),加上解引用[],[i]就是我们想
} //访问的第几个数字
return 0;
}
现在我们不要问为什么要这么做,只需要知道这么做就行了
运行:
这时候我们想一想假如我们有10个数组都需要打印呢?每个数组都这么敲吗?这时候我们的函数就起作用了。
我们来看一个打印函数的实现
void PrintArr(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
}
我们用一张图片来理解
arr就是我们传入的数组,n就是我们要出入数组的长度。
我们来看这个代码:
void PrintArr(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int arr1[5] = { 1,2,3,4,5 };
PrintArr(arr, 10);//打印arr
printf("\n");
PrintArr(arr1, 5);//打印arr1
return 0;
}
我们运行:
我们就打印arr和arr1了。
我想你已经了解了函数的一部分功能了,可减少我们重复的代码,减少我们的代码量。函数就像个工具一样,想必你也知道为什么了。
细节:
我们粗略讲了讲函数,但是我认为还有几个细节的点。
int Func(int x,int y)//返回类型为int,传入两个int类型的值x,y
{
x = 10;将x赋值为10
y = 20;将y赋值为20
return x + y;
}
int main()
{
int x = 1;
int y = 2;
int c=Func(x, y);//c来接收返回值,传入x,y。
printf("%d %d %d",x,y,c);
return 0;
}
我们看看这个代码,最后们打印什么呢?
结果是1,2,30,为什么呢我们不是把x赋值为10,y赋值为20了吗?
其实不然,我们要了解一个东西:实参和形参的关系。
记住:我们每次调用函数,传入的是实参,函数接受的是形参。形参是实参的临时拷贝,形参的改变不会改变实参,只有解引用形参才会改变实参。
在这个函数x,y就是形参,不会改变实参x,y的值。这里是个特殊例子,形参和实参的名字都一样。
我这样解释为什么能一样:因为Func是一个新的函数,main函数里的x,y与Func x,y不相同,一个函数里不能存在相同的变量名,如果想深入理解,请去看看函数栈帧的视频。
为什么又说解引用能改变值呢?这里我们先不讲,因为牵扯到指针的问题。