c语言复习总结1.docx

上传人:b****1 文档编号:14900927 上传时间:2023-06-28 格式:DOCX 页数:25 大小:28.69KB
下载 相关 举报
c语言复习总结1.docx_第1页
第1页 / 共25页
c语言复习总结1.docx_第2页
第2页 / 共25页
c语言复习总结1.docx_第3页
第3页 / 共25页
c语言复习总结1.docx_第4页
第4页 / 共25页
c语言复习总结1.docx_第5页
第5页 / 共25页
c语言复习总结1.docx_第6页
第6页 / 共25页
c语言复习总结1.docx_第7页
第7页 / 共25页
c语言复习总结1.docx_第8页
第8页 / 共25页
c语言复习总结1.docx_第9页
第9页 / 共25页
c语言复习总结1.docx_第10页
第10页 / 共25页
c语言复习总结1.docx_第11页
第11页 / 共25页
c语言复习总结1.docx_第12页
第12页 / 共25页
c语言复习总结1.docx_第13页
第13页 / 共25页
c语言复习总结1.docx_第14页
第14页 / 共25页
c语言复习总结1.docx_第15页
第15页 / 共25页
c语言复习总结1.docx_第16页
第16页 / 共25页
c语言复习总结1.docx_第17页
第17页 / 共25页
c语言复习总结1.docx_第18页
第18页 / 共25页
c语言复习总结1.docx_第19页
第19页 / 共25页
c语言复习总结1.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言复习总结1.docx

《c语言复习总结1.docx》由会员分享,可在线阅读,更多相关《c语言复习总结1.docx(25页珍藏版)》请在冰点文库上搜索。

c语言复习总结1.docx

c语言复习总结1

c语言复习总结

(*为补充说明部分;**部分可选择性的看看;其中还有一些具体的内容可查上课的那本或谭浩强的那本书,会以(课Px)或(谭Px)的形式表示,x表示第几页)

一、数据类型、运算符、表达式

【1】常量和符号常量(即“值”)

**①整型常量;浮点常量;字符常量

②标识符常量:

#defineHAHA123

(用#define命令定义的HAHA为常量,该值为123,不可对其赋值)

标识符常量的好处:

易理解;程序中多处用到该值时便于修改

【2】变量

变量是一个拥有变量名(eg:

haha),并可对其赋值的一个量

(所有变量必须先定义,才能再使用)

命名规则:

只能由字母、数字和下划线组成,且第一个字符不能为数字

eg:

my,My,MY,my_name,my_123,_name

(c语言区分大小写,故my≠My)

【3】关键字(课P23)

1.保留字(共37个,不能当做变量用):

intfor等

2.分隔符:

#(;等

3.运算符(若由两个符号组成,则中间不能有空格):

!

+-->=等

4.间隔符(没有实际意义,便于机器解读程序):

空格、行结束符、换页符等

【4】数据类型

1.浮点型(即小数):

1)适合的运算:

+-*/(不可求模:

%)

编程前注意运算时是否会产生精度损失(类型转换时的误差或处理数据时的误差)

2)分类:

比特(位)数有效数字**数值范围

float:

326~7-3.4*10^(-38)~3.4*10^38

double:

6415~16-1.7*10^(-308)~1.7*10^308

longdouble:

12818~19-1.2*10^(-4932)~1.2*10^(-4932)

*对于不同的编译系统有效数字个数(比特数)会有差异(谭P46)

3)形式:

十进制小数形式(eg:

1.23)、指数形式(eg:

123e3或123E3)(课P29)(谭P45)

*指数形式下:

字母e(E)前必须有数字,其后必须也有数字且为整数;输出时是规范化的指数形式(谭P45)

**4)浮点型数据的舍入误差(谭P47及47页最后一段)

**5)浮点型数据在内存中的存放形式:

[[+/-][.小数部分][指数部分]](谭P45-46)

2.整数型

1)适合的运算:

%+-*/(整数除法:

只取商数部分,不取余数,不进行四舍五入)(课P27)

2)分类:

比特(位)数取值范围(部分)

int:

16-32768~32768即-2^15~(2^15-1)

**unsignedint:

160~65535即0~(2^16-1)

short:

16

**unsignedshort:

16

long:

32

**unsignedlong:

32

*对于不同的编译系统,取值范围有差异,若超过取值范围则会产生数据的溢出问题(谭P43、44)

3)在计算机中的表示方法:

十进制、八进制(以0开头)、十六进制(以0x开头)

