文章目录
一、选择语句
人生中处处面临着选择,我们生活中的选择有不少。例如:选择好好学编程->成为优秀的程序员;不好好学编程->无法成为优秀的程序员。让我们写成代码。
在此程序中,若我们输入1,则打印成为优秀的程序员,若输入其他,则打印无法成为优秀的程序员。
这就是选择语句,if()括号中写条件,若满足括号中条件,则执行if下面第一个分号前的语句或if下面第一个大括号中的语句。若不满足条件,则执行else后的语句。
注意:图1中if(a == 1),括号中条件为 a == 1,== 是判断a是否等于1,若写成 a = 1 ,那么 a = 1 意思为给 a 赋值1,那么if()条件判断语句为真(C语言中非 0 为真,0 为假),也就是说if()条件判断语句一直为真。
二、循环语句
我们生活中除了会碰到选择,也会按部就班循环做一些事情,比如日复一日写代码、上班、上学等等。那么这些循环在C语言中应该怎样表达呢?我们可以使用以下三个语句。
1.while语句
此代码中 while () 括号中写循环的条件,也就是说判断循环执行几次,若满足括号中的条件,我们执行花括号中循环体的内容,若不满足,则跳过循环。第六行我们定义了一个整型变量i 并赋值0,在循环体中我们打印了一行数据,并写到i = i + 1,此句意思为找到当前 i 的值,给 i 加1,并重新赋给 i 。这样使得我们的循环执行了五次,也就是运行后屏幕上打印了五行数据。
第十行代码中 i++ 可以简单理解为先用 i 的值,用完后对 i 进行 加1并重新赋值给 i 。
2.do while语句
前面讲到while循环,我们先判断while()条件是否满足,然后执行循环。那么,若我们想不论括号中条件是否满足,都先执行一次循环体中的内容,然后再根据条件判断是否执行循环,怎么办呢?这时候用do while循环就更加方便。让我们看一个例子。
do while循环大致是这样的:
do
{
循环体
}while (条件);
注意:在do while循环中,最后while()后的分号一定不要漏掉!!!
此代码中,我们观察一下,定义整型变量 i 并赋值 0,循环体中每次循环都给 i 加1,后面又发现while循环的条件为 i < 0,条件根本不满足,这时候会先执行一次循环体中的内容,也就是先在屏幕上打印一行数据,再根据条件判断是否循环。
也就是说 do while循环能使循环体至少执行一次。
3.for语句
for语句和while语句有些相似,让我们来看一个例子。
由图可知,for循环大致是这样的:
for (初始化变量;循环条件;迭代)
{
循环体
}
for()循环大致可以利用此图理解:
开头我们定义了一个整型变量 i 赋值0,在for循环的开始,我们初始化变量 i ,若开始定义 i 时初始化过了,for循环中 i 的初始化可以省略,但要加分号,如图
for()中 i 的初始化有时可以省略,但后面的循环条件和迭代不可写错,更不能省略,否则会陷入死循环,或不能运行。(下面我们省略一下迭代)
可以看到,程序陷入了死循环。
关于①while循环,②do while循环和③for循环,我们可以大致理解为:
while循环 约等于 for循环,而do while循环与前两者有些许差异,我们要看情况决定使用哪个循环。
三、函数
函数我们大家可能并不陌生,数学中我们经常接触函数,比如f(x),我们可以把x的值传给f(x),然后f(x)给我们一个答案。在C语言中也是一样,我们可以简单利用下图理解一下
函数就像一个工厂,我们为工厂提供一个原材料,经工厂加工得到成品。在C语言中,我们为函数提供参数,经过函数的处理,得到我们想要的结果。
让我们来看一个例子(输入两个数,让函数求和)
利用函数时,要先写函数如何使用,再定义函数,像此例,我们定义两个整型变量a,b并初始化,输入a,b,利用ADD函数求和,a,b是ADD函数的参数(因为求a + b),把两个参数传给ADD(),用ADD()求和并返回一个值,再把返回值赋给n,最后打印n。
明确思路写好函数的用法,这时候函数不能正常工作,我们需要让系统知道这个函数是做什么的,需要在开头定义一下,main()函数是程序的开始,所以我们在上面定义。
写好ADD()函数要接收传过来的参数,接收a和b(都是整型),重新定义一下a和b,告诉函数是两个整型,函数体重新定义一个变量z,把a + b的值赋给z,利用函数求到和了,这时候要让得出来的结果发到n手中(最后要打印n),要让程序知道a和b的和是多少,所以就return z。又因为z是整型,所以在开头定义函数时,要写 int ADD()。这时候函数求到的结果就传回了变量 n 中。
假设我们输入 1 和 2,结果如图
还有另一种更好的写法,在定义函数时,接收两个参数,函数体return a + b;也就是直接返回两个参数和的值。
四、数组
我们学会了定义一个变量存放一个值,但是我们想要一下存放10个值怎么办呢,定义10个变量就有点繁琐,这时候我们就用到了数组。
1.数组的定义
定义:数组就是一种相同类型元素的集合。
定义一个整型数组,最多存放10个元素。
2.数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。
由上图我们可以看出,如果10个元素的数组,那么下标最多到9,也就是下标从0 ~ 9。
3.数组的使用
在上面的数组中,arr[ 0 ] = 1 ; arr [ 1 ] = 2 ; 以此类推
让我们来看一个例子(打印数组)
我们可以定义了一个整型变量 i ,可以利用for循环和arr [ i ]来打印数组,随着 i 的增加,依次打印数组中的值。
注意:定义数组时,数组的大小不能是变量。
若为变量,程序会报错。
利用#define定义的常量则可以。如图
五、操作符
算数操作符 |
---|
+ |
- |
* |
/ |
% |
移位操作符 |
---|
>> |
<< |
位操作符 |
---|
& |
^ |
| |
赋值操作符 |
---|
= |
+= |
-= |
*= |
/= |
&= |
|= |
^= |
>>= |
<<= |
单目操作符 | 含义 |
---|---|
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(单位:字节) |
~ | 对一个数的二进制按位取反 |
– | 前置、后置– |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
关系操作符 | |
---|---|
> | |
>= | |
< | |
<= | |
!= | 用于测试“不相等” |
== | 用于测试“相等” |
逻辑操作符 | |
---|---|
&& | 逻辑与 |
|| | 逻辑或 |
逗号表达式 |
---|
exp1,exp2,exp3… expN |
下标引用、函数调用和结构成员 |
---|
[ ] |
( ) |
. |
-> |
六、常见关键字
常见的关键字有:break continue case while for… …
C语言本身定义好了许多关键字,我们是不能自己定义关键字的。定义变量时,变量名不能与关键字完全相同,例如
int for = 0; //这是错误的
int For = 0; //这是合法的
1.关键字typedef
typedef 也是众多关键字中的一个,理解为类型重命名。
我们在定义变量时,若定义int unsigned变量,这种类型名比较长,我们可以利用typedef来重新定义一下类型名,这样会方便许多。
我们在开头把unsigned int定义为 u_int,注意结尾要加分号。
2.关键字static
还有一个关键字叫static,它可以修饰变量和函数。
(1)修饰局部变量
此段代码运行后再屏幕上打印5个1。
我们利用一下static再看看
发现此段代码打印了 1 2 3 4 5。
当static修饰局部变量时,会改变局部变量的生命周期。作用是让局部变量出作用域之后依然存在,直到该程序结束,生命周期才会结束。
(2)修饰全局变量
当static修饰全局变量时,这个全局变量只能在本源文件中使用。
(3)修饰函数
static修饰函数时和修饰全局变量时相似,修饰函数时,该函数只能在本源文件中使用。
七、#define定义常量和宏
#define MAX 100 //#define 定义的标识符常量
#define ADD(x,y) ((x) + (y)) //#define 定义的宏
此代码中我们定义了一个宏,求a与b的和。#define 定义宏与前面讲到定义函数类似。
八、指针
1.内存
内存在电脑上是特别重要的,我们的程序都在内存中运行。为了有效利用内存,我们把内存分为好多个单元,每个单元的大小为 1 字节(byte),并对每个内存单元进行了编号,这样可以更加高效的利用内存
2.指针变量的大小
地址储存我们需要定义指针变量,何为指针变量? 就是指针类型的变量。
例如:
我们定义了一个整型变量a并赋值1。定义了一个指针变量,用来存放a的地址,int* p 可以理解为 int* 是一个指针类型,p是一个变量。这时候,变量p中就存放了a的地址,我们打印一下
可以证明变量p中放的是a的地址。
注意:打印指针变量要用%p
假设我们要定义多个指针变量时,该怎么办呢?
int *p,*a,*b,*c;
像上面代码块一样定义,一个*对应一个变量,切记不能像下面这样。
int* p,a,b,c;
这是错误的,这样定义的p是一个指针变量,是int* 类型,而a,b,c都是int类型。
我们对指针变量有一个初步的了解了,那么每种指针类型的大小又是多少呢?我们写代码来探究一下
如图,我们发现,在x64上,char* 、short*、int*、double的大小都是8 byte。
如图,在x86上,char、short*、int*、double*的大小都是4byte。
九、结构体
在C语言中,当我们描述一个事物时,如学生,我们要得到名字、年龄、性别、学号等,需要定义多个变量,就显得尤为麻烦,这时我们可以使用结构体。
如下图
要使用结构体,我们需要用到一个关键词:struct
开头先进行定义,struct Stu,在main函数下我们重新定义一个struct Stu类型的变量s,接下来打印,打印时用到了 . (结构成员操作符)。
打印出的结果是这样的
注:本次学习暂时结束了,文章中有错误、不足之处欢迎大佬指正,让我们共同学习,共同进步,一切成功的秘诀,都在于我们不懈的追求,加油!