C语言实验五实验报告——数组

时间:2024.4.14

一、 实验项目名称

数组

二、 实验目的

1.掌握数组的基本概念,包括:数组的定义、数组的类型、数组的初始化、数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/输出。

2.掌握字符数组与字符串的使用方法。理解字符数组与其它数组的区别、理解字符串及其特点。掌握常用的字符串处理库函数的用法并清楚对字符串的简单处理。

3.掌握与数组相关的算法,包括排序算法和查找算法等。

三、 实验内容

进行有关数组的程序设计。

具体内容:

1.编程实现:对任意一个一维数组,从中找出数组元素的最大值和最小值。 要求:

(1)数组为整型数组(10个元素)。

(2)使用scanf函数实现数组元素的输入。在输入前给出必要的提示。

(3)输出时给出必要的说明,首先输出原始的10个元素,换行后输出最大值以及最大值在数组中的位置、最小值以及最小值在数组中的位置。

(4)如果现改为20个元素的数组,怎样修改程序?修改程序后,运行程序进行检查。如果需要数组元素不断改变,应怎样修改程序?

2.编程实现:在给定的字符串中查找满足条件的第一个字符。

要求:

(1)字符串采用初始化的方式处理。

(2)通过scanf函数读入一个任意字符。

(3)在字符串中查找该字符,如果存在该字符,输出该字符在字符串中的位置以及相应的说明。如果不存在该字符,则要给出相应的信息。

3.编程实现:首先任意输入一个大于2且小于10的整数n,再输入一个由n决定的二维整型数组(n ? n),形成n ? n阶矩阵,将矩阵中最大元素所在的行和最小元素所在的行对调后,再输出该矩阵(注意:数组不允许动态定义)。

例如:原始数据: n=4 结果数据:

1 2 3 4 8 11 14 16

3 5 9 10 3 5 9 10

8 11 14 16 1 2 3 4

15 2 7 6 15 2 7 6

要求:

(1)本题中所涉及到的循环都采用for语句。

(2)在输入/输出时进行必要的说明。

(3)对输入的2~10之间的整数(例如4)以n=4的格式输出。

(4)输入一个n ? n矩阵(假定最大值与最小值不在同一行上),输出原始矩阵数据(按上述矩阵形式)。

(5)查找最大值与最小值,将矩阵中最大元素所在的行和最小元素所在的行对调,输出对调后的矩阵数据。

(6)修改程序,对最大值与最小值可能出现在一行上的情况做出说明。

(7)对n为3,4,5时,输入数组元素是要注意哪些问题?执行程序,检查程序的正确性。

4.编程实现“折半查找”的过程。折半查找的处理过程是:在一个数据已排好序的数组中,首先比较关键字与数组中间的元素,如果两者相等,则查找结束;如果前者比后者小,则要查找的数据必然在数组的前半部,此后只需在数组的前半部中继续折半查找;如果前者的数值比后者大,则要查找的数据必然在数组的后半部,此后只需在数组的后半部继续进行折半查找。

要求:

(1)设定一个数组存放20个数据,用赋初值的方法在程序中给出(假设这些数据已排序)。

(2)用scanf函数输入一个要找的数。

(3)对查找的结果给出相应的说明,如果找到该数,则给出该数是数组中第几个元素。如果该数不在数组中,则输出“无此数”信息。

(4)任意输入一些数据,检查程序的正确性。

(5)修改程序,设定输入的数据是无序的,采用scanf函数的形式输入,首先要对这些无序的数据进行排序,然后再采用“折半查找”。最后通过测试几组差别较大的数据检查程序的正确性。

(6)修改程序,改为函数调用的形式。编写一个选择法排序函数,对无序数据进行排序;编写一个查找函数对已排好序的数据进行查找。在主函数中输入数据(无序),调用上述函数,输出结果。

5.编程实现:三个学生、五门课程的成绩分别存放在4×6矩阵的前3×5列,计算出每个学生的平均成绩存放在该数组的最后一列的对应行上。计算单科的成绩总和存放在最后一行的对应列上,并输出单科成绩的平均分。输入/输出格式举例如下:

Input(输入成绩):

65 87 68 56 78<cr>

83 94 67 85 91<cr>

71 75 69 84 89<cr>

Output(输出结果) :

65 87 68 56 78 70.5

83 94 67 85 91 84.0

71 75 69 84 89 77.5

219.0 256.0 204.0 258.0 232.0 0