**4)整型数据在内存中的存放形式:

以补码形式存放(谭P40)

3.字符型(char)

1)字符型附属于整数型,它是以整数型的形式存放在计算机内存中的。

每个字符对应一个整数数值(即ASCII码,范围为0~127),且字char型与int型可通用,以''来表示,单引号里只能有一个字符。

2)常用转义字符:

(课P30)含义**ASCII码

\n换行,光标移到下行开头10

\b退格,光标移到前一列8

\r回车,光标移到本行开头13

\'单引号39

\"双引号34

\0空操作符(用于字符串有关地方)

3)常用字符ASCII码:

'0'47

'1'48

'A'65

'a'97

4)字符串型,以""来表示(双引号里可以有多个字符)。

字符串实际长度等于字符串长度+1

eg:

"abc"的实际长度为4,系统默认在它最后追加一个\0,即实际为"abc\0",\0是字符串结束符,用来告诉机器,这是一个字符串,但输出时不会打印\0,遇到\0便结束。

要灵活运用\0。

*'a'≠"a"

不能把一个字符串常量赋值给字符变量(即:

charc="abc"是错误的),机器是以字符数组的形式存储字符串的。

【5】变量赋初值

在定义变量的时候能对变量赋初值,赋初值时不能用连等号,但在程序中允许使用连等号,且连等号从右向左执行。

eg:

inta=b=c=123;(不允许)

a=b=c=123;(允许)

【6】各数据间的隐式转换

1.不同数据类型可进行混合运算,但机器会自动将它们转换成其中最高级的类型(一步直接转换),然后再进行运算。

*转换级别(简):

(谭P54)(课P33)低→高

int→unsigned→long→double

char、short↗↖float

2.强制类型转换:

形式:

(类型名)

eg:

(float)5/2结果为2.5

(char)('A'+'a')结果为'q',若写成(char)'A'+'a',则结果为int类型的113

**将一个int、short、long型变量转化成char型时,是把后八位(2进制数)截断赋值给char型变量。

【7】算术运算符和算术表达式

1.运算符:

(**表达式类别、*结合关系、*优先级见课P21)

1)算术运算(*/%+-)

2)关系运算(><==>=<=!

=)

3)逻辑运算(!

&&||)

**4)位运算(<<>>~|^&)

5)赋值运算(=+=-=*=/=%=++^=&=<<=等)

6)条件运算(?

:

7)逗号运算(,)

8)指针运算(*(取内容)&(取地址))

*9)求字节数运算(sizeof)

*10)强制类型转换运算((类型名))

11)分量运算符(结构体中)(.->)

12)下标运算符(数组中)([])

13)其他(如函数调用运算符())

2.基本算术运算符:

运算时,系统会把数据先自动转换成表达式中的最高类型,再进行运算

eg:

inta,b=1;

floatc=2.3;

a=b+c;

先把b转换成float型(b本身类型并没变,只不过在这次运算中改变了)1.0+2.3=3.3,然后把3.3赋值给整型a(a=3,截断误差)。

3.强制类型转换:

在强制类型转换时,只是得到一个所需类型的中间变量,原来变量的类型并未发生变化。

4.自增、自减运算符:

i++,先使用,再自增

++i,先自增,再使用

eg:

若i等于3

则①j=i++;(先把3赋值给j,之后i递增1变成4,即j=3,i=4)

②j=++i;(i先递增1变成4,之后把4赋值给j,即j=4,i=4)

*①自增(++)、自减(--)运算只能用于变量,不能用于常量

eg:

#definea3

a++;

这是错误的,因为这里的a被宏定义为3,即a是常量,所以不能用自增运算

②++,--的结合性是从右往左

eg:

-i++相当于-(i++)并不等于(-i)++,因为这显然错误,-i运算后是一个常量,不能对常量进行自增运算

a+++b相当于a+(++b)并不等于(a++)+b

*自增(减)运算常用于循环语句中,使循环变量自增或自减1;也用于指针变量,使其指向下一个地址

5.赋值运算符

①高类型数据赋值给低类型变量时,会产生精度损失(截断误差)

eg:

floata=3.3;

intb;

b=a;

此时,b等于3,因为将浮点型数据(包括单、双精度)赋值给整型变量时,会舍弃小数部分。

**将一个unsigned类型数据赋值给一个占字节数相同的非unsigned型整型变量(eg:

unsignedlong→long)时,注意符号位的问题,当心数据错误(谭P61)

