当前位置:文档之家› c语言复习 Microsoft Word 文档

c语言复习 Microsoft Word 文档

c语言复习 Microsoft Word 文档
c语言复习 Microsoft Word 文档

一。

计算机系统,软件,系统软件,程序设计语言与语言设计程序,面向对象程序设计语言:C++。

§1.2 C语言的特点(P2)

1.语言简洁、紧凑、灵活。(32个关键字,9个控制语句)

2.运算符丰富(34种表达式)

3.数据结构丰富

4.具有结构化的控制语句

5.目标代码质量高,程序执行效率高

6.可移植性好

7.兼有低级语言和高级语言的特点

8.语法限制不太严格,程序设计自由度大§1.3 简单的C语言介绍

C程序的结构特点和书写格式

2. 一个函数由两部分组成

函数的说明部分函数体

函数体:{

[说明部分]

执行部分

}

3. 一个C程序总是从main函数开始执行

4. 语句以分号;结束

5. 书写格式自由

6. 用/*…*/做注释

int max(int x,int y) /*子函数*/

{

int z;

if (x>y) z=x;

else z=y;

return(z);

}

void main() /*主函数*/

{

int a,b,c;

scanf(“%d%d”,&a,&b);

c=max(a,b);

printf(“max= %d\n”,c);

}

§1.4 C程序的上机步骤

1.编辑

生成C源程序文件,扩展名为.C 2.编译

生成目标文件,扩展名为.OBJ

3.连接

将目标文件和库函数及其他目标程序连接起,生成可执行文件,文件扩展名为.EXE 4.运行

运行程序,得到结果

§2.1 算法概念

3.算法的特性(P.18):有穷性、确定性、有效性等

一、结构化程序的三种基本结构:顺序、选择、循环

§3.1 C 语言的基本元素

一、符号集(字符集)

C语言使用的基本符号共有如下五种:(1)大写字母:A~Z

(2)小写字母:a~z

(5)标点符号和运算符

(3)阿拉伯数字:0~9

(4)下划线:_

, 逗号( 左圆括号> 右尖括号% 百分号

. 圆点) 右圆括号! 感叹号& and(与)

; 分号[ 左方括号| 竖号^ xor(异或)

: 冒号] 右方括号/ 斜杠* 乖号? 问号{ 左大括号\ 反斜杠- 减号… 单引号} 右大括号~ 波析号= 等于号“ 双引号< 左尖括号# 井号+ 加号二、标识符用来标记常量、变量、函数及文件名字的字符序列

标识符的构成规则:

?以字母(大小写皆可)或下划线开头

?随后可跟若干个(包括0个)字母、数字、下划线

?标识符的长度各个系统不同,最好不要超过8个字符

如:x y3 _imax ELSE X A_to_B (合法)

7x int #No bad one re-input (不合法)

注意:区分大小写。如:sum、Sum是二个标识符

三、关键字它是C语言中具有特定含义、专门用作语言特定成分的一类标识符

§3.2 C 的数据类型

数据类型

基本类型整型int

实型(浮点型)单精度float

双精度double

字符型char

构造类型

指针类型

空类型

§3.3 常量和变量

一、常量和符号常量

1、常量:在程序运行过程中,其值不能被改变的量

常量区分为不同类型(表示形式)

如:12、3.2、…a?

2、符号常量:

用一个标识符代表的一个常量

定义方法:

#define 标识符常量

例3-1

#define PRICE 30

void main()

{

int num,total;

num=10;

total=num*PRICE;

printf(“total=%d”,total);

}

二、变量

1、变量:其值是可以改变的量,它用标识符(变量名)来表示,在内存中占据一定的存储单元。

2、变量的定义方法

类型符标识符

3、注意事项:

①见名知意

②先定义后使用

③习惯上,符号常量名用大写,

变量名用小写,以示区别

3-1

#define PRICE 30

void main()

{

int num,total;

num=10;

total=num*PRICE;

printf(“total=%d”,total);

}

§3.4 整型数据

一、整型常量

①十进制常数

如:123、-34、0

②八进制常数

由0~7数字组成;最高位必须用0作引导符

如:0123 (123)

③十六进制常数

由0~9、a~f(A~F)组成;最高位必须用0x(0X)作引导符

如:0x123 (123)

注意:复习二、八、十、十六进制的转换。

30 036 0x1E

二、整型变量

1、整型数据在内存中的存放形式

数据在内存中以二进制的补码表示:1、整型数据在内存中的存放形式

数据在内存中以二进制的补码表示:整型变量根据其数值的范围,可以将变量定义为三类:

基本整型(int)2 短整型(short int)2 长整型(long int)4

为了充分利用变量的表数数是范围,又可以将变量定义为:

有符号数(signed)(可省略)无符号数(unsigned)

2、整型变量的分类

有符号型

