C语言冲刺.docx

上传人:b****7 文档编号:10164820 上传时间:2023-02-09 格式:DOCX 页数:145 大小:147.63KB
下载 相关 举报
C语言冲刺.docx_第1页
第1页 / 共145页
C语言冲刺.docx_第2页
第2页 / 共145页
C语言冲刺.docx_第3页
第3页 / 共145页
C语言冲刺.docx_第4页
第4页 / 共145页
C语言冲刺.docx_第5页
第5页 / 共145页
点击查看更多>>
下载资源
资源描述

C语言冲刺.docx

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

C语言冲刺.docx

C语言冲刺

第一章C语言基础知识

第一节C语言的基本构成

重要程度:

★★★★

1、C语言的良好风格

例1:

计算两个整数之和的C程序

#include"stdio.h"

main()/*求两数之和*/

{

inta,b,sum;/*变量说明*/

a=10;/*把整数10赋值给变量a*/

b=20;/*把整数20赋值给变量b*/

sum=a+b;/*把两数之和赋值给变量sum*/

printf("a=%d,b=%d,sum=%d\n",a,b,sum);/*把计算结果输出到用户屏幕上*/

}

好的风格:

1.花括号独占一行,有对应关系的花括号在同一列;

  2.有层次关系的代码有必要的缩进;

  3.一条语句独占一行

  4.有适当的注释

2、关于注释的说明(考点一)

✧程序中以“/*”开头并且以“*/”结尾的部分表示程序的注释部分。

✧注释可以加在程序的任何位置。

✧注释是为了提高程序的可读性而增加的,不属于C语言。

✧/*/*ddddddd*/*/这样的注释不是合法的。

注释是从“/*“开始到”*/“结束的。

以该例为准,属于注释的就是/**/两个之间的/*ddddddd,所以最后剩下的*/就是多余了。

例1:

阅读以下程序,想一想结果是多少?

main()

{inta=0,b=0;

a=10;/*给a赋值

b=20;给b赋值*/

printf("a+b=%d\n",a+b);/*输出计算结果*/

}

这是2006年9月全国计算机等级考试二级考试的第19题。

需要特别注意的是,程序第三行“/*”开始的注释部分,直到第四行末尾才结束。

因此上面的程序等价于以下的程序:

main()

{inta=0,b=0;

a=10;

printf("a+b=%d\n",a+b);

}

3、标识符(考试重点)

在C语言中用于标识名字的有效字符序列称为标识符。

标识符可以用作常量名、变量名、符号名、函数名和后面要学到的指针名、数组名等。

C语言中标识符的命名规则如下:

1)标识符只能由字母、数字和下划线组成;

2)标识符的第一个字符必须是字母或下划线。

3)标识符区分大小写字母。

如int与Int是两个完全不同的标识符。

合法的标识符:

axsumspelsprogramab1_tofile_5a1b2c3_2B3

非法的标识符:

ab12#(含有不合法的字符“#”)

a1-c(含有不合法的字符“-”)

abc(空格不是合法标识符)

r(“”不是字母,为不合法标识符字符)

23ab(第一个字符不能为数字)

C语言的标识符分为如下三类:

1)关键字

关键字是具有特定含义的、专门用来说明C语言特定成分的一类标识符。

关键字均由小写字母构成。

Int就不是关键字。

2)预定义标识符

预定义标识符(如printf,scanf,sin,isalum等)和编译预处理命令名(如define,include等)。

注意,预定义标识符可以作为“用户标识符”使用。

3)用户标识符(考试重点)

不能是关键字;只能由字母、数字和下划线组成;第一个字符必须是字母或下划线。

Int可以作为用户标识符,int就不可以作为用户标识符。

考点:

1.识别哪些是(或不是)标识符

2.识别哪些是(或不是)用户标识符

例2:

以下不能定义为用户标识符的是

A)scanfB)VoidC)_3com_D)int

分析:

本题答案选D。

因为int是关键字,关键字不能作为用户标识符。

答案(A)的scanf虽然是预定义标识符,但是预定义标识符可以作为用户标识符使用。

(B)中Void的第一个字符V大写,它与关键字void是两个不同的标识符,故它可以作为用户标识符。

(C)中的_3com_符合标识符的命名规则,且不是关键字,故可以定义为用户标识符。

例3:

以下不合法的用户标识符是

A)j2_KEY          B)Double          C)4d              D)_8_

分析:

本题答案选C。

答案(A)是一个用户标识符,符合标识符的命名规则。

答案(B)也是用户标识符,需要注意的是,它与关键字double是两个不同的标识符。

答案(D)是用户标识符,由数字和下划线组成,且第一个字符为下划线。

只有答案(C)是不合法的用户标识符,因为它的第一个字符是数字,不符合标识符的命名规则。

Ø标识符的常见错误:

1.数字开头2.包含减号“-”3.用户标识符使用的是关键字

4、常量。

C语言中,还有另外一种常量是用标识符命名的,称为符号常量。

下面程序的PI就是符号常量。

例4:

计算圆面积的C语言程序

#definePI3.14159

main()

{floatr,area;

r=12.5;

area=PI*r*r;

printf("area=%f\n",area);

}

程序的第一行是宏定义,以后遇到PI就用其后的内容——3.14159来原样替换。

这里的PI就是一个符号常量。

通常,符号常量用大写字母表示,但这并不是语法上的要求,只不过用大写字母书写符号常量,便于辨认。

当进行宏定义后,程序中只要用到相应的数值常量都可以用符号常量代替,这就给程序的修改提供了方便。

例如,如果需要进一步提高圆周率的精度,可以直接修改宏定义中的数值常量:

#definePI3.1415926

这样,程序中只要用到PI的地方,其值都自动变为3.1415926。

5、变量

与常量对应的是变量。

顾名思义,变量就是在程序的运行过程中其值可以改变的量。

例1中的a,b都是变量,它们是由用户定义的标识符,变量的命名必须遵循标识符的命名规则。

用盒子的理论来描述:

1)变量就是盒子,里面装的内容可以改变。

2)通过赋值语句就可以改变盒子里的内容。

3)每次使用盒子时,盒子里都应该有确切的内容而不能是不确定的值。

4)每次使用盒子时,都是用的现在盒子里装的内容。

以前装过什么内容没有任何影响。

第二节整型数据

重要程度:

★★★★

在C语言中,有三种基本的数据类型,它们是整型、实型和字符型。

1、数制转换

二进制的数,基为二,某位出现的最大数字是2-1=1;

八进制的数,基为八,某位出现的最大数字是8-1=7;

十六进制的数,基为十六,某位出现的最大数字是f(相当与十进制的15)。

在十六进制中,数字由十六个代码组成,分别是0~9和A~F(或者是a~f)这十六个代码。

表1列举出十进制数字从0~15时,相应的二进制、八进制和十六进制数字。

(同列的为一组,表示相同的值)

表1十进制、二进制、八进制和十六进制对照表

十进制

0

1

2

3

4

5

6

7

二进制

0

1

10

11

100

101

110

111

八进制

0

1

2

3

4

5

6

7

十六进制

0

1

2

3

4

5

6

7

十进制

8

9

10

11

12

13

14

15

二进制

1000

1001

1010

1011

1100

1101

1110

1111

八进制

10

11

12

13

14

15

16

17

十六进制

8

9

A

B

C

D

E

F

十进制的数字在我们日常生活中普遍使用,然而在计算机内部,数字均以二进制形式表示和存放。

引例:

(1)将任意进制的数转换为十进制数:

将这个数按照引例中的方法展开。

注意底数使用的是该进制的基。

使用以上的方法,我们再来看两个例子:

(23E)16=2×162+3×161+14×160=(574)10

(111)2=1×22+1×21+1×20=23-1=(7)10

(2)将十进制数转换成任意进制数

十进制数转换成二进制数的规则为:

将十进制的数字除以2,得到的商数继续除以2,直到商为0,然后将各次相除所得的余数从后往前排列,就得到该十进制数转换成的对应的二进制数。

例如,将十进制数13转换成二进制数的过程如下:

2|13

2|6…………1

2|3…………0

2|1…………1

0…………1

所得的余数从后往前排列,得到二进制数1101,与表1中的一致。

同理,可以得出将十进制数转换为任意进制数的规则。

例如,将十进制数13转换成八进制数的过程如下:

8|13

8|1…………5

0…………1

所得的余数从后往前排列,得到二进制数15,与表1中的一致。

(3)二进制与八进制、十六进制之间的转换

从表1中可以看出,每个八进制数的单个数字都可以用三位二进制数来表示,最大的八进制单个数字7等于最大的三位二进制111,最小的八进制单个数字0等于最小的三位二进制000。

因此,每个八进制数的单个数字都可以用三位二进制数字来表示,即23=8。

同样,每个十六进制数的单个数字都可以用四位二进制数来表示,即24=16。

例如,将八进制数13转换成二进制数的过程如下:

(13)8=(001011)2

从以上的转换过程看出,将每个八进制数字转换成了三位二进制数字,1转换成001,3转换成011,因此八进制13对应的二进制数字为1011。

现举例说明将十六进制数数E3转换成二进制数的过程:

(E3)16=(11100011)2

从表1可以看出,十六进制数字E等于二进制的1110,3等于二进制的0011,于是十六进制数字E3等于二进制数字11100011。

反过来,将二进制转换成八进制、十六进制,只需将从右边起的每三位或者每四位二进制数转换成对应的八进制数或十六进制数。

进制的常见错误:

1.八进制数据中出现8,甚至是9.

2.十六进制中,把15当成一个字符(实际上应该是f)。

2、整型常量

Ø在C语言中,整型常量分为十进制整型常量、八进制整型常量和十六进制整型常量三种表示形式。

注意,在C语言中没有直接表示二进制的整型常量。

(常考)

(1)十进制整型常量由一串连续的0~9数字组成。

如:

0、120、365、-12等。

(2)八进制整型常量以数字0开头,其中的数字为0~7。

如:

0112(十进制74)、0123(十进制83)、077(十进制63)等。

(3)十六进制整型常量以0x(数字0和字母x)或0X开头,其中的数字可以是0~9、a~f或A~F中的数字或英文字母。

如:

0x11(十进制17)、0xa5(十进制165)、0X5a(十进制90)等。

整型常量又分为短整型(shortint)、基本整型(int)、长整型(longint)和无符号整型(unsigned)等几类。

例1:

以下选项中可作为C语言合法整数的是

A)10110BB)0386C)0XffaD)x2a2

分析:

本题答案为C。

选项(A)不是C语言中三种整型常量之一。

选项(B)不是合法的八进制整型常量,因为八进制整型常量中不可能出现“8”字符。

选项(D)中x2a2前加上“0”就是一个合法的十六进制整型常量。

3、整型变量

整型变量是用于存放整型值的变量。

对应于整型常量,整型变量也可分为短整型(shortint)、基本整型(int)、长整型(longint)和无符号整型(unsigned)四种。

定义基本整型变量用关键字int,形式如下:

inti;

int类型所占据的字节长度因不同类型的机器或编译器而有所不同:

如果使用VC++6.0,则会为int型变量分配4个字节长度的存储单元。

我们使用的将是这种情况。

如图1所示。

图中表示对定义的int型整型变量i分配了四个字节的存储单元,这个存储单元的名字为i,里面的内容不确定。

图1计算机系统为整型变量i分配的内存空间

当对变量i赋值时,这个值就存储在这个存储单元中。

例如,执行了赋值语句:

i=6;

则变量i的存储单元变为如图2所示的情况。

00000000

00000000

00000000

00000110

图2十进制整数6存放在变量i的内存空间中的形式

正如读者所知,在计算机中实际上是以二进制形式存储数据的,所以在变量i的存储单元中存放的是四个字节的二进制数00000000000000000000000000000110(十进制6)。

C语言中规定,在定义变量的同时给变量赋初值,称为变量初始化。

例如:

main()

{inta=2,b=3,c=4;

……}

表2不同类型的整型数在内存中所占用的字节数和数值范围

数据类型

关键字

占用的字节数

数值范围

短整型

[signed]short[int]

2

-32768~32767

无符号短整型

unsignedshort[int]

2

0~65535

基本整型

[signed]int

4

-2147483648~2147483647

无符号整型

unsigned[int]

4

0~4294967295

长整型

[signed]long[int]

4

-2147483648~2147483647

无符号长整型

unsignedlong[int]

4

0~4294967295

说明:

1)如果要表示一个长整型常量,则应该在对应的整型常量后面加上一个字母后缀l(L的小写)或者是L。

如0L、110L、123L等。

这是因为如果不加上L(或l),则表明这个整型常量为基本整型常量,在内存中占两个字节的存储单元,而加上之后,则表明为长整型常量,在内存中占四个字节存储单元。

2)无论是短整型还是长整型常量,C语言系统都默认为是有符号整数。

无符号整数在数字的后面加上一个字母后缀u或者是U。

若是长整型无符号整型常量,则应该加后缀lu或者是LU。

例2:

以下选项中不属于C语言的类型的是

A)signedshortintB)unsignedlongint

C)unsignedintD)longshort

分析:

根据表2可知,正确答案为D。

4、整数在内存中的存储形式

在计算机内存中最小存储单位称为“位(bit)”。

每一个位中或者存放0,或者存放1,因此称为二进制位。

一个字节(Byte)有8个二进制位。

沿用惯例,把最右边一位称为最低位,把最左边一位称为最高位。

在C语言中,对于有符号型整数,将最高位作为符号位,当最高位为0时表示正整数,当最高位为1时表示负整数。

下面介绍整数的存储形式。

注意:

计算机中(或者说内存中)的数据都以它对应的补码形式存在。

第三节实型数据

重要程度:

★★★★

1、实型常量

在C语言中,实型常量有两种表示形式:

小数形式和指数形式。

(1)小数形式

规则如下:

1.有且仅有一个小数点。

2.左边和右边可以有一边没有数据,但是不能同时没有数据。

如:

3.141590.15812..360.0-18.0

(2)指数形式(E前E后都有数,E后必为整数)

规则如下:

1.有且仅有一个字母e(或者E)。

2.左右两边都必须有数据。

3.左边可以是整数也可以是小数。

4.右边只能是整数。

以下列举出几个正确的指数形式:

1e5(表示数值1105)1.25E+4(表示数值1.25104)

2.0E-3(表示数值2.010-3)

实型常量的常见错误:

12(缺少小数点,12其实为一个整型的常量而不是实型常量)

e5(缺少小数部分)

1.25E(缺少指数部分)

2.0E1.3(指数部分不是整数)

例1:

以下选项中合法的实型常数是

A)5E2.0B)E-3C).2E0D)1.3E

分析:

本题的答案是C。

选项(A)的指数部分不是整数。

选项(B)缺少小数部分。

选项(D)缺少指数部分。

例2:

以下选项中,不能作为合法常量的是    

A)1.234e04B)1.234e0.4C)1.234e+4D)1.234e0

分析:

选项(B)的指数部分不是整数,所以答案为B,其它选项均为正确的常量。

2、实型变量

C语言中,实型变量分为单精度实型(float)变量与双精度实型(double)变量两种。

它们定义的形式分别如下:

floatx,y,z;/*定义单精度实型变量x,y,z*/

