实验六 数组及其应用
【实验类型】设计性
【实验学时】2学时
【实验目的】
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;
2.掌握字符数组和字符串函数的使用;
3.掌握与数组有关的算法(特别是排序算法)。
【实验内容】
编程序并上机调试运行。
1.用选择法对10个整数排序。10个整数用scanf函数输入。
解:
#include<stdio.h>
void main()
{
void selection_sort(int a[], int n);
int a[10],i;
printf("请输入10个整数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
selection_sort(a,10);
printf("重新排序的整数:\n");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
putchar('\n');
}
void selection_sort(int a[],int n)
{
int i,j,k,temp;
for(i=0;i<n;i++)
{
k=i; //保存i的值,用k来进行循环排序
for(j=i+1;j<n;j++) //将第i个元素后面的元素与第i个元素进行比较
if(a[j]<a[k]) //如果第k=i个元素后面的元素小于i号元素,交换两个元素的标号,这样就将最小元素的标号放到最前面
k=j; //交换标号
if(k!=i) {temp=a[k];a[k]=a[i];a[i]=temp;} //循环结束后,交换两个标号下的元素的值
}
}
2.有15个数存放在一个数组中,输入一个数要求用折半查找法找出该数是数组中的第几个元素的值,如果该数不在数组中,则输出无此数,要找的数用scanf函数输入。 解:
#include<stdio.h>
void main()
{
static int a[15]={1,9,15,18,34,56,73,98,121,146,157,169,198,203,409}; int n,l,m,h,f;
l=0;h=14;f=0;
printf("请输入一个数:\n");
scanf("%d",&n);
while(l<=h)
{
m=(l+h)/2;
if(n==a[m])
{f=1;break;}
else if(n>a[m])
l=m+1;
else h=m-1;
}
if(f==1)
printf("该数是数组中的第%d个元素的值。\n",m+1);
else
printf("数组中无此数。\n");
}
3.将两个字符串连接起来,不要用strcat函数。
解:
#include<stdio.h>
void main()
{
int i=0,j=0;char str1[100],str2[100];
gets(str1);
gets(str2);
while(str1[i]!='\0')
i++;
while(str2[j]!='\0')
{str1[i++]=str2[j++];
str1[i]='\0';}
printf("%s\n",str1);
}
4.找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。至少准备两组测试数据:
(1)二维数组有鞍点
9 80 205 40
90 -60 96 1
210 -3 101 89
(2)二维数组没有鞍点
9 80 205 40
90 -60 196 1
210 -3 101 89
45 54 156 7
用scanf函数从键盘输入数组的各元素的值,检查结果是否正确,题目未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。
解:
#include<stdio.h>
#define N 100
#define M 100
void main()
{
int i,j,k,m,n,flag1,flag2,a[N][M],max,maxj;
printf("请输入行数n:\n");
scanf("%d",&n);
printf("请输入列数m:\n");
scanf("%d",&m);
printf("请输入数组:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
flag2=0;
for(i=0;i<n;i++)
{
max=a[i][0];
maxj=0;
for(j=0;j<m;j++)
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
for(k=0,flag1=1;k<n&&flag1;k++)
if(max>a[k][maxj])
flag1=0;
if(flag1)
{
printf("\n第%d行第%d列的%d是鞍点\n", i+1,maxj+1,max); flag2=1;
}
}
if(!flag2)
printf("矩阵无鞍点!\n");
}
【实验所使用的仪器设备与软件平台】
Windows7 Visual C++6.0
【实验结果】(根据题目要求给出结果,对于编程的实验,要附上编写的程序)
【实验小结】(主要分析在实验过程中碰到的问题,及如何解决的,另外小结一下实验过程中常犯的错误,怎么解决等)
第二篇:实验报告6答案
实 验 报 告
课程名称:高级语言程序设计
实 验 六:一维数组和二维数组
班 级:
学生姓名:
学 号:
专 业:
指导教师:
学 期:2009-20##学年上学期
云南大学信息学院
一、实验目的
1、掌握一、二维数组的定义及初始化
2、掌握数组元素的输入、输出及引用方法
3、掌握使用循环对数组元素进行访问
4、掌握一、二维数组的简单应用
二、知识要点
1、一、二维数组的定义与赋值(初始化、循环键盘输入)
2、访问数组元素(下标的正确使用)
3、数组的典型应用(复制、求和、统计某种元素个数、求数组中的最大/最小值、元素的查找与排序)
三、实验预习 (要求做实验前完成)
1、定义一个有四个元素的float型数组:
2、定义一个具有五个元素的整型数组并将其初始化为{1,2,3,4,5}
3、要用循环从键盘输入整型数组s的元素值(共6个),应该使用语句:
4、交换数组元素d[2]和d[4],使用语句:
5、语句for(k=0;k<3;k++) x[2][k] = 0; 将把哪些元素变为0?
四、实验内容 (要求提供:① 算法描述或流程图 ② 源程序 )
1、已知一个数组有10个元素,值分别是3,6,8,4,5,66,80,72,69,70。编程,将数组元素逆置后输出。(提示:第一个与最后一个交换位置,第二个与倒数第二个交换位置,……)
2、编程序求Fibonacci数列的前30项,Fibonacci数列的定义为:
要求将数列存放在数组中,并按每行5个数的格式输出该数列。
3、输入一个4行4列的二维数组,统计偶数的个数,并输出所有小于5的数。
4、已知一个二维数组:{{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}},编程,输出该二维数组的最小元素的行下标与列下标。
五、实验结果(要求写出运行界面及输出的运行结果)
六、实验小结
1. #define N 10
#include <stdio.h>
main()
{int i, t,a[N];
for(i=0;i<N;i++)
scanf(“%d”, &a[i]);
for(i=0;i<N/2;i++)
{t=a[i];
a[i]=a[N-1-j];
a[N-1-j]=t;}
for(i=0;i<N;i++)
prinf(“%5d ”,a[i]);
}
2. #define N 10
#include <stdio.h>
main()
{int i;
long f[30]={1,1};
for(i=2;i<30;i++)
f[i]=f[i-1]+f[i-2];
for(i=0;i<30;i++)
{if(i%5==0) prinf(“\n”);
prinf(“%8ld”,f[i]);
}
printf(“\n”);
}
3. #include <stdio.h>
main()
{int i, j, count=0, a[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{scanf(“%d”,a[i][j]);
if(a[i][j]==0) count++;
}
printf(“小于5的数:”);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i][j]<5) printf(“%d ”,a[i][j]);
printf(“\n偶数个数=%d\n ”,count);
}
4. #define M 4
#include <stdio.h>
main()
{int i,j,row,column,min;
int a[M][M]={{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}};
min=a[0][0];
for(i=0;i<M;i++)
for(j=0;j<M;j++)
if(a[i][j]<min)
{min=a[i][j];
row=i;
column=j;
}
printf(“最小值行下标为:%d,列下标为%d\n”,row,column);