c语言考试复习大纲.docx

上传人:b****7 文档编号:25046571 上传时间:2023-06-04 格式:DOCX 页数:17 大小:94.01KB
下载 相关 举报
c语言考试复习大纲.docx_第1页
第1页 / 共17页
c语言考试复习大纲.docx_第2页
第2页 / 共17页
c语言考试复习大纲.docx_第3页
第3页 / 共17页
c语言考试复习大纲.docx_第4页
第4页 / 共17页
c语言考试复习大纲.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

c语言考试复习大纲.docx

《c语言考试复习大纲.docx》由会员分享,可在线阅读,更多相关《c语言考试复习大纲.docx(17页珍藏版)》请在冰豆网上搜索。

c语言考试复习大纲.docx

c语言考试复习大纲

武汉理工大学管理学院2014级c语言考试梳理

第一章概览

C语言起源:

1972年贝尔实验室

许多计算机语言Basic模仿英语

C语言是为编程人员开发的语言

计算机工作的基本原理

cpu进行绝大多数计算工作,

内存指令->cpu寄存器->cpu计算执行

c语言是高级语言

强大高效可移植面向编程人员

缺点:

(1)给了比较大的自由度,风险也上升,尤其是指针

(2)运算符丰富,组合起来难以理解

c是最接近底层的高级语言

编程机制:

编译器将c源代码编译成机器语言生成目标代码文件,

链接器向最终程序加入代码,启动代码(不同操作系统启动代码不同),库函数。

生成可执行文件.exe

C语言标准:

c99

 

一个实例

#include//#是一个预处理例子

#defineAGE“Howoldareyou?

/*宏定义指令无参宏有参宏

无参宏:

#define标识符字符

有参宏:

#define标识符(参数)字符表达式*/

intmain(void)

{

inta;//a为标识符int为关键字之一

printf(AGE);

scanf(“%d”,&a);//输出控制&取地址符

return0;

}

 

printf(“字符串”,变量列表)

printf():

%d%o%x%X%u

%f%e%E

%c%s

附加格式字符%5d%05d%+5d%+-5d%.5f%7.1f%#x%#X

scanf(“字符串”,&变量)

scanf()注意事项输入遇到空白字符时停止输入

 

代码规范性

第二章基本数据类型和运算符

程序运行离不开数据

2.1基本数据类型

现在所学的

基本型:

整型实型字符型(枚举类型enum)

指针类型

构造类型:

数组array结构struct联合(共用体)union

2.2常量

整型常量:

十进制八进制:

012十六进制:

0Xfff存储方式其实都一样

后缀ULUL

实型常量(浮点型):

十进制小数0.000000

指数形式:

3.2e51e+0120e5-0.45e-4

默认为double可用后缀F或L进行类型转换

字符常量:

‘a’‘d’‘$’空字符:

‘\0’

转义字符‘\n’‘\t’‘\’’‘\”’‘\ddd’‘\xhh’

字符串常量

“字符串”

分多行输出:

printf(“Thisisthefirstline\

Thisisthefirstline\n”);

printf(“Thisisthefirstline”,

“Thisisthefirstline\n”);

printf(“Thisisthefirstline”);

printf(“Thisisthefirstline”);

符号常量定义了符号常量之后,与字符串序列等价

#define或类型限定符const或枚举类型enum

 

2.3变量

变量声明变量赋值/初始化

先定义才能使用

一个函数中变量名不能重复,标识符不能重复

2.4指针变量

int*p;p的类型是int*,p是一个指向int类型整数的指针

指针运算符*取值;&取地址

&*互为逆运算

指针变量初始化才有意义

inta;

p=&a;p中只能存放同类型变量的地址这里都为int

2.5运算符与表达式

用运算符将若干个式子连接起来构成的式子叫做表达式

求表达式的值在考试中经常见到,直接或者间接的考

2.5.1算术运算符和算术表达式

+-(正和负)+5(右往左)优先级比下面几个高

+-(加和减)*/%(左往右)5.0/2==2.500000

各个注意事项

左右两边类型不一致,自动升级为高等级类型,混合类型中有float类型,会被升级为double

/整数相除要注意,会舍去小数部分,或者说是类型相同时,值的类型也相同

指针用加减的注意事项

%注意事项

字符型操作数,比如‘a’,会将字符型转为整数型,用字符的ASCII码值参加运算

‘a’+3==‘d’

2.5.2赋值运算符和赋值表达式

=+=-=*=/=%=

性质:

所有的优先级相同,结合方向为从右至左。

优先级低于算术运算符

注意优先级所带来的赋值问题a*=3+2

整体表达式的值是最后一次运算之后的值

inta=9,b=5;b=(a=4)/(b=a)值为1

赋值表达式左右类型不一致时的类型转换规则:

整型数据赋给实型变量时,值大小不变

实型赋给整型会舍弃小数部分

