搜档网
当前位置:搜档网 › (完整)C语言基础知识大全,推荐文档

(完整)C语言基础知识大全,推荐文档

(完整)C语言基础知识大全,推荐文档
(完整)C语言基础知识大全,推荐文档

1.语言变量声明和变量赋值

1)基本数据类型

在C语言中,仅有4种基本数据类型—整型、浮点型、指针和聚合类型(如数组和结构等),所有其他的类型都是从这4种基本类型的某种组合派生而来。

整型:整型家族包括字符、短整型、整型和长整型,它们都分为有符号(signed)和无符号(unsigned)两种版本。规定整数值相互之间大小的规则很简单:长整型至少应该和整型一样长,而整型至少应该和短整型一样长。

浮点类型:诸如3.14159和2.3×1023这样的数值无法按照整数存储。第一个数为非整数,而第二个数远远超出了计算机整数所表达范围,这样的数就可以用浮点数的形式存储。浮点数家族包括float、double和long double类型。通常,这些类型分别提供单精度、双精度以及在某种扩展精度的机器上提供扩展精度。ANSI标准仅仅规定long double至少和double一样长,而double至少和float一样长。标准同时规定了一个最小范围:所有浮点类型至少能够容纳从10-37到1037之间的任何值。

指针:变量的值存储于计算机内存中,每个变量都占据一个特定的位置。每个内存的位置都由地址唯一确定并应用,就像一条街上的房子由他们的门牌号码标识一样,指针知识地址的另一个名字。

2)变量声明形式

只知道基本的数据类型是远远不够的,你还应该知道怎样声明变量。变量的基本形式是:

说明符(一个或多个)声明表达式列表

对于简单的类型,声明表达式列表就是被声明的标识符的基本类型。对于相对比较复杂的类型,声明表达式列表的每个条目实际上是一个表达式,显示被声明的名字的可能用途。

例如:int a, double b;

该语句就是一条声明语句,其中a,b就是变量名,该语句指明了变量a,b是int数据类型。所有变量在使用前都必须写在执行语句之前,也就是变量声明要与执行语句相分离,否则就是出现编译错误。

3)变量命名

C语言中任何的变量名都是合法的标示符。所谓标识符就是由字母、数字和下划线组成的但不以数字开头的一系列字符。虽然C语言对标示符的长度没有限制,但是根据ANSI标准,C编译器必须要识别前31个字符。C语言是对大小写敏感的,即C语言认为大写字母和小写字母的含义是不同的,因此a1和A1是不同的标识符。

到目前为止,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。常用的命名规则有匈牙利命名法和驼峰命名法等,在实际操作中,我们会采取相对简单方便的命名规则,即“类型首字母”+“_”+“变量用途英文缩写”,其中英文缩写首字母为大写,例如int i_Num,char c_Name[5]。

4)变量赋值

在一个变量声明中,你可以给一个标量变量指定一个初始值,方法是在变量名后面跟一个等号(赋值号),后面就是你想要给变量的值。例如:int i_Num=10;

char c_Name[]=”student”;

上述语句声明i_Num为一个整数变量,其初始值为10,声明c_Name为一个字符数组,其初始值为“student”。

在C语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char分别为0,0.0,’\0’,除了全局变量和静态变量以外,其他变量如果没有赋初值,则默认初始值为内存中的垃圾内容,对于垃圾内容不能有任何假设。注意:定义指针后,默认初始值不是0,而是随机的一个值,故定义指针后,一定要初始化。

在实际操作中,变量的赋值都是以赋值语句的形式出现,赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为:

变量=表达式;

在赋值语句的使用中需要注意以下几点:

a)由于在赋值符“=”右边的表达式也可以又是一个赋值表达式。

下述形式:

变量=(变量=表达式);

该语句是成立的,从而形成了嵌套的情形。其展开后的一般形式为:

变量=变量=…=表达式;

例如:a=b=c=d=e=5;

按照赋值运算符的右结合性,因此实际上等效于:e=5;d=e;c=d;b=c;a=b;

b)注意在变量声明中给变量赋初值和赋值语句的区别

给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间仍必须用逗号隔开,而赋值语句则必须用分号隔开。

例如:int a=5,b,c;

c)在变量声明中,不允许连续给多个变量赋初值。

如下述说明就是错误的:

int a=b=c=5;

正确写法为:int a=5,b=5,c=5;

但是,赋值语句允许连续赋值。

d)注意赋值表达式和赋值语句的区别。

赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。下述语句是合法的:

If((x=y+7)>0) z=x;

语句功能为若表达式x=y+5大于0则z=x。

但是,下述语句是错误的:

If((x=y+7;)>0) z=x;

因为x=y+7;是语句,不能出现在表达式中。

实例:

#include “stdafx.h”

void main()

{

int i_Tmp,i_Type=8;

float f_Tmp;

double d_Tmp;

char c_Tmp;

d_Tmp=d_Tmp=f_Tmp=12;

f_Tmp=i_Type;

i_Tmp=i_Type+3;

printf("a=%d,b=%d,c=%.3f,d=%.6lf",i_Tmp,i_Type,f_Tmp,d_Tmp);

}

参考书目:

1.(美)Kebbeth A.reek.《C与指针》29-40

2.H.M.Deitel P.J.Deitel等《how to program Second Edition》19-23

2.算术运算符及使用方式

C

1、+

行整数运算,其余情况则进行double型运算;当/除法运算符的两个操作数为整数时,结果为整数,舍去小数部分,例如5/3的结果为1;%求余运算符只接受两个整型操作数的运算,结果为余数

2、++、--:作用是使变量自加1或自减1,例如i++、++i,都是使i的值加1,但其执行的步骤是不同的。例如:

int i=3,j;

j=i++;// i的值为4 ,j的值为3

int i=3,j;

j=++i;//i的值为4,j的值为4

可见当变量在左侧时,先进行赋值运算再进行自加1操作,当变量在右侧时,先进行自加1操作再进行赋值运算。

3、在赋值运算符之前加上算术运算符既构成复合运算符,例如:a+=b,等价于a=a+b。-=、*=、/=也是如此。

3.位运算符及使用方式(<<、>>、~、|、&、^)

位运算符是用来对二进制位进行操作,如下表:

<<、>>

int i=3;i=i<<4;

3的二进制位为00000011,左移4位的结果为00110000,其操作中高位舍弃、低位补0,既i=48,等同于i乘以2的4次方。

右移运算符则有所不同,操作中是低位舍弃,高位则有两种补位方式。一种为逻辑移位,高位补0;另一种为算术移位,当符号位为1时高位全部补1,当符号位为0时则高位全部补0。具体使用哪种移位方式则取决于当前的编译环境。

~:取反运算符,为单目运算符,其操作是对操作数的二进制位按位求反,既1变0,0变1。例如i=5,二进制位为00000101,取反的结果为11111010。

在计算机系统中,数值一律用补码来表示和存储,其中最高位为符号位,用0表示正,1表示负。补码的规定如下:

a)对正数来说,最高位为0,其余各位代表数值本身,例如14的补码为

00001110;对负数而言,则将该数绝对值的补码按位取反,再加1,得

该数的补码,既-i=~i+1。例如-14的补码为14的二进制00001110取反

加1得11110010。

b)|、&、^:均为双目运算符,对操作数的二进位进行运行,且操作数以

补码的方式出现。

c)|按位或,两个对应的二进位至少有一个为1则为1,否则为0;&按位

与,两个对应的二进位都为1则为1,否则为0;^按位异或,两个对应

的二进位不同则为1,否则为0。例如:

a=5; (00000101)

b=14; (00001110)

a|b=15; (00001111)

a&b=4; (00000100)

a^b=11; (00001011)

4.关系运算符及使用方式(>、>=、<、<=、==、!=)

号为关系运算符,当表达式成立时,“a>3”的值为“真”,当“a>3”不成立时,

