昆明理工大学
《程序设计基础》课程
综合设计实践教学课题报告
课程名称: C语言程序设计
课题名称: 排序求平均值
学号: 姓名:
学院: 专业班级:
指导教师:
昆明理工大学计算中心
20##年 月 日
填写格式及说明
1、 系统概述
随着数据库技术的兴起,数据的采集,记录,排序,筛选的等工作变得简单,方便。但是对于一些容量较小,需要频繁存贮调用的数据。用制作数据库的方法来解决问题显然是非常麻烦的。本程序,通过简单的数据调用,排序,输出环节。完成了对学生成绩的录入,排序,查询的学校成绩记录的日常需要。
2、数据结构设计
定义以下数据结构,似的aa数组存放长度为100的成绩信息,bb数组存放长度为100的学号信息。
#define MAXLEN 100
int aa[MAXLEN];
int bb[MAXLEN];
3、模块设计
模块声明部分,分别声明四个模块作为读取学号信息;成绩信息;对信息进行排序整理;对排序好的数据进行输出。
void ReadDat(int arr[], int nlen);
void RandNum(int arr[], int nlen);
void jsSort(int arr[], int nlen);
void WriteDat();
数据长度定义部分,分别将模块中需要涉及到的数据长度均设置为100
ReadDat(aa, MAXLEN);
jsSort(aa, MAXLEN);
RandNum(bb, MAXLEN);
WriteDat();
分数数据的产生和读取模块,利用简单的循环结构实现数据的重复产生,再利用随机数函数随机产生0~100间的数字
void ReadDat(int arr[], int nlen)
{
int i;
srand( (unsigned)time( NULL ) );
for (i=0; i<nlen; i++)
{
arr[i] = rand() % 100;
}
}
以同样的方法在1~1000间产生随机数作为学号
void RandNum(int arr[], int nlen)
{
int i;
srand( (unsigned)time( NULL ) );
for (i=0; i<nlen; i++)
{
arr[i] = rand() % 1000;
}
}
利用sjSort对上述产生数据进行排序
void jsSort(int arr[], int nlen)
{
int i,j;
for (i=0; i<nlen; i++)
for (j=0; j<nlen - i; j++)
{
if (arr[j] < arr[j+1])
{
int nTemp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = nTemp;
}
}
}
利用前面定义好的输出函数,对排序好的数据进行输出,加上简单的限次循环实现逐一输出。
void WriteDat()
{
int i;
printf("学号: 成绩:\n");
for (i=0; i<MAXLEN; i++)
{
printf(" %5d %d \n", bb[i], aa[i]);
}
}
4.调试运行及操作说明
调试过程截图如下
5、总结和体会
通过这学期对C语言这么课程的学习,我认识到了学习一门计算机语言的实用性和重要性,在平常的生活中,计算机语言离我们很远,由于计算机技术的快速发展,使得我们平时使用的环境都是高度面向对象的,也是经过高度集成和预处理过的。这使得我在没有学习这门课之前,对计算机的印象相比较学习过后是模糊而片面的。通过这一学期的学习,我不仅掌握了C语言,这门计算机的基础构建语言,同时学到的更多是一种分析问题,解决问题的逻辑思路。由本溯源,由表及里的思考方式贯穿了我这学期的学习。学过C语言,我不仅对计算机有了更加本质深刻的了解。同时这将对我以后看待问题,解决问题的方式方法产生积极的影响。希望在今后的学习过程中,我能将在这门课中所学到的技术方面的知识加以应用到日常生活中,也希望在这门课中学到的那些具有人文关怀的世界观,方法论能指导我今后的人生,走的更加多姿多彩。
第二篇:C语言综合试验设计报告
C语言综合试验设计报告
题目:对学生期末考试成绩的数据处理
学院:电气与电子工程学院
专业:测控技术与仪器专业
班级:100311班
姓名:杨威
一 设计题目:
对学生期末考试成绩的处理
二 题目阐述与设计思路:
使用函数input()输入学生的相关信息包括学号,姓名,数学,英语和物理的成绩。print()用于输出学生的相关信息包括学号,姓名,各科成绩,总成绩,平均成绩,获得奖励情况以及补考情况。使用F1()函数求总成绩,平均成绩,以及对成绩的下标排序。使用F2()函数用于判断学生的获奖情况,共A,B,C三等。使用F3()用于判断学生的补考情况。使用sort()函数按分数段查找学生的相关信息。定义一个结构体数组包含学生的相关信息,由于结构体数组无法进行地址传递,定义一个指针数组进行在相关函数间的信息传递。
三 主要知识点:
C语言宏定义,选择结构,循环结构,数组,结构体数组,指针数组,函数调用,系统函数调用,子函数。
四 程序清单:
#include "string.h"
#define N 40
struct person
{
int n;
long num;
char name[10];
int MT,EN,PH;
int sum;
float ave;
char win;
char b[20];
};
void input (long num[], char name[][10], int ss[][3], int n)
{
int i;
for(i=0;i<n;i++)
{
printf("please enter NO%d. students' data:num\tname\tMT,EN,PH\n",i+1); scanf("%ld",&num[i]);
scanf("%s",name[i]);
scanf("%d,%d,%d",&ss[i][0],&ss[i][1],&ss[i][2]);
}
}
F1 (int ss[][3],int sum[],int ave[],int n,int sss[])
{
int i,j,k;
int ssss[N];
for(i=0;i<n;i++)
{
sum[i]=ss[i][0]+ss[i][1]+ss[i][2];
ave[i]=(float)sum[i]/3;
}
for(i=0;i<n;i++)
ssss[i]=sum[i];
for(i=0;i<n;i++)
{
for(j=0,k=i;j<n;j++)
if(ssss[i]<ssss[j])
k=j;
sss[i]=k;
ssss[k]=0;
}
}
F2 (struct person *s[],int n)
{
int i;
for(i=0;i<n;i++)
switch(i)
{
case 0:
case 1:s[i]->win='A';break;
case 2:
case 3:s[i]->win='B';break;
case 4:
case 5:s[i]->win='C';break;
}
}
F3(struct person *s[],int n)
{
char c1[]=" MT",c2[]=" EN",c3[]=" PH";
int i;
for(i=0;i<n;i++)
{
if(s[i]->MT<60)
strcat(&s[i]->b[20],c1);
if(s[i]->EN<60)
strcat(&s[i]->b[20],c2);
if(s[i]->PH<60)
strcat(&s[i]->b[20],c3);
}
}
print(struct person *s[],int n)
{
int i;
printf("NO NUM NAME MT EN PH SUM AVE BUKAO\n");
for(i=0;i<50;i++)
printf("_");
printf("\n");
for(i=0;i<n;i++)
{
printf("%2d\t",i+1);
printf("%2ld\t",s[i]->num);
printf("%2s\t",s[i]->name[10]);
printf("%2d\t",s[i]->MT);
printf("%2d\t",s[i]->EN);
printf("%2d\t",s[i]->PH);
printf("%2d\t",s[i]->sum);
printf("%3.1ld\t",s[i]->ave);
printf("%c\t",s[i]->win);
printf("%s\n",s[i]->b[20]);
}
}
sort(struct person *s[],float x,float y,int n)
{
int i;
for(i=0;i<n;i++)
{
if((s[i]->ave<x)&&(s[i]->ave<y))
printf("%ld\t%s\n",s[i]->num,s[i]->name[10]);
}
}
main()
{
struct person p[N]; /结构体数组表示学生所有信息/ struct person *s[N]; /指针数组/
long num[N];
int ss[N][3],sum[N],sss[N]; /分别表示三科分数,总分数和按总成绩由大到小的顺序储存结构体下标//
float ave[N];
char name[N][10];
int n,i,j;
printf("enter students' number:"); /输入参加考试的人数/
scanf("%d",&n);
input(num,name,ss,n); /调用input函数输入学号,姓名,三科成绩/ F1(ss,sum,ave,n,sss);
for(i=0;i<n;i++) /将相关信息赋值给结构体/
{
p[i].num=num[i];
p[i].name[10]=name[i][10];
p[i].MT=ss[i][0];
p[i].EN=ss[i][1];
p[i].PH=ss[i][2];
p[i].sum=sum[i];
p[i].ave=ave[i];
}
for(i=0;i<n;i++) /将由大到小排序的结构体的下标赋给相应的指针数组元素/ s[i]=&p[sss[i]];
F2(s,n); /判断获奖情况/
F3(s,n); /判断补考情况/
print(s,n); /输出信息/
printf("please enter two numbers:"); /按相关分数段查找。
scanf("%d,%d",&i,&j);
printf("\n");
sort(s,i,j,n);
}
运行结果:
五 设计结果说明:
1,设计优点:
使用了结构体数组和6个自定义函数使主函数看起来结构清晰,条例明确,一目了然。 2,设计不足:
由于使用结构体,在函数间传递数据比较困难,定义了以指针数组,增加了程序的占用空间,执行起来可能比较慢
设计日期:20xx年5月22日星期日
总分: