本章主要知识点
(1)一维数组的定义和引用。
(2)二维数组的定义和引用。
(3)字符数组与字符串的应用 。
本章导读数组是一种非常重要的构造类型。它是由若干个具有相同数据类型的变量按一定的存储顺序组成的,每一个变量称为一个数组元素。数组元素用数组名及下标来唯一确定。本章通过 C程序实例分析着手,使读者能够掌握数组的定义及引用方法,并能够应用数组解决实际问题。
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本书目录第 4章 数组第 4章 数组
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本章导读
4.2 一维数组的定义和引用
4.3 二维数组的定义和引用
4.5 综合实训
4.4 字符数组与字符串
4.1 数组应用的 C程序实例
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本章目录
2,C程序实例 1
1,C程序实例 1
4.1 数组应用的 C程序实例数组是若干具有相同数据类型且按一定存储顺序排列的一组变量。数组中的变量称数组元素。每一个元素通过数组名和存储位置(下标)来确定。根据确定数组的一个元素所需要的下标数把数组分为一维数组、二维数组、三维数组等,二维以上的数组也称为多维数组。
4.1.1 C程序实例( 1)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
1.C程序实例 1
【 例 4.1】 应用一维数组,实现从键盘输入 10个整数,输出其中的最小数 。
程序名为 l4_1.cpp。
#include"stdio.h"
main()
{ int a[10],i,min; /*定义一维整型数组 a及整型变量 i和 min,
数组 a有 10个元素 */
for(i=0;i<10;i++) /*循环输入数组 a的 10个元素 */
scanf("%d",&a[i]);
min=a[0]; /*设 a[0]元素为最小值 min的初值 */
for(i=1;i<10;i++) /*逐个元素与 min比较,找出最小值 */
if(min>a[i])
min=a[i];
printf("MIN=%d\n",min); /*输出找到的最小值 min*/
}
程序结果
[例 4.1]程序结果返回例题 返回本节目录在 【 例 4.1】 程序实例中,输入 10个整型数 12,34,56,9,21,-
12,34,0,-3,1分别存放在一维数组 a的 10个元素中。故程序运行结果见下图所示。
输入数据输出结果
4.1.1 C程序实例( 2)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

