当前位置:文档之家› 实验四 数组应用

实验四 数组应用

实验四数组应用
一、实际学时
4学时。

二、实验目的
1.掌握一维数组和二维数组定义、赋值和输入输出的方法。

2.掌握字符数组和字符串函数的使用。

3.掌握与数组有关的算法(特别是排序算法)。

三、实验内容
【习题1】已有一排好序的数组a,现输入一个数,要求按原来排序的规律将它插入数
#include<stdio.h>
int main()
{
int i,j,k,num;
int a[11]={12,15,21,25,27,35,36,39,48,52};
printf("Input n:");
scanf("%d",&num);
if(num>a[9]) //比数组的最后一个元素大,则插入到数组最后一个元素的后面 {
a[10]=num;
}
else
{
for(i=0;i<=9;i++)
{
if(a[i]>num)//当第i个元素比插入元素大,则从第i到最后一个元素要后移
{
for(j=9;j>=i;j--)
a[j+1]=a[j];
a[i]=num; //插入到第i个元素的位置
break;
}
}
}
printf("Output array a:\n");
for(i=0;i<=9;i++)
printf("%d ",a[i]);
printf("\n");
}
参考程序:
#include <stdio.h>
void main()
{
int count=0;//初始化
printf("请输入一个字符串:");
char c;
while ((c=getchar())!='\n')
{
if(c>'0'&&c<'9')
count++;
}
printf("字符串中数字字符的个数为:%d\n",count);
}
【习题3】将一个数组中的值按逆序重新存放。

例如原来顺序为11,12,13,14,15,16,17,18,19。

要求改为19,18,17,16,15,14,13,12,11。

参考程序:
#include <stdio.h>
void main()
{
int i,j,t;
int a[9]={11,12,13,14,15,16,17,18,19};
printf("Originate array:");
for(i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");
for(i=0,j=8;i<j;i++,j--)
{ t=a[i]; a[i]=a[j]; a[j]=t; }
printf("Inverted array:");
for(i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");
}
【思考题】输入一个字符串,然后将其逆序存放。

参考程序:
#include<string.h>
#include<stdio.h>
void main()
{
char a[100],t;
int i,len,j;
printf("请输入一个字符串:");
gets(a);
len=strlen(a);
for(i=0,j=len-1;i<j;i++,j--)
{ t=a[i]; a[i]=a[j]; a[j]=t; }
printf("\n转置后的字符串为:");
puts(a);
printf("\n");
}
参考程序:
#include<stdio.h>
#include<string.h>
void main()
{
char a[100],b[30];
int i,j;
printf("Enter string NO. 1:");
gets(a);
printf("Enter string NO. 2:");
gets(b);
for(j=0,i=strlen(a);b[j]!='\0';i++,j++)
{
a[i]=b[j];
}
a[i]='\0';
printf("Connected string NO. 1:");
printf("%s\n",a);
}
【习题5】下面程序分别用选择法和冒泡法对数组a[M]按从大到小的顺序进行排序,请填空。

选择法排序程序:
#include <stdio.h>
#define M 6
void main()
{
int i,j,max;
float temp,a[M];
printf("Input array a:\n");
for(i=0;i<M;i++)
scanf("%f",&a[i]);
for(i=0;i<=M-2;i++)
{
max=i;
for(j=i+1;j<M;j++)
if(a[max]<a[j])
max=j;
temp=a[i];
a[i]=a[max];
a[max]=temp;
}
printf("After sorted array a:\n"); for(i=0;i<M;i++)
printf("%-7.2f",a[i]);
printf("\n");
}
冒泡法排序程序:
#include <stdio.h>
#define M 6
void main()
{
int i,j,max;
float temp,a[M];
printf("Input array a:\n");
for(i=0;i<M;i++)
scanf("%f",&a[i]);
for(i=0;i<=M-2;i++)
for(j=0;j<M-i+1;j++)
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
printf("After sorted array a:\n");
for(i=0;i<M;i++)
printf("%-7.2f",a[i]);
printf("\n");
}
【思考题】如何利用二维字符数组,对输入的M个字符串进行排序,并输出排序后的结果。

提示:思路仍然是采用本题中的选择法或冒泡法进行排序。

首先使用字符串输入函数gets(),输入M个字符串存放在二维字符数组str[M][N]中,排序过程中可以借助于一维字符数组temp[N]完成字符串之间的交换操作,其中M是字符串的个数,而字符串的最大长度小于N,将M、N定义为符号常量。

别外,字符串之间的大小比较,使用字符串比较函数strcmp()进行;字符串之间的交换,使用字符串拷贝函数strcpy()函数。

#include <stdio.h>
#include <string.h>
#define M 6
void main()
{
int i,j,max;
char temp[20],a[M][20];
printf("请输入%d个字符串:\n",M);
for(i=0;i<M;i++)
gets(a[i]);
for(i=0;i<=M-2;i++)
for(j=0;j<M-i+1;j++)
if(strcmp(a[j],a[j+1])<0)
{
strcpy(temp,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],temp);
}
printf("排序后的字符串:\n");
for(i=0;i<M;i++)
printf("%s ",a[i]);
printf("\n");
}。

相关主题