C语言实验五实验报告数组Word下载.docx
《C语言实验五实验报告数组Word下载.docx》由会员分享,可在线阅读,更多相关《C语言实验五实验报告数组Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
12348111416
3591035910
81114161234
1527615276
(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(输入成绩):
6587685678<
cr>
8394678591<
7175698489<
Output(输出结果):
658768567870.5
839467859184.0
717569848977.5
219.0256.0204.0258.0232.00
average:
73.085.368.086.077.3
要求:
(1)数组类型为实型,输入成绩由scanf函数实现。
(2)输出已输入的原始成绩数据(3×
5)。
(3)计算每个学生的平均成绩以及单科的成绩总和并按要求填入到数组中,输出填入结果后的数组(4×
6)。
(4)j计算单科平均成绩后输出。
6.编写函数catStr(charstr1[],charstr2[])用于进行两个字符串的连接,编写函数lenStr()用于统计一个字符串的长度。
编写函数cmpStr()用于判断两个字符串的大小。
(1)不允许使用字符处理库函数。
(2)在主函数以初始化的方式输入两个字符串str1、str2。
调用函数lenStr()计算字符串的长度。
(3)调用函数cmpStr()判断两个字符串的大小,如果str1大于等于str2,调用函数catStr()进行两个字符串的连接,将str1连接在str2后,否则,将str2连接在str1后,调用函数lenStr()统计连接后的字符串长度。
(4)在主函数中输出两个原始字符串和各自的长度以及处理后字符串及其长度。
四、实验步骤
在编程软件中写如以下代码:
一、
#include<
stdio.h>
voidmain()
{
inta[10],i,j,k,max,min;
printf("
请输入10个数:
\n"
);
for(i=0;
i<
10;
++i)
scanf("
%d"
&
a[i]);
"
printf("
%d"
a[i]);
max=a[0];
/*初始化max和min*/
min=a[0];
{
if(a[i]>
=max)
max=a[i];
if(a[i]<
=min)
min=a[i];
/*找最大值和最小值*/
}
最大值为"
++i)/*应对有多个最值的情况*/
if(a[i]==max)
printf("
第%d个"
i+1);
数,%d\n"
max);
最小值为"
if(a[i]==min)
数,%d"
min);
}
修改为20个元素的方案:
将程序中所有的10改为20即可。
如果数组元素不断改变,只需将代码中的10改成元素个数即可。
二、
string.h>
intj,n;
chari;
charc[]={"
Iamastudent"
};
/*初始化字符串*/
给定字符串为:
%s\n请输入要查找的字符:
c);
scanf("
%c"
i);
n=strlen(c);
/*得到函数给定字符串的长度*/
for(j=0;
j<
n;
++j)
if((int)c[j]==(int)i)
{
字符串中满足条件的第一个字符为第%d个字符"
j+1);
break;
/*找到符合条件的第一个字符,结束循环*/
}
if(j>
=n)
字符串中不存在满足条件的字符!
三、
intn,j,k,z,x,max,min,a[10][10];
请输入一个2到10之间的数:
n);
请输入一个n*n数组:
for(k=0;
k<
++k)
scanf("
a[j][k]);
原始数组为:
n=%d\n"
n);
++j){
%5d"
a[j][k]);
/*输出原始数组*/
/*输出n个数后换行,使数组为n*n的格式*/}
max=a[0][0];
/*初始化最大值和最小值*/
min=a[0][0];
z=0;
x=0;
if(a[j][k]>
max)
{
max=a[j][k];
z=j;
/*得到最大值的行数*/
}
if(a[j][k]<
min)
min=a[j][k];
x=j;
/*得到最小值的行数*/
k=a[z][j];
a[z][j]=a[x][j];
a[x][j]=k;
/*交换最大值所在行和最小值所在行*/}
结果数据:
++j)/*输出结果*/{
修改程序得到最大值和最小值所在行,只需在程序末尾加上语句:
printf(“最大值在第%d行,最小值在第%d行”,z,x);
在输入数组元素时要注意尽量不要重复出现最大值和最小值,程序会以最值中第一个出现的值作为最值。
四、
inta[20];
intn,j,i,k;
给定的数组为:
for(n=0;
n<
20;
++n){
a[n]=2*n+3;
/*给定数组的初始化*/
a[n]);
请输入要查找的数:
j);
intm=20;
for(n=0;
=m;
)/*折半查找*/{
i=(n+m)/2;
if(a[i]<
j)
n=i+1;
elseif(a[i]>
m=i-1;
elseif(a[i]=j){
该数在数组的第%d位上"
}/*输出找到的数,结束循环*/}
if(n>
m)
无此数"
按要求修改后的程序为:
voidarr();
/*声明排序函数*/
intsea(intj);
/*声明折半查找函数*/
inta[20];
/*定义全局变量*/
intn,j,i,h;
请输入20个数据:
++n)
a[n]);
/*输入无序的20个数据*/
arr();
/*调用排序函数*/
\n请输入要查找的数:
h=sea(j);
/*调用折半查找函数*/
if(h==0)
else
该数在已排序数组的第%d位"
h);
voidarr()/*排序函数*/
intz,n;
for(intn=0;
for(intk=0;
19-n;
if(a[k]>
a[k+1])
z=a[k];
a[k]=a[k+1];
a[k+1]=z;
将数组排序,得:
/*输出已排序的数组*/
intsea(intj)
intn,i,h,m=20;
)
h=i+1;
}/*找到该数后停止循环*/
h=0;
returnh;
/*返回h值*/
五、
intj,k;
floata[3][5],d[3]={0},b[6]={0},c[5]={0};
3;
5;
%f"
d[j]=d[j]+a[j][k]/5;
for(k=0;
for(j=0;
b[k]=b[k]+a[j][k];
b[5]=b[5]+d[j];
c[k]=b[k]/3;
\nOutput(输出结果):
\n"
%-7.0f"
%-7.1f"
d[j]);
6;
b[k]);
\nAverage:
c[k]);
六、
voidcatStr(charstr1[],charstr2[]);
/*声明连接两个字符串的函数*/
intlenStr(charstr[]);
/*声明统计长度的函数*/
intcmpStr(charstr1[],charstr2[]);
/*声明比较字符串大小的函数*/
charstr3[]={"
intn,j,k,len1,len2,len3;
charc,str1[]={"
},str2[]={"
请输入str1:
gets(str1);
请输入str2:
gets(str2);
str1原长为:
%d\nstr2原长为:
%d\n"
lenStr(str1),lenStr(str2));
/*调用统计长度的函数并输出原始长度*/
j=cmpStr(str1,str2);
/*调用比较大小函数*/
if(j==1)/*将小字符串连接在大字符串后面*/{
\"
%s\"
大于\"
str1,str2);
catStr(str1,str2);
/*调用连接两个字符串的函数*/
合成的字符串为:
%s\n"
str3);
else{
小于\"
catStr(str2,str1);
合成的字符串长度为:
lenStr(str3));
/*输出合成字符串的长度*/
intlenStr(charstr[])/*统计字符串大小的函数*/
intn,j,k;
;
if(str[n]=='
\0'
){
returnn;
break;
intcmpStr(charstr1[],charstr2[])/*比较字符串大小的函数*/
intn;
str1[n]!
='
&
&
str2[n]!
if((int)str1[n]>
(int)str2[n]){
return1;
if((int)str1[n]<
return0;
}}
return1;
voidcatStr(charstr1[],charstr2[])/*将str2连在str1后面,将得到的新字符串存入str3*/
intn,j;
intlenStr(charstr[]);
lenStr(str1);
str3[n]=str1[n];
lenStr(str2);
str3[n+lenStr(str1)]=str2[n];
str3[lenStr(str1)+lenStr(str2)]='
/*结束字符串str3*/
五、思考题或实验感想
小结有关数组和字符串的程序设计方法:
首先要定义数组,必要时进行初始化。
然后要善于使用字符库函数,注意使用函数时不要重定义。
要注意数组的第一个下标是0。
数组和字符串的输入输出要善于利用for循环。
使用字符串库函数时要记得预处理。