C语言简易教程.docx

上传人:b****2 文档编号:23435691 上传时间:2023-05-17 格式:DOCX 页数:18 大小:65.66KB
下载 相关 举报
C语言简易教程.docx_第1页
第1页 / 共18页
C语言简易教程.docx_第2页
第2页 / 共18页
C语言简易教程.docx_第3页
第3页 / 共18页
C语言简易教程.docx_第4页
第4页 / 共18页
C语言简易教程.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C语言简易教程.docx

《C语言简易教程.docx》由会员分享,可在线阅读,更多相关《C语言简易教程.docx(18页珍藏版)》请在冰豆网上搜索。

C语言简易教程.docx

C语言简易教程

C语言简易教程

变量(Variable)

现实生活中我们会找一个小箱子来存放物品,一来显得不那么凌乱,二来方便以后找到。

计算机也是这个道理,我们需要先在内存中找一块区域,规定用它来存放整数,并起一个好记的名字,方便以后查找。

这块区域就是“小箱子”,我们可以把整数放进去了。

C语言中这样在内存中找一块区域:

inta;

int又是一个新单词,它是Integer的简写,意思是整数。

a是我们给这块区域起的名字;当然也可以叫其他名字,例如abc、mn123等。

这个语句的意思是:

在内存中找一块区域,命名为a,用它来存放整数。

注意int和a之间是有空格的,它们是两个词。

也注意最后的分号,inta表达了完整的意思,是一个语句,要用分号来结束。

不过inta;仅仅是在内存中找了一块可以保存整数的区域,那么如何将123、100、999这样的数字放进去呢?

C语言中这样向内存中放整数:

a=123;

=是一个新符号,它在数学中叫“等于号”,例如1+2=3,但在C语言中,这个过程叫做赋值(Assign)。

赋值是指把数据放到内存的过程。

把上面的两个语句连起来:

inta;

a=123;

就把123放到了一块叫做a的内存区域。

你也可以写成一个语句:

inta=123;

a中的整数不是一成不变的,只要我们需要,随时可以更改。

更改的方式就是再次赋值,例如:

inta=123;

a=1000;

a=9999;

第二次赋值,会把第一次的数据覆盖(擦除)掉,也就是说,a中最后的值是9999,123、1000已经不存在了,再也找不回来了。

因为a的值可以改变,所以我们给它起了一个形象的名字,叫做变量(Variable)。

inta;创造了一个变量a,我们把这个过程叫做变量定义。

a=123;把123交给了变量a,我们把这个过程叫做给变量赋值;又因为是第一次赋值,也称变量的初始化,或者赋初值。

你可以先定义变量,再初始化,例如:

intabc;

abc=999;

也可以在定义的同时进行初始化,例如:

intabc=999;

这两种方式是等价的。

变量定义的位置

在VC或VS下,变量定义要放在函数的开头;也就是说,在定义变量之前不能有其他代码。

数据类型(DataType)

数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并使用这份数据。

但问题是,该如何使用呢?

我们知道,诸如数字、文字、符号、图形、音频、视频等数据都是以二进制形式存储在内存中的,它们并没有本质上的区别,那么,00010000该理解为数字16呢,还是图像中某个像素的颜色呢,还是要发出某个声音呢?

如果没有特别指明,我们并不知道。

也就是说,内存中的数据有多种解释方式,使用之前必须要确定;上面的inta;就表明,这份数据是整数,不能理解为像素、声音等。

int有一个专业的称呼,叫做数据类型(DataType)。

顾名思义,数据类型用来说明数据的类型,确定了数据的解释方式,让计算机和程序员不会产生歧义。

在C语言中,有多种数据类型,例如:

说明字符型短整型整型长整型单精度浮点型双精度浮点型无类型

数据类型charshortintlongfloatdoublevoid

这些是最基本的数据类型,是C语言自带的,如果我们需要,还可以通过它们组成更加复杂的数据类型,后面我们会一一讲解。

连续定义多个变量

为了让程序的书写更加简洁,C语言支持多个变量的连续定义,例如:

inta,b,c;

floatm=10.9,n=20.56;

charp,q='@';

连续定义的多个变量以逗号,分隔,并且要拥有相同的数据类型;变量可以初始化,也可以不初始化。

数据的长度(Length)

所谓数据长度(Length),是指数据占用多少个字节。

占用的字节越多,能存储的数据就越多,对于数字来说,值就会更大,反之能存储的数据就有限。

多个数据在内存中是连续存储的,彼此之间没有明显的界限,如果不明确指明数据的长度,计算机就不知道何时存取结束。