2.C程序实例 2
【 例 4.2】 应用二维数组,实现从键盘为 2?3数组输入值,并输出数组所有元素之和 。
程序名为 l4_2.cpp。
#include"stdio.h"
main()
{ int a[2][3],i,j,sum=0; /*定义二维整型数组 a及整型变量 i,j和
sum,数组 a有 2行 3列 6个元素 */
for(i=0;i<2;i++) for(i=0;i<2;i++) /*按行向数组 a输入 6个元素,
并将元素 值送入 sum进行累加求和 */
for(j=0;j<3;j++)
{ scanf("%d",&a[i][j]);
sum+=a[i][j];
}
printf("Sum=%d\n",sum); /*输出和值 sum*/
}
返回本节目录程序结果
[例 4.2]程序结果返回例题 返回本节目录在 【 例 4.2】 程序实例中,输入 6个整型数 23,12,45,-12,-
34,35分别存放在二维数组 a两行三列的 6个元素中。故程序运行结果见下图所示。
输入数据输出结果
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本章目录
4.2.2 一维数组元素的引用
4.2.1 一维数组的定义
4.2 一维数组的定义和引用
4.2.3 一维数组的初始化定义数组时,应该注意以下几点:
( 1 ) 常量表达式的值必须是一个正的整数值 。
( 2 ) 数组定义后,数组的长度就不能再改变 。
(3)定义时,可用一个类型说明符来定义多个相同类型的数组和变量
,相互之间用逗号分隔。如 【 例 4.1】 程序实例中,int a[10],i,min;”定义了一维整型数组 a和整型变量 i及 min。
4.2.1 一维数组的定义
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录一维数组定义的一般格式为:
类型说明符 数组名 [常量表达式 ];
在 【 例 4.1】 实例中,int a[10];”表示数组名是 a,数组元素是整型,数组有10个元素。故定义了一个10个元素的整型数组 a。
( 1)类型说明符可以是 int,char和 float等,指明该数组的类型,即数组中每个元素的类型;
( 2)数组名的命名规则遵循标识符的命名规则,它代表数组存储时的首地址;
( 3)常量表达式是指数组的长度,即数组元素的个数。
【 例 4.1】 程序实例中,int a[10]”定义了一个 10元素的整型数组 a,
则数组的 10个元素分别是 a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],
a[8],a[9],通过 for(i=0;i<10;i++)scanf("%d",&a[i]);语句完成数组元素赋值,即输入给 10个元素 a[0]到 a[9]。 min=a[0];功能是假设 a[0]元素为最小元素,将其值赋给记录最小值的变量 min 。语句 for(i=1;i<10;
i++) if(min>a[i]) min=a[i];完成从 a[1]到 a[9]逐个元素与 min比较,
并将较小的元素值赋给 min。最后循环结束后,min存储的是最小元素的值。输出语句 printf("MIN=%d\n",min);执行后,输出结果为,MIN=-12。
注意,在一维数组引用过程中要防止下标越界问题 。 如,int a[10]”定义的数组 a,数组 a中不包括 a[10]元素,下标为 10已经越界 。 对于数组下标越界问题,C语言编译系统不进行检测,即不进行错误报告,只是会造成程序运行结果的错误 。
4.2.2 一维数组元素的引用
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
) 返回本节目录数组的使用仍然遵从“先定义,后使用”的原则。数组使用是通过数组元素引用实现的,而不能直接使用整个数组,每一个数组元素就是一个简单变量。一维数组的数组元素表示形式为:
数组名 [下标 ]
下标是一个整型常量或整型表达式。一维数组元素的下标从 0开始,
如果数组长度为 n,则元素的最大下标为 n-1。
4.2.3 一维数组的初始化
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录类型说明符 数组名 [常量表达式 ]={初始值表 };
一维数组初始化时,要注意以下两点:
( 1)当初始化,初始值表给出全部元素值时,则数组长度可缺省。如,前例造价于 int a[]={12,-3,4,0,367};
( 2)给数组中的部分元素赋初始值。如,int a[5]={1,2,3};则按照下标递增的顺序依次赋值,后两个元素系统自动赋 0值。即
a[0]=1,a[1]=2,a[2]=3,而 a[3]和 a[4系统自动赋值为 0。
( 3)数组中的全部元素赋初值为 0。如,int a[5]={0};
在定义一维数组同时给数组元素赋初始值,称为一维数组的初始化。
一般格式为:
初始值表中数据与数组元素依次对应,初始值表中的数据用逗号 (,)分隔。如,int a[5]={12,-3,4,0,367};则数组 a的 5个元素依次取得初始值。
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本章目录
4.3.2 二维数组元素的引用
4.3.1 二维数组的定义
4.3 二维数组的定义和引用
4.3.3 二维数组的初始化二维数组被定义后,编译系统将为该数组在内存中分配一片连续的存储空间,按行的顺序连续存储数组中的各个元素。即先顺序存储第一行元素,从 a[0][0]到 a[0][2],再存储第二行的元素,从 a[1][0]到 a[1][2]。
数组名 a仍然代表数组的起始地址。
4.3.1 二维数组的定义
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

二维数组定义的一般格式为:
类型说明符 数组名 [常量表达式 1][常量表达式 2];
( 1) 类型说明符和数组名含义均与一维数组相同 。
( 2) 二维数组区别于一维数组的根本在于数组名后有两个常量表达式 。 常量表达式 1表示行数,而常量表达式 2表示列数 。 也就是他们分别指出数组的行长度和列长度 。
返回本节目录在 【 例 4.2】 实例中,int a[2][3];”表示数组名是 a,数组元素是整型,数组有 2行 3列,共计 6( 2?3) 个元素 。 即定义了一个 2行 3列的整型数组 a。
二维数组的行列下标也是从 0开始 。 则数组 a的 6个元素是:
a[0][0],a[0][1],a[0][2]
a[1][0],a[1][1],a[1][2]
for(i=0;i<2;i++) /*按行向数组 a输入 6个元素,并将元素值送入
sum进行累加求和 */
for(j=0;j<3;j++)
{ scanf("%d",&a[i][j]); sum+=a[i][j]; }
外循环中变量 i指示行下标,内循环中变量 j指示列下标,从而完成 6次输入,即 23 12 45 -12 -34 35<CR>,输入 6个元素值,并将值依次送入 sum
变量累加求和 。 循环结束后,由输出语句 printf("Sum=%d\n",sum);完成累加和 sum的输出,结果为,Sum=69
4.3.2 二维数组元素的引用
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录二维数组元素的引用形式为:
数组名 [行下标 ][列下标 ]
行 ( 列 ) 下标表达式可以是整型常量,整型变量及表达式,表示二维数组的行 ( 列 ) 长度 。 下标值仍然从 0开始,到行 ( 列 ) 长度减 1。
在 【 例 4.2】 程序实例中,int a[2][3];”,定义了一个 2行 3列的二维整型数组 a,则在内存中依次连续存储的数组元素为 a[0][0],a[0][1],a[0][2],
a[1][0],a[1][1],a[1][2],通过循环嵌套语句给数组 a的各个元素输入值 。
如下:
( 1) 数组的全部元素都赋初值时,则定义数组时对第一维长度可以缺省 。 如,
int a[ ][3]={1,2,3,4,5,6}; 等价于 int a[2][3]={1,2,3,4,5,6};
( 2 ) 在分行赋值时 ),可以在定义时省略第一维的长度 。 如,int
a[ ][3]={{0},{0,3}};赋值后数组 a的元素分别为,0 0 00 3 0
定义二维数组时,给数组元素赋初值称为二维数组初始化。二维数组初始化时要注意二维数组的元素排列顺序。初始值的排列顺序必须与数组元素在内存的存储顺序完全一致。具体的方法如下:
1.分行给二维数组赋初值。
2.按数组排列顺序对各元素赋初值。
3.对部分元素赋初值。
4.赋初值时,有些情况可缺省第一维长度,但第二维长度不能缺省 。
如,int a[2][3]={1,2,3,4,5,6}; 此方法数据所处的行列位置不直观,
尤其是数据多时,数据存储所在的行列需要仔细定位,容易出现错误 。
4.3.3 二维数组的初始化
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
) 返回本节目录如,int a[2][3]={{1,2,3},{4,5,6}}; 按行赋初值的方法直观 。
如,int a[2][3]={{1},{0,4}}; 此法对数组中各行部分元素赋初值,其余元素值自动为 0。 即赋值后数组 a的各元素为,1 0 00 4 0
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本章目录
4.4.2 字符数组的初始化
4.4.3 字符数组的引用
4.4.1 字符数组的定义
4.4 字符数组与字符串
4.4.4 字符数组的输入输出
4.4.5 字符串处理函数
4.4.1 字符数组的定义
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

