实验六 一维数组
: r1 ^7 P0 X2 R 【目的与要求】& p) y7 o9 _8 o. h; k6 t1 i% n
1.掌握一维数组的定义、赋值和输入输出的方法;
8 I: u8 m& F0 c- ^/ {2 d 2.掌握字符数组的使用;. w1 K3 B: K( \4 r4 P {. o
3.掌握与数组有关的算法(例如排序算法)。
5 ]% H* Z, R- R2 O+ g4 M6 ~8 T 【上机内容】% ^, T+ z4 ^4 W3 H" B
【一般示例】
0 j- s- |6 Q& [+ l1 ^2 G 【例1】在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。( ]8 r7 f } z9 W
分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参考。
# `' c" B1 ]; k4 @, A0 @. A0 W 方法一:起泡排序, ?; y" s+ Z- A( |9 D+ v
从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。9 ^' h1 i, N! Y w1 s I$ D. ?! r
源程序如下:- {, Z1 L5 Z, W* D
#define N 10
% [( U& k9 p: r9 ~, g9 Q #include"stdio.h"& w; Z& V0 @0 l8 o$ u+ d7 m
main()
6 E8 s2 |+ S6 z( y {
' s7 M' }, g6 n int a[N],i,j,temp;
' a; S7 i2 x# J1 m& n3 Q7 ]3 e printf("please input %d numbers\n",N);6 o6 L9 K* l4 ~ r6 T9 M* R
for(i=0;i scanf("%d",&a);
) B! p" Z& n( _' I9 s4 J for(i=0;i for(j=0;j {
' ~) j" C# x/ Y: A if(a[j]>a[j+1])/ S4 K, Q( K! d7 c9 J
{
# g! s* B$ ?- X1 G temp=a[j];2 N# Z7 G& Y t; K- _% E7 \
a[j]=a[j+1];
# W1 s' ]( \4 V5 e1 H% s a[j+1]=temp;0 W& o3 g2 m3 z1 F4 m4 s
}* l4 f+ B6 `2 C
}
8 B0 q1 h/ R4 m' @ _- o printf("the array after sort:\n");
' d& { K/ w# C `( u# ~ for(i=0;i printf("]",a);3 U3 n. p4 l r
}3 b& }1 q- ^9 e$ t# j$ P" q
方法二:选择排序& i: T6 y _! M$ G: R" q- U7 v
首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。) R) R) T# z. c: z: h0 s0 `
#include"stdio.h"( d& W" b( T) y& ~
#define N 10
( x6 X- Z( E M. l8 f, m7 Q ^ main()/ r: |, E0 H) w6 t% [& @
{
/ C! J* K% d: y$ X int a[N],i,j,r,temp;4 `& d0 A# v4 j1 ~* u) b* }
printf("please input %d numbers\n",N);
3 F8 v% a m# o* w: \' X: M for(i=0;i scanf("%d",&a);5 }9 H9 C5 k, ^( `$ b; g* b D
for(i=0;i { r=i;
$ Z# T% g" V& ]3 c+ w for(j=i+1;j if(a[j] r=j;3 `7 @$ f% W8 ~
if(r!=i)1 ^' J$ q j! h. n P
{
5 ?( k4 z9 c8 F8 A* c( G' C temp=a[r];
& Z9 ^" T6 F& t$ o" r* q4 c a[r]=a;# H! G+ a7 ~5 Q9 K2 j, H8 ]
a=temp;( N1 V: W1 j! S( J3 i0 \5 L5 p( l& P
}8 u7 Q9 S" {( ]! r3 Z4 n
}
# \; D! y/ }$ {/ [( P: { printf("the array after sort:\n");0 S, H( e# n/ `( I0 E
for(i=0;i printf("]",a);
0 d7 s0 l% o( e( O printf("\n");
0 {0 O3 G' L7 Q* I8 q }
8 M7 l$ u" _$ { 【例2】青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。6 P, a% }( Q' m/ |7 Z @; _; n
分析:这道题的核心是排序。将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分,其中排序部分这里用选择法实现。
8 Y9 l: m0 M4 w. P3 }& x, [ main()4 e3 f; @! n8 ^5 y6 W/ w
{int i,j,min;
% b* n9 _, W& a; n7 B- c0 G5 y8 _ float temp,ave=0;
/ i# Q- O/ |5 \) a float a[11];
6 x( @# K, [: E1 K3 B printf("\n输入评委所打的分数:\n");
7 m8 q1 X# ^6 ?& l# X3 |* X' F6 ^, G) e1 b/ \
for(i=1;i |