例如我们保存了一个整数1000,它占用4个字节的内存,而读取时却认为它占用3个字节或5个字节,这显然是不正确的。

所以,在定义变量时还要指明数据的长度。

而这恰恰是数据类型的另外一个作用。

数据类型除了指明数据的解释方式,还指明了数据的长度。

因为在C语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。

在32位环境中,各种数据类型的长度一般如下:

说明字符型短整型整型长整型单精度浮点型双精度浮点型

数据类型charshortintlongfloatdouble

长度124448

C语言有多少种数据类型,每种数据类型长度是多少、该如何使用,这是每一位C程序员都必须要掌握的,后续我们会一一讲解。

最后的总结

数据是放在内存中的,在内存中存取数据要明确三件事情:

数据存储在哪里、数据的长度以及数据的处理方式。

变量名不仅仅是为数据起了一个好记的名字,还告诉我们数据存储在哪里,使用数据时,只要提供变量名即可;而数据类型则指明了数据的长度和处理方式。

所以诸如intn;、charc;、floatmoney;这样的形式就确定了数据在内存中的所有要素。

最后需要说明的是:

数据类型只在定义变量时指明,而且必须指明;使用变量时无需再指明,因为此时的数据类型已经确定了。

这一节主要讲解C语言中的几个基本概念。

标识符

定义变量时,我们使用了诸如“a”“abc”“mn123”这样的名字,它们都是程序员自己起的,一般能够表达出变量的作用,这叫做标识符(Identifier)。

标识符就是程序员自己起的名字,除了变量名,后面还会讲到函数名、宏名、结构体名等。

不过,名字也不能随便起,C语言规定,标识符只能由字母(A~Z,a~z)、数字(0~9)和下划线(_)组成,并且第一个字符必须是字母或下划线。

以下标识符是合法的:

a,x,x3,BOOK_1,sum5

以下标识符是非法的:

3s不能以数字开头

s*T出现非法字符*

-3x不能以减号(-)开头

bowy-1出现非法字符减号(-)

在使用标识符时还必须注意以下几点:

C语言虽然不限制标识符的长度,但是它受到不同编译器的限制,同时也受到具体机器的限制。

例如在某个编译器中规定标识符前128位有效,当两个标识符前128位相同时,则被认为是同一个标识符。

在标识符中,大小写是有区别的,例如BOOK和book是两个不同的标识符。

标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号,因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。

关键字

关键字(Keywords)是由C语言规定的具有特定意义的字符串,通常也称为保留字,例如int、char、long、float、unsigned等。

我们定义的标识符不能与关键字相同,否则会出现错误。

你也可以将关键字理解为具有特殊含义的标识符,它们已经被系统使用,我们不能再使用了。

标准C语言中一共规定了32个关键字,大家可以参考C语言关键字及其解释[共32个],后续我们会一一讲解。

注释

注释(Comments)可以出现在代码中的任何位置,用来向用户提示或解释程度的意义。

程序编译时,会忽略注释,不做任何处理,就好像它不存在一样。

C语言支持单行注释和多行注释:

单行注释以//开头,直到本行末尾(不能换行);

多行注释以/*开头,以*/结尾,注释内容可以有一行或多行。

运算符

C语言也可以进行加减乘除运算,但是运算符号与数学中的略有不同,见下表。

加法减法乘法除法求余数

数学+-×÷无

C语言+-*/%

加号、减号与数学中的一样,乘号、除号不同,另外C语言还多了一个求余数的运算符。

一个整数自身加一可以这样写:

a+=1;

它等价于a=a+1;。

但是在C语言中还有一种更简单的写法,就是a++;或者++a;。

这种写法叫做自加或自增;意思很明确,就是自身加一。

相应的,也有a--和--a,叫做自减,表示自身减一。

++和--分别称为自增和自减运算符。

自增自减完成后,会用新值替换旧值,并将新值保存在当前变量中。

自增自减只能针对变量,不能针对数字,例如10++是错误的。

值得注意的是,++在变量前面和后面是有区别的:

++在前面叫做前自增(例如++a)。

前自增先进行自增操作,再进行其他操作。

++在后面叫做后自增(例如a++)。

后自增先进行其他操作,再进行自增操作。

自减(--)也一样,有前自减和后自减之分。

inta=10,a1=++a;

intb=20,b1=b++;

结果:

a=11,a1=11

b=21,b1=20

C语言提供了以下关系运算符:

关系运算符

含 义

数学中的表示

<

小于

<

