学 生 实 验 报 告
学院:软件与通信工程学院
课程名称:C 语言与程序设计
专业班级:
通信 121
姓名:
学号:
学生实验报告( 4)
学生姓名
学号
同组人
实验项目
函数
□必修 □选修
□演示性实验 □验证性实验
□操作性实验 □综合性实验
√
√
实验地点
M002
实验仪器台号
指导教师
实验日期及节次
周一 56 节课
一、实验综述
1、实验目的及要求
1.一维数组和二维数组的定义方法,以及其元素的访问形式
2.用字符数组来处理字符串及字符串处理函数
3.掌握数组处理中的有关排序和查找算法
2、实验仪器、设备或软件
计算机、 VC++6.0、office、相关的操作系统等。
二、实验过程(实验步骤、记录、数据、分析)
实验题目:
1 .用冒泡法将从控制台输入的10 个学生的成绩从高到低进行排序;
输入一个学生的成绩,插入到已排好序的学生成绩数组中去;最后将排
好序的成绩单进行反序存放。
(一)、程序如下:
#include
void order(int n,int a[])
{
int i,j,t;
- 2 -
for(i=0;i<=n-2;i++)
for(j=1;j<=n-i-1;j++)
if(a[j-1]>a[j]){t=a[j-1];a[j-1]=a[j];a[j]=t;}
}
void insert(int n,int a[])
{
order(n,a);
}
void main()
{
int a[11],i;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
order(10,a);
for(i=9;i>=0;i--)
printf("%2d ",a[i]);
putchar('\n');
printf("Enter a student's grade:");
scanf("%d",&a[10]);
insert(11,a);
for(i=0;i<=10;i++)
printf("%2d ",a[i]);
putchar('\n');
}
(二)、在 VC++ 中输入程序并编译它。如图:
- 3 -
程序没有错误
(三)、结论
1、实验结果 :
2、分析讨论:
1)此道实验题主要是让我们学会使用冒泡法将一组无序的数据按照一定的顺序(由小到大或有大到小)进行排列:先两个两个(邻近的两个数据)比较,使得每次最大的数总在前面或后面(或最小的数总在前面或后面),这样,经过 n*(n-1)/2 次的比较之后,所有的数据将会按照一定顺序排列。
- 4 -
2)本题中包含多个实验项目,但每个实验项目之间又有一定的联系。在已排好顺序的学生成绩中插入一个学生成绩并重新排序,可以考虑采用调用刚刚排序的函数,避免再次编写类似的程序。
3)此实验让我对数组最为函数参数有了更加深刻的了解。函数实参和形参变量的数据类型和形式必须相同。 作为函数实参的可以是数组元素或数组名,当作为函数实参的是数组名时,形参变量也必须是数组名,实际上,此时,实参与形参之间的值传递是将实参数组的起始地址(指针值)传递给形参变量。
(四)、指导教师评语及成绩:
编写程序,将两个字符串连接起来,不使用 strcat() 函数。
(一)、程序如下:
#include
void main()
{
char a[80],b[80];
int i=0,j=0;
gets(a);gets(b);
while(a[i]!='\0')
i++;
a[i]=' ';
while(b[j]!='\0')
a[++i]=b[j++];
a[++i]='\0';
puts(a);
}
(二)、在 VC++ 中输入程序并编译它。如图:
- 5 -
三、结论
1、实验结果:
2、分析讨论:
(1)本次实验使用了 puts 和 gets 函数来代替 printf 和 scanf 函数进行输出和输入, 带来了极大的方便。 puts 函数在进行字符数组输出时遇到‘ \0 ’才会停止输出,并且该函数在输出结束后自动回车换行,这一点有别于 printf 函数,却很方便; gets 函数在从标准输入设备输入字符时,遇到换行符才会停止输入,若用 scanf 函数,则碰到空格符
或者换行符就停止输入,对于本题,明显不符合题意,用 gets 函数则不会出现这样的情况。
(2)此外,由于puts 函数遇到‘ \0 ’才会停止输出(这是正常输
- 6 -
出)的特殊性,所以在连接时, 必须将第一个字符数组中的第一个‘\0 ’
修改为空格(或其他字符) ,并且连接完成后,必须加上一个‘\0 ’的
元素,否则会有输出错误。
(四)、指导教师评语及成绩:
3 、 (1) 求 3 ×3 矩阵的对角