doublea,b,c;/*定义双精度实型变量a,b,c*/

double的精度比float好!

第四节字符型数据

重要程度:

★★★★★(字符可当作整型使用)

1、字符常量字符常量是由一对单引号括起来的。

1)由一对单引号括起来的单个字符:

单引号中只有一个字符:

'0'、'A'、'a'、''、'#'。

2)由一对单引号括起来的,里面是由斜杠“\”引起的若干字符:

在单引号中,都由“\”开头:

'\n'、'\t'、'\\'、'\''、'\"'、'\0'、'\377'、'\xff'。

这个“\”称为转义字符。

转义字符后面的内容失去了原来的意义,如'\n'表示换行符,而不是字母n了。

每个字符都有一个ASCII码与之对应。

(字符可以看成整形)

如字符'0'的ASCII码值为48,我们简称字符'0'的值为48。

同样,'A'的值为65,'a'的值为97。

字符型数据进行运算,使用的其实都是这个字符对应的ASCII码值。

C语言中一共有三种转义字符:

一般转义字符、八进制转义字符、十六进制转义字符。

表3C语言中常用的转义字符

字符形式

意义

字符形式

意义

\n

换行

\\

一个反斜杠字符\

\t

横向跳格(Tab)

\'

一个单引号'

\v

竖向跳格

\"

一个双引号"

\b

退格符(backspace)

\ooo

1~3位八进制数代表的字符

\r

回车符

\xhh

1~2位十六进制数代表的字符

\f

换页符

\0

空值

(1)一般转义字符

'\n'、'\\'、'\"'等,由一个“\”开头加一个普通字符组成。

请牢记表3中粗体的转义字符。

(2)八进制转义字符

它是由“\”与其后的1~3位八进制数字构成的字符序列。

反斜杠后面的十六进制数不需要以0开头。

’\061’就错了

'\61'首先把61这个八进制化成十进制,得到49,ASCII为49的字符就是’1’。

.

'\101'首先把101这个八进制化成十进制,得到65,ASCII为65的字符就是’A’。

.

(3)十六进制转义字符

它是由“\x”与其后的1~2位十六进制数字构成的字符序列。

反斜杠后面的十六进制数不需要以0x开头。

’\0x77’错了!

但是反斜杠之后的必须是小写字母x,而不能是大写字母X,也不能是其它形式。

’\0X77’错了!

'\x42'表示字符常量'B'

'\x6e'分别表示字符常量和'n'。

字符型常量的常见错误:

(1)把"a"看作字符常量。

字符常量的标志是一对单引号'',而不是双引号""。

(2)一对单引号中有多个字符。