<=

小于或等于

>

大于

>

>=

大于或等于

==

等于

=

!

=

不等于

关系运算符都是双目运算符,其结合性均为左结合。

关系运算符的优先级低于算术运算符,高于赋值运算符。

在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!

=,==和!

=的优先级相同。

在C语言中,有的运算符有两个操作数,例如10+20,10和20都是操作数,+是运算符。

我们将这样的运算符称为双目运算符。

同理,将有一个操作数的运算符称为单目运算符,将有三个操作数的运算符称为三目运算符。

常见的双目运算符有+、-、*、/等,单目运算符有++、--等,三目运算符只有一个,就是?

:

,我们将在《C语言条件运算符》中详细介绍。

关系运算符的两边可以是变量、数据或表达式,例如:

1)a+b>c-d

2)x>3/2

3)'a'+1

4)-i-5*j==k+1

关系运算符的运算结果只有0或1。

当条件成立时结果为1,条件不成立结果为0。

例如:

5>0成立,其值为1;

34-12>100不成立,其值为0;

(a=3)>(b=5)由于3>5不成立,故其值为0。

我们将运算结果1称为“真”,表示条件成立,将0称为“假”,表示条件不成立。

需要提醒的是,==才表示等于,而=表示赋值,大家要注意区分,切勿混淆。

在C语言中,也有类似的逻辑运算:

运算符说明结合性举例

&&与运算,双目,对应数学中的“且”左结合1&&0、(9>3)&&(b>a)

||或运算,双目,对应数学中的“或”左结合1||0、(9>3)||(b>a)

!

非运算,单目,对应数学中的“非”右结合!

a、!

(2<5)

逻辑运算的结果

在编程中,我们一般将零值称为“假”,将非零值称为“真”。

逻辑运算的结果也只有“真”和“假”,“真”对应的值为1,“假”对应的值为0。

1)与运算(&&)

参与运算的两个表达式都为真时,结果才为真,否则为假。

例如:

5&&0

5为真,0为假,相与的结果为假,也就是0。

(5>0)&&(4>2)

5>0的结果是1,为真,4>2结果是1,也为真,所以相与的结果为真,也就是1。

2)或运算(||)

参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。

例如:

10||0

10为真,0为假,相或的结果为真,也就是1。

(5>0)||(5>8)

5>0的结果是1,为真,5>8的结果是0,为假,所以相或的结果为真,也就是1。

3)非运算(!

参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。

例如:

!

0

0为假,非运算的结果为真,也就是1。

!

(5>0)

5>0的结果是1,为真,非运算的结果为假,也就是0。

优先级

逻辑运算符和其它运算符优先级从低到高依次为:

赋值运算符(=)<&&和||<关系运算符<算术运算符<非(!

&&和||低于关系运算符,!

高于算术运算符。

 

前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条……一直到最后一条语句,这称为顺序结构。

但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用,儿童因为年龄不够,没有权限使用。

这时候程序就需要做出判断,看用户是否是成年人,并给出提示。

在C语言中,使用if和else关键字对条件进行判断。

if和else是两个新的关键字,if意为“如果”,else意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。

总结起来,ifelse的结构为:

if(判断条件)

{

语句块1

}

else

{

语句块2

}

意思是,如果判断条件成立,那么执行语句块1,否则执行语句块2。

其执行过程可表示为下图:

所谓语句块(StatementBlock),就是由{}包围的一个或多个语句的集合。

如果语句块中只有一个语句,也可以省略{},例如:

if(age>=18)printf("恭喜,你已经成年,可以使用该软件!

\n");

elseprintf("抱歉,你还未成年,不宜使用该软件!

\n");

由于ifelse语句可以根据不同的情况执行不同的代码,所以也叫分支结构或选择结构

 

只使用if语句

有的时候,我们需要在满足某种条件时进行一些操作,而不满足条件时就不进行任何操作,这个时候我们可以只使用if语句。

也就是说,ifelse不必同时出现。

单独使用if语句的形式为:

if(判断条件){

语句块

}

意思是,如果判断条件成立就执行语句块,否则直接跳过。

其执行过程可表示为下图:

多个ifelse语句

ifelse语句也可以多个同时使用,构成多个分支,形式如下:

if(判断条件1){

语句块1

}elseif(判断条件2){

语句块2

}elseif(判断条件3){

语句块3

}elseif(判断条件m){

语句块m

}else{

语句块n

}

意思是,从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个ifelse语句之外继续执行其他代码。

如果所有判断条件都不成立,则执行语句块n,然后继续执行后续代码。

也就是说,一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。

 

在C语言中,共有三大常用的程序结构:

顺序结构:

代码从前往后执行,没有任何“拐弯抹角”;

选择结构:

也叫分支结构,重点要掌握ifelse、switch以及条件运算符;

循环结构:

重复执行同一段代码。

前面讲解了顺序结构和选择结构,本节开始讲解循环结构。

所谓循环(Loop),就是重复地执行同一段代码,例如要计算1+2+3+……+99+100的值,就要重复进行99次加法运算。

while循环

while循环的一般形式为:

while(表达式){

语句块

}

意思是,先计算“表达式”的值,当值为真(非0)时,执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行while后面的代码。

我们通常将“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执行循环体代码的过程。

用while循环计算1加到100的值:

#include

intmain(){

inti=1,sum=0;

while(i<=100){

sum+=i;

i++;

}

printf("%d\n",sum);

return0;

}

运行结果:

5050

代码分析:

1)程序运行到while时,因为i=1,i<=100成立,所以会执行循环体;执行结束后i的值变为2,sum的值变为1。

2)接下来会继续判断i<=100是否成立,因为此时i=2,i<=100成立,所以继续执行循环体;执行结束后i的值变为3,sum的值变为3。

3)重复执行步骤2)。

