@
@南方
实验四:数组
一.实验目的
1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法;
2. 掌握字符数组和字符串函数的使用;
3. 掌握与数组有关的算法(特别是排序算法)。
二.实验环境
CPU:P133; RAM:48M; OS:WINDOWS98; SOFTWARE:TURBO C2。0
三.实验过程
程序一
用选择法对10个整数排序。10个整数用scanf函数输入。
程序如下:
#define N 10
main()
{int i,j,min,temp,a[N];
printf("请输入10个数:\n");
for(i=0;i<N;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
for(i=0;i<N-1;i++)
{min=i;
for(j=i+1;j<N;j++)
if(a[min]>a[j]) min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf("\n 排序结果如下:\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
}
运行结果:
请输入10个数:
a[0]=6↙
a[1]=897↙
a[2]=3↙
a[3]=224↙
a[4]=2↙
a[5]=8643↙
a[6]=32↙
a[7]=55↙
a[8]=242↙
a[9]=8↙
6 897 3 224 2 8643 32 55 242 8
排序结果如下:
2 3 6 8 32 55 224 242 897 8643
程序二:
有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则输出“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。
程序如下:
变量说明:top、bott查找区间两端点的下标,loca:查找成功与否的开头变量。
运行结果:
程序三:
将两个字符串连起来,不要用strcat函数。
程序如下:
main()
{
char s1[80],s2[40];
int i=0,j=0;
printf("\n请输入字符串1:");
scanf("%s",s1);
printf("请输入字符串2:");
scanf("%s",s2);
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("连接后的字符串为:%s",s1);
}
运行结果:
请输入字符串1:stud↙
请输入字符串2:ents↙
连接后的字符串为:students
在输入字符串时,中间不能有空格,否则将作两个字符串处理。
第十三行s1[i]='\0'不能漏掉,因为C语言规定在每一个字符串的结尾加一个'\0'作为字符串结束标志。本人在开始时漏掉了些行,结果运行时在students后出现了”.1/4”的乱码。
程序四:
找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。此数组定义如下:
9 80 205 40
90 -60 96 1
210 -3 101 89
数组元素的值用赋初值方法在程序中指定。
程序如下:
main()
{int i,j,k,m,flag1,flag2,max,maxi,maxj;
int a[3][4]={{9,80,205,40},{90,-60,96,1},{210,-3,101,89}};
printf("数组如下:\n");
for(i=0;i<3;i++)
{ for(j=0;j<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
flag2=0;
for(i=0;i<3;i++)
{max=a[i][0];
for(j=0;j<4;j++)
if(a[i][j]>max)
{max=a[i][j];
maxj=j;
}
for(k=0,flag1=1;k<3&&flag1;k++)
if(max>a[k][maxj])
flag1=0;
if(flag1)
{printf("\n第%d行,第%d列的%d是鞍点 \n",i,maxj,max);
flag2=1;
}
}
if(!flag2)
printf("\没有鞍点");
}
运行结果:
数组如下:
9 80 205 40
90 -60 96 1
210 -3 101 89
第1行,第2列的96是鞍点
本章实验学会多维数组的赋值方法。了解了字符串的存储方式。应该注意的是数组如下:数组的下标都是从0开始的,与我们的日常习惯不同。
一.实验目的
1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法;
2. 掌握字符数组和字符串函数的使用;
3. 掌握与数组有关的算法(特别是排序算法)。
二.实验环境
CPU:P133; RAM:48M; OS:WINDOWS98; SOFTWARE:TURBO C2。0
三.实验过程
程序一
用选择法对10个整数排序。10个整数用scanf函数输入。
程序如下:
#define N 10
main()
{int i,j,min,temp,a[N];
printf("请输入10个数:\n");
for(i=0;i<N;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
for(i=0;i<N-1;i++)
{min=i;
for(j=i+1;j<N;j++)
if(a[min]>a[j]) min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf("\n 排序结果如下:\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
}
运行结果:
请输入10个数:
a[0]=6↙
a[1]=897↙
a[2]=3↙
a[3]=224↙
a[4]=2↙
a[5]=8643↙
a[6]=32↙
a[7]=55↙
a[8]=242↙
a[9]=8↙
6 897 3 224 2 8643 32 55 242 8
排序结果如下:
2 3 6 8 32 55 224 242 897 8643
程序二:
有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则输出“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。
程序如下:
变量说明:top、bott查找区间两端点的下标,loca:查找成功与否的开头变量。
运行结果:
程序三:
将两个字符串连起来,不要用strcat函数。
程序如下:
main()
{
char s1[80],s2[40];
int i=0,j=0;
printf("\n请输入字符串1:");
scanf("%s",s1);
printf("请输入字符串2:");
scanf("%s",s2);
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("连接后的字符串为:%s",s1);
}
运行结果:
请输入字符串1:stud↙
请输入字符串2:ents↙
连接后的字符串为:students
在输入字符串时,中间不能有空格,否则将作两个字符串处理。
第十三行s1[i]='\0'不能漏掉,因为C语言规定在每一个字符串的结尾加一个'\0'作为字符串结束标志。本人在开始时漏掉了些行,结果运行时在students后出现了”.1/4”的乱码。
程序四:
找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。此数组定义如下:
9 80 205 40
90 -60 96 1
210 -3 101 89
数组元素的值用赋初值方法在程序中指定。
程序如下:
main()
{int i,j,k,m,flag1,flag2,max,maxi,maxj;
int a[3][4]={{9,80,205,40},{90,-60,96,1},{210,-3,101,89}};
printf("数组如下:\n");
for(i=0;i<3;i++)
{ for(j=0;j<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
flag2=0;
for(i=0;i<3;i++)
{max=a[i][0];
for(j=0;j<4;j++)
if(a[i][j]>max)
{max=a[i][j];
maxj=j;
}
for(k=0,flag1=1;k<3&&flag1;k++)
if(max>a[k][maxj])
flag1=0;
if(flag1)
{printf("\n第%d行,第%d列的%d是鞍点 \n",i,maxj,max);
flag2=1;
}
}
if(!flag2)
printf("\没有鞍点");
}
运行结果:
数组如下:
9 80 205 40
90 -60 96 1
210 -3 101 89
第1行,第2列的96是鞍点
本章实验学会多维数组的赋值方法。了解了字符串的存储方式。应该注意的是数组如下:数组的下标都是从0开始的,与我们的日常习惯不同。