基本型:以int 说明,占用2字节。如:int i,sum;

短整型:以short int 或short说明,占用2字节。如:short s,sum;

长整型:以long int 或long说明,占用4字节。如:long l,sum;

无符号型(存放没有符号的整数)

无符号整型:以unsigned int或unsigned说明,占用2字节。

如:unsigned ui,sum;

无符号短整型:以unsigned short说明,占用2字节。

如:unsigned short us,sum; 无符号长整型:以unsigned long说明,占用4字节。

如:unsigned long ul,sum;

3. 整型变量的定义

例如:

int a,b;

long num,i,j;

unsigned short c,d;

§3.4 实型数据

一、实型常量

实数又称浮点数。有两种表示形式

1、十进制数形式如:0.345、.345、345.0、345.、0.0、0..、.0

2、指数形式如:3.45e

3、3.45E3 表示3.45 ×10

注意:e前后必须有数字,e后必须为整型数

.3e3 3e3 3.e3 3e e3 e0.3

3、类型:缺省为double;

后缀f或F,为float型;后l或L,为long double 型

二、实型变量(取值范围与值的精度与机器有关)

单精度(float型):占4个字节,7位有效数字

(3.4e-38~3.4e+38)

双精度(double型):占8个字节,15~16位有效数字

Long double型:占10个字节,15~16位有效数字

(3.4e-4932~1.1e+4932)

如:float x, y; double a, b, c;

三、实型数据的舍入误差

虽然实型数据的表示形式有两种,但在内存中均是以指数形式存放

若数据超过有效位,则被舍去,故可能产生误差。

例3-3

#include

void main()

{

float a,b;

a=123456.789e5;

b=a+20;

printf(“a=%f,b=%f\n”,a,b);

}

§3.4 字符数据

一、字符常量

1、用单引号括起来的一个字符

如:…a?、…A?、…b?、…*?、…$?

2、转义字符:特殊的字符常量,它们都以…\?开头。(代表一个字符)

输出格式控制

\n 换行符\0 空值

\t 横向跳格\v 纵向跳格

\b 退格\a 报警

\r 回车\f 走纸换页

输出字符

\\ 输出反斜杠\… 输出单引号

\ddd 1~3位八进制数表示的字符(ASCII

码)

如:…\101?代表字符…A?

\xhh 1~2位十六进制数表示的字符(ASCII码)

如:…\x41? 代表字符…A?

二、字符变量

字符变量用来存放字符,且只能存放一个字符。

定义方法:

char c1, c2;

unsigned char c3,c4;

字符型变量的赋值方法

c1=…a?; c2=…\101?;

c3=0xff; c4=…\377?;

三、字符数据的存储

1、将一个字符常量存放到一个字符变量中,是将该字符的相应的ASCII代码存放到存储单元中。

例3-4:字符的存储与输出

#include

void main()

{

char c1,c2;

c1=…a?;c2=…b?;

printf(“%c %c\n”,c1,c2);

c1=97;c2=98;

printf(%c %c\n”,c1,c2);

}

2、字符数据与整型数据可以相互赋值

3、字符数据可以以字符形式输出,

也可以用整型形式输出

例3-5

void main()

{

int i;

char c;

i=…a?;

c=97;

printf(“%c ,%d\n”,c,c);

printf(“%c ,%d\n”,i,i);

}

a , 97

a , 97

四、字符串常量1、字符串常量:用一对双引号括起来的字

符序列

如:“Hello”, “1999”, “a”2、字符串结束

标记…\0?。

每一个字符串常量结尾都有一个字符\0(一

般情况是由系统自动加上)。

如:“CHINA”在内存中为:

…a?为一个字符,“a”为两个字符

“a” a \0

在定义变量的同时设置初值,亦称初始化

如:iut a=3;

float f=3.56;

char c=…a?;

int i,j,k=5;

int x=1,y=1,z=1;

§3.8 不同类型数据间的混合运算

整型、实型(包括单、双精度)、字符型数

据间可以混合运算

例如:10+…a?+12.3-3.14* …x?是合法的

运算时,不同类型的数据要先转换成同一类型,然后进行运算

Int ——unsigned——long ——double

§3.9 算术运算符和算术表达式

一、C 运算符

1 算术运算符+,-,*,/,%

8 指针运算符*,&

2 关系运算符>,<,==,>=,<=,!=

9 求字节数运算符sizeof

3 逻辑运算符!,&&,||

10 强制类型转换运算符(类型)

4 位运算符<<,>>,~,|,^,&

11 分量运算符. , ->

5 赋值运算符=

12 下标运算符[ ]

6 条件运算符? :

13 其它

7 逗号运算符

二、算术运算符和算术表达式

,

1、基本的算术运算符

/ (除法运算符) 如:5/3

\0

A

N

I

H

C

(x+y)/(a+b)