“a>3”的值为“假”。

其中应当注意的是关系表达式的返回值为整型值,而不是布尔型。表达式为真时返回值为1,表达式为假时返回值为0。

5.逻辑运算符及使用方式(&&、||、!)

断,其返回值为“真”。

当一个表达式包括几种运算符时,则以运算符的优先级对表达式进行运算,

6.指针的概念与使用

1)指针的定义

指针就是变量的地址,是一个常量。定义指针的目的就是为了通过指针访问内存单元。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。

指针变量定义的一般形式为:

存储类型数据类型* 指针变量名

2)指针变量运算符

1、取地址运算符:&

该运算符表示的是对&后面的变量进行取地址运算。

例:int a;

则&a表示取变量a的地址,该表达式的值为变量a的首地址。

2、指针运算符:*

该运算符也称为“取内容运算符”,后面接一个指针变量。表示的是访问该指针变量所指向的变量,即访问指针所指向的存储空间中的数据。

例:int a=7;

int *p;

p=&a;

则*p 表示指针变量p 指向变量a,即*p 就是a,所以*p=7。

一个指针变量p 在程序中通常有如下表示形式:

p:指针变量,它的内容是地址量;

*p:指针所指向的变量,是指针所指向的内存空间中的数据;

&p:指针变量所占存储空间的地址;

【例1】分析程序的运行结果

源程序如下:

#include

void Locate()

{

int i_a;

int *pst_a;

printf("\n请输入i_a的值:");

scanf("%d",&i_a);

pst_a =&i_a;

printf("i_a的值为:%d\n",i_a);

printf("pst_a的值为:%x\n", pst_a);

printf("&i_a的值为:%x\n",&i_a);

printf("*pst_a的值为:%d\n",* pst_a);

printf("&pst_a的值为:%x\n",& pst_a);

printf("\n");

}

运行结果:

请输入i_a的值:3

i_a的值为:3

pst_a的值为:12fe8c

&i_a的值为:12fe8c

*pst_a的值为:3

&pst_a的值为:12fe80

以上实例中,12fe8c是pst_a的值,也就是i_a的地址;12fe80是pst_a的地址;两者有区别,不能混为一谈。

3)地址与指针的概念

指针可以有效地表示复杂的数据结构;动态分配内存;方便的使用字符串;有效而方便地使用数组;能直接处理内存地址。

如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元。系统根据程序中定义的变量的类型,分配一定长度的空间。例如,一般微机使用的C 系统为整形变量分配两个字节,为实型变量分配4个字节。内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标志的内存单元中存放数据,这相当于旅馆中各个房间中居住旅客一样。

在程序中一般通过变量名对内存单元进行存取操作,这称作“直接访问”,还可以采用另一种“间接访问”方式,将变量的地址存放在另一个变量中。所谓“指向”就是通过地址来体现的,由于通过地址能找到所需的变量单元,我们可以说,地址“指向”该变量单元,因此在C语言中,将地址形象化的称为“指

针”。意思是通过它能找到以它为地址的内存单元。一个变量的地址成为该变量的“指针”。如果有一个变量专门用来存放另一个变量的地址,则称它为“指针变量”。

4)变量的指针和指向变量的指针变量

变量的指针就是变量的地址。存放变量地址的变量是指针变量,用来指向另一个变量。为了表示指针变量和它指向的变量之间的关系,用“*”符号表示“指向”。

定义指针变量的一般形式为:

基类型*指针变量名;

5)数组与指针

一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占有存储单元,它们都有相应的地址。指针变量也可以指向数组元素。

6)空间操作函数malloc、free

C语言提供了两个函数,malloc与free,分别用于执行动态内存分配与释放。这些函数维护一个可用内存池。当一个程序另外需要一些内存时,它就调用malloc函数从内存池中提取一块合适的内存,并返回一个指向这块内存的指针。这块内存此时并没有以任何方式进行初始化,使用时需手动初始化。

这两个函数的原型如下所示,它们都在头文件stdio.h中声明。

void *mallloc(size_t size);

V oid *free(viod* pointer);

malloc的参数就是需要分配的内存字节数。如果内存池中的可用内存可以满足这个需要,malloc就返回一个指向被分配的内存块起始位置的指针,如果系统无法向malloc提供更多的内存,malloc就会返回一个NULL指针。

free的参数必须要么是NULL,要么是一个先前从malloc或其他空间申请函数返回的值。

malloc的一般用法

基类型*=(基类型)*Malloc(数量*sizeof(基类型));

7)动态数组

动态数组是指在声明时没有确定数组大小的数组,即忽略方括号中的下标;当使用时可用malloc语句重新指出数组的大小。使用动态数组的优点是可以根据用户需要,有效利用存储空间。动态数组的内存空间是从堆上分配的。是通过执行代码而为其分配空间。当程序执行到这些语句时,才为其分配空间。程序员自己释放内存。

遵循原则:

申请的时候从外层往里层,逐层申请;

释放的时候从里层往外层,逐层释放。

【例2】:一维数组的动态开辟与释放:

【例3】:二维数组的动态开辟:

7.数组

数组是构造类型,是一组具有相同类型数据的有序集合。每个数据成为数组的元素,用一个统一的数组名和下标来唯一地确定数组中的元素。

一维数组的声明方式为:

<类型标识符><数组名>[常量表达式]

类型标识符是任一种基本数据类型或构造数据类型;数组名由用户自定义,表示存储空间的地址;常量表达式表示数组元素的个数,也是数组的长度。

例:int a[6];表示一个整型、数组名为a、长度为6的一维数组。

(2)一维数组的引用形式:

下标法:数组名[下标]

例如:a[i];或p[i];a为数组名,p为指向数组的指针变量。

注:C语言中不能依次引用整个数组,只能逐个引用数组中的各个元素。下标就是被访问的数组元素在所定义的数组中的相对位置。下标为0表示的是数组

元素在数组的第一个位置上,下标等于1表示的是数组元素在数组的第二个位置上,依次类推。例如:

int a[10];

a[0]=100;//正确

a[10]=100;//不正确,下标越界

例如:

下标法:

int main()

{

int a[10];

for(int i=0;i<10;i++)

a[i]=2*i;

for(int i=0;i<10;i++)

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

return 0;

}

指针法:*(a+i)或*(p+i);a是数组名,p为指向数组的指针变量。

例如:

指针法:

int main()

{

int *p=a;

int i;

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

a[i]=2*i;

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

printf(“%d\t”,*(p+i));

return 0;

}

二维数组的声明方式为:

<类型标识符><数组名>[常量表达式1] [常量表达式2]:二维数组与一维数组的区别在于多出[常量表达式2]。[常量表达式1] 是第一维,常称为行;[常量表达式2]是第二维,也就是列。

例:int a[3][5];表示一个3行5列的二维数组;数组元素的个数为:3*5=15个。

二维数组的引用形式:

下标法:

数组名[下标] [下标]

注:二维数组在引用时和一维数组一样,只能逐个引用数组中的各个元素。例如:

sz_A[5][6]

下标可以是整数表达式,如sz_A[8-5][2*3-1]。不要写成sz_A[2,3]、

sz_A[8-5,2*3-1]形式。

注意:严格区分定义数组时用的sz_A[5][6]和引用元素时用的sz_A[5][6]

的区别。前者sz_A[5][6]用来定义数组的维数,后者sz_A[5][6]的5和6是下标,代表的是数组中的某一个元素。

【例2】分析程序的运行结果

源程序如下:

#include

void main()

