a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 70|回复: 0

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

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
  实验六 一维数组
: 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
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 17:03 , Processed in 0.183588 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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