C语言实验报告 数组
实验七数组
1.实验目得
(1)熟练掌握一维数组、二维数组得定义、初始化与输入/输出方法;
(2)熟练掌握字符数组与字符串函数得使用;
(3)掌握与数组有关得常用算法(如查找、排序等).
2.实验指导
(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 maximum value is%d,and the minimum value i s%d\n",max,min);
}
运行程序,输入十个整数,如:
21 37 6 17 9 12 89 76 35 59
运行结果如下:
(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];
returndiff;
}
void main()
{
?int z;
char s1[100],s2[100];
printf("input the first string:");
?//输入字符串1
?gets (s1);
?printf(”input the secondstring:”);
?//输入字符串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()
{
inti;
?charch;
?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
main()
{
?long matrix[9][9],min,max,temp;
?int i,j,n,nMax=0,nMin=0;
printf("\nplease inputen of matrix:\n");
?scanf("%d",&n);
printf("\npleaseinpute elementsof matrix(%d*%d):\n”,n,n);
for(i=0;i<n;i++)
for(j=0;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 { ?temp=matrix[nMax][j]; ??matrix[nMax][j]=matrix[nMin][j]; matrix[nMin][j]=temp; } ?printf(”\nResult matrix:\n”); ?for(i=0;i { ?for(j=0;j ?printf(”%5ld",matrix[i][j]); printf("\n"); ?} } 输入一个数4,输入一个4*4得数组 1 3 67 2458 13 5 7 2 6 9 7 运行程序如下: 再次输入一个数字3,输入一个3*3得数组12 3 24 5 37 8 运行程序如下: 3 实验结论 通过本次实验熟练得掌握一维数组、二维数组得定义、初始化与输入/输出方法以及字符数组与字符串函数得使用,还有就就是掌握与数组有关得常用算法