资源描述
《高级语言程序设计》实验报告
班级: 学号: 姓名: 成绩:
实验日期: 年 月 日
实验题目: 实验五 数组程序设计
实验目的:
1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。
2. 掌握字符数组和字符串函数的使用。
3. 掌握与数组有关的算法。
实验内容:(包括算法说明:用文字或流程图说明;程序清单;运行结果:原始数据、相应的运行结果和必要的说明。)
1.改错题
(1)下列程序的功能为:为指定的数组输入10个数据,并求这些数据之和。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy5_1.c存盘。
#include<stdio.h>
void main()
{int n=10,i,sum=0;
int a[n];
for(i=0;i<10;i++)
{
scanf("%d",a[i]);
sum=sum+a[i];
}
printf("sum=%d\n",sum);
}
(2)下列程序的功能为:将字符串b连接到字符串a。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy5_2.c存盘。
#include<stdio.h>
void main( )
{ char a[]="wel",b[]="come";
int i,n=0;
while(!a[n]) n++;
for(i=0;b[i]!='\0';i++)
a[n+i]=b[i];
printf("%s\n",a);
}
原始数据、相应的运行结果和必要的说明。
原始数据、相应的运行结果和必要的说明。
(3)下列程序的功能为:输入两个矩阵A、B的值,求c=A+B 。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy5_3.c存盘。
#include <stdio.h>
void main()
{
int a[2][3],b[2][3],c[2][3],i,j;
for ( i = 1; i<2;i++)
for( j=1; j<3; j++)
scanf("%d",a[i][j]);
for ( i = 1; i<2; i++)
for( j = 1; j<3; j++)
scanf("%d",b[i][j]);
for ( i = 1; i<2; i++) //A+B矩阵,每个对应元素相加
for( j =1; j<3; j++)
c[i][j]=a[i][j]+b[i][j];
for ( i = 1; i<2; i++)
{ for( j=1; j<3; j++)
printf("%3d",c[i][j]);
printf("\n");
}
}
2.程序填空
(1)以下程序的功能是:采用二分法在给定的有序数组中查找用户输入的值,并显示查找结果。请填写适当的符号或语句,使程序实现其功能,程序以文件名sy5_4.c存盘。
#include "stdio.h"
#define N 10
main()
{ int a[ ]={0,1,2,3,4,5,6,7,8,9},k;
int low=0,high=N-1,mid,find=0;
printf("请输入欲查找的值:\n");
scanf("%d",&k);
while (low<=high)
{
mid=(low+high)/2;
if(a[mid]==k)
{
printf("找到位置为:%d\n",mid+1);find=1;
}
if(a[mid]>k)
__________________;
else
__________________;
}
if(!find) printf(“%d未找到\n”,k);`
}
(2)以下程序的功能是:采用选择排序法对随机产生的20个100以内的无序整数按由大到小的顺序重新排列,并输出重新排列后的有序整数。请填写适当的符号或语句,使程序实现其功能,程序以文件名sy5_5.c存盘。
#define N 20
#include "stdio.h"
void main()
{int a[N],i,j,k,t;
printf("排序前:\n");
for(i=0;i<N;i++)
{a[i]= _________________;
printf("%5d",a[i]);
}
for(i=0;i<N-1;i++)
{k=i;
for(j=i+1;j<N;j++)
if(_________________)
k=j;
if(_________________)
{ t=a[k]; a[k]=a[i]; a[i]=t;}
}
printf("排序后:\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
}
(3)下列程序的功能为:在一行文字中,删除其中某个字符,此行文字和需要删除的字符均由键盘输入,请填写适当的符号或语句,使程序实现其功能,程序以文件名sy5_6.c存盘。
#include<stdio.h>
#include<string.h>
void main()
{char line[80] ;
char ch;
int i,j;
int len;
printf("输入一行字符 \n");
;
printf("输入要删除字符 ");
ch=getchar();
i=0;
while(line[i]!='\0' )
{while( && line[i]!=ch) i++;
len=strlen(line);
for(j=i;j<len-1;j++)
;
line[j]='\0';
}
puts(line);
}
3.编程题
(1)编写一个程序实现如下功能:任意输入10个整数的数列完成下列运算(程序以文件名sy5_7.c存盘):
①要求用选择排序法将数列由小到大排序;
②在排序好的数列中插入一个数,使数列保持从小到大的顺序。
(2)编写一个程序实现如下功能:输入字符串s1和s2以及插入位置d,在字符串s1中的指定位置d处插入字符串s2。如:输入字符串"SHHAI"、"ANG"和位置3,则输出: "SHANGHAI";若d大于串s1长度时,串s2插入在s1后面,如s1="SHANG",S2="HAI",d=8,则s1="SHANGHAI"(程序以文件名sy5_8.c存盘)。
(3)编写一个程序实现如下功能:找出一个二维数组的“鞍点”,即该位置上的元素在该行是最大,在该列是最小。注意二维数组可能没有“鞍点”(程序以文件名sy5_9.c存盘)
分析与思考:(调试过程及调试中遇到的问题及解决办法;调试程序的心得与体会)
4
展开阅读全文