两个整数相除,其值为整数。如:5/3值为1

除数、被除数有一个为负值时,结果“向零取整”

除数、被除数有一个为实数时,结果为double型

% (模运算符,或称求余运算符): %两侧均为整型数据

如:7%4的值为3

-7%4, 7%-4, -7%-4的值为多少?-3,3,-3 符号由被除数决定

2、算术表达式和运算符的优先级与结合型1)用算术运算符和括号将运算对象(也叫操作数)连接

起来的、符合C语言语法规范的式子,称为算术表达式

运算对象包括常量、变量、函数等

2)运算符的优先级和结合性

优先级:先*、/、% 后+、-

结合型:左结合性。即表达式从左向右进行计算

3、强制类型转换

可以利用强制类型转换运算符将一个表达式转换成所需类型

形式:(类型名)表达式

如:(double)a

(int)(x+y)

注意:与(int)x+y不同

(float)(8%5)

注意:x的类型没有改变

例3-7:强制类型转换

#include “stdio.h”

void main()

{

float x;

int i;

x=3.6;

i=(int)x;

print(“x=%f,i=%d”,x,i);

} x=3.6,i=3

三、自增、自减运算符

++i, --i

在使用i之前,先使i的值加1或减1 i ++, i--

在使用i之后,先使i的值加1或减1

注意:

(1)自增、自减运算符只能用于变量,而不能用于常量或表达式。如:5++、--(a+b)不合法

(2)++和--的优先级别高于算术运算符,结合方向是“自右向左”

如:-i++ 相当于–(i++)

§3.10 赋值运算符和赋值表达式

一、赋值运算符“=”

用法:变量=表达式

作用:将表达式的值赋给变量(常量、变量是表达式的特例)

如:a=5;

ave=(a+b)/10;

二、赋值结果与类型转换

1、实型数据(包括单、双精度)

赋给整型变量时,舍弃实数的

小数部分

2、整型数据赋给单、双精度变量时,

数值不变,但以浮点数形式存储

到变量中

例3-9

#include “stdio.h”

void main()

{

int i;

float f;

i = 5.34;

f = 23;

printf(“%d %f\n”,i,f)

}

3、长度相同的有符号与无符号整型数间,原样赋值(但数值有时会有变化)。

4、char、int、long等类型的转换

1)“短”数据赋给“长”变量

符号扩展:若最高位为1(负数),则变量高字节位补1;

反之,补0.

例3-11

#include

void main()

{

char c;

int i;

c=43;i=c;

printf(“i=%d\n”,i);

c=…\376?;i=c;

printf(“i=%d\n”,i);

}

i= 43

i=-2

4、char、int、long等类型的转换

1)“短”数据赋给“长”变量

2) “长”数据赋给“短”变量

只将数据的低字节位原封不动送到变量中(数据有可能有差错)

例3-12

#include

void main()

{

int i;

long L=6324232L;

i=L;

printf(“i=%d, L=%ld\n”,i,L);

}

三、复合的赋值运算符

在赋值符“=”之前加上其它运算符,构成复合赋值运算符

+=,-=,*=,-=,%=,<<=,>>=,&=,^=,|=

四、赋值表达式

由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”

形式:变量= 表达式

如:a=5、a=(b=5)(右结合)

计算过程: ①计算赋值运算符右侧“表达式”的值

②将计算结果赋值给左侧的变量

③赋值表达式的值就是被赋值的变量

例:a=b=c=5

a=5+(c=6)

a=(b=4)+(c+6)

例:a=b=c=5

a=5+(c=6)

a=(b=4)+(c+6)

思考:a=a+(a-(a*a))?

§3. 11 逗号运算符和逗号表达式

形式:表达式1,表达式2,…,表达式i 作用:用于连接表达式

计算过程:

①求解表达式1

②再求解表达式2,…,表达式

③整个逗号表达式的值是表达式i的值

§4.1 C语句概述

一、语句

用来对数据进行加工(完成操作任务)。是构成程序的基本单位

通常一个C程序由若干个函数(系统、用户)组成

每一个函数由若干条语句组成。每条语句总是以“;”结束

二、C 语句的分类

可分为三大类:简单语句、复合语句、空语句

(二) 复合语句:将语句括在一对{ }中

如:while(i<100)

{

sum+=i;

i++;

}

说明:①复合语句的{ }之后不能有…;?

②复合语句中可以是简单语句、复合语句、空语句

(三) 空语句:; /*仅有一个;*/

空语句什么也不做。有时用作被转向点,或为循环语句提供空体

如:for(i=0;i<=10;i++);

空语句

§4.2 赋值语句

即赋值表达式后加一;构成

要区分赋值表达式与赋值语句

如:if((a=b)>0) 表达式t=a;语句

§4.2 字符数据的输入输出

一、字符输出函数putchar