{

int sz_Array[6];//一维数组

int sz_DlArray[3][5];//二维数组

int i_a;

int i_dla;

int i_dlb;

//一维数组

for (i_a=0;i_a<6;i_a++)

{

sz_Array[i_a]=i_a*2+2;

}

printf("\n输出一维数组元素为:\n");

for(i_a=0;i_a<6;i_a++)

{

printf("%d\t",sz_Array[i_a]);

}

//二维数组

for(i_dla=0;i_dla<3;i_dla++)

{

for(i_dlb=0;i_dlb<5;i_dlb++)

{

sz_DlArray[i_dla][i_dlb]=i_dla+i_dlb;}

}

printf("\n输出二维数组元素为:\n");

for(i_dla=0;i_dla<3;i_dla++)

{

for(i_dlb;i_dlb<5;i_dlb++)

{

printf("%d ",sz_DlArray[i_dla][i_dlb]);

}

printf("\n");

}

}

运行结果为:

输出一维数组元素为:

2 4 6 8 10 12

输出二维数组元素为:

0 1 2 3 4

1 2 3 4 5

2 3 4 5 6

3 4 5 6 7

4 5 6 7 8

指针法:

可以通过行指针来引用二维数组元素。

定义行指针变量:int (*p)[3],指针p是指向一个由3个元素所组成的整型数组指针。

例如:

void main()

{

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}

int (*p)[4]=a;

for(int i=0;i<3;i++)

{

for(int j=0;i<4;j++)

printf(“%d\t”,p[i][j]);

printf(“\n”);

}

}

参考书目:

1.C++语言程序设计教程与实验(第二版) 温秀梅丁学钧李建华主编

2.C/C++程序设计教程张世民主编

8.字符数组

1)字符数组的定义与赋值

字符数组是一串字符的集合,其数组元素为字符型。

字符数组的赋值形式:

char 数组名[常量表达式]=“字符串”;

或char 数组名[常量表达式]={“字符串”};

例:char sz_A[5]={‘s’, ‘t’, ‘u’, ‘d’, ‘y’, };

定义数组sz_A,包含5个元素,其在内存中的存放情况为:

sz_A[0]=‘s’;sz_A[1]=‘t’;sz_A[2]=‘u’;sz_A[3]=‘d’;sz_A[4] =‘y’

如果花括号中的字符个数大于数组长度,编译系统就会报错,如果花括号中的字符个数小于数组长度,其余元素则由系统自动定义为空字符,即‘\0’。

‘\0’作为字符串的结束标志,因此在定义数组长度时,应在字符串原有的长度上加1,为字符串结束标志预留空间。

例:char sz_A[6]={‘s’, ‘t’, ‘u’, ‘d’, ‘y’, };

定义数组sz_A,包含6个元素,其在内存中的存放情况为:

sz_A[0]sz_A[1] sz_A[2] sz_A[3] sz_A[4] sz_A[5]

sz_A[0]=‘s’;sz_A[1]=‘t’;sz_A[2]=‘u’

sz_A[3]=‘d’;sz_A[4]=‘y’;sz_A[5]=‘\0’

【例3】分析程序的运行结果

源程序如下:

#include

void main()

{

char sz_A[10]="work hard";

int i;

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

printf("%c",sz_A[i]);

}

运行结果:

work hard

以上实例中,逐个显示字符数组的各个元素,但需注意的是在定义字符数组的下标时,至少比后面的字符串长度大1。其中,字符串长度应包括其中空格的长度。

2)字符串操作函数:

a)字符串复制函数strcpy()

格式:strcpy(字符数组1,字符数组2)

功能:是将字符数组2中字符串复制到字符数组1中去。

注:字符数组1的长度必须大于字符数组2,从而能够容纳复制的字符数组2的字符串;字符数组1必须写成数组名形式,字符数组2既可以是字符数组名,也可以是字符串;字符数组之间不能相互赋值。

例如:char sz_str1[10],sz_str2[6]="work hard";

Strcpy(sz_str1,sz_str2);

printf("%s\n",sz_str1);

运行结果:

work hard

b)字符串连接函数strcat()

strcat(字符数组1,字符数组2)

功能:将字符数组1和字符数组2中的字符串连接起来,字符数组2中的字符串2接到字符数组1中的字符串后面。

注:字符数组1的长度必须足够大,能够同时容纳字符数组1中的字符串和字符数组2中的字符串。

字符数组名2中的字符串连接到字符数组1的字符串时,删除字符数组1中的字符串后面的标志‘\0’,只在新串的最后保留“\0”。

例如:char sz_str1[10]="work",sz_str2[6]="hard";

strcat(sz_str1,sz_str2);

printf("%s\n",sz_str1);

运行结果:

workhard

c)字符串比较函数strcmp()

strcmp(字符数组1,字符数组2)

功能:比较字符数组1和字符数组2中字符串,通过函数返回值得出比较结果。

若字符数组1中的字符串<若字符数组1中的字符串,函数返回值<0;

若字符数组1中的字符串>若字符数组1中的字符串,函数返回值>0;

若字符数组1中的字符串=若字符数组1中的字符串,函数返回值=0;

注:比较规则:比较过程中,按照从左到右的顺序,逐个比较字符的ASCII 码值,直到遇到不相同的字符或“\0”,即结束比较。

例如:char sz_str1[10]="work",sz_str2[10]="hard";

if (strcmp(sz_str1,sz_str2)>0)

{

printf("大于\n");

}

if (strcmp(sz_str1,sz_str2)<0)

{

printf("小于\n");

}

if (strcmp(sz_str1,sz_str2)==0)

printf("相等\n");

运行结果:

大于

d)sprintf()

sprintf(s,”%s%d%c”,”text”,1,’char’);

将输出结果写入数组S中;其函数返回值为字符串长度,相当于strlen;计算长度时不计算“\0”,而sizeof计算时是加上“\0”的。

例如:

char sz_str;

sprintf(sz_str,"%s%d%c","work",6,"hard");

i_Tmp=sprintf(sz_str,"%s%d%c","work",6,"hard");

printf("sprintf结果输出:%s\n",sz_str);

printf("sprintf函数返回值输出:%d\n",i_Tmp);

e)sscanf()

sscanf(s,”%d%f%s”,&a,&b,&c);

从一个字符串中读进与指定格式相同的数据;其返回值为读入有效数据的个数;从数组S中,以固定格式向a,b,c输入,sscanf不识别空格。

char sz_str[11]="work6hard";

char sz_str1[11];

sscanf(sz_str,"%4s",sz_str1);

i_Tmp=sscanf(sz_str,"%4s",sz_str1);

printf("输出结果:%s\n",sz_str1);

printf("sscanf函数返回值:%d\n",i_Tmp);

运行结果:

输出结果:work

sscanf函数返回值:1

9.全局变量与局部变量的定义和区别

变量的作用域指变量所起的作用范围,变量的定义位置决定了变量的作用域,它可分为全局变量和局部变量。

1)全局变量

全局变量是指在函数外部定义的变量,它不属于哪一个函数,它属于一个源程序文件,它的作用范围从定义变量定义的位置开始到本源文件的结束。在函数中使用全局变量,一般应做全局变量声明。只有在函数内部经过声明的全局变量才能使用。但在一个函数之前定义全局变量,在该函数内使用可不加以声明。

全局变量的作用是增加函数间数据联系的渠道。同一个文件中的所有函数都能引用全局变量的值,当一个函数改变了全局变量的值,就会影响到其它函数,有利于函数之间信息的传递。

2)局部变量

在函数中或者复合语句中定义的变量称为局部变量,它的作用范围只限于该函数或者该复合语句中,在其它位置无效。

如果全局变量和局部变量重名,在定义局部变量中的子程序中局部变量起作用,全局变量失效。

程序在编译过程中,系统并不会为局部变量分配存储单元,而在程序的运行过程中,当局部变量所在函数被调用时,系统才会为变量分配临时内存,函数调用结束后,释放空间。

3)全局变量和局部变量的区别

1 全局变量的有效范围从定义该变量的位置开始到本源文件的结束,局部变量只在定义该变量的函数中有效,在函数外部无效。