4)当循环进行到第100次,i的值变为101,sum的值变为5050;因为此时i<=100不再成立,所以就退出循环,不再执行循环体,转而执行while循环后面的代码。

while循环的整体思路是这样的:

设置一个带有变量的循环条件,也即一个带有变量的表达式;在循环体中额外添加一条语句,让它能够改变循环条件中变量的值。

这样,随着循环的不断执行,循环条件中变量的值也会不断变化,终有一个时刻,循环条件不再成立,整个循环就结束了。

如果循环条件中不包含变量,会发生什么情况呢?

1)循环条件成立时的话,while循环会一直执行下去,永不结束,成为“死循环”。

例如:

#include

intmain()

{

while

(1)

{

printf("1");

}

return0;

}

运行程序,会不停地输出“1”,直到用户强制关闭。

2)循环条件不成立的话,while循环就一次也不会执行。

例如:

#include

intmain()

{

while(0){printf("1");}

return0;

}

运行程序,什么也不会输出。

do-while循环

除了while循环,在C语言中还有一种do-while循环。

do-while循环的一般形式为:

do{

语句块

}while(表达式);

do-while循环与while循环的不同在于:

它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。

因此,do-while循环至少要执行一次“语句块”。

用do-while计算1加到100的值:

#include

intmain(){

inti=1,sum=0;

do{

sum+=i;

i++;

}while(i<=100);

printf("%d\n",sum);

return0;

}

运行结果:

5050

注意while(i<=100);最后的分号;,这个必须要有。

while循环和do-while各有特点,大家可以适当选择,实际编程中使用while循环较多。

 

除了while循环,C语言中还有for循环,它的使用更加灵活,完全可以取代while循环。

上节我们使用while循环来计算1加到100的值,代码如下:

#include

intmain(){

inti,sum=0;

i=1;//语句①

while(i<=100/*语句②*/){

sum+=i;

i++;//语句③

}

printf("%d\n",sum);

return0;

}

可以看到,语句①②③被放到了不同的地方,代码结构较为松散。

为了让程序更加紧凑,可以使用for循环来代替,如下所示:

#include

intmain(){

inti,sum=0;

for(i=1/*语句①*/;i<=100/*语句②*/;i++/*语句③*/){

sum+=i;

}

printf("%d\n",sum);

return0;

}

在for循环中,语句①②③被集中到了一起,代码结构一目了然。

for循环的一般形式为:

for(表达式1;表达式2;表达式3){

语句块

}

它的运行过程为:

1)先执行“表达式1”。

2)再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。

3)执行完循环体后再执行“表达式3”。

4)重复执行步骤2)和3),直到“表达式2”的值为假,就结束循环。

上面的步骤中,2)和3)是一次循环,会重复执行,for语句的主要作用就是不断执行步骤2)和3)。

“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。

“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。

“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。

for循环的执行过程可用下图表示:

break关键字

在《C语言switch语句》一节中,我们讲到了break,用它来跳出switch语句。

当break关键字用于while、for循环时,会终止循环而执行整个循环语句后面的代码。

break关键字通常和if语句一起使用,即满足条件时便跳出循环。

continue语句

continue语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。

continue语句只用在while、for循环中,常与if条件语句一起使用,判断条件是否成立。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1