资源描述
淮海工学院计算机科学系
实验报告书
课程名:《 C语言程序设计教程》
题 目: 实验六 数组——二维数组与字符串
班 级:
学 号:
姓 名:
评语:
成绩: 指导教师:
批阅时间: 年 月 日
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<stdio.h>
void main()
{
int a[3][4]={{2,3},{4,2},{1,2,3}};
int b[4][3]={{1,2,3},{2,3,4},{3,4,5}};
int c[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<stdio.h>
#include<string.h>
const int RS=3;
char name[RS][8];
int no[RS];
float degree[RS][40];
void input()
{
printf("输入数据:");
for(int i=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];
}
}
void sum()
{
float s1=0,s2=0,s3=0;
printf("统计各科总成绩\n");
for (int i=0;i<RS;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);
}
void query()
{
int sel,bh,i;
char xm[8];
printf("数据查询\n");
printf("1.姓名 2.学号 请选择:");
scanf("%d",&sel);
switch(sel)
{
case 1:printf("输入姓名:");
scanf("%s",&xm);
for(i=0;i<RS;i++)
if
(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;
case 2:printf("输入学号:");
scanf("%d",&bh);
for(i=0;i<RS;i++)
if(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");
}
}
void main()
{
input();
sum();
query();
}
法二.
#include<stdio.h>
void main()
{
int score[10],i;
float yx=0,lh=0,jg=0,bjg=0,aver=0;
int max=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)
{min=score[i];minn=i;}
aver+=score[i];
if(score[i]<60)bjg=bjg+1;
else if(score[i]<75)jg=jg+1;
else if(score[i]<90)lh=lh+1;
else yx=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<stdio.h>
void main()
{
int i,j,k,index;
char s1[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<stdio.h>
void main()
{
int a[3][4]={{2,3},{4,2},{1,2,3}};
int b[4][3]={{1,2,3},{2,3,4},{3,4,5}};
int k,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");
}
展开阅读全文