2局部变量是程序运行到该函数时给变量分配内存空间,函数运行结束后释放空间,全局变量在程序运行时先分配内存空间,直到本源文件执行完以后释放空间。

4)程序实例

#include"stdafx.h"

int x=6,y=8;

void plus()

{

printf("x=%d\t,y=%d\n",x,y);

x++;

y++;

}

void main()

{

void plus();

int x=2,y;

x=2,y=3;

printf("x=%d\t,y=%d\n",x,y);

plus();

printf("x=%d\t,y=%d\n",x,y);

plus();

}

参考书目:

1.《C 语言程序设计》作者张书云姜淑菊朱雷P89-P91

10.文件操作以处理

1)FILE类型

文件:存储在外部介质上数据的集合。声明FILE结构体类型的信息须声明#inclu议案不能定义指向FILE类型变量的指针变量FILE *fp;

2)fopen函数

调用方式:fopen(文件名,使用文件方式),文件打开成功则返回一个FILE 类型指针,否则返回NULL。

表10-1文件打开方式

fopen("a1","r");

FILE *fp;fp=fopen("a1","r");

将fopen函数的返回值赋给指针变量fp。

常用下面方法打开一个文件:

if((fp=fopen("file1","r"))==NULL)

{

printf("cannot open this file\n");

exit(0);

}

3)fclose函数(文件的关闭)

关闭fclose(文件指针);当顺利关闭文件,则返回0值,否则返回EOF(-1).

4)fprintf函数与fscanf函数

fprintf函数、fscanf函数与printf函数、scanf函数相仿都是格式化读写函数。只有一点不同:fprintf和fscanf函数的读写对象不是终端而是磁盘文件。它们的一般调用方式为:

fprintf(文件指针,格式化字符串,输出列表);

fscanf(文件指针,格式化字符串,输入列表);

例如:

fprintf(fp,”%d,%6.2f”,I,t);

它的作用是将变量i与t的值按%d与%6.2f的格式输出到fp指向的文件上。

用fprintf函数和fscanf函数对磁盘文件读写,使用方便,容易理解,但由于在输入时要将ASCII码转换为二进制形式,在输出时又要讲二进制形式转换成字符,花费时间较多。因此,在内存与磁盘频繁交换数据的情况下,最好不要使用fprintf和fscanf函数。

5)fread与fwrite函数

ANSI C标准提出设置两个函数(fread与fwrite),用来读写一个数据块,它们的一般调用形式为

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

其中:

buffer:是一个指针。对于fread来说,它是读入数据的存放地址。对fwrite 来说,是要输出的数据的地址。

Size:要读写的字节数。

Count:要进行读写多少个size字节的数据项。

fp:文件型指针。

如果fread与fwrite调用成功,则函数返回值为count的值,即输入输出数据项的完整个数。

常用fread与fwrite函数进行文件的读写操作

例:

11.冒泡排序与折半排序

1)冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

冒泡排序算法的运作如下:(从后往前)

a)比较相邻的元素。如果第一个比第二个大,就交换他们两个。

b)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在

这一点,最后的元素应该会是最大的数。

c)针对所有的元素重复以上的步骤,除了最后一个。

d)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需

要比较。

实例:

#include

#defineSIZE8

V oid Bubble_Sort(int a[],int n);

V oid Bubble_Sort(int a[],int n) //n为数组a的元素个数

{

int i,j,temp;

for(j=0;j

for(i=0;i

{

if(a[i]>a[i+1])//数组元素大小按升序排列

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}

}

}

int main()

{

int i_Num[SIZE]={95,45,15,78,84,51,24,12};

int i;

Bubble_Sort(i_Num,SIZE);

for(i=0;i

{

printf("%d", i_Num [i]);

}

printf("\n");

}

2)折半排序

折半排序实质上是不断地对有序数据集进行对半分割,并且获取每个分区的中间元素,用中间元素与待排序元素进行比较,最终确定数据集顺序。

折半排序算法思想:折半排序的重点是查找待排序元素A[i]在有序数据集中的位置。在处理A[i]时,A[0]……A[i-1]已经按关键码值排好序。所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的关键码值小于A[i-1/2]的关键码值,则说明A[i]只能插入A[0]到A[i-1/2]之间,故可以在A[0]到A[i-1/2-1]之间继续使用折半比较;否则只能插入A[i-1/2]到A[i-1]之间,故可以在A[i-1/2+1]到A[i-1]之间继续使用折半比较。如此重复,直到最后能够确定插入的位置为止。

算法的基本过程:

a)计算0 ~ i-1 的中间点,用i 索引处的元素与中间值进行比较,如果i

索引处的元素大,说明要插入的这个元素应该在中间值和刚加入i索引

之间,反之,就是在刚开始的位置到中间值的位置,这样很简单的完

成了折半;

b)在相应的半个范围里面找插入的位置时,不断的用(1)步骤缩小范围,

不停的折半,范围依次缩小为1/2 1/4 1/8 .......快速的确定出第i 个元素

要插在什么地方;

c)确定位置之后,将整个序列后移,并将元素插入到相应位置;

d)对形成的新的有序序列再次进行插入,重复步骤a),b),c),直到所有

数据完成排序。

数组实例:

void BisSort(int p_Num[],int i_Len)