形式:putchar(C)

作用:向显示器上输出一个字符

(将C的值输出到显示器上)

C可以是字符型和整形的常量、变量、表达式

例4-2:输出控制字符、转义字符

#include “stdio.h”

void main()

{

putchar(…\101?);putchar(…\n?);

putchar(…\\?);

}

例4-1:

#include “stdio.h”

void main()

{

char c1,c2;

c1=…b?;c2=98;

putchar(c1);putchar(c2);

putchar(…b?);putchar(98);

}

CH7 数组

★数组的基本概念

★一维数组的定义和引用

三、数组概念

这些数据具有的共同的特征:

①都是由若干个分量组成

②数据的诸分量都是同一类型(可取任何数据类型)

③这些分量按一定顺序排列的

●数组:按序排列的具有相同类型的变量的集合

●用一符号名(数组名)来表示这一组数●用数组名后跟下标来唯一地确定数组中的元素

●数组的首地址、数组元素的类型和个数(数组长度)

§7.2 一维数组

一、定义一维数组

类型名数组名1[exp], 数组名2[exp], …

其中:exp为常量表达式

如:int a[10],b[5];

char c[8];

float x[20],y[4*M+1],w[5]; &&(M是符号常量) 1. 数组名命名规则和简单变量名相同

2. 数组名后只能用方括起来的常量表达式(常量和符号常量)。此用法不对:a(10),x[n]

3. 常量表达式的值确定数组元素的个数(数组尺寸)

4. 起始下标从0开始,最大下标值为数组元素个数减一;

二、一维数组的存储

用连续的内存单元存放各个元素

保存数组所需内存量与数组元素的基本类型和数组大小有关

总字节数=sizeof(基本类型)*数组元素个数如上例:总字节数=2*5=10

第i个元素的地址=第1无素的地址+i*sizeof(基本类型)

如上例:第4个元素(下标为3)的地址=1000+3*2

如:int a[5];其内存存储为:

三、一维数组的引用

数组必须先定义后引用

C语言规定只能逐个引用数组元素,而不能一次引用整个数组

引用一维数组元素的一般形式:

数组名[下标]下标从0开始

数组元素的下标常用循环变量来控制

下标可以是整型常量

或整型表达式

例如:a[0]=a[5]+a[7]-a[2*3]

例7-1 读程序

#include

void main()

{ int i,a[10];

for(i=0;i<=9;i++)

a[i]=i;

for(i=9;i>=0;i--)

printf(“%d”,a[i]);

printf(“\n”);

}

四、一维数组的初始化

1.在定义数组时对数组元素赋以初值

如:static int a[4]={1,2,3,4};

或int a[4]={1,2,3,4};

结果:a[0]=1,a[1]=2

a[2]=3,a[3]=4

注:标准C只有静态存储(static)数组和外部存储(extern)数组才能初始化,但TurtoC和Microsoft C的编译系统中,自动数组与外部存储数组均可以进行初始化

2. 给一部分元素赋初值

如:static int b[4]={1,2};

结果为: b[1]=1,b[1]=2,b[2]=0,…,b[9]=0;

注:对static数组不赋初值,系统会对所有数组元素自动赋以0值

3.若对全部数组元素赋初值时,可以

不指定数组长度。

如:int c[]={1,2,3,4,5};

自动定义c数组长度为5

注意:若被定义数组长度与提供初值的个数不相同,

则数组长度不能省略。

如:int a[10]={1,2,3,4};

例7-3:用数组来求Fibonacci数组问题F1=1

F2=1

Fn=Fn-2+Fn-1

(n≥2)

#include “stdio.h”

void main()

{ int i;

long int f1,f2;

f1=1;f2=1;

printf(“%16ld%16ld”,f1,f2);

for(i=2;i<=10;i++)

{ f1=f1+f2; f2=f2+f1;

printf(“%16ld%16ld”,f1,f2);

if(i%2==0) printf(“\n”);

}

}

#include “stdio.h”

void main()

{ int i;

static int f[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-2]+f[i-1];

for(i=2;i<20;i++)

{

if(i%4==0) printf(“\n”);

p rintf(“%6d”,f[i]);

}

}

例7-4:统计全班某门功课期末考试的平均分数和最高分数

(设全班人数为30)

用数组实现:

#include N 30

#include “stdio.h”

void main()

{ int i,sum=0,high=0,score[N];

float average;

printf(“Input everyone?s score.\n”);

for(i=0;i

scanf(“%d”,&score[i]);

for(high=score[0],i=0;i

{ sum+=score[i];

if(score[i]>high)

high=score[i];

}

average=(float)sum/N;

printf(“average=%f\n”,average);

printf(“highest=%d\n”,high);

}

f[i]=f[i-2]+f[i-1] i=2~20

相关主题
文本预览
相关文档 最新文档