初识C语言 2.0

一、选择语句

人生中处处面临着选择,我们生活中的选择有不少。例如:选择好好学编程->成为优秀的程序员;不好好学编程->无法成为优秀的程序员。让我们写成代码。
在这里插入图片描述
在此程序中,若我们输入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,接下来打印,打印时用到了 . (结构成员操作符)。
打印出的结果是这样的
在这里插入图片描述

注:本次学习暂时结束了,文章中有错误、不足之处欢迎大佬指正,让我们共同学习,共同进步,一切成功的秘诀,都在于我们不懈的追求,加油!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值