语言实验报告
实验名称
姓名
班级
专业
学号
指导老师
实验七 数组
实验目的1) 熟练掌握一维数组、二维数组的定义、初始化和输入 /输出方法;
2) 熟练掌握字符数组和字符串函数的使用;
3) 掌握与数组有关的常用算法(如查找、排序等) 。
实验指导
1) 对任意一个一维型数组,从中找出数组元素的最大值和最小值并输出 。要求:
① 数组有十个元素;
② 使用 scanf 函数实现数组元素的输入前给出必要的提示;
③ 输出时,首先输出数组的十个元素,然后输出其最大值和最小值。
分析指导:
① 算法分析:首先定义一个数组,通过循环从键盘输入十个数组元素的值,再
通过另一个循环判断数组元素的最大只和最小值;
② 根据分析情况编写程序:
#include<stdio.h>
main()
{
int a[10],i,max,min;
printf("please input ten integers:");
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}
max=a[0];
min=a[0];
for(i=1;i<=9;i++)
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
for(i=0;i<=9;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
printf("The maximumvalue is %d,and the minimum value is %d\n",max,min);
}
运行程序,输入十个整数,如:
213761791289763559
运行结果如下:
( 2) 编写函数 cmpStr(char s1[],char s2[]) 比较两个字符串 s1 和 s2 的大小。
如果 s1>s2, 返回一个正数 ;s1=s2, 返回 0; s1<s2, 返回一个负数,在主函
数中调用该函数完成字符串的比较操作,并输出返回的值。
要求:
① 不允许使用 strcmp() 函数;
② 用 gets() 函数在主函数中输入两个字符串;
③ 实现触摸屏受托人()函数,返回的正数或负数的绝对值应该是进行比较的两个字符传中相应字符的 ASCII 码的差值。
分析指导:
① 算法分析:两个字符串从第一个字符开始一一对应进行比较,直到不相等的那个字符,从而求得它们的 ASCII 码的差值。比如,‘ A’与‘ C’相比,由于
‘ A’ <‘C’, 应输出负数,由于‘ A’与‘ C’的 ASCII 码的差值为 2,因此,应输出“-2 ”。同理,“ And”和“Aid ”比较, 根据第二个字符比较结果, ‘ n’ 比‘ I ’大 5,因此应输出‘ 5’;
② 根据分析情况编写程序:
#include<stdio.h>
int cmpstr(char s1[],char s2[])
{
int i,diff;
i=0;
while((s1[i]==s2[i])&&(s1[i]!='\0'))i++;
if(s1[i]=='\0'&&s2[i]=='\0')
diff=0;
else
diff=s1[i]-s2[i];
return diff;
}
void main()
{
int z;
char s1[100],s2[100];
printf("input the first string:");
输入字符串 1 gets (s1);
printf("input the second string:");
输入字符串 2
gets(s2);
z=cmpstr(s1,s2);
输出比较结果
printf("the difference between two strings is %d\n",z);
}
查看运行结果如下:
重新输入两个字符串 meet,mood 运行结果如下:
(3) 再给定的字符串中查找指定的字符。
要求:
① 字符串采用直接初始化的方式处理;
② 通过 scanf 函数读入一个任意字符;
③ 在字符串中查找该字符,如果存在该字符,输出该字符在字符串中的一次出现的位置,如果再给定的字符串中不存在该字符,则给出相应的说明信息。
#include<stdio.h>
void main()
{
int i;
char ch;
char s[]=" program";
printf(" 输入一个英文字母 : ");
scanf("%c",&ch);
for (i=0;s[i]!='\0';i++)
{
if (s[i]==ch)
break;
}
if (i<7)
printf("s[%d]=%c\n",i,ch);
else
printf("No founded\n");
}
输入一个英文字母 O 运行程序如下:
再次输入一个英文字母 w 运行程序如下:
4)首先输入一个大于二且小于十的整数 n,然后定义一个二维整型数组( n*n ), 初始化该数组,讲述组中最大元素所在的行和
最小元素所在的行对调。
要求:
① n*n 数组元素的值由 scanf 函数从键盘输入(假定最大值最小值不在同一行
上),然后输出该数组;
② 查找最大值最小值所在的行,将数组中最大元素所在的行和最小元素所在的行对调,并输出对调后的数组;
③ 为直观起见,数组按 n 行 n 列的方式输出;
④ 修改程序,对最大值与最小值可能出现在一行种的情况进行处理。
#include<stdio.h>
main()
{
long matrix[9][9],min,max,temp;
int i,j,n,nMax=0,nMin=0;
printf("\nplease inpute n of matrix:\n");
scanf("%d",&n);
printf("\nplease inpute elements of matrix(%d*%d):\n",n,n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%ld",&matrix[i][j]);
min=max=matrix[0][0];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(matrix[i][j]>max)
{
max=matrix[i][j];
nMax=i;
}
else if(matrix[i][j]<min)
{
min=matrix[i][j];
nMin=j;
}
}
for(j=0;j<n;j++)
{
temp=matrix[nMax][j];
matrix[nMax][j]=matrix[nMin][j];
matrix[nMin][j]=temp;
}
printf("\nResult matrix:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5ld",matrix[i][j]);
printf("\n");
}
}
输入一个数 4,输入一个 4*4 的数组
1 3 6 7
2 4 5 8
1 3 5 7
2 6 9 7
运行程序如下:
再次输入一个数字 3,输入一个 3*3 的数组
1 2 3
2 4 5
3 7 8
运行程序如下:
实验结论
通过本次实验 熟练的掌握一维数组、二维数组的定义、初始化和输入 /输出方法以及字符数组和字符串函数的使用,还有就是掌握与数组有关的常用算法
相关热词搜索: 数组 语言 实验 报告