②低类型的数据赋值给高类型的变量时,不足位会以0补齐

**带符号的char型(signedchar)赋给int型以及带符号的int型(signedchar)赋给long型时的符号扩展问题。

(谭P60)

**有符号数据传给无符号变量时符号位的问题。

(谭P60~61)

6.复合赋值运算符:

能简化程序,产生高质量目标代码

eg:

a+=3等价于a=a+3

注意,如果等号右边是包含若干项的表达式,则相当于它有括号。

eg:

(以下3种写法等价)

①x%=y+3

②x%=(y+3)

③x=x%(y+3)

7.赋值表达式:

它的一般形式为:

<变量><赋值运算符><表达式>

*赋值运算符左侧的标识符称为“左值”,像表达式a+b、常量、常变量(宏定义的量)都不能作为左值,而在赋值运算符右侧的表达式称为右值。

凡是左值都可用做右值。

赋值表达式中的“表达式”,又可以是一个赋值表达式。

赋值运算符按照“从右到左”的结合顺序。

于是下列运算都是合法的:

a=b=c=5(赋值表达式值为5,a、b、c值均为5)

a=5+(c=6)(表达式值为11,a值为11,c值为6)

a=(b=10)/(c=2)(表达式值为5,a等于5,b等于10,c等于2)

但要区别a=3*5=4*3,这是错误的,因为从右至左运算,先计算3*5=4*3,显然,常量不能作为左值

**赋值表达式也可以包含复合的赋值运算。

eg:

a+=a-=a*a

如果a的初值为12,它的求解步骤如下:

①先进行“a-=a*a”的运算,它相当于a=a-a*a,a的值为12-144=-132

②再进行“a+=-132”的运算,相当于a=a+(-132),a的值为-132-132=-264

赋值表达式也可以出现在别的语句中(这是c语言灵活性的一种表现)。

eg:

①printf("%d",a=b);若b=1,先把1赋值给a,再打印出a的值,即1

②while((c=getch())!

='\n')作用为输入一个字符,直到按回车结束

*getch()与getchar()的区别(相同点:

都只能读入一个字符):

用getch()读入一个字符时,该字符不会显示在屏幕上,并且输入一个字符就算输入结束;而用getchar()读入一个字符时,该字符会显示在屏幕上,并且只有按下回车后,才算输入结束,如果输入的是一串字符,那它们都被保存在“输入流”中,只取第一个字符为getchar()的返回值。

8.逗号运算符和逗号表达式:

其一般形式为:

(结合性从左至右)

表达式1,表达式2,表达式3,…,表达式n

逗号运算符是所有运算符中级别最低的。

eg:

a=3*5,a*4

先进行赋值运算“a=3*5”,a的值和表达式的值都为15,然后进行算术运算“a*4”,表达式的值为60

*逗号表达的值为最后一个表达式的值,即上述逗号表达式的值为60。

在多数情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式常用语循环语句(for语句)中。

像一般的pintf和scanf中的逗号只是用作变量间隔,并不是逗号表达式。

除非像这样:

printf("%d,%d,%d",(a,b,c),b,c);其中(a,b,c)是一个逗号表达式,其它的都不是。

 

2、语句

【1】c语句概述

1.控制语句(9种)

①if()…else…条件语句

②for()…循环

③while()…循环

④do…while()循环

⑤continue结束本次循环

⑥break中止执行switch或循环

⑦switch多分支选择

⑧goto转向

⑨return从函数返回

()中是一个判断条件,也可以是一个赋值表达式型的判断条件

eg:

if(x>y)或if((a=getch())!

='\n')都是允许的

2.函数调用语句:

由一个函数加一个分号构成。

eg:

printf("abcd");

3.表达式语句:

由表达式加一个分号构成。

4.空语句:

只有一个分号,下面是一个空语句:

;

eg:

for(;a<10;)

for语句中的赋初值和循环体都是空语句

5.复合语句:

用{}括起来构成复合语句。

*c语言允许一行写几个语句,也允许一个语句拆开写在几行上,书写格式无固定要求。

但为了可读性,还是要写得规整些。

【2】输入输出的概念

c语言是靠函数实现输入输出的,这些函数包含在stdio.h(standardinput&output,标准输入输出)头文件中。

这样可以避免在编译阶段处理与硬件有关的问题,可以使编译系统简化,而且通用性强,可移植性好。

可用于输入输出的函数:

putchar()输出字符

**该函数的参数可以是普通字符('a'),可以是控制字符('\n'),亦可以是转义字符('\'',单引号)