{

int i_Left,i_Right,i_Middle;

int i_Loop,i_Subloop;

int i_Buffer;//临时变量

if (p_Num[0]>p_Num[1])

{

i_Buffer=p_Num[0];

p_Num[0]=p_Num[1];

p_Num[1]=i_Buffer;

}

for (i_Loop=2;i_Loop

{

i_Left=0;

i_Right=i_Loop-1;

i_Buffer=p_Num[i_Loop];

if (i_Buffer<=p_Num[0]||i_Buffer>=p_Num[i_Right])

{

if (i_Buffer<=p_Num[0])

i_Middle=0;

else

i_Middle=i_Right+1;

}

else

while(i_Left<=i_Right)

{

i_Middle=(i_Left+i_Right)/2;//折半中数

if(i_Buffer>=p_Num[i_Middle])

i_Left=i_Middle+1;

else

i_Right=i_Middle-1;

}//确定要插入的位置

for (i_Subloop=i_Loop;i_Subloop>i_Middle;i_Subloop--)//生成新的有序数组

{

p_Num[i_Subloop]=p_Num[i_Subloop-1];

}

p_Num[i_Middle]=i_Buffer;

}

}

链表实例:

struct _Road* RoadOrder(struct _Road *pst_Road )

{

struct _Road *pst_Road_Head;

pst_Road_Head=pst_Road;

struct _Road *p_Low,*p_Hight,*p_Mid,*p_Current;

p_Low=pst_Road;

p_Hight=pst_Road->pst_Next;

int i_Low,i_Hight,i_Mid;//中数

int i_Len=RoadListLength(pst_Road);

if (pst_Road_Head->i_GeoLength>p_Hight->i_GeoLength)

{

pst_Road_Head->pst_Next=p_Hight->pst_Next;

p_Hight->pst_Next=pst_Road_Head;

pst_Road_Head=p_Hight;

}

for (int i=3;i<=i_Len;i++)

{

p_Low=p_Mid=p_Hight=pst_Road_Head;

i_Low=1,i_Hight=i-1;

for(int j=1;j

{

p_Hight=p_Hight->pst_Next;

}

p_Current=p_Hight->pst_Next;

//如果小于头指针数据

if (p_Current->i_GeoLength<=p_Low->i_GeoLength)

{

p_Hight->pst_Next=p_Current->pst_Next;

p_Current->pst_Next=pst_Road_Head;

pst_Road_Head=p_Current;

}

else if (p_Current->i_GeoLengthi_GeoLength)

{

while(i_Low<=i_Hight)

{

i_Mid=(i_Low+i_Hight)/2;

for(int j=i_Low;j

{

p_Mid=p_Mid->pst_Next;

}

计算机二级C语言公共基础知识

计算机二级C语言公共基础知识手册 1.算法的时间复杂度是指执行算法所需要的计算工作量.算法的工作量由算法所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数. 2.算法的空间复杂度是指算法执行过程中所需要的存储空间,存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间. 3.一个算法通常由两种基本要素组成:一是对数据对象的运算和操作;而是算法的控制结构. 4算法设计基本方法主要包括有列举法、归纳法、递推、递归和减半递推技术. 5.数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构).、 6.数据处理是指对数据集合中的各元素以各种方式进行运算,包括插入、删除、查找、更改等运算,也包括对数据元素进行分析. 7.数据元素是指相互有关联的数据元素的集合. 8.前驱和后继关系是数据元素之间的一个基本关系,但前驱个后继关系所表示的实际意义随具体对象的不同而不同.一般说来,数据元素之间的任何关系都可以用前驱和后继关系来描述. 9.常用的存储结构有顺序链接、索引等存储结构.而采用不同的存储结构,其数据处理的效率是不同的.

10.在数据结构中,没有前驱的结点称为根结点;没有后继的结点称为终端结点(叶子结点);数据结构中除了根结点与终端结点外的其他结点一般称为内部结点. 11.在数据结构中,结点几结点的相互关系有线性结构和非线性结构. 12.线性结构(线性表):非空数据结构满足(1)有且只有一个根结点;(2)每个结点最多有一个前驱,也最多有一个后继. 在一个线性结构中插入或删除任何一个结点后还应该是线性结构,若删除或插入后不是线性结构,则该数据结构不能称为线性结构. 13.线性表是最简单、最常用的一种数据结构.有一组数据元素组成.在稍微复杂的线性表中,一个数据元素可以由若干个数据项组成,在这种情况下,常把数据元素称为记录,含有大量记录的线性表就称作文件. 14.非空线性表如与如下结构特征(1)有且只有一个根结点A1,它无前驱;(2)有且只有一个终端结点AI,它无后继;(3)除根结点与终端结点外,其他所有结点有且只有一个前驱,也只有一个后继.线性表中结点的个数N称为线性表的长度.当 N=0时,称其为空表. 15.在计算机中存放线性表,一种最简单的方法是顺序存储,也称顺序分配. 16.线性表的顺序存储结构具有以下两种基本特点:(1)线性表中所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的. 在线性表的存储结构中,其前后继两个元素在存 储空间中是紧邻的,且前驱元素一定存储在后继元素的前面. 17.假设线性表中第一个数据元素的存储地址是ADR(AI),每一个数据元素占K 个字节,则线性表中第I个元素AI在计算机存储空间中的存储地址是 ADR(AI)=ADR(A1)+(I-1)K.

C语言基础知识_测试题

C语言程序设计基础测试题 一、单选 [1] 下面叙述中错误的是____。 A. 复合语句中定义的函数只在该复合语句中有效 B. return( )语句中的括号中,可以是变量,常量或有确定值的表达式 C. 形式参数也是局部变量 D. 主函数中定义的变量在整个程序中都是有效的 [2]下列说法中正确的是____。 A.带参数的宏定义中的参数是没有类型的 B.宏展开将占用程序的运行时间 C.宏定义命令是C语言中的一种特殊语句 D.使用#include命令包含的头文件必须以“.h"为后缀 [3.] 若函数的形参为一维数组,则下列说法中正确的是____。 A.调用函数时的对应实参必为数组名 B.形参数组可以不指定大小 C.形参数组的元素个数必须等于实参数组的元素个数 D.形参数组的元素个数必须多于实参数组的元素个数 [4]. 系统的标准输出设备是____。 A.键盘 B.硬盘 C.内存 D.显示器 [5] 下面叙述中正确的是____。 A.全局变量在定义它的文件中的任何地方都是有效的 B.全局变量在程序的全部执行过程中一直占用内存单元 C. C语言的switch语句中case后可为常量或表达式或有确定值的变量及表达式 D. 说明函数时必须明确其参数类型和返回类型 [6]. C程序的基本结构单位是____。 A.文件 B.语句 C.函数 D.表达式 [7] 对于定义,char *aa[2]={"abcd","ABCD"},选项中说法正确的是____。 A.aa数组元素的值分别是"abcd"和"ABCD" B.aa是指针变量,它指向含有两个数组元素的字符型一维数组 C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址 [8]. 任何一个C语言的可执行程序都是从____开始执行的。 A.程序中的第一个函数 B.main( )函数的入口处

国家二级C语言公共基础知识要点及历年真题

1算法 1.1 算法的基本概念 1.算法的概念(必记): 算法是指解题方案的准确而完整的描述。 分析:要用计算机实现某一任务时,先应设计出一整套解决问题的指导方案,然后具体实现。整套的指导方 案称之为算法,而具体的实现称之为程序。并且在设计指导方案时,可不用过多考虑到实现程序的具体细节(即可以一点点的理想化),但在程序实现时,必须受到具体环境的约束(现实不同于理想)。 结论:算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计。 2.算法的基本特征(必记): a.可行性:由于算法总是在某个特定的计算工具上实现并执行的,因而受到计算工具的限制,所以在设计算法时,要考虑到设计的算法是否是可性的。 b.确定性:算法中的每一个步骤都必须是有明确定义的,不允许有模棱两可的解释,也不允许有多义性。 c.有穷性:算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。 d.拥有足够的情报:算法有相应的初始数据。 3.算法的基本要素: 一个算法通常由两个基本要素所组成:一是对数据对象的运算和操作,二是算法的控制结构。 基本运算和操作分为四类: a. 算术运算: (加、减、乘、除等运算) b. 逻辑运算: (与、或、非等运算) c. 关系运算: (大于、小于、等于、不等于等运算) d. 数据传输: (赋值、输入、输出等操作) 算法的控制结构: 算法中各操作之间的执行顺序称之为算法的控制结构。一个算法一般都可以用顺序、选择、循环三种基本控 制结构组合而成。 注意:一个计算机系统能执行的所有指令的集合,称为该计算机系统的指令系统。 4.算法设计基本方法: 列举法、归纳法、递推、递归、减半递推技术、回溯法。 1.2 算法的复杂度 (必记) 算法的复杂度主要包括时间复杂度和空间复杂度。 1.算法的时间复杂度: 是指执行算法所需要的计算工作量,是由算法所执行的基本运算次数来度量。 可用平均性态和最坏情况两种分析方法。其中平均性态分析是指用各种特定输入下的基本运算次数的加权平 均值来度量算法的工作量;而最坏情况分析是指在所有特定输入下的基本运算次数据的最大次数。 2.算法的空间复杂度: 一个算法的空间复杂度,是指执行这个算法所需要的内存空间。包含有三部分所组成:算法程序所占的空间 +输入的初始数据所占的存储空间+算法执行过程中所需要的额外空间。 历届的考题: 1、算法具有五个特性,以下选项中不属于算法特性的是(______) [2005.4] A)有穷性B)简洁性C)可行性D)确定性 2、问题处理方案的正确而完整的描述称为______。[2005.4] 3、下列叙述中正确的是________。[2006.9] A)一个算法的空间复杂度大,则其时间复杂度也必定大

C语言基础知识总复习考前突击专用

C语言基础知识总复习(考前突击专用) 总体上必须清楚的: 1)程序结构是三种:_顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式?数据存放的位置就是他的地址. 4)bit是位是指为0或者1。byte是指字节,一个字节=八个位? 概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、define PI 3.1415926; 这个写法是错误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 & break可用于循环结构和switch语句。 7、逗号运算符的级别最低,赋值的级别倒数第0