字符数组是用来存放字符数据的数组,即数组的数据类型是字符型
(char)的数组称为字符数组。字符数组的每个元素存放一个字符。
字符数组的定义形式为:
一维字符数组定义:
二维字符数组定义:
如,
char c[10]; /*定义了一个 10个元素的一维字符数组 c*/
char c[2][10]; /*定义了一个 2行 10列的二维字符数组 c*/
由于字符型与整型是互相通用的,因此上面的定义也可改为:
int c[10];
int c[2][10];
但是,此种方法定义会浪费存储空间。
返回本节目录
char数组名 [常量表达式 ];
char数组名 [常量表达式 1][常量表达式 2];
字符串是用双引号括起来的字符序列,在 C语言中,字符串是利用字符数组来存放和处理的 。
(1)用字符串常量初始化一维字符数组 。 如,char c[ ]={“How are you”};也写成,char c[ ]=“How are you”;相当于,char c[ ]={?H?,?o?,?w?,,?a?,?r?,?e?,?
,?y?,?o?,?u?,?\0?}
(2)二维数组初始化时,也可以使用字符串进行初始化 。 例如:
char c[ ][ 8]={ "white","black"};
4.4.2 字符数组的初始化
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

1.用字符常量初始化数组
2.用字符串常量初始化数组
(1) 一维字符数组初始化,如,char c[10]={?a?,?b?,?c?,?d?,?e?,?f?,?g?,?h?,?i?,?j?};
(2) 二维字符数组初始化,如,charc[2][10]={{?a?,?b?,?c?},{?d?,?e?,}};
字符数组 c各元素初值为,‘ abc\0\0\0\0\0\0\0?
de\0\0\0\0\0\0\0?
(3) 当初值个数与字符数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
(4) 用整型常量初始化字符数组 。 如,charc[5]={?H?,111,119};
返回本节目录
4.4.3 字符数组的引用
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

字符数组的引用,也是通过对数组逐个元素引用实现的 。 引用数组的元素可以得到一个字符 。
【 例 4.3】 应用一维字符数组,输入一个字符串 。 程序名为 l4_3.cpp。
返回本节目录
#include "stdio.h"
main()
{ char c[ ]="How are you!"; /*定义一维数组 c有 13元素 */
int i;
for(i=0;i<13;i++) /*通过循环控制输出数组每个元素 */
printf("%c",c[i]);
printf("\n");
}
运行结果:
How are you!
4.4.4 字符数组的输入输出
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录通过 scanf()或 getchar()对字符数组输入赋值,通过 printf()或 putchar()
对字符数组输出,在 1.4节中已介绍 。 使用 scanf()和 printf()完成输入输出时,%c格式是逐个字符元素输入输出,而 %s格式是对整个字符串一次完成输入和输出 。 在使用 %s格式时请注意以下问题:
( 1)在 scanf中使用格式说明符% s实现整串的输入。如,char c[20];
scanf(“%s”,c);执行时,若输入,abcd<CR>则字符串将从数组 c的起始地址 (&c[0]或数组名 c)开始依次放入数组 c中,数组剩余空间补 ’ \0?。
( 2)用% s格式符输入字符串时,空格,Tab符和回车符只能作为分隔符而不能输入到数组中。如,若输入字符串为,How are you!<CR>则只有字符串,How”存入到数组中,其余被截掉。
( 3)当输入项为数组元素的地址时,输入数据将从这一元素开始存放。
( 4)输入字符串时,避免发生越界。
( 5)在 printf()中使用格式说明符% s可以实现整串的输出。其调用形式为,printf(“%s”,c); c是存储单元的首地址。调用这个函数时,将从 c地址开始输出存储单元中的字符,直到遇到第一个’ \0?为止。输出结束后不自动换行。
4.4.5 字符串处理函数
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
C语言编译系统提供了大量处理字符串的库函数,下面介绍几种常用的函数 。 使用字符串输入函数 gets()和输出函数 puts()时,要用 #include
命令将,stdio.h”头文件包含到源文件中 。 而使用其他的字符串处理函数时,要用 #include命令将,string.h”头文件包含到源文件中 。
1,字符串输入函数 gets()
2.字符串输出函数 puts()
5.字符串复制函数 strcpy()
6.字符串比较函数 strcmp()
3.字符串长度函数 strlen()
4.字符串连接函数 strcat()
如:
char c[20];
gets(c);
执行上面的语句,如果输入,How are you!<CR>
则将读入的 12个字符依次存入到 c[0]开始的存储单元中,并在其后自动加入一个字符串结束标志 ’ \0?。
4.4.5 字符串处理函数( 1)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
1,字符串输入函数 gets()
调用 gets()函数实现字符串的输入,其调用形式为:
gets(字符数组 );
功能:从终端输入一个字符串 (包括空格 )赋给从字符数组起始的存储单元中,直到读入一个回车符为止 。 回车符读入后,不作为字符串的内容,
系统将自动用 ’ \0?替换,作为字符串结束的标志 。
返回如:
char c[ ]= "How\nare\nyou!";
puts(c);
输出结果:
How
are
you!
4.4.5 字符串处理函数( 2)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
2.字符串输出函数 puts()
调用 puts()函数实现字符串的输出,其调用形式为:
puts(字符数组 );
功能:将字符数组起始地址开始的一个字符串 ( 以 ’ \0?结束的字符序列 )
输出到终端,并将字符串结束标志 ’ \0?转化成 ’ \n?,自动输出一个换行符 。
返回如:
char c[20 ]= "How\nare\nyou!";
printf("%d\n",strlen(c));
输出结果,12
4.4.5 字符串处理函数( 3)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
3.字符串长度函数 strlen()
调用 strlen()函数实现字符串长度的测试,其调用形式为:
strlen(字符数组或字符串 );
功能:测试字符数组起始地址开始的字符串 ( 以 ’ \0?结束的字符序列 )
有效长度 。 函数值为字符数组或字符串的有效字符个数,不包括 ’ \0?
在内 。
返回如,char c1[30 ]= "How are you!\n";
char c1[ ]= "I am fine!";
printf("%s ",strcat(c1,c2));
输出结果,How are you!
I am fine!
4.4.5 字符串处理函数( 4)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
4.字符串连接函数 strcat()
调用 strcat()函数实现两个字符串的连接,其调用形式为:
strcat(字符数组 1,字符数组 2或字符串 );
功能:将字符数组 2( 字符串 ) 连接到字符数组 1的后面,函数值为字符数组 1的地址 。
返回使用 strcat()函数应注意两个问题,( 1) 连接前字符数组 1和字符数组 2的尾部都有一个 ’ \0?,连接时将字符数组 1后的 ’ \0?自动取消,字符数组 2后的 ’ \0?一并连接到字符数组 1后 。
( 2) 字符数组 1必须有足够长度,以便在其有效字符后能够容纳下字符数组 2中的字符串 。
如,char c1[30 ],c2="How are you!\n";
printf("%s ",strcpy(c1,c2));
输出结果,How are you!
4.4.5 字符串处理函数( 5)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
5.字符串复制函数 strcpy()
调用 strcpy()函数实现字符串的拷贝,其调用形式为:
strcyp(字符数组 1,字符数组 2或字符串 );
功能:将字符数组 2( 字符串 ) 复制到字符数组 1中去 。 函数值为字符数组 1的起始地址 。
返回在使用 strcpy()函数时,需要注意下面问题:
( 1) 字符数组 1的长度容纳字符数组 2中的字符串 。
( 2) 将字符数组 2中字符串的结束标志 ’ \0?一起复制到字符数组 1中 。
( 3) strcpy()函数能够将字符数组 2前面若干个字符复制到字符数组 1中 。
如,strcpy(c1,c2,4);
该语句的作用是将 c2中前面的 4字符复制到 c1 中去,然后系统自动添入一个字符串结束标志 ’ \0?。
当字符串中的对应字符全部相等且同时遇到 ’ \0?字符时,则两个字符串相等,否则,以第一个不相同的字符的比较结果作为整个字符串的比较结果,比较结果由函数值带回,具体情况见下表所示 。
4.4.5 字符串处理函数( 6)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
6.字符串比较函数 strcmp()
调用 strcmp()函数实现字符串的大小比较,其调用形式为:
strcmp(字符数组 1或字符串 1,字符数组 2或字符串 2);
功能:将两个字符数组 ( 字符串 ) 自左向右对应的字符逐个进行比较
( 按 ASCII码值大小比较 ),直到出现不同字符或遇到 ’ \0?字符为止,
函数值为一个整型数 。
返回字符串大小情况函数值
VC++ 6.0函数值 TC 2.0函数值字符串 1等于字符串 2 0 0
字符串 1大于字符串 2 1 首不同字符的 ASCII码差值(正整数)
字符串 1小于字符串 2 -1 首不同字符的 ASCII码差值(负整数)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本章目录
2,程序实例 2【 例 4.6】
3,程序实例 3【 例 4.7】
1,程序实例 1【 例 4.5】
4.5 综合实训
4,程序实例 4【 例 4.8】
#include "stdio.h"
main()
{ int i; float score[10],aver=0.0;
printf("Please input scores of 10 students:");
for(i=0;i<10;i++) /*输入 10位学生成绩并累加和 */
{ scanf("%f",&score[i]);
aver+=score[i]; }
aver/=10; /*求出 10位学生的平均成绩 */
printf("The average score is:%.2f\n",aver);
printf("They are:");
for(i=0;i<10;i++) /*输出高于平均成绩的学生成绩 */
if(score[i]>aver)
printf("%6.2f",score[i]);}
4.5 综合实训( 1【 例 4.5】 )
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
【 例 4.5】 输入 10位学生的成绩,求出平均分,并输出高于平均分的同学成绩 。 程序名为 l4_5.cpp。
返回
4.5 综合实训( 1【 例 4.5】 结果)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录运行结果返回输出平均成绩 输出高于平均分成绩 输入 10个成绩
4.5 综合实训( 2【 例 4.6】 )
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
【 例 4.6】 用冒泡法对 10个整型数按升序进行排序 。
冒泡法是使较小的值像空气泡一样逐渐,上浮,到数组的顶部,而较大的值逐渐下沉到数组的底部 。
返回具体思路是,从第一数开始将相邻的两个数比较,较大的数向后移动,较小的数向,上浮,一个,经过一轮的比较,最大的数移动到末尾 。 对剩下的数继续下一轮的比较和移动 。 如果 n个数比较,这样 n-1轮后,就完成了排序工作 。 程序名为 l4_6.cpp,程序如下:
#include "stdio.h"
main()
{ int i,j,t,a[10];
printf("Please input 10 numbers:\n");
for(i=0;i<10;i++) /*输入 10个整数存入数组 a中 */
scanf("%d",&a[i]);
for(i=0;i<9;i++) /*对数组 a中的 10个整数排序 */
for(j=0;j<9-i;j++)
if(a[j]>a[j+1]) /*前面的元素大于后面的元素则交换 */
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
printf("The sorted numbers are:");
for(i=0;i<10;i++) /*输出数组 a中的 10个元素 */
printf("%d ",a[i]);
printf("\n");
}
4.5 综合实训( 2【 例 4.6】 程序 )
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录返回
4.5 综合实训( 2【 例 4.6】 结果)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录运行时输入,89 67 45 87 32 1 0 45 2 3<CR>
运行结果:
返回输出排序结果 输入 10个无序数选择法的思路是,从第一元素开始逐个元素进行比较,并记录下较小元素的下标,经过一轮的比较和记录后,记录的下标为最小元素的下标,将该元素与第一个元素交换 。 对剩下的数继续下一轮的比较和记录 。 如果 n个数比较,这样 n-1轮后,就完成了排序工作 。 程序名为 l4_7.cpp。 程序如下:
4.5 综合实训( 3【 例 4.7】 )
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
【 例 4.7】 用选择法对 10个整型数按升序进行排序 。
返回
#include "stdio.h"
main()
{ int i,k,j,t,a[10];
printf("Please input 10 numbers:\n");
for(i=0;i<10;i++) scanf("%d",&a[i]); /*输入 10个整数存入数组 a中 */
for(i=0;i<9;i++) /*对数组 a中的 10个整数排序 */
{ k=i;
for(j=i+1;j<10;j++)
if(a[k]>a[j]) k=j;
t=a[k]; a[k]=a[i]; a[i]=t; /*本轮最小的元素与本轮首的元素交换 */
}
printf("The sorted numbers are:");
for(i=0;i<10;i++) printf("%d ",a[i]); /*输出排序后数组 a中的 10个元素 */
printf("\n");
}
4.5 综合实训( 3【 例 4.7】 程序 )
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录返回程序分析,学生成绩用二维数组存储,各行代表各位学生的信息,各列代表学生学号和各门课程代号的信息 。 程序依次有 5项功能:学生信息的输入;输入学号,输出该生各科成绩及平均分;输入课程代号,
输出该课程每位学生成绩及课程平均分;输入学生学号及课程代号,
输出成绩;设计功能选择菜单及利用 switch —case语句实现以上功能 。
程序名为 l4_8.cpp,程序如下:
4.5 综合实训( 4【 例 4.8】 )
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
【 例 4.8】 应用二维数组,实现简单的学生成绩查询系统的设计 。 具体要求如下:
( 1) 根据用户输入的学号,能够给出该生各科成绩及平均分 。
( 2) 根据用户输入的课程代号,能够给出该课程中每位学生的成绩及课程平均分 。
( 3) 能够查询出某个学生某一门的考试成绩 。
返回
#include "stdio.h"
#define N 4 /*定义符号常量 N等于 4*/
#define M 5 /*定义符号常量 M等于 5*/
main()
{ int select; int score[N][M],i,j,aver,num;
while (1) /*菜单循环显示和功能循环处理 */
{ printf(" 欢迎使用学生查询系统 !\n\n");/*菜单显示 */
printf("* * * * * * * * * * * * * * * * * * * * * *\n");
printf("* 请选择查询对象,*\n");
printf("* 1.据学生学号查询学生成绩及平均成绩 *\n");
printf("* 2.据课程代号查询学生课程成绩及平均成绩 *\n");
printf("* 3.据学生学号和课程代号查询学生成绩 *\n");
printf("* 4.学生原始数据的依次输入 *\n");
printf("* 5.谢谢使用,退出本系统 ! *\n");
INPUT:
4.5 综合实训( 4【 例 4.8】 程序 1)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录返回
4.5 综合实训( 4【 例 4.8】 程序 2)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
INPUT:
printf("* * * * * * * * * * * * * * * * * * * * * *\n");
printf(" 请选择功能号 1—5,");
scanf("%d",&select);
if(select==5) /*退出系统 */
break;
if(select>=6||select<=0) /*输入功能号有误处理 */
{ printf("* * * 输入有误,请重新功能号 1-5,* * *\n");
goto INPUT;
}
aver=0;
返回
4.5 综合实训( 4【 例 4.8】 程序 3)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
switch(select)
{ case 1,/*按学号查询功能 */
printf("请输入查询学生的学号 \n");
scanf("%d",&num);
for(i=0;i<N;i++)
if(num==score[i][0])
for(j=1;j<M;j++)
{ printf("%d号课程成绩是 %d\n",j,score[i][j]);
aver+=score[i][j];
}
printf("%d号学生的平均成绩为 %d\n",num,aver/(M-1));
break;
返回
4.5 综合实训( 4【 例 4.8】 程序 4)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录
case 2,/*按课程查询功能 */
printf("请输入查询课程的代号 (1-%d),\n",M-1);
scanf("%d",&j);
for(i=0;i<N;i++)
{ printf("%d号学生的成绩为 %d\n",i+1,score[i][j]);
aver+=score[i][j];
}
printf("%d号课程的平均成绩为 %d\n",j,aver/N);
break;
返回
case 3,/*按学号和课程查询功能 */
printf("请输入查询的学生学号和课程代号,\n");
scanf("%d%d",&num,&j);
for(i=0;i<N;i++)
if(num==score[i][0])
printf("%d号学生 %d号课程成绩为 %d\n",num,j,score[i][j]);
break;
case 4,/*输入学生原始数据 */
printf("请依次输入 %d个学生的 %d门成绩 (学号,各门成绩 ) \n",N,M-1);
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&score[i][j]);
break;
default:break; } } }
4.5 综合实训( 4【 例 4.8】 程序 5)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录返回运行结果:
4.5 综合实训( 4【 例 4.8】 结果)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境

返回本节目录返回运行程序后出现功能菜单

用户根据需要选择相应的功能序号

1—
5

执行即可