getchar()输入字符(记得getchar()比getch()长,要多按个回车)

**getch()输入字符(不显示在屏幕上)

getchar()等效于putchar(getch()),回车效果不算。

puts()输出字符串

gets()输入字符串

printf()格式输出

scanf()格式输入

【3】格式输入与输出

1.printf函数

1)一般格式:

printf(格式控制,输出表列)

*格式控制可以用一个字符串来代替(甚至可以包含printf),这样有时能节省很多空间。

显示了c语言的灵活。

eg:

charpt1[]="%d%d%d",pt2[]="%c%c%c";

:

:

printf((flag?

pt1:

pt2),a,b,c);

2)机器会完全按照“格式控制”下的格式进行输出。

*常用printf格式字符:

格式符

使用形式

m默认值

n默认值

说明

d

%d

10

带符号十进制形式(正数不输出符号)

%md

%-md

u

%u

10

无符号十进制形式

%mu

%-mu

c

%c

1

字符形式输出一个字符

%mc

%-mc

s

%s

字符串长度

输出字符串

%m.ns

%-m.ns

f

%f

20

6

小数形式:

±xx…x.xx…x

%m.nf

%-m.nf

e,E

%e

20

6

指数形式:

±x.xx…xe±xxx

或±x.xx…xE±xxx

%m.ne

%-m.ne

g,G

%g

选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。

用G时,若以指数形式输出,则指数以大写表示。

*①m表示列宽,若m大于数据长度,则以空格补齐。

若m小于数据长度,则按实际长度输出

②字符串中的n,表示取该字符串的前n个字符;实数中的n表示输出的小数位数,若实数中的n过分大于其实际小数部分长度,则输出时可能会有误差

③“-”号表示左对齐,无“-”号表示右对齐

④l表示长整形整数,可加在格式符d、o(8进制)、x(16进制)、u前

⑤上面介绍的格式字符只有跟在%后面才作为格式符号:

eg:

%fc则按小时形式输出,后面跟一个字符c

%cf则按字符形式输出一个字符,后面跟一个字符f

⑥要输出“%”号,其格式为:

%%

⑦格式控制中还可以使用转义字符

2.scanf函数

1)一般格式:

scanf(格式控制,地址列表)

格式控制的含义同printf函数,“地址列表”是由若干个地址组成的列表,可以是变量的地址,亦可以是字符串的首地址。

Scanf的格式控制符和printf的类似,但它没有n和“-”号的功能,除了保留m的功能,还增加了h和*的功能。

①m:

eg:

scanf("%3d%3d",&a,&b);

如果输入123456,那么a=123,b=456

②h:

h表示短整型数据,可以加在格式符d、o、x前

③*:

表示本输入项在读入后不赋给相应的变量

eg:

scanf("%2d%*3d%2d",&a,&b);

如果输入:

1234567,那么系统会把12赋给变量a,345虽被机器读入,但不会赋给任何变量(该数据被跳过),67赋给变量b。

2)scanf中除了格式控制符外有任何其他符号,则在输入时要在对应的位置输入相同字符。

eg:

scanf("%d,,%c",&a,&b);

输入时就应该像这样输入:

3,,A

3)在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符,要避免这种歧义的产生。

eg:

scanf("%c%c%c",&a,&b,&c);

若输入:

abc

则实际为a='a',b='',c='b'

正确的输入方法为:

abc

4)在输入数据时,遇到以下情况时认为该数据结束;

①遇空格,或按“回车”或按“跳格”(Tab)键;

②按指定宽度结束,如“%3d”,只取3列;

③遇非法输入(和指定的格式字符类型不相匹配的数据)

**5)不要连用多个scanf

eg:

scanf("%d",&a);

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

scanf("%c",&b);

printf("b=%c\n",b);

如果输入:

123A

那么显示:

123

原因:

c语言中,所有的输入都保存在输入流中,包括空格、回车等。

当调用scanf函数(或其他输入函数)时,scanf会从输入流中取得数据。

比如输入的是:

123A,如果我们像上面一样连用两个scanf,那第一个数据读到空格时结束,即,机器会把123赋值给变量a,然后“空格”和字符“A”还保存在输入流中,接着打印出a的值并回车(由printf("a=%d\n",a);这句语句完成),再接着,第二个scanf会像输入流中索要数据(如果输入流中还有数据),于是上一次遗留下的“空格”就会给变量b,那么在第二行就会打印:

空格+回车(由printf("b=%c\n",b);这句语句完成),那就不是我们要的效果了。

如何改正:

如果要打印原效果,那么就要在第二个scanf上面加一句getchar();,把“空格”给getchar函数,或者把第二个scanf改成:

scanf("%*c%c",&b);,放弃“空格”。

6)如果某控制字符的下一个控制字符不是%c或%s,那么c语言允许输入时出现多个数据结束符(“空格”或“回车”)

eg:

scanf("%d%f%c",&a,&b,&c);

下面两种输入方式都可以:

①1231234.123a

②123

(回车)

(回车)

1234.123

a

机器仍会把123赋给变量a,把1234.123赋给变量b,把字符'a'赋给变量c

若是输入:

1231234.123a

则变量c就会变成''(空格)。

原因:

c语言会放弃多余的数据结束符,而只取一个。

 

3、控制结构

【1】顺序结构

从第一个语句开始,一个一个语句地执行,一直执行到最后,如果是复合语句,就要用花括号{}括起来。

【2】选择(分支)结构

1.单分支:

if(表达式)或if(表达式)

语句一;{

语句1;

语句2;

:

}

2.双分支:

if(表达式)

语句1;

else

语句2;

3.if型多分支:

if(表达式1)语句1;

elseif(表达式2)语句2;

elseif(表达式3)语句3;

:

elseif(表达式m)语句m;

else语句n;

*当嵌套if语句时,要在适当的地方加一个{},以示区别

eg:

if()

if()语句1;

else

if()语句2;

else语句3;

如果你是想第1个if和第1个else配对,那就错了。

实际上,第1个else是和第2个if配对的。

因为c语言中,else是和上面的最近的一个if配对的。

要避免这种情况就要把第2个if语句放到{}中。

改成:

if()

{

if()语句1;

}

else

if()语句2;

else语句3;

4.switch型多分支:

switch(表达式)

{

case常量表达式1:

语句1;//break;

case常量表达式2:

语句2;//break;

:

case常量表达式n:

语句n;//break;

default:

语句n+1;

}

*①switch语句中,若在适当的地方没有break语句,那么,它就会从符合的常量表达式k开始的语句k,一直执行到语句n。

②若表达式的值不符合任意一个常量表达式,那就执行default,且default和case出现的顺序并不影响结果。

③每个case中常量表达式的值必须互不相同;否则就会出现互相矛盾的现象。

5.条件运算符:

①其一般形式为:

表达式1?

表达式2:

表达式3

②求解顺序:

先求解表达式1,若为非0(真),则表达示2的值就作为整个条件表达式的值。

若为0(假),则表达式3的值就是整个条件表达式的值。

③结合顺序:

从右至左

eg:

a>b?

a:

c>d?

c:

d相当于a>b?

a:

(c>d?

c:

d)

④优先级:

条件运算符的优先级比关系运算符和算术运算符都低。

⑤表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。

eg:

a>b?

printf("%d",a):

printf("%d",b)

相当于:

if(a>b)

printf("%d",a);

else

printf("%d",a);

也相当于:

printf("%d",a>b?

a:

b);

*灵活运用条件表达式,可以使程序代码精简很多

*以上(表达式)中的表达式,可以是关系表达式,也可以是逻辑表达式。

1)关系运算符和关系表达式:

①关系运算符的优先次序:

<、<=、>、>=优先级相同(高)

==、!

=优先级相同(低)

eg:

a>=b==c等效于(a>=b)==c

算术运算符的优先级高于关系运算符

eg:

a>b+c等效于a>(b+c)

关系运算符的优先级高于赋值运算符

eg:

a=b>c等效于a=(b>c)

*不过为了可读性,最好还是在适当的地方加一下括号()

②关系表达式:

用关系运算符将两个表达式(可以是算术、关系、逻辑、赋值或字符表达式),连接起来的式子,称为关系表达式。

于是,下列关系表达式都是合法的:

a>b,a+b>c+d,(a=b)>(c=d),'a'<'b',(a>b)>(b

③关系表达式的结合关系:

从左至右

eg:

a>b>c>d等效于((a>b)>c)>d

④关系表达式的值只有“1”(真)和“0”(假)

2)逻辑运算符和逻辑表达式

&&逻辑与(相当于and)

||逻辑或(相当于or)

逻辑非(相当于not)

①优先级:

!

→算术运算符→关系运算符→&&→||→赋值运算符,“!

”的优先级最高

②逻辑表达式:

用逻辑运算符将

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

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2