average:

73.0 85.3 68.0 86.0 77.3

要求:

(1)数组类型为实型,输入成绩由scanf函数实现。

(2)输出已输入的原始成绩数据(3×5)。

(3)计算每个学生的平均成绩以及单科的成绩总和并按要求填入到数组中,输出填入结果后的数组(4×6)。

(4)j计算单科平均成绩后输出。

6.编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr()用于统计一个字符串的长度。编写函数cmpStr()用于判断两个字符串的大小。

要求:

(1)不允许使用字符处理库函数。

(2)在主函数以初始化的方式输入两个字符串str1、str2。调用函数lenStr()计算字符串的长度。

(3)调用函数cmpStr()判断两个字符串的大小,如果str1大于等于str2,调用函数catStr()进行两个字符串的连接,将str1连接在str2后,否则,将str2连接在str1后,调用函数lenStr()统计连接后的字符串长度。

(4)在主函数中输出两个原始字符串和各自的长度以及处理后字符串及其长度。

四、 实验步骤

在编程软件中写如以下代码:

一、

#include <stdio.h>

void main()

{

int a[10],i,j,k,max,min;

printf("请输入10个数:\n");

for (i=0;i<10;++i)

scanf("%d",&a[i]);

printf("原始数据:");

for (i=0;i<10;++i)

printf("%d ",a[i]);

printf("\n");

max=a[0];/*初始化max和min*/

min=a[0];

for (i=0;i<10;++i)

{

if (a[i]>=max)

max=a[i];

if (a[i]<=min)

min=a[i];/*找最大值和最小值*/

}

printf("最大值为");

for (i=0;i<10;++i)/*应对有多个最值的情况*/

if (a[i]==max)

printf("第%d个",i+1);

printf("数,%d\n",max);

printf("最小值为");

for (i=0;i<10;++i)

if (a[i]==min)

printf("第%d个",i+1);

printf("数,%d",min);

}

修改为20个元素的方案:

将程序中所有的10改为20即可。如果数组元素不断改变,只需将代码中的10改成元素个数即可。

二、

#include <stdio.h>

#include <string.h>

void main()

{

int j,n;

char i;

char c[]={"I am a student"};/*初始化字符串*/

printf("给定字符串为:%s\n请输入要查找的字符:",c);

scanf("%c",&i);

n=strlen(c);/*得到函数给定字符串的长度*/

for (j=0;j<n;++j)

if ((int)c[j]==(int)i)

{

printf("字符串中满足条件的第一个字符为第%d个字符",j+1);break;/*找到符合条件的第一个字符,结束循环*/

}

if (j>=n)

printf("字符串中不存在满足条件的字符!");

}

三、

#include <stdio.h>

void main()

{

int n,j,k,z,x,max,min,a[10][10];

printf("请输入一个2到10之间的数:");

scanf("%d",&n);

printf("请输入一个n*n数组:\n");

for (j=0;j<n;++j)

for (k=0;k<n;++k)

scanf("%d",&a[j][k]);

printf("原始数组为:n=%d\n",n);

for (j=0;j<n;++j){

for (k=0;k<n;++k)

printf("%5d",a[j][k]);/*输出原始数组*/

printf("\n");/*输出n个数后换行,使数组为n*n的格式*/} max=a[0][0];/*初始化最大值和最小值*/

min=a[0][0];

z=0;x=0;

for (j=0;j<n;++j)

for (k=0;k<n;++k)

if (a[j][k]>max)

{

max=a[j][k];

z=j;/*得到最大值的行数*/

}

for (j=0;j<n;++j)

for (k=0;k<n;++k)

if (a[j][k]<min)

{

min=a[j][k];

x=j;/*得到最小值的行数*/

}

for (j=0;j<n;++j){

k=a[z][j];

a[z][j]=a[x][j];

a[x][j]=k;/*交换最大值所在行和最小值所在行*/} printf("结果数据:\n");

for (j=0;j<n;++j)/*输出结果*/{

for (k=0;k<n;++k)

printf("%5d",a[j][k]);

printf("\n");}

}

修改程序得到最大值和最小值所在行,只需在程序末尾加上语句:

printf(“最大值在第%d行,最小值在第%d行”,z,x);

在输入数组元素时要注意尽量不要重复出现最大值和最小值,程序会以最值中第一个出现的值作为最值。

四、

#include <stdio.h>

void main()