第一章C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。 3、一个C语言程序有且只有一个main函数,是程序运行的起点。 第二节、熟悉VC++ 1、VC是软件,用来运行写的C语言程序。 2、 每个C语言程序写完后,都是先编译,后链接,最后运行。(.c---?.obj---?.exe ) 这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!)第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。

c语言公共基础知识

二级公共基础知识总结 第一章数据结构与算法 1.1 算法算法:是指解题方案的准确而完整的描述。算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括: (1)可行性; (2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性; (3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义; (4)拥有足够的情报。算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。指令系统:一个计算机系统能执行的所有指令的集合。基本运算包括:算术运算、逻辑运算、关系运算、数据传输。算法的控制结构:顺序结构、选择结构、循环结构。算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。算法复杂度:算法时间复杂度和算法空间复杂度。算法时间复杂度是指执行算法所需要的计算工作量。算法空间复杂度是指执行这个算法所需要的内存空间。 1.2 数据结构的基本基本概念数据结构研究的三个方面: (1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;

(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; (3)对各种数据结构进行的运算。数据结构是指相互有关联的数据元素的集合。数据的逻辑结构包含:(1)表示数据元素的信息;(2)表示各数据元素之间的前后件关系。数据的存储结构有顺序、链接、索引等。线性结构条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。非线性结构:不满足线性结构条件的数据结构。 1.3 线性表及其顺序存储结构线性表是由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。非空线性表的结构特征:(1)且只有一个根结点a1,它无前件; (2)有且只有一个终端结点an,它无后件; (3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。结点个数n称为线性表的长度,当n=0时,称为空表。线性表的顺序存储结构具有以下两个基本特点:(1)线性表中所有元素的所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。顺序表的运算:插入、删除。 (4)1.4 栈和队列栈是限定在一端进行插入与删除的线性表,允许

谭浩强C语言知识点总结

谭浩强C语言知识点总 结 文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)

C语言最重要的知识点总体上必须清楚的: 1)程序结构是三种: 顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址. 4)bit是位是指为0 或者1。 byte 是指字节, 一个字节 = 八个位.概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、define PI ; 这个写法是错误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 6、break可用于循环结构和switch语句。 7、逗号运算符的级别最低,赋值的级别倒数第二。 第一章 C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。 3、一个C语言程序有且只有一个main函数,是程序运行的起点。

第二节、熟悉vc++ 1、VC是软件,用来运行写的C语言程序。 2、每个C语言程序写完后,都是先编译,后链接,最后运行。(.c---?.obj---?.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!) 第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。 预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。 用户标识符:基本上每年都考,详细请见书上习题。 第四节:进制的转换 十进制转换成二进制、八进制、十六进制。 二进制、八进制、十六进制转换成十进制。 第五节:整数与实数 1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次)

计算机二级c语言公共基础知识(免费的)

计算机二级C语言的二级共公基础知识教程 第一章数据结构与算法 1.1 算法 算法:是指解题方案的准确而完整的描述。 算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括: (1)可行性; (2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性; (3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义; (4)拥有足够的情报。 算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。 指令系统:一个计算机系统能执行的所有指令的集合。 基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 算法的控制结构:顺序结构、选择结构、循环结构。 算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。算法复杂度:算法时间复杂度和算法空间复杂度。 算法时间复杂度是指执行算法所需要的计算工作量。 算法空间复杂度是指执行这个算法所需要的内存空间。 1.2 数据结构的基本基本概念

数据结构研究的三个方面: (1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; (3)对各种数据结构进行的运算。 数据结构是指相互有关联的数据元素的集合。 数据的逻辑结构包含: (1)表示数据元素的信息; (2)表示各数据元素之间的前后件关系。 数据的存储结构有顺序、链接、索引等。 线性结构条件: (1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。 非线性结构:不满足线性结构条件的数据结构。 1.3 线性表及其顺序存储结构 线性表由一组数据元素构成,数据元素的位臵只取决于自己的序号,元素之间的相对位臵是线性的。 在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。 非空线性表的结构特征: (1)且只有一个根结点a1,它无前件; (2)有且只有一个终端结点an,它无后件;

最新c语言基础知识总结汇总

c语言基础知识总结

C语言知识要点复习资料 总体上必须清楚的: 1)程序结构是三种: 顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址. 4)bit是位是指为0 或者1。 byte 是指字节, 一个字节 = 八个位. 概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、define PI 3.1415926; 这个写法是错误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 6、break可用于循环结构和switch语句。 7、逗号运算符的级别最低,赋值的级别倒数第二。 第一章 C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个C语言程序有且只有一个main函数,是程序运行的起点。 第二节、熟悉vc++ 1、VC是软件,用来运行写的C语言程序。 2、每个C语言程序写完后,都是先编译,后链接,最后运行。(.c---→.obj---→.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!) 第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。 预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。 用户标识符:基本上每年都考,详细请见书上习题。 第四节:进制的转换 十进制转换成二进制、八进制、十六进制。 二进制、八进制、十六进制转换成十进制。 第五节:整数与实数

计算机二级C语言公共基础知识

计算机公共基础部分知识归纳 第一章数据结构与算法 算法---是一组严谨地定义运算顺序的规则 算法的基本要素---一是对数据对象的运算和操作,二是算法的控制结构 算法设计基本方法---列举法、归纳法、递推、递归、减半递推 算法的复杂度---包括时间复杂度和空间复杂度 时间复杂度---执行算法所需的计算工作量 空间复杂度---执行算法所需的内存空间 数据结构---相互有关联的数据元素的集合。如春、夏、秋、冬;18、11、35、23、16。。。; 父亲、儿子、女儿等都是数据元素。 前件---数据元素之间的关系,如父亲是儿子和女儿的前件 后件---如儿子是父亲的后件 结构---指数据元素之间的前后件关系 数据的逻辑结构—是指反映数据元素之间逻辑关系,而与它们在计算机中的存储位置无关数据的存储结构(物理结构)---数据的逻辑结构在计算机存储空间中的存放形式,数据元素 在计算机存储空间的位置关系可能与逻辑关系不同。 根据数据结构中各数据元素之间前后件关系的复杂程度,可将数据结构分两类---线性结构与 非线性结构 线性结构(线性表)---满足下列两个条件(1)有且只有一个根结点(2)每一个结点最多有 一个前件和后件。则称该数据结构为线性结构,否则为非线 性结构。 线性表是最简单、最常用的一种数据结构,其数据元素之间的相对位置是线性的,其存储方 式为顺序存储的,如数组 栈---是限定在一端进行插入与删除的线性表,一端封闭,另一端开口,其操作原则是“先进 后出”,栈的运算有入栈、退栈、读栈顶元素 队列---是指在一端进行插入(称为队尾)而在另一端进行删除(称为队头)的线性表,其操 作规则是“先进先出”,其运算有入队和退队。 树---是一种简单的非线性结构,而且是层次结构,是倒立的大树,有根结点、父结点、子结 点、叶子结点。根结点在第一层,一个结点所拥有的后件的 个数称为该结点的度,所有结点中最大的度称为树的度, 树的最大层次称为树的深度。 二叉树---(1)非空二叉树只有一个根结点(2)每一个结点最多有两棵子树(左子树和右子 树),其存储结构为链式。 二叉树性质---(1)K层上最多有2(K-1)个结点(2)深度为m的二叉树最多有2m-1个结点(3)度为0的结点(叶子结点)比度为2的结点多一个(4)具有n个结点的 二叉树,其深度至少为[Log2n]+1,其中[Log2n]表示对Log2n 取整 满二叉树---除最后一层外,其余层的结点都有两个子结点 完全二叉树---除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的 若干结点,叶子结点只可能在层次最大的两层上出现。满二 叉树是完全二叉树,而完全二叉树不是满二叉树。完全二叉 树有两个性质:(1)具有n个结点的完全二叉树的深度为

c语言基础知识总结

C语言最重要的知识点复习资料 这个a版本,还会进行改正和补充,请大家认真熟悉这些基础知识! 总体上必须清楚的: 1)程序结构是三种: 顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址. 4)bit是位是指为0 或者1。 byte 是指字节, 一个字节 = 八个位. 概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、define PI ; 这个写法是错误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 6、break可用于循环结构和switch语句。 7、逗号运算符的级别最低,赋值的级别倒数第二。 第一章 C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个C语言程序有且只有一个main函数,是程序运行的起点。 第二节、熟悉vc++ 1、VC是软件,用来运行写的C语言程序。 (.c---.obj---.exe) 2、每个C语言程序写完后,都是先编译,后链接,最后运行。 这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!)第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 2、标识符分为关键字、预定义标识符、用户标识符。 关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。 预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。 用户标识符:基本上每年都考,详细请见书上习题。 第四节:进制的转换 十进制转换成二进制、八进制、十六进制。 二进制、八进制、十六进制转换成十进制。 第五节:整数与实数 1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次) a、C语言中的八进制规定要以0开头。018的数值是非法的,八进制是没

