当前位置:文档之家› c语言实验三实验报告

c语言实验三实验报告

C语言程序设计实验报告
实验三使用数组的程序设计
班级学号姓名
一、实验目的
(1)掌握一维数组和二维数组的定义、赋值和输入输出方法。

(2)掌握字符数组的使用。

(3)掌握与数组有关的算法。

二、实验内容及步骤
1、检验并打印幻方矩阵
在下面的5*5阶幻方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些幻方矩阵中的元素读到一个二维整型数组中,然后检验其是否为幻方矩阵,并将其按如下格式显示到屏幕上。

17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
程序代码:
#include <stdio.h>
int main()
{
int i,j,k=0;
int sum1[5]={0},sum2[5]={0},b[2]={0};
int
a[5][5]={{17,24,1,8,15},{23,5,7,14,16},{4,6,13,20,22},{10,12,19,21,3},{11,18,25, 2,9}};
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%4d",a[i][j]);
sum1[i]=sum1[i]+a[i][j];
sum2[i]=sum2[i]+a[j][i];
}
printf("\n");
}
for(i=0;i<5;i++)
{
b[0]=b[0]+a[i][i];
b[1]=b[1]+a[i][4-i];
}
for(i=0;i<5;i++)
{
if(sum1[i]==b[0]&&sum2[i]==b[0]&&b[0]==b[1])
k++;
}
if(k==5)
printf("这是一个幻方矩阵.\n");
else
printf("这不是一个幻方矩阵.\n");
return 0;
}
2、完成以下程序,并进行调试
某班期末考试科目为数学、英语和计算机,有最多不超过30人参加考试,考试后要求:1)计算每个学生的总分和平均分;
2)按总分成绩由高到低排出成绩的名次;
3)打印出名次表,表格内包括学生学号、各科分数、总分和平均分;
4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

【提示】:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。

程序代码:
#include <stdio.h>
int main()
{
int i,j,k,l,g,t,s,r,p;
int score[31][4],num[31],sum[31]={0},aver[31],m;
printf("请输入学生人数:\n");
scanf("%d",&k);
for(i=1;i<=k;i++)
{
printf("请输入学号和各科成绩:\n");//输入学号及成绩
scanf("%d",&num[i]);getchar();
for(j=1;j<4;j++)
{
scanf("%d",&score[i][j]);getchar();
sum[i]=sum[i]+score[i][j];
}
aver[i]=sum[i]/3;
}
for(j=1;j<k;j++)//排序
for(i=1;i<=k-j;i++)
{
if(sum[i]<sum[i+1])
{
for(l=1;l<4;l++)
{p=score[i][l];
score[i][l]=score[i+1][l];
score[i+1][l]=p;
}
t=sum[i];s=num[i];r=aver[i];
sum[i]=sum[i+1];
num[i]=num[i+1];
aver[i]=aver[i+1];
sum[i+1]=t;num[i+1]=s;aver[i+1]=r;
}
}
printf(" 学号英语高数计算机总分平均分\n");
for(i=1;i<k+1;i++)
printf("%4d%6d%6d%8d%6d%6d\n",num[i],score[i][1],score[i][2],score[i][3],sum [i],aver[i]);
for(j=1;j<k+1;j++)
{
printf("请输入你要查找的学号:");
scanf("%d",&m);
for(i=1;i<k+1;i++)
{
if(m==num[i])
{
printf("%4d,%4d\n",i,sum[i]);break;
}
}
}
return 0;
}
运行结果:
3.编写一个程序,利用字符数组实现两个字符串的比较。

(注意不能使用字符串比较函数strcmp())
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
int i,k,l,m=0,t;
char str1[100],str2[100];
printf("请输入你要比较的两个字符串,以空格隔开.\n");
scanf("%s%s",str1,str2);
k=strlen(str1);
l=strlen(str2);
t=k+1;
if(k>l)
t=l+1;
for(i=0;i<t;i++)
{
if(str1[i]==str2[i])
{
m++;
continue;
}
else if(str1[i]>str2[i])
{
printf("%d\n",str1[i]-str2[i]);
break;
}
else
{
printf("%d\n",str1[i]-str2[i]);
break;
}
}
if(m==t)
printf("%d\n",str1[i]-str2[i]);
return 0;
}
运行结果:
三、问题讨论
1、使用%s格式符输入字符串到数组时能否将空格符输入?如果不能该如何使用其它方法解
决?举例说明。

不能将空格输入。

可以利用多个%s的输出格式说明符。

例:#include <stdio.h>
int main()
{
char str1[10],str2[10],str3[10];
printf("请输入how are you\n");
scanf("%s%s%s",str1,str2,str3);
return 0;
}
运行结果:
2、数组在“定义”时和“引用”时所带的下标有何区别?
数组定义是的下标表示的是该数组所能容纳的数组元素个数;
数组引用时所带的下标表示引用元素所在的行和列。

因此,可以在定义数组时用“int a[5][5]={0};”为所有元素赋初值;语句“a[5][5]=0;”只能为a[5][5]这个元素赋初值.
四、实验心得
越来越觉得老师说的学习c语言的关键就是编程,编程,再编程的正确性和值得实践性。

虽然有些程序看起来思路通了,但却很难确保你在调试时一帆风顺。

我们需要的就是在不断的实践中,积累错误经验。

犯的错足够多了,也许就真正的有经验了。

能力不强,只可能是犯的错不够。

相关主题