a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 71|回复: 0

[C语言] 计算机等级考试二级C语言实验指导:一维数组

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
  实验六 一维数组, y  N' Z2 p8 Z6 V: m7 z
  【目的与要求】
. q" ?7 |- F" R' Q$ i  1.掌握一维数组的定义、赋值和输入输出的方法;
7 u2 b% a# T! C6 A2 f5 J* R  2.掌握字符数组的使用;
3 g5 d6 S0 q7 O4 g& R  3.掌握与数组有关的算法(例如排序算法)。) }  a8 a% p0 O' p9 O3 [
  【上机内容】% g2 V7 ^  L- m  q$ t0 j4 P/ B
  【一般示例】" N3 l! o$ f, ~1 e. O3 t3 m
  【例1】在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。
- ]7 S. R8 x$ d# H+ H$ M  分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参考。$ C  w! y3 N! B
  方法一:起泡排序
7 n, S  K0 b8 J, g/ f0 z  从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。/ s% m3 L# w& C$ C+ m- c/ I
  源程序如下:+ a; ?  S3 D8 v8 x2 V# O
  #define N 10
. n8 U# p$ s( S  #include"stdio.h"# x9 z/ R2 |$ {$ B5 U" s" p# A
  main()
2 G. N2 m. d  ^+ h' [  {% O8 I7 I$ R% \$ o  x
  int a[N],i,j,temp;& }3 |# D5 K& g
  printf("please input %d numbers\n",N);
- v" Y5 x8 c; l0 Q  for(i=0;i  scanf("%d",&a);1 B7 q* _, G- e) H1 B9 W$ K8 _7 ]6 F
  for(i=0;i  for(j=0;j  {
& d. A5 R: s  M: w: t: j  if(a[j]>a[j+1])
+ g8 l' v2 T; }% o6 U  {% @' N" }- Q6 h
  temp=a[j];
0 W3 S- l2 O. A" Y  a[j]=a[j+1];& ?* [! L1 K' H+ J7 j; `6 f
  a[j+1]=temp;: T+ ?" T4 e' s  S3 z( A4 C4 |0 u
  }" `  m* e3 R' G' |) Y% E7 R
  }+ k, A8 H: \) v' F7 M5 U0 F% k1 m
  printf("the array after sort:\n");
5 m$ B& K9 J7 A. k  for(i=0;i  printf("]",a);
. N7 P$ i; D; Q) @" p+ N, m  }
1 t. _+ v% K3 X& C! G& z; U  方法二:选择排序7 m) g  D8 Z! v5 Y
  首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。
6 F4 O' M" o) Y% k/ E1 g# U  #include"stdio.h"2 `- B$ m. v/ e0 `) v8 o7 o2 y
  #define N 10$ Y* i; `5 D. W5 U3 \  O
  main()
3 F9 X/ i- G4 f. N' Z8 X5 S  {
/ v3 K  o% M+ ~" f" M  int a[N],i,j,r,temp;
) r1 L3 m* M& Y7 X  printf("please input %d numbers\n",N);
8 e3 y6 j' S3 O3 R* k  f  for(i=0;i  scanf("%d",&a);$ b+ B2 x( r* W# `7 v
  for(i=0;i  { r=i;* l) s4 b. x4 x8 P3 b
  for(j=i+1;j  if(a[j]  r=j;  p9 ]5 g( ?' d  Y* b
  if(r!=i)) q. l8 b6 r* b6 f% P
  {# A- _; x# r1 q: r7 G
  temp=a[r];
8 ^" K1 p) s/ W: A' j; S4 L  a[r]=a;
0 u9 a9 X7 u% ?  a=temp;, ?7 V' m, A+ e
  }( u! f9 H! v8 `7 J0 O. o  P% `
  }* S- e0 ^3 V* v  P0 X
  printf("the array after sort:\n");$ C! x" a7 G3 N1 T
  for(i=0;i  printf("]",a);
9 Z9 J6 e7 ?" x4 }  printf("\n");
7 k3 H+ P, ^; L: y' ?9 x; r3 Q& F  }
* ?1 M' ]- Z0 B4 N% \  【例2】青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。
7 P% k2 z! E4 s4 L  分析:这道题的核心是排序。将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分,其中排序部分这里用选择法实现。
, [( O1 T% W; L3 t  main()
0 P! G7 U+ c* Y, D" e. n  E. C7 A  {int i,j,min;
5 L1 }! z( j+ O- n  float temp,ave=0;
2 A' l1 q; F6 v" {  float a[11];$ d+ V) r& E" N( R* @# Z
  printf("\n输入评委所打的分数:\n");
8 |  \& K# s6 X& p0 d
& V( ^  h5 ]2 K  for(i=1;i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-7 05:59 , Processed in 0.208882 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表