C语言基础知识

常量和变量 1.常量: 程序执行过程中,值不变的量。 3 ,'a' 变量:值可以改变的量。 一个变量有一个名字,在内存中有一定的存储单元,存放变量的值。 2.常量类型: a.整型:12,0,-3 b.实型:4.6,-1.2 c.字符型: 'a','d' d.符号常量: #define PRICE 30 (PRICE不能再被赋值且要大写) 3.变量: 先定义,后使用。一个变量只能被指定为一确定类型。 4.标识符:标识变量名,符号常量名,函数名,数组名,类型名,文件名的有效字符数列。 a.由字母、数字、下划线三种字符组成,第一个字符必须为字母或下划线。 b.大写字母、小写字母被认为是两个不同的字符。 c.长度一般小于8个。 数据类型 一.整型: 1.整型常量 a.十进制:12,-3,0 b.八进制:以0开头。 c.十六进制:以0x开头。 2.整型变量 a. int -32768——32767 b. short int -32768——32767 c. long int d. unsigned int 0——65535 e. unsigned short 0——65535 f. unsigned long int、short int、long int 第一位为符号位 0000001 (0为正,1为负) unsigned 第一位不是符号位 0000001 所以int型和unsigned型的000001不是同一个值。 二.实型: 1.实型常量:

a.十进制数:数字和小数点组成。0.12,.12,12.0,0.0 b.指数:e之前必须有数字,e后面必须为整数。12e3 2.实型变量: a.单精度:float 7位有效数字 111111.1可,111111.11不可。 b.双精度:double 15—16位有效数字。 三.字符型: 1.字符常量: a. 'a' , 'x' , '*' ,'$' 。 b. 转义字符:‘\n'换。 '\t'从第九列开始。'\r'回车。 '\b'退一格。 2.字符变量: char char='a' 一个字符变量在内存占一个字节。 。将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的ASC码 放到存储单元中,所以字符型数据和整型数据之间可以通用。一个字符型数据既可以以字符形式输出, 又可以以整数形式输出。 四.字符串常量: "how are you", "a","&12" 。不能把一个字符串赋给一个字符变量。 char c='a'对,char c="how" 错。 。'a' :在内存中存a。 “a”:在内存中存a\0。 ‘\0’是C语言中判断字符串是否结束的标志。 变量赋初值 a. int a=3; float f=7.2; char c='a'; b. int a,b,c=5; 相当于 int a,b,c; c=5; c. int a=3;b=3;c=3; 不可写: int a=b=c=3;

全国计算机二级考试公共基础知识题库

全国计算机二级考试公共基础知识题库 习题一 (1) 在下列选项中,哪个不是一个算法一般应该具有的基本特征______。(C) A. 确定性 B. 可行性 C. 无穷性 D. 拥有足够的情报 (2) 希尔排序法属于哪一种类型的排序法______。(B) A. 交换类排序法 B. 插入类排序法 C. 选择类排序法 D. 建堆排序法 (3) 下列关于队列的叙述中正确的是______。(C) A. 在队列中只能插入数据 B. 在队列中只能删除数据 C. 队列是先进先出的线性表 D. 队列是先进后出的线性表 (4) 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为______。(B) A. N+1 B. N C.(N+1)/2 D. N/2 (5) 信息隐蔽的概念与下述哪一种概念直接相关______。(B)

A. 软件结构定义 B. 模块独立性 C. 模块类型划分 D. 模拟耦合度 (6) 面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是______。(C) A. 模拟现实世界中不同事物之间的联系 B. 强调模拟现实世界中的算法而不强调概念 C. 使用现实世界的概念抽象地思考问题从而自然地解决问题 D. 鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考 (7) 在结构化方法中,软件功能分解属于下列软件开发中的阶段是______。(C) A. 详细设计 B. 需求分析 C. 总体设计 D. 编程调试 (8) 软件调试的目的是______。(B) A. 发现错误 B. 改正错误 C. 改善软件的性能 D. 挖掘软件的潜能 (9) 按条件f对关系R进行选择,其关系代数表达式为______。(C) A. R|X|R B. R|X|R C. бf(R)

《C语言程序设计》基本知识点

《C语言程序设计》教学基本知识点 第一章C语言基本知识 1.C源程序的框架 尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。 2.C语言源程序的书写规则: (1)C源程序是由一个主函数和若干个其它函数组成的。 (2)函数名后必须有小括号,函数体放在大括号内。 (3)C程序必须用小写字母书写。 (4)每句的末尾加分号。 (5)可以一行多句。 (6)可以一句多行。 (7)可以在程序的任何位置加注释。 3.语句种类 语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。 (1)流程控制语句 流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。其中后两种结构要用特定的流程控制语句实现。 (2)表达式语句 表达式语句的形式是:表达式;,即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分。表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。最常见的表达式语句是赋值语句。 (3)函数调用语句 函数调用语句实际上也是一种表达式语句,形式为:在一次函数调用的小括号后面加上一个分号。 (4)空语句 空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义转折点使用。 (5)复合语句 复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。注意复合语句中最后一个语句末尾的分号不能少。复合语句右大括号后面没有分号。 4.运算符 用来表示数据各种操作的符号称为运算符。运算符实际上代表了一种类型数据的运算规则。不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。 根据参加操作的数据个数多少,可以将C语言的运算符分为单目运算符,双目运算符和三目运算符(三目运算符只有条件运算符一个)。 根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符等。 5.表达式 表达式是由常量、变量、函数,通过运算符连接起来而形成的一个算式。一个常量,一个变量或一个函数都可以看成是一个表达式。 表达式的种类有: 算术表达式、关系表达式、逻辑表达式、赋值表达式、字位表达式、强制类型转换表达式、逗号

大学c语言必背基础知识_c语言基础知识大全

大学c语言必背基础知识_c语言基础知识大全 对于刚学计算机编程的同学来说,没一个编程知识都觉得很重要,其实不是的。下面小编为大家整理了相关大学c语言必背基础知识,希望大家喜欢。 大学c语言必背基础知识举例说明: printf(“-”,123 ); 第二部分有三位,大于指定的两位,原样输出123 printf(“]”,123 ); 第二部分有三位,小于指定的五位,左边补两个空格123 printf(“f”,1.25 ); 小数要求补足6位的,没有六位的补0,。结果为1.250000 printf(“%5.3f”,125 ); 小数三位,整个五位,结果为1.250(小数点算一位) printf(“%3.1f”,1.25 );小数一位,整个三位,结果为1.3(要进行四舍五入) 第三节数据输入1、scanf(“a=%d,b=%d”,">2、scanf(“%d,%d”,x,y);这种写法绝对错误,scanf的第二个部分一定要是地址!scanf(“%d,%d”,注意写成这样才可以! 3、特别注意指针在scanf的考察例如:int x=2;int *p=scanf(“%d”,x); 错误scanf(“%d”,p);正确scanf(“%d”,错误scanf(“%d”,*p)错误 4、指定输入的长度(考试重点)终端输入:1234567scanf(“-M%d”,x为12,y为3456,z为7终端输入:1 234567 由于1和2中间有空格,所以只有1位给xscanf(“-M%d”,x 为1,y为2345,z为67 5、字符和整型是近亲:int x=97;printf(“%d”,x); 结果为97printf(“%c”,x); 结果为a 6、输入时候字符和整数的区别(考试超级重点) scanf(“%d”,这个时候输入1,特别注意表示的是整数1 scanf(“%c”,这个时候输入1,特别注意表示的是字符‘1’ASCII为整数48。 补充说明: 1)scanf函数的格式考察: 注意该函数的第二个部分是scanf(“%d%d%*d%d”,跳过输入的第三个数据。 2)putchar ,getchar 函数的考查:

二级c公共基础知识及练习题库.doc

二级C公共基础知识及例题 1.1数据结构与算法 1丄1算法 1.算法的概念 (1)概念:算法是指一系列解决问题的清晰指令. (2)4个基本特征:可行性、确定性、有穷性、拥有足够的情报。 (3)两种基本要素:对数据对象的运算和操作、算法的控制结构(运算和操作时间顺序) (4)设计的基木方法:列举法、归纳法、递推法、递归法、减半递推技术和冋溯法。 2.算法的复杂度 (1)算法的时问复杂度:执行算法所需要的计算王作量。 (2)算法的空间复杂度:执行算法所需的内存空问。 1. 1. 2数据结构的基木概念 数据结构指相互有关联的的数据元素的集合,即数据的组织形式。其屮逻辑结构反映数据元素Z间逻辑关系;存储结构为数据的逻笹结构在计算机存储空间中的存放形式,有顺序存储、链式存储、索引存储和散列存储4种方式。数据结构按各种元素之间的前示件的关系的复杂度可划分为:(1)线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构。 (2)非线性结构:不满足线性结构的数据结构。 1. 1. 3线性表及其顺序存储结构 1.线性表的基木概念 线性结构乂称线性表,线性表是最简单也是最常用的一种数据结构。 2.线性表的顺序存储结构 ?元素所占的存储空间必须连续。 ?元素在存储空间的位置是按逻辑顺序存放的。 3?线性表的插入运算 在第i个元索Z前插入一个新元素的步骤如下: 步骤一:把原来第n个节点至第i个节点依次往后移一个元索位置。 步骤二:把新节点放在第i个位置上。 步骤三:修正线性表的节点个数。 4.线性表的删除运算 删除第i个位置的元索的步骤如下: 步骤一:把第i个元索Z后的不包括第i个元素的n-i个元索依次前移一个位置; 步骤二:修正线性表的结点个数。 1. 1. 4栈和队列 1.栈及其基木运算 (1)基木概念:栈是一种特殊的线性表,其插入运算与删除运算都只在线性表的一端进行,也被称为“先进后出"表或,后进先出”表。 ?栈顶:允许插入与删除的一端。 ?栈底:栈顶的另一端。(不允许插入与删除的一端) ?空栈:栈屮没有元素的栈。 (2)特点。 ?栈顶元索是最示被插入和最早被删除的元索。 ?栈底元素是最早被插入和最后被删除的元素。 ?栈有记忆作用。

C语言基础知识测试题

基础知识测试题一.单项选择题 1.以下不正确的C语言标识符是() A.ABC B.abc C.a_bc D.ab.c 2.以下正确的C语言标识符是(C) A.%x B.a+b C.a123 D.test! 3.一个C语言程序的执行是从()。 A.main()函数开始,直到main()函数结束 B.第一个函数开始,直到最后一个函数结束 C.第一个语句开始,直到最后一个语句结束 D.main()函数开始,直到最后一函数结束 4.在C语言程序中,main()的位置()。 A.必须作为第一个函数 B.必须作为最后一个函数 C.任意 D.必须放在它所调用的函数之后 5.一个C语言程序是由()。 A.一个主程序和若干个子程序组成 B.一个或多个函数组成 C.若干过程组成 D.若干子程序组成 6.C语言源程序的基本单位是()。 A.过程 B.函数 C.子程序 D.标识符 7.编辑程序的功能是()。 A.建立并修改程序 B.将C源程序编译成目标程序 C.调试程序 D.命令计算机执行指定的操作 8.C编译程序是()。 A.C语言程序的机器语言版本 B.一组机器语言指令. C.将C源程序编译成目标程序的程序 D.由制造厂家提供的一套应用软件 9.不属于字符型常量的是() A.'A' B."B" C.'\n' D.'\x72' 10.设char ch;以下正确的赋值语句是:() A.ch='123'; B.ch='\xff'; C.ch='\08'; D.ch="\"; 11.以下使i的运算结果为4的表达式是() A.int i=0,j=0; (i=3,(j++)+i);

B.int i=1,j=0; j=i=((i=3)*2); C.int i=0,j=1; (j==1)?(i=1):(i=3); D.int i=1,j=1; i+=j+=2; 12.若t为double类型,表达式t=1,t+5,t++的值是() A.1 B.6.0 C.2.0 D.1.0 13.设整型变量m,n,a,b,c,d均为1,执行“(m=a>b)&&(n=a>b)”后m,n的值是() A.0,0 B.0,1 C.1,0 D.1,1 14.执行语句“x=(a=3,b=a--)”后,x,a,b的值依次为() A.3,3,2 B.3,2,2 C.3,2,3 D.2,3,2 15.若a=1,b=2,c=3,d=4,则条件表达式a

C语言公共基础知识

C语言公共基础知识标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

第一部分公共基础部分知识归纳 数据结构与算法 算法---是一组严谨地定义运算顺序的规则 算法的基本要素---一是对数据对象的运算和操作,二是算法的控制结构 算法设计基本方法---列举法、归纳法、递推、递归、减半递推 算法的复杂度---包括时间复杂度和空间复杂度 时间复杂度---执行算法所需的计算工作量 空间复杂度---执行算法所需的内存空间 数据结构---相互有关联的数据元素的集合。如春、夏、秋、冬;18、11、35、23、16。。。;父亲、儿子、女儿等都是数据元素。 前件---数据元素之间的关系,如父亲是儿子和女儿的前件 后件---如儿子是父亲的后件 结构---指数据元素之间的前后件关系 数据的逻辑结构—是指反映数据元素之间逻辑关系,而与它们在计算机中的存储位置无关 数据的存储结构(物理结构)---数据的逻辑结构在计算机存储空间中的存放形式,数据元素在计算机存储空间的位置关系可能与逻辑关系不同。 根据数据结构中各数据元素之间前后件关系的复杂程度,可将数据结构分两类---线性结构与非线性结构 线性结构(线性表)---满足下列两个条件(1)有且只有一个根结点(2)每一个结点最多有一个前件和后件。则称该数据结构为线性结构,否则为非线性结构。 线性表是最简单、最常用的一种数据结构,其数据元素之间的相对位置是线性的,其存储方式为顺序存储的,如数组 栈---是限定在一端进行插入与删除的线性表,一端封闭,另一端开口,其操作原则是“先进后出”,栈的运算有入栈、退栈、读栈顶元素 队列---是指在一端进行插入(称为队尾)而在另一端进行删除(称为队头)的线性表,其操作规则是“先进先出”,其运算有入队和退队。 树---是一种简单的非线性结构,而且是层次结构,是倒立的大树,有根结点、父结点、子结点、叶子结点。根结点在第一层,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度,树的最大层次称为树的深度。 二叉树---(1)非空二叉树只有一个根结点(2)每一个结点最多有两棵子树(左子树和右子树),其存储结构为链式。

相关主题