好文档 - 专业文书写作范文服务资料分享网站

C语言复习提纲

天下 分享 时间: 加入收藏 我要投稿 点赞

scanf(\/*选择法排序*/

for(i=1;i<=9;i++)/*外循环:控制比较趟数*/ {

min=i;

for(j=i+1;j<=10;j++) /*内循环:每趟比较的次数*/ if(a[min]>a[j])

min=j;

temp=a[i]; a[i]=a[min]; a[min]=temp; }

for(i=2;i<=9;i++) /*注意i值的变化范围*/

ave=ave+a[i];

printf(\去掉一个最低分:%6.1f分\\n\printf(\去掉一个最高分:%6.1f分\\n\printf(\选手最后得分:%6.1f分\\n\}

二、二维数组

1、二维数组的定义:

数据类型 数组名[行常量表达式][列常量表达式][, 数组名2[行常量表达式2][列常量表达式2]??];

? 数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。

? 设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。

2、二维数组元素的引用

引用2维数组元素的形式为:

数组名[行下标表达式][列下标表达式]

? “行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。

? “行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。

? 对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的2维数组元素。 3、二维数组元素的初始化 ? 按行赋初值

数据类型 数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},??,{最后1行初值表}};

赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。

? 按2维数组在内存中的排列顺序给各元素赋初值

数据类型 数组名[行常量表达式][列常量表达式]={初值表};

赋值规则:按2维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。

- 16 -

如果对全部元素都赋初值,可以省略“行数”,但不能省略“列数”。注意:只能省略“行数”。

练习6_5 执行int a[][3]={1,3,5,7,9,11};语句后,a[1][0]的值是7。

练习6_6 以下对二维数组a进行正确初始化的是

A.int a[2][3]={{1,2},{3,4},{5,6}}; B.int a[][3]={1,2,3,4,5,6}; C.int a[2][]={1,2,3,4,5,6}; D.int a[2][]={{1,2},{3,4}};

三、字符数组

1、字符数组的定义

? 1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。 ? 2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。 2、字符数组的初始化

字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。 3、字符数组的引用

字符数组的逐个字符引用,与引用数值数组元素类似。

? 字符数组的输入

除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。

? 字符数组的输出

字符数组的输出,可以用putchar()或printf()函数。

四、字符串及其结束标志

所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。

C语言规定:以‘\\0’作为字符串结束标志(‘\\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。

注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。

另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。

1.字符数组的整体初始化

字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。 2.字符数组的整体引用 ? 字符串的输入

除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。 ? 字符串的输出

printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。 五、常用的字符串处理函数

字符串标准函数的原型在头文件string.h中。 1、输入字符串──gets()函数 ①调用方式:gets(字符数组)

②函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。

③使用说明

? gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。

? 该函数输入的字符串中允许包含空格,而scanf()函数不允许。 2.输出字符串──puts()函数 ①调用方式:puts(字符数组)

- 17 -

②函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\\n’取代字符串的结束标志‘\\0’。所以用puts()函数输出字符串时,不要求另加换行符。

③使用说明

? 字符串中允许包含转义字符,输出时产生一个控制操作。

? 该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。

3、字符串比较──strcmp()函数

①调用方式:strcmp(字符串1 ,字符串2)

其中“字符串”可以是串常量,也可以是1维字符数组。 ②函数功能:比较两个字符串的大小。

如果:字符串1=字符串2,函数返回值等于0; 字符串1<字符串2,函数返回值负整数; 字符串1>字符串2,函数返回值正整数。 ③使用说明

? 如果一个字符串是另一个字符串从头开始的子串,则母串为大。

? 不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。 4、拷贝字符串──strcpy()函数

①调用方式:strcpy(字符数组, 字符串)

其中“字符串”可以是串常量,也可以是字符数组。

②函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。 ③使用说明

? 字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\\0'一起复制。

? 不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。

5.连接字符串──strcat()函数

①调用方式:strcat(字符数组, 字符串)

②函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。

③使用说明

? 由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。

? 连接前两个字符串都有结束标志'\\0',连接后“字符数组”中存储的字符串的结束标志'\\0'被舍弃,只在目标串的最后保留一个'\\0'。

6.求字符串长度──strlen()函数(len是length的缩写) ①调用方式:strlen(字符串)

②函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。

练习6_7 执行 char str[10]= \)后的结果是14。 7.将字符串中大写字母转换成小写──strlwr()函数 ①调用方式:strlwr(字符串)

②函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。

8.将字符串中小写字母转换成大写──strupr()函数 ①调用方式:strupr(字符串)

②函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。

- 18 -

第七章 函数

▲一、函数的定义与调用 1、函数的定义

任何函数(包括主函数main())都是由函数说明和函数体两部分组成。根据函数是否需要参数,可将函数分为无参函数和有参函数两种。

?、无参函数的一般形式 函数类型 函数名( void ) { 说明语句部分; 可执行语句部分; }

注意:在旧标准中,函数可以缺省参数表。但在新标准中,函数不可缺省参数表;如果不需要参数,则用“void”表示,主函数main()例外。

?、有参函数的一般形式

函数类型 函数名( 数据类型 参数[,数据类型 参数2??] ) { 说明语句部分; 可执行语句部分; }

有参函数比无参函数多了一个参数表。调用有参函数时,调用函数将赋予这些参数实际的值。 为了与调用函数提供的实际参数区别开,将函数定义中的参数表称为形式参数表,简称形参表。 练习7_1:定义一个函数,用于求两个数中的大数。

解:/*功能:定义一个求较大数的函数并在主函数中调用*/ int max(int n1, int n2) /*定义一个函数max()*/ { return (n1>n2?n1:n2); } main() {

int max(int n1, int n2); /*函数说明*/ int num1,num2;

printf(\; scanf(\;

printf(\; }

?、说明

①函数定义不允许嵌套(但函数的调用可以嵌套)。

在C语言中,所有函数(包括主函数main())都是平行的。一个函数的定义,可以放在程序中的任意位置,主函数main()之前或之后。但在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。

②空函数──既无参数、函数体又为空的函数。其一般形式为: [函数类型] 函数名(void) { }

③在老版本C语言中,参数类型说明允许放在函数说明部分的第2行单独指定。 2、函数的返回值与函数类型 ?.函数返回值与return语句

有参函数的返回值,是通过函数中的return语句来获得的。 ①return语句的一般格式: return ( 返回值表达式 );

②return语句的功能:返回调用函数,并将“返回值表达式”的值带给调用函数。

注意:调用函数中无return语句,并不是不返回一个值,而是一个不确定的值。为了明确表示不返回值,可以用“void”定义成“无(空)类型”。

- 19 -

?.函数类型

函数的类型说明符指明了函数的类型,它实际上是函数返回值的类型。如果不要求函数有返回值,函数的类型说明符可以写为void,如果缺省,C语言函数返回类型的默认定义类型是int型。

在定义函数时,对函数类型的说明,应与return语句中、返回值表达式的类型一致。 如果不一致,则以函数类型为准。如果缺省函数类型,则系统一律按整型处理。

即:在C语言中,函数返回值的数据类型取决于在定义该函数时所指定的数据类型。 3、对被调用函数的说明和函数原型

在ANSI C新标准中,采用函数原型方式,对被调用函数进行说明,其一般格式如下: 函数类型 函数名(数据类型[ 参数名][, 数据类型[ 参数名2]?]); C/C语言同时又规定,在以下3种情况下,可以省去对被调用函数的说明:

①当被调用函数的函数定义出现在调用函数之前时。因为在调用之前,编译系统已经知道了被调用函数的函数类型、参数个数、类型和顺序。

②如果在所有函数定义之前,在函数外部(例如文件开始处)预先对各个函数进行了说明,则在调用函数中可缺省对被调用函数的说明。

③当一个函数是int类型时,它与被调用者的前后位置关系可以忽略,可以省略对被调函数的说明。

4、函数的调用

一般形式为: 函数名([实际参数表])

切记:实参的个数、类型和顺序,应该与被调用函数所要求的参数(形参)个数、类型和顺序一致,才能正确地进行数据传递。

?、调用函数方式:

①函数表达式。函数作为表达式的一项,出现在表达式中,以函数返回值参与表达式的运算。 ②函数语句。C/C语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为一条独立的语句。

③函数实参。函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。

?、说明:

①调用函数时,函数名称必须与具有该功能的自定义函数名称完全一致。

②实参在类型上按顺序与形参,必须一一对应和匹配。如果类型不匹配,C编译程序将按赋值兼容的规则进行转换。如果实参和形参的类型不赋值兼容,通常并不给出出错信息,且程序仍然继续执行,只是得不到正确的结果。

③如果实参表中包括多个参数,对实参的求值顺序随系统而异。有的系统按自左向右顺序求实参的值,有的系统则相反。Turbo C和MS C是按自右向左的顺序进行的 。

练习7_2 写出以下程序运行的结果 #include void main()

{ int x=2,y=5;

int max(int, int); max(x,y);

printf(\}

int max(int a,int b) { int temp; if(a>b) temp=a; else

temp=b; return temp;

- 20 -

C语言复习提纲

scanf(\/*选择法排序*/for(i=1;i<=9;i++)/*外循环:控制比较趟数*/{min=i;for(j=i+1;ja[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}<
推荐度:
点击下载文档文档为doc格式
7jy0v7n1qc7916195czw
领取福利

微信扫码领取福利

微信扫码分享