{

int a[20];

int n,j,i,k;

printf("给定的数组为:\n");

for(n=0;n<20;++n){

a[n]=2*n+3;/*给定数组的初始化*/

printf("%d ",a[n]);}

printf("\n");

printf("请输入要查找的数:");

scanf("%d",&j);

int m=20;

for (n=0;n<=m;)/*折半查找*/{

i=(n+m)/2;

if(a[i]<j)

n=i+1;

else if(a[i]>j)

m=i-1;

else if(a[i]=j){

printf("该数在数组的第%d位上",i+1);break;}/*输出找到的数,结束循环*/} if (n>m)

printf("无此数");

}

按要求修改后的程序为:

#include <stdio.h>

void arr();/*声明排序函数*/

int sea(int j);/*声明折半查找函数*/

int a[20];/*定义全局变量*/

void main()

{

int n,j,i,h;

printf("请输入20个数据:\n");

for(n=0;n<20;++n)

{

scanf("%d",&a[n]);/*输入无序的20个数据*/ }

arr();/*调用排序函数*/

printf("\n请输入要查找的数:");

scanf("%d",&j);

h=sea(j);/*调用折半查找函数*/

if(h==0)

printf("无此数");

else

printf("该数在已排序数组的第%d位",h); }

void arr()/*排序函数*/

{

int z,n;

for (int n=0;n<20;++n)

for (int k=0;k<19-n;++k)

if (a[k]>a[k+1])

{

z=a[k];

a[k]=a[k+1];

a[k+1]=z;

}

printf("将数组排序,得:\n");

for (n=0;n<20;++n)

printf("%d ",a[n]);/*输出已排序的数组*/ }

int sea(int j)

{

int n,i,h,m=20;

for (n=0;n<=m;)

{

i=(n+m)/2;

if(a[i]<j)

n=i+1;

else if(a[i]>j)

m=i-1;

else if(a[i]=j){

h=i+1;break;}/*找到该数后停止循环*/ }

if (n>m)

h=0;

return h;/*返回h值*/

}

五、

#include <stdio.h>

void main()

{

int j,k;

float a[3][5],d[3]={0},b[6]={0},c[5]={0}; printf("Input(输入成绩):\n"); for (j=0;j<3;++j)

for (k=0;k<5;++k)

scanf("%f",&a[j][k]);

for (j=0;j<3;++j)

for (k=0;k<5;++k)

d[j]=d[j]+a[j][k]/5;

for (k=0;k<5;++k)

for (j=0;j<3;++j)

b[k]=b[k]+a[j][k];

for (j=0;j<3;++j)

b[5]=b[5]+d[j];

for (k=0;k<5;++k)

c[k]=b[k]/3;

printf("\nOutput(输出结果):"); for (j=0;j<3;++j){

printf("\n ");

for (k=0;k<5;++k)

printf("%-7.0f",a[j][k]); printf("%-7.1f",d[j]);}

printf("\n ");

for (k=0;k<6;++k)

printf("%-7.1f",b[k]);

printf("\nAverage:\n ");

for (k=0;k<5;++k)

printf("%-7.1f",c[k]);

}

六、

#include <stdio.h>

void catStr(char str1[],char str2[]);/*声明连接两个字符串的函数*/

int lenStr(char str[]);/*声明统计长度的函数*/

int cmpStr(char str1[],char str2[]);/*声明比较字符串大小的函数*/

char str3[]={""};

void main()

{

int n,j,k,len1,len2,len3;

char c,str1[]={""},str2[]={""};

printf("请输入str1:");

gets(str1);

printf("请输入str2:");

gets(str2);

printf("str1原长为:%d\nstr2原长为:%d\n",lenStr(str1),lenStr(str2));/*调用统计长度的函数并输出原始长度*/

j=cmpStr(str1,str2);/*调用比较大小函数*/

if (j==1)/*将小字符串连接在大字符串后面*/{

printf("\"%s\"大于\"%s\"\n",str1,str2); catStr(str1,str2);/*调用连接两个字符串的函数*/

printf("合成的字符串为:%s\n",str3);}

else{

printf("\"%s\"小于\"%s\"\n",str1,str2);

catStr(str2,str1);

printf("合成的字符串为:%s\n",str3);}

printf("合成的字符串长度为:%d",lenStr(str3));/*输出合成字符串的长度*/ }

int lenStr(char str[])/*统计字符串大小的函数*/

