实验六 数组二维数组与字符串.docx
《实验六 数组二维数组与字符串.docx》由会员分享,可在线阅读,更多相关《实验六 数组二维数组与字符串.docx(11页珍藏版)》请在冰豆网上搜索。
实验六数组二维数组与字符串
淮海工学院计算机科学系
实验报告书
课程名:
《C语言程序设计教程》
题目:
实验六数组——二维数组与字符串
班级:
学号:
姓名:
1、实验内容或题目
(1)编写一个程序,计算一个3×4阶矩阵和一个4×3阶矩阵相乘,并打印出结果。
(使用两个二维数组a和b存储两个3×4阶矩阵的元素值,然后用三重for循环进行相乘求值产生二维数组c,最后输出c的各元素值。
)
(2)已知某班10个学生的姓名、学号,以及英语、程序设计、数学三门课的成绩,编写一个程序,完成下列工作:
·全班每个学生姓名、学号和三门课成绩的输入及总分计算。
·统计各科的总成绩。
·当给出学生姓名或学号时,检索出该生每门功课的成绩及总成绩。
【解】定义一维数组no存储学生学号,二维数组name存储学生姓名,二维数组degree存储学生三门课成绩及总分。
(3)编写一个程序,判定一个字符串是否是另一个字符串的子串。
2、实验目的与要求
1、目的:
(1)进一步学习程序设计的方法和步骤;
(2)掌握循环结构程序设计与数组的结合;
3、实验步骤与源程序
实验步骤
1.建立工程,添加C++源文件,编写程序。
2.调试修改语法错误。
3.编译,链接生成可执行程序。
4.运行程序,检查试验结果。
源代码
(一)#include
voidmain()
{
inta[3][4]={{2,3},{4,2},{1,2,3}};
intb[4][3]={{1,2,3},{2,3,4},{3,4,5}};
intc[3][3],i,j,k,s;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
s=0;
for(k=s=0;k<4;k++)
s+=a[i][k]*b[k][j];
c[i][j]=s;
}
for(j=0;j<3;j++)
printf("%4d",c[i][j]);
printf("\n");
}
(二)法一.
#include
#include
constintRS=3;
charname[RS][8];
intno[RS];
floatdegree[RS][40];
voidinput()
{
printf("输入数据:
");
for(inti=1;i<=RS;i++)
{
printf("第%d个学生\n",i);
printf("姓名:
");
scanf("%s",&name[i-1]);
printf("学号");
scanf("%d",&no[i-1]);
printf("英语成绩:
");
scanf("%f",°ree[i-1][0]);
printf("程序设计成绩:
");
scanf("%f",°ree[i-1][1]);
printf("数学成绩:
");
scanf("%f",°ree[i-1][2]);
degree[i-1][3]=degree[i-1][0]+degree[i-1][1]+degree[i-1][2];
}
}
voidsum()
{
floats1=0,s2=0,s3=0;
printf("统计各科总成绩\n");
for(inti=0;i{
s1+=degree[i][0];
s2+=degree[i][1];
s3+=degree[i][2];
}
printf("英语总成绩:
%g\n",s1);
printf("程序设计总成绩:
%g\n",s2);
printf("数学总成绩:
%g\n",s3);
}
voidquery()
{
intsel,bh,i;
charxm[8];
printf("数据查询\n");
printf("1.姓名2.学号请选择:
");
scanf("%d",&sel);
switch(sel)
{
case1:
printf("输入姓名:
");
scanf("%s",&xm);
for(i=0;iif
(strcmp(xm,name[i])==0)
{
printf("姓名:
%s\n",xm);
printf("学号:
%d\n",no[i]);
printf("英语成绩:
%g\n",degree[i][0]);
printf("程序设计成绩:
%g\n",degree[i][1]);
printf("数学成绩:
%g\n",degree[i][2]);
printf("总成绩:
%g\n",degree[i][3]);
}
break;
case2:
printf("输入学号:
");
scanf("%d",&bh);
for(i=0;iif(bh==no[i])
{
printf("姓名:
%s\n",xm);
printf("学号:
%d\n",no[i]);
printf("英语成绩:
%g\n",degree[i][0]);
printf("程序设计成绩:
%g\n",degree[i][1]);
printf("数学成绩:
%g\n",degree[i][2]);
printf("总成绩:
%g\n",degree[i][3]);
}
break;
default:
printf("无此选项!
\n");
}
}
voidmain()
{
input();
sum();
query();
}
法二.
#include
voidmain()
{
intscore[10],i;
floatyx=0,lh=0,jg=0,bjg=0,aver=0;
intmax=0,min=0,maxn,minn;
printf("请输入10位学生的成绩:
");
for(i=0;i<=9;i++)
{
scanf("%d",&score[i]);
}
for(i=0;i<=9;i++)
{
if(score[i]>max)
{max=score[i];maxn=i;}
if(score[i]{min=score[i];minn=i;}
aver+=score[i];
if(score[i]<60)bjg=bjg+1;
elseif(score[i]<75)jg=jg+1;
elseif(score[i]<90)lh=lh+1;
elseyx=yx+1;
}
aver/=10;
printf("最高分者:
%d\n",score[maxn]);
printf("最低分者:
%d\n",score[minn]);
printf("平均分为%.2\n",aver);
printf("优秀%.0f人,占比为%.0f%%\n",yx,yx*10);
printf("良好%.0f人,占比为%.0f%%\n",lh,lh*10);
printf("及格%.0f人,占比为%.0f%%\n",jg,jg*10);
printf("不及格%.0f人,占比为%.0f%%\n",bjg,bjg*10);
}
(三)
#include
voidmain()
{
inti,j,k,index;
chars1[20],s2[20];
printf("主字符串:
");
gets(s1);
printf("子字符串:
");
gets(s2);
index=0;
for(i=0;s1[i];i++)
{
for(j=i,k=0;s1[j]==s2[k];k++)
if(!
s2[k+1])
{
index=i;
break;
}
if(index!
=0)
break;
}
printf("位置=%d\n",index);
}
4、测试数据与实验结果(可以抓图粘贴)
5、结果分析与实验体会
感觉这次报告比较难,敲代码的时候感觉自己什么都不会了,看到给出的参考都有些崩溃了,前几次还觉得懂了,这次有感觉回到了初学时期,看来以后要多多努力,现在学到的还只是基础,以后学难的要更加下功夫了。
#include
voidmain()
{
inta[3][4]={{2,3},{4,2},{1,2,3}};
intb[4][3]={{1,2,3},{2,3,4},{3,4,5}};
intk,i,j,c[3][3],s=0;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
{for(k=0;k<=3;k++)
s+=a[i][k]*b[k][j];
printf("%d",s);
c[i][j]=s;
}
for(j=0;j<=2;j++)
printf("%4d",c[i][j]);
printf("\n");
}