'65'是非法的字符常量。

(常考)

(4)′\ooo′中出现数字8。

′\ooo′中只能出现字符0~7。

(5)'\xhh'中,忘记书写字符x。

例1:

以下不合法的字符常量是

A′\018′        B′\′″           C′\\′          D′\xcc′

分析:

本题是2006年4月考题,考察点在字符常量的概念。

此题答案为A。

A中为八进制转义字符,但是八进制数不能出现8,因此错误。

B中是一般转义字符,表示一个双引号字符,正确。

C中是一般转义字符,表示一个反斜杠字符,正确。

D中匹配十六进制转义字符,cc是合法的十六进制数,正确。

2、字符变量(考试重点)

chara:

等价于chara

a='A';a=65;

变量a中存放了'A'的ASCII码值65。

前面已经知道,字符型数据都是被处理为整型量,因此,可以直接对字符变量赋字符常量对应的ASCII码值。

如赋值语句a=65;与赋值语句a='A';等价。

例2:

已定义c为字符型变量,则下列语句中正确的是

A)c=‘97’;B)c="97";C)c=97;D)c="a";

分析:

答案选择C。

A中'97'为非法的字符常量。

单引号内不能出现多个字符。

B中"97"为字符串,字符常量的标志的一对单引号,而不是双引号。

C将整型量97赋给字符变量c,即将ASCII码值为97的字符常量'a'赋给变量c,正确。

D中"a"不是字符常量,而是字符串。

3、对字符型数据的运算

1、对字符进行算术运算就是将字符对应的ASCII码值进行运算。

如:

'D'-'C'的值为1。

因为我们用'D'和'C'的ASCII码68、67分别替换'D'、'C'之后,等价于求68-67的值。

又例如,'C'+1的值为'D'。

2、大写字母的ASCII码与对应的小写字母的ASCII码相差32。

大写字母转换成小写字母

'A'加上32'a'

如'A'与'a'的ASCII码分别为65和97。

这样我们经过简单的算术运算就可以进行大小写字母字符的转换。

如'A'+32即为,'a'-32即为'A'。

3、字符数字的ASCII码与对应的数字的ASCII码相差了48.

字符数字转换成数字

‘1’减去481

第五节算术表达式

重要程度:

★★★★

1、算术运算符与算术表达式

1、在C语言中,有下列五个基本的算术运算符:

+、-、*、/和%,依次表示加、减、乘、除、求

余运算。

(考得最多的是/和%符号!

2、求余运算符%的运算对象只能是整型,即%左侧的被除数与右侧的除数都只能为整型值。

求余得到的运算结果的符号与被除数相同。

(3%1.2错了)

如:

12%9运算结果为3,12%-9的运算结果也为3。

-12%9运算结果为-3,-12%-9的运算结果也为-3。

3、求余就是求余数,而不是求商,这点总是容易被弄混淆。

✧想一想:

3%9运算结果为多少?

(结果为3而不是0)

4、1/2得到的数据是为0的,这个原则是当除号“/“左右两边都为整数的时候,我们遵守取整丢小数的原则。

那么如果希望1和2相除得到0.5,我们就可以用1.0/2,或者1/2.0,或者1.0/2.0都可以实现。

先面通过一个具体例子的分析,我们来彻底搞清楚算术运算符的运算规则。

例1:

试求1.6+3/2*1.2-3/2.0的值

步骤:

计算过程:

说明:

第一步:

1.6+1*1.2-3/2.0

根据运算优先级和结合的顺序,先算3/2,注意到它们为整型数据相运算,因此结果应为整数1,而不是1.5。

第二步:

1.6+1.0*1.2-3.0/2.0

1*1.2为整型和实型数据相运算,因此,会把整型数据1转换为对应的实型数据1.0,再与1.2进行运算。

同理,3变成3.0

第三步:

1.6+1.2-1.5

分别计算出1.0*1.2和3.0/2.0的结果

第四步:

2.8-1.5

同一优先级的运算,从左到右依次进行

第五步:

1.3

结果为1.3,而不是1.9

下面,大家自己算算,

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

当前位置:首页 > 表格模板 > 合同协议

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

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