float赋给double数值不变,double赋给float截取前七位有效位

整型长的赋给短的,截取相应大小的低字节位;短的赋给长的,

若有符号将符号值填充多出来的高位(0为正1为负),无符号的就用0填充多出来的字节

2.5.3自增和自减运算符

a++++a顺序问题a++就是先用a,再让a增加1

a----a++a就是先让a增加1,再用a

只能用于变量,不能用于常量和表达式,即不能有3++(d=3)++之类

最好只用在整数上,浮点数最好不用

++--单目,优先级比双目高,与+-(正负)优先级相同

-d--结合方向都是从右向左所以可以看做-(d—)

指针变量自增运算

int*p;intx=2;p=&x;

++p

2.5.4逗号运算符和逗号表达式

优先级在所有运算符中最低,结合方向从左往右,顺序执行,

最后一个表达式的值就是整个逗号表达式的值

注意与函数调用,声明等中出现的,的区别,这里面的,只是个分隔符

2.5.5其他运算符

强制类型转换运算符

(int)3.2

sizeof运算符

用法:

sizeof(表达式)或者sizeof(数据类型)

输出可用%z,是一种由u改造的类型,所以输出sizeof()也可用%u

printf(“int类型的大小为%z个字节”,sizeof(int));

2.5.6混合运算

不同类型数据在运算时,首先进行类型转换再进行运算

书写代数,数学上的表达式应注意,使用数学库函数注意参数类型,

如计算sin30°值,应代入弧度值即30*3.14/180

第三章控制结构

3.1基本控制结构

顺序,选择,循环图灵证明这三种控制结构的组合可以解决一切实际问题

3.1.1基本语句

3.1.2常用的输入输出函数

字符输入输出函数getch();getchar();putch();putchar();

getch()不需要回车确认,拿到字符就走人,还不回显;

getchar()需要按回车确认输入好了

printf(“ch=%c\n”,getch());//将输入的字符立即显示

 

3.1.3顺序结构程序设计示例

3.2程序中的控制运算符

3.2.1关系运算符

6种比较运算的关系运算符:

<<=>>===!

=

前四个同级,优先级比后两个高。

优先级比加减乘除低,比赋值运算符高

关系表达式结果只有真假。

c语言规定非零为真,0为假3>2+2值为0

正确表示数学上的连不等式3<=x<=7x>=3&&x<=7

3.2.2逻辑运算符

!

非&&与||或

&&类似于乘法运算||类似于加法运算

短路特性

3.2.3条件运算符

三目运算符结合方向从右往左如a>b?

a:

c>d?

c:

d等价于a>b?

a:

(c>d?

c:

d)

3.3程序中的选择结构

3.3.1if语句

用法1:

if(表达式)//条件表达式为真则执行内嵌语句。

若没有强制性语句就

语句;//执行一遍内嵌语句之后就执行下一个语句

用法2:

if(表达式)

语句;

else

语句;

用法3:

if(表达式)

语句

elseif(表达式)

语句

else

语句

3.3.2switch语句

用法:

switch(表达式)

{

case常量表达式1:

语句1;

case常量表达式2:

语句2;

……

case常量表达式n:

语句n;

default:

语句n+1;

}

执行过程顺序执行

优化用法:

各个语句最后加上break;

3.3.3多重选择结构

if语句的嵌套

else与它前面最接近的没有和else配对的if配对

switch嵌套

3.4程序中的循环结构

3.4.1while循环结构

用法:

while(表达式)

{

循环体;

}

3.4.2do-while循环结构

用法:

do{

循环体;

}while(表达式);

3.4.3for循环结构

用法:

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

{

循环体;

}

3.4.4break和continue语句

3.4.5多重循环结构

3.53.6不考

第四章数组和指针

数据类型在实际生活中有很多是批量数据,

单个数据用来处理这些问题效率显然会比较低下

数组是一种构造类型

是由若干相同数据类型的数据组合起来的

4.1一维数组

4.1.1一维数组的定义和初始化

(1)定义:

类型名数组名[数组元素个数]

inta[5];floatb[5];charc[5];

注意事项:

数组a的元素是a[0]a[1]a[2]a[3]a[4]下标从0开始

课本:

不能用变量定义数组长度(变长数组VLA)

可以使用malloc()动态分配

数组一旦确定大小就不能改变

推荐使用宏定义的明显常量作为数组大小比如

#defineMAXNAME50

……

charname[MAXNAME];

一维数组定义之后会在内存中分配连续的存储空间,

大小为数组元素的个数*定义的数据类型所占用字节数比如inta[5]大小就是5*4=20字节

(2)初始化数组如果不初始化,就没有实际意义部分初始化之后,没有初始化的变为0

inta[6]={1,2,3,4,5,6};//整体初始化只能在定义的时候

inta[6]={1,2}//定义之后只能单个初始化a[5]是个元素

