C语言实验报告模板

更新时间:2024-01-02 21:28:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C程序设计实验报告

班级 一班 姓名 赵东珠 日期 2014年10月7日星期二 同组人 薛莲 指导教师 刘宝超 评分

一、实验名称:数组应用程序设计实验 二、实验内容(问题描述)

1) 改正下列程序的错误,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值,保留1位小数。 #include void mian( ) {

int a[10], av;/* av表示平均值*/ for(i=1; i<=10; i++) scanf(\; for(i=1; i<=10; i++) {

av = av + a[i]; printf(\;

if(i%3==0) printf(\; }

printf(\; }

2) 已有一个已排好序的数组(如{5,12,22,34,45,55,67,78,89,98}),要求输入一个数后,按原来排序的规律将它插入到该数组中,并用二分法查找新插入的数所在位置(下标)。假设:所有的数都互不相同。

3) 按数组初始化方法设置5名学生6门课程成绩(0~100),输出:

(1) 每个学生的平均成绩

(2) 【选作】每门课程的平均成绩

(3) 平均成绩最高的学生序号(有多个最高成绩时,只需输出一个,下同) (4) 【选作】平均成绩最高的课程序号

(5) 【选作】每门课的不及格率(不及格学生数比例) (6) 每个学生各门课成绩升序排序的结果

(7) 【选作】每个学生各课成绩中去掉一个最高分和最低分后的平均成绩

需解决的主要问题: 1)【实验内容1:计算平均值】

1.1) 数组元素的初始化 1.2) 确定数组下标的下限和上限,避免下标溢出 1.3) 平均值如何转换为实型数 2)【实验内容2:插入】 4.1) 插入点的确定

4.2) 插入点之后的数组元素的移动 4.3) 二分查找(一定会成功)

3)【实验内容3:二维数组数据处理】

3.1) 定义数组并初始化 3.2) 求二维数组行平均和列平均 3.3) 最大(最小)值及其序号的调整 3.4) 求二维数组中小于60的元素个数统计 3.5) 数据类型(成绩、平均成绩) 3.6) 问题(6)-(7)的程序框架:

/* N行M列int型二维数组s存放成绩,N:学生人数,M:课程门数 */

/* 长度为N的一位数组avgs存放每个学生各课成绩中去掉一个最高分和最低分后的平均成绩*/

for (i=0; i

/* 求s[i][1]~s[i][M-2]的平均值,存放到avgs[i]中 */

}

/* 输出 */