{

int n,j,k;

for (n=0;;++n)

if (str[n]=='\0'){

return n;

break;}

}

int cmpStr(char str1[],char str2[])/*比较字符串大小的函数*/

{

int n;

for (n=0;str1[n]!='\0' && str2[n]!='\0';++n){

if ((int)str1[n]>(int)str2[n]){

return 1;

break;}

if ((int)str1[n]<(int)str2[n]){

return 0;

break;}}

return 1;

}

void catStr(char str1[],char str2[])/*将str2连在str1后面,将得到的新字符串存入str3*/ {

int n,j;

int lenStr(char str[]);

for (n=0;n<lenStr(str1);++n)

str3[n]=str1[n];

for (n=0;n<lenStr(str2);++n)

str3[n+lenStr(str1)]=str2[n];

str3[lenStr(str1)+lenStr(str2)]='\0';/*结束字符串str3*/

}

五、 思考题或实验感想

小结有关数组和字符串的程序设计方法:

首先要定义数组,必要时进行初始化。然后要善于使用字符库函数,注意使用函数时不要重定义。要注意数组的第一个下标是0。数组和字符串的输入输出要善于利用for循环。使用字符串库函数时要记得预处理。

更多相关推荐:
C语言数组实验报告

C语言数组实验报告,内容附图。

C语言实验报告 数组

学生实验报告学院软件与通信工程学院课程名称C语言与程序设计专业班级通信121姓名学号学生实验报告4一实验综述1实验目的及要求1一维数组和二维数组的定义方法以及其元素的访问形式2用字符数组来处理字符串及字符串处理...

C语言数组实验报告

北京联合大学信息学院程序设计基础课程调研研究报告题目姓名学号专业计算机科学与技术编制时间20xx528版本指导教师北京联合大学信息学院编制数组实验程序设计报告20xx年5月28日班号姓名学号第一章实验情况概述本...

C语言试验报告-数组函数实验

学生实验报告实验课名称数组函数综合实验实验项目名称数组函数综合实验专业名称测控技术与仪器班学级20xx240801号20xx24080126学生姓名黄小龙教师姓名武雅丽月实验日期20xx年4月27日实验室名称数...

C语言程序设计实验报告(数组)

C语言程序设计实验报告数组1实验目的1熟练掌握一维数组二维数组的定义初始化和输入输出方法2熟练掌握字符数组和字符串函数的使用3掌握与数组有关的常用算法查找排序等2实验内容编写函数catStrcharstr1ch...

C语言实验报告数组

高级语言程序设计实验报告实验序号4实验项目名称数组题目3题目5附加2

C语言实验报告数组

实验报告实验课程名称高级C语言程序设计实验项目名称数组年级09级专业数学学生姓名李军学号0907010170理学院实验时间20xx年4月22日学生实验室守则一按教学安排准时到实验室上实验课不得迟到早退和旷课二进...

C语言报告之数组

一实验内容1输入一组实数按要求录入数组arr中采用选择法对其排序任意输入一数直接在arr数组中将其按顺序插入相应位置不许使用其他数组来完成includeltstdiohgtincludeltstdlibhgtd...

C语言实验报告本(数组函数)

C语言程序设计实验报告20xx20xx学年第二学期专业班级姓名学号任课教师计算机教学实验中心20xx年5月C语言程序设计实验报告1学号姓名班级成绩任课教师签名C语言程序设计实验报告2学号姓名班级成绩任课教师签名

C语言解八数码问题之人工智能实验报告

人工智能导论上机实验指导书基于人工智能的状态空间搜索策略研究八数码问题求解一实验软件TC20或VC60编程语言或其它编程语言二实验目的1熟悉人工智能系统中的问题求解过程2熟悉状态空间的盲目搜索和启发式搜索算法的...

C语言实验报告之利用数组进行程序设计

一实验的目的1掌握一维数组与二维数组的定义赋值和输入输出的方法2掌握字符数组和字符串函数的使用3掌握与数组有关的算法特别是排序算法二要求及内容本实验主要完成一维数组二维数组以及字符数组的应用总共要求完成四个问题...

C语言程序设计(B)_C数组程序设计_20xx_实验报告模板

C语言程序设计实验报告C数组程序设计10003809195j班级机13011学号20xx0750姓名陈伟一实验目的掌握一维二维数组的定义和使用方法掌握字符串的定义和处理方法熟悉并掌握应用数组解决实际应用问题二实...

c语言数组实验报告(37篇)