4.1.2一维数组元素的引用及基本操作

使用某个已经声明过的数组中的元素:

a[0]a[1]注意下标

引用只能单个引用

for(i=0;i

scanf(“%d”,&a[i]);//或printf(“%d”,a[i]);

赋值操作

inta[3];//a[0]a[1]a[2]就相当于普通的整型变量

 

4.1.3一维数组的应用举例

查找:

(1)顺序查找:

(只列出核心代码)

#defineN20

……

for(i=0;i

if(a[i]==key)

{

printf(“%d被找到啦,哈哈哈~~~”,key);

num++;//统计找到的数据个数

}

(2)二分法查找(前提是数据升序或者降序排列,本例中为升序)

#defineN9

……

intlow=0;

inthigh=N-1;

intmid,key;

……

while(low

{

mid=(low+high)/2;

if(a[mid]==key)

break;

if(a[mid]

low=mid+1;

else

high=mid–1;

}

排序:

(1)比较排序法

先从a[0]开始与a[1]比较,如果遇到比a[0]小的

就交换这个数与a[0]的值,这样a[0]最后就是这些数的最小值

然后从a[1]开始,与a[2]比较,类似上面,a[1]就成为除了a[0]的数的最小值

以此类推,就会得到一个从小到大的数组排列

for(i=0;i

for(j=i+1;j

if(a[j]

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

(2)选择排序法

先找出a[0]a[1]……a[n-1]中最小值,

与a[0]交换,这样这n个数最小值就是a[0]

再将a[1]a[2]……a[n-1]中最小值与a[1]交换,

这样这除了a[0]的n-1个数最小值就是a[1]

以此类推得到从小到大的数组

(3)冒泡法:

首先将a[0]与a[1],a[1]与a[2],a[2]与a[3]……进行比较若为逆序则交换

这样a[n-1]为最大值

重复,得到第二大的值a[n-2]

这是从后往前,由大到小

4.2二维数组及多维数组

4.2.1二维数组的定义及初始化

二维数组也称矩阵

inta[2][2]在内存中按行存储

顺序依次是a[0][0]a[0][1]a[1][0]a[1][1]

几种初始化方式:

inta[2][3]={{1,2,3},{4,5,6}}

inta[2][3]={1,2,3,4,5,6}

inta[][3]={1,2,3,4,5,6}//全部初始化可以省略第一维大小

若部分初始化,则未被初始化的变为0

二维数组元素表示

a[M][N]中第a[i][j]个元素,是总共M*N个元素中第N*i+j个元素

可用a[0][N*i+j]表示a[i][j](相对于a[0][0]的偏移量)

4.2.2二维数组的应用举例

4.2.3多维数组

初始化与二维类似

inta[2][3][4];

b[i][j][k]==b[0][0][M*N*i+N*j+k]

4.3字符数组及字符串处理函数

字符数组在内存中存放字符串

一维用来存放一个字符串,二位存放多个字符串

4.3.1字符数组的初始化

chars1[10]=“Hello”;

charstr[2][10]={“市场营销”,“会计学”}

str[0]==“市场营销”;str[1]==“会计学”;

4.3.2字符数组的输入

gets()函数

chars[100]

scanf(“%s”,s)//数组名是地址常量

for循环和scanf()%c一个一个输入字符

4.3.3字符数组的输出

chars[100]=“真是日了狗了!

puts(s);

printf()%c和putchar()一个一个输出字符;

4.3.4常用的字符串函数

strlen()可求出字符串实际长度,不包括‘\0’的所有字符个数;

strcat()字符串连接函数StringCatenate,有两个参数

strcat(str1,str2)把str2中字符串连接到str1末尾

str1中的\0没了,变成str2中第一个字符,str2中的\0不变

str1要足够大

strcpy(str1,str2)把str2复制到str1中

字符数组整体赋值只能用strcpy(),相当于整数浮点数中=的赋值运算

strcmp(str1,str2)字符串比较函数

如果str1>str2返回值大于零

<小于零

=等于零

“000abcd”>“000ABCD”

从左往右直到第一个不相等的字符,然后比较

4.4指针和数组

指针与数组有密切联系

数组名是特殊类型的指针

4.4.1指针与一维数组

inta[10];

int*p;

p=a;

p=&a[0];

*p=1;//a[0]为1

指针变量一旦指向数组首元素,指针变量名可以当作一维数组名使用

p[2]==a[2]

p+i==a+i;

a+i==&a[i];

*(a+i)==a[i];

指针变量的运算++--和*同级,都是从右向左结合

所以*p++==*(p++)//先把指针向后挪一位再取出其中的值

(*p)++//表示先取出p所指地址的值再把值加一

4.4.2指针与二维数组

intstr[2][3];

int*p;

p=str;

*p==&str[0]

**p==str[0][0]

4.4.3指针与字符串

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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