C语言综合实验设计报告1 百行代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言综合实验设计报告
题目:
分别统计70个学生3门功课的优秀,良,中,及格,不及格人数,再求出每个同学总成绩并对70名同学的成绩排序
学院:
专业:
班级:
姓名:
设计日期:
一、设计题目:
分别统计70个学生3门功课的优秀,良,中,及格,不及格人数,再求出每个同学总成绩并对70名同学的成绩排序
二、题目阐述及设计思路:
根据题目要求,采用C语言结构体为主要框架,其中各个成员运用C语言的结构体的知识设计。

主要内容确定之后,调用自定义函数和调用结构体变量,根据上述计划编译这段程序。

三、主要知识点:
使用C语言结构体,字符运算,系统调用函数。

四、程序清单:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<time.h>
int const N=70;
struct Boy{
char name[20];
int c1;
int c2;
int c3;
int sum;
};
typedef struct Boy boy;
boy classmate[N];
char *names[]={"Charles","Mark","Bill","Vincent","William","Joseph" ,"James","Henry","Gary","Martin","Fred","Gary","William", "Charles","Michael","Karl","Bob","John","Thomas","Dean", "Paul","Jack","Brooke","Kevin","Louis","John","George", "Henry","Benjamin","Robert","Carl","Scott","Tom","Eddy", "Kris","Peter","Johnson","Bruce","Robert","Peter","Bill", "Joseph","John","Burt","Charlie","Elliot","George","Johnson", "Richard","James","Charles","Bruce","David","Nick","Walt", "John","Mark","Sam","Davis","Neil","Carl","Lewis","Billy", "Richard","Howard","Allen","Johnny","Robert","Martin","Jeff", "Paul","Sam","Francis","Lewis","Stephen","Andy","Scott","Albert", "Kevin","Michael","Taylor","Jackson","Jack","Jimmy","Allen", "Martin","Vincent"};
void s(int s,int c);
void initname(boy * mem,int num);
void initscore(boy * mem,int num);
void count (boy * mem,int n);
void sort_print(boy* mem,int num);
int cmp ( void const* b1 ,void const * b2);
static struct {
int good;
int med;
int ok;
int bad;
int out;
} stat[3];
int main(int argc, char *argv[]){
initname(classmate,N);
initscore(classmate,N);
count (classmate,N);
printf("%5s%5s%5s%5s%5s%5s\n","","good","med","ok","bad","out");
printf("%-5s%5d%5d%5d%5d%5d\n","c1:",stat[0].good, stat[0].med, stat[0].ok,stat[0].bad, stat[0].out );
printf("%-5s%5d%5d%5d%5d%5d\n","c2:",stat[1].good, stat[1].med, stat[1].ok,stat[1].bad,stat[1].out );
printf("%-5s%5d%5d%5d%5d%5d\n","c3:",stat[2].good, stat[2].med, stat[2].ok,stat[2].bad, stat[2].out );
sort_print(classmate,N);
system("PAUSE");
return EXIT_SUCCESS;
}
void initname(boy * mem,int num){
int i=0;
char **np=names;
for (;i<num;i++)
{
strcpy ( (mem++)->name,*(np++));
}
}
void sort_print(boy* mem,int num){
qsort(classmate,N,sizeof(boy),cmp);
int i=0;
printf("\n\n%10s%5s%5s%5s%5s\n","name","c1","c2","c3","sum");
for (;i<N;i++)
{
printf("%10s%5d%5d%5d%5d\n",classmate[i].name,classmate[i].c1,classmate[i].c2,classmate[i].c 3,classmate[i].sum);
}
}
int cmp (void const * b1 ,void const * b2){
boy *a1=(boy *)b1;
boy *a2=(boy *)b2;
if (a1->sum > a2->sum)
return 1;
if (a1->sum < a2->sum)
return -1;
return 0;
}
void initscore(boy * mem,int num){
//初始化成绩,完全随机。

int i=0;
int n=100;
srand( time(NULL) );
for ( i=0; i<num; i++ )
{
mem->c1=(int)(n*rand()/(RAND_MAX+1.0));
mem->c2=(int)(n*rand()/(RAND_MAX+1.0));
mem->c3=(int)(n*rand()/(RAND_MAX+1.0));
mem->sum = mem->c1 + mem->c2 + mem->c3;
mem++;
}
}
void count (boy * mem,int n){
// >=85 good
// >=70 med
// >=60 ok
// >=30 bad
// <30 out
int i;
for ( i=0; i<n; i++ ){
s(mem->c1,0);
s(mem->c2,1);
s(mem->c3,2);
mem++;
}
}
void s(int s,int c){
// >=85 good
// >=70 med
// >=60 ok
// >=30 bad
// <30 out
if (s>=85){
stat[c].good++;
}
else if(s>=70){
stat[c].med++;
}
else if(s>=60){
stat[c].ok++;
}
else if(s>=30){
stat[c].bad++;
}
else {
stat[c].out++;
}//endif
}
五、设计结果说明:
1、设计优点:
熟练运用结构体及if语句,思路清晰严谨
2、设计不足:
代码中英文名字太多不便于理解和观察。

相关文档
最新文档