for (i=0; i

for (j=0; j

三、主要思路(分析过程、算法) 1)实验一:

Step1 :改为 ; Step2 :mian( )改为main( ) ; Step3 :int a[10], av;应改为 int a[10];

float av=0; ;

Step4 :for(i=1; i<=10; i++)应改为for(i=0; i<10; i++) ; Step5 :scanf(\;应改为scanf(\; ; Step6 :if(i%3==0)应改为if(i%3==2) ;

Step7 :printf(\应改为printf(\ ; 2)实验二:

Step1 :输入的这个数插入数组时有三种情况,分别为:①该数小于数组中任何一 个数,插入最前面②该数大于数组中任何一个数,插入最后面③该数介于 数组中相邻两个数之间,插入中间 ;

Step2 :先定义一个新的数组a[11],定义变量i,num,k,j,m。i表示数组下标, num表示输入的一个数,k表示数组下标,j表示数组下标。 Step3 :输出数组a[10]中的数据即a[11]中的前十个数据 ; Step4 :输入一个数num ;

Step5 :针对输入一个数的第一种情况,将该数插入最前面,同时数组中原来的数 全部向后移一位。执行如下循环: for(i=9;i>=0;i--) {

a[i+1]=a[i]; }

a[0]=num;

Step6 :针对输入一个数的第二种情况,将该数插入最后面,其他数不变。即直接 执行 a[N]=num;

Step7 :针对第三种情况,利用for(j=0;j

if(a[j]

break; } } 找到插入该数字的位置。

Step8 :将插入该数字后后面的数字向后挪一位。 Step9 :插入该数字a[j+1]=num

Step10:利用循环输出该数组for(i=0;i

printf(\ printf(\ }

Step11:用二分法查找下标位置先定义变量并初始化 left=0; right=N;

Step12:二分法: while(left<=right) {

m=(left+right)/2; if(a[m]

left=m;

}else if(a[m]>num) {

right=m; } else {

printf(\的位置是%d\\n\ break; }

Step13:考虑到不合法的问题if(left>right) {

m=-1;

printf(\ }

2)实验三:

Step1:首先定义变量i,j,sum,max_i,max_jave,max;定义数组stu_ave_array[5] C_ave_array[6];数组初始化

inta[5][6]={{50,60,70,80,90,95},{68,70,80,90,85,90},{70,80,60,80,90,95},{50,

80,70,48,98,67},{80,80,90,70,68,78}}; Step2:利用循环 for(i=0;i<5;i++) {

printf(\ for(j=0;j<6;j++)

printf(\ printf(\ }

输出如图所示数组。

Step3:求每名学生的平均成绩 for(i=0;i<5;i++) {

sum=0;

for(j=0;j<6;j++) {

sum=sum+a[i][j]; }

ave=(float)sum/6; stu_ave_array[i]=ave; Step4:求每门课程的平均成绩 for(j=0;j<6;j++) {

sum=0;

for(i=0;i<5;i++) {

sum=sum+a[i][j]; }

ave=(float)sum/5; C_ave_array[j]=ave; Step5:求平均成绩最高的学生序号 max=stu_ave_array[0]; max_i=0;

for(i=0;i<5;i++) {

if(stu_ave_array[i]>max) {

max=stu_ave_array[i]; max_i=i; } }

Step6:求平均成绩最高的课程序号 max=C_ave_array[0]; max_j=0;

for(j=0;j<6;j++) {

if(C_ave_array[j]>max) {

max=C_ave_array[j]; max_j=j; }

Step7:求每门课程的不及格率 for(j=0;j<6;j++) {

count=0;

for(i=0;i<5;i++) {

if(a[i][j]<60) count++; }

unpass[j]=(float)count/5*100; }

Step8:求每名学生各门成绩升序的结果 for(i=0;i<5;i++) {

for(j=0;j<6;j++) {

for(k=j+1,mi=j;k<6;k++) {

if(a[i][k]

temp=a[i][mi]; a[i][mi]=a[i][k]; a[i][k]=temp; } } } }

Step9:输出升序结果

for(i=0;i<5;i++) {

printf(\ for(j=0;j<6;j++) {

printf(\ }

printf(\ }

Step10:求每名学生去掉最低和最高成绩的平均成绩 for(i=0;i<5;i++) {

printf(\去掉最低成绩%d,去掉最高成绩%d\\n\ sum=0;

for(j=1;j<5;j++) {

sum=a[i][j]+sum; }

ave=(float)sum/4;

printf(\ }

四、核心代码(关键程序段)

2)实验二:

int a[N+1]={5,12,22,34,45,55,67,78,89,98}; int i,num,j,k,m; int right,left; for(i=0;i

printf(\ }

printf(\

printf(\ scanf(\ //printf(\ if(num

for(i=N-1;i>=0;i--) {

a[i+1]=a[i]; }

a[0]=num;

}else if(num>a[9]) {

a[N]=num; } else {

for(j=0;j

if(a[j]

break; } }

for(k=N-1;k>=j+1;k--) {

a[k+1]=a[k]; }

a[j+1]=num; }

for(i=0;i

printf(\ printf(\ }

left=0; right=N;

while(left<=right) {

m=(left+right)/2; if(a[m]

left=m;

}else if(a[m]>num) {

right=m; } else {

printf(\的位置是%d\\n\ break; }

if(left>right) {

m=-1;

printf(\ } }

3)实验三:

int i,j,sum,max_i,max_j; float ave,max;

float stu_ave_array[5]; float C_ave_array[6];

inta[5][6]={{50,60,70,80,90,95},{68,70,80,90,85,90},{70,80,60,80,90,95},{50,80,70,48,98,67},{80,80,90,70,68,78}};

printf(\ C1 C2 C3 C4 C5 C6\\n\ printf(\ for(i=0;i<5;i++) {

printf(\

for(j=0;j<6;j++) printf(\ printf(\ }

printf(\

printf(\每名学生的平均成绩:\\n\ printf(\ for(i=0;i<5;i++) { sum=0;

for(j=0;j<6;j++) {

sum=sum+a[i][j]; }

ave=(float)sum/6; stu_ave_array[i]=ave;

printf(\ }

printf(\

printf(\每门课程的平均成绩:\\n\ printf(\ for(j=0;j<6;j++) {

sum=0;

for(i=0;i<5;i++) {

sum=sum+a[i][j]; }

ave=(float)sum/5; C_ave_array[j]=ave;

printf(\ }

printf(\

printf(\平均成绩最高的学生序号:\\n\ printf(\ max=stu_ave_array[0]; max_i=0;

for(i=0;i<5;i++) {

if(stu_ave_array[i]>max) { max=stu_ave_array[i]; max_i=i; }

}

printf(\平均成绩最高为%.1f,学生序号为%d\\n\ printf(\

printf(\平均成绩最高的课程序号:\\n\ printf(\ max=C_ave_array[0]; max_j=0;

for(j=0;j<6;j++) {

if(C_ave_array[j]>max) { max=C_ave_array[j]; max_j=j; }

// printf(\ }

printf(\课程平均成绩最高为%.1f,课程序号为C%d\\n\ */

//******************(5)

printf(\

printf(\每门课程的不及格率:\\n\ printf(\ printf(\ C2 C3 C4 C5 C6\\n\ for(j=0;j<6;j++) {

count=0;

for(i=0;i<5;i++) {

if(a[i][j]<60) count++; }

unpass[j]=(float)count/5*100; }

for(j=0;j<6;j++)

printf(\ printf(\

//*******************(6) printf(\

printf(\每名学生各门成绩升序的结果:\\n\ printf(\

本文来源:https://www.bwwdw.com/article/1lxx.html

Top