實(shí)驗(yàn)六 一維數(shù)組
【目的與要求】
1.掌握一維數(shù)組的定義、賦值和輸入輸出的方法;
2.掌握字符數(shù)組的使用;
3.掌握與數(shù)組有關(guān)的算法(例如排序算法)。
【上機(jī)內(nèi)容】
【一般示例】
【例1】在鍵盤上輸入N個(gè)整數(shù),試編制程序使該數(shù)組中的數(shù)按照從大到小的次序排列。
分析:C中數(shù)組長(zhǎng)度必須是確定大小,即指定N的值。排序的方法有多種,我們?nèi)〕銎渲袃煞N作為參考。
方法一:起泡排序
從第一個(gè)數(shù)開始依次對(duì)相鄰兩數(shù)進(jìn)行比較,如次序?qū)t不做任何操作;如次序不對(duì)則使這兩個(gè)數(shù)交換位置。第一遍的(N-1)次比較后,最大的數(shù)已放在最后,第二遍只需考慮(N-1)個(gè)數(shù),以此類推直到第(N-1)遍比較后就可以完成排序。
源程序如下:
#define N 10
#include"stdio.h"
main()
{
int a[N],i,j,temp;
printf("please input %d numbers\n",N);
for(i=0;i scanf("%d",&a[i]);
for(i=0;i for(j=0;j {
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
printf("the array after sort:\n");
for(i=0;i printf("]",a[i]);
}
方法二:選擇排序
首先找出值最小的數(shù),然后把這個(gè)數(shù)與第一個(gè)數(shù)交換,這樣值最小的數(shù)就放到了第一個(gè)位置;然后,在從剩下的數(shù)中找值最小的,把它和第二個(gè)數(shù)互換,使得第二小的數(shù)放在第二個(gè)位置上。以此類推,直到所有的值從小到大的順序排列為止。
#include"stdio.h"
#define N 10
main()
{
int a[N],i,j,r,temp;
printf("please input %d numbers\n",N);
for(i=0;i scanf("%d",&a[i]);
for(i=0;i { r=i;
for(j=i+1;j if(a[j] r=j;
if(r!=i)
{
temp=a[r];
a[r]=a[i];
a[i]=temp;
}
}
printf("the array after sort:\n");
for(i=0;i printf("]",a[i]);
printf("\n");
}
【例2】青年歌手參加歌曲大獎(jiǎng)賽,有10個(gè)評(píng)委對(duì)她的進(jìn)行打分,試編程求這位選手的平均得分(去掉一個(gè)最高分和一個(gè)最低分)。
分析:這道題的核心是排序。將評(píng)委所打的10個(gè)分?jǐn)?shù)利用數(shù)組按增序(或降序)排列,計(jì)算數(shù)組中除第一個(gè)和最后一個(gè)分?jǐn)?shù)以外的數(shù)的平均分,其中排序部分這里用選擇法實(shí)現(xiàn)。
main()
{int i,j,min;
float temp,ave=0;
float a[11];
printf("\n輸入評(píng)委所打的分?jǐn)?shù):\n");
for(i=1;i<=10;i++)
scanf("%f",&a[i]);
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("選手所得最后分?jǐn)?shù):%6.1f",ave/8);
printf("\n");
}
【例3】輸入一串字符,計(jì)算其中空格的個(gè)數(shù)。
#include
main( )
{char c[30];
int i,sum=0;
gets(c);
for(i=0;i if(c[i]==' ')
sum=sum+1;
printf("空格數(shù)為:%d \ n",sum);
}
【作業(yè)】
1. 已有一個(gè)已排好序的數(shù)組,今輸入一個(gè)數(shù),要求按原來(lái)排序的規(guī)律將它插入數(shù)組中。
2. 將一個(gè)數(shù)組中的值按逆序重新存放。例如,原來(lái)順序?yàn)?,6,5,4,1。要求改為1,4,5,6,8。
3. 有15個(gè)數(shù)按由小到大順序存放在一個(gè)數(shù)組中,輸入一個(gè)數(shù),要求用折半查找法找出該數(shù)是數(shù)組中第幾個(gè)元素的值。如果該數(shù)不在數(shù)組中,則打印出“無(wú)此數(shù)”。
4. 編一程序,將兩個(gè)字符串連接起來(lái),不要用strcat函數(shù)。
相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專題預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |