1、 高级语言程序设计课程设计 题目:多重模块管理 专 业 计算机 班 级 1306班 学 生 林道松 学 号 3131903609 指导教师 鲍春波 /肖琳 起止时间 2014-2-17—2014-2-21 2014年 2月 目录 A组题目 1 系统分析 30
2、
系统设计 30
系统实现 31
运行测试 31
心得体会 34
参考文献 34
A组题目
题目1:
写一个函数计算下列函数的值f(0),f(3),f(-3),测试之。函数如下:
解:
#include
3、); } int f(int n) { int s; if(n>0) s=3*n*n-4; if(n==0) s=2; if(n<0) s=0; return s; } 评析:这是一个简单的选择判断结构,只需将条件编写清楚即可。 题目2: 写一个函数void maxMinAver(int *data, int *max, int *min,float * ave,int size), 求一组数据的最大值、最小值和平均值,测试之。其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数
4、组的大小。
要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。测试之
解:
#include
5、"%d",&n);
data=(int*)malloc(n*sizeof(int));
for(i=0;i 6、max=data[0];
*min=data[0];
for(i=0;i 7、
题目3:
写一个函数用指针型字符串实现两个字符串比较,int mystrcmp(const char *str1, const char *str2),如果大于返回1,等于返回0,小于返回-1,测试之
解:
#include 8、 return 0;
}
int mystrcmp(const char *str1, const char *str2)
{
int i;
for(i=0;*(str1+i) != '\0' && *(str2+i) !='\0';i++)
{
if(*(str1+i) > *(str2+i))
return 1;
if(*(str1+i) < *(str2+i))
return -1;
if(*(str1+i) ==*(str2+i))
9、 return 0;
}
}
评析:这道题的比较方法是将字母一一进行对比,利用指针将字母一个个进行比较,需要注意的地方就是取*运算。
题目4:
定义一个学生结构体,取别名STU,包含学号、姓名、数学、语文、计算机、英语等 课程成绩,还有总分和平均分,写一个函数实现求一组学生每个学生各门课程的平均值,函数原型为float ave(STU stu[],int size)。测试之。
解:
#include 10、t num;
char name[10];
float math;
float english;
float computer;
float chinese;
float total;
float average;
}STU;
STU stu[SIZE];
float ave(STU stu[],int size);
int main()
{
int i;
printf("please input the studet's information:\n");
for(i=0;i 11、IZE;i++)
{scanf("%d %s %f %f %f %f",&stu[i].num,stu[i].name,
&stu[i].math,&stu[i].english,&stu[i].computer,&stu[i].chinese);
}
ave(stu,SIZE);
for(i=0;i 12、average);
}
return 0;
}
float ave(STU stu[],int size)
{
int i;
for(i=0;i 13、题目5 :
写一个函数能够从文件读入一组学生STU的信息,保存到一个结构体数组中。
解:
#include 14、fp;
if((fp=fopen("stu.txt","r"))==NULL)
{ printf("cannot open file\n");
exit (0);
}
for(i=0;i 15、 stud[i].num,stud[i].age,stud[i].addr);
}
fclose (fp);
}
评析:这是一个典型的从文件中输入信息保存在数组中在屏幕上打印出。需要注意的打开文件所需要的头文件以及数据输入输出的格式。
题目6 :
写一个函数能够输出某一学生结构体数组STU stu[10]的信息和每个人的总分、平均分到某一文本文件中,测试之。输出格式是:
“%s %s %d %d %d %d %d %5.2f”
解:
#include 16、E 10
struct student_type
{
char name [10];
char addr[15];
int grade;
int num;
int height;
int age;
int score;
float ave;
}stu[SIZE];
void output();
int main ()
{
output();
return 0;
}
void output()
{
int i;
FILE*fp;
fp=fopen 17、"printf.txt","w");
for(i=0;i 18、name,stu[i].addr,stu[i].grade,stu[i].num,
stu[i].height,stu[i].age,stu[i].score,stu[i].ave);
}
}
评析:注意文件的输入及输出格式即可。
题目7:
写一个函数能够打印输出学生结构体数组STU stu[10]的信息到屏幕上,测试之
解:
#include 19、
}stu[SIZE];
void print(struct student stu[],int size);
int main ()
{ int n;
for(n=0;n 20、 printf("num:%d\nname:%s\nscore:%.2f\n\n",stu[i].num,stu[i].name,stu[i].score);
}
评析:注意函数的调用和输入和输出的格式。
题目8 :
写一个函数能够把一组学生成绩信息按总分进行排序,测试之。
解:
#include 21、
int main()
{
int n;
for(n=0;n 22、stu[])
{
int i,j,k,m;
for(i=0;i 23、学生成绩信息,如果找到打印成绩信息,如果没有,显示“not found!”.测试之。
解:
#include 24、0,90},
{10086,"zhao",70,80,90},{10010,"zhang",70,70,70},{10120,"chen",80,80,90}};
searchscore(stu);
return 0;
}
void searchscore(struct student stu[])
{
int n,m,number=0;
printf("enter the number you want:\n");
scanf("%d",&m);
printf("The Result Is:\n");
fo 25、r(n=0;n<5;n++)
{
if(m==stu[n].num)
{
printf("num:%d\nname:%s\nchinese:%d\nmath:%d\nenglish:%d\n",stu[n].num,stu[n].name,
stu[n].chinese,stu[n].math,stu[n].english);
number=1;
}
} if(number==0)
printf("n 26、ot found!\n");
}
评析;这是一个信息搜索程序,学生的信息可以是事先定义,也可以采用用户输入形式。
题目10 :
设计一个界面函数,包含上述11个题目的调用,即
请选择
1 调用第一个函数(具体的函数名)
2 调用第二个函数(具体的函数名)
3 ...
...
9 调用第9个函数(具体的函数名)
继续吗?输入y继续下一次选择,输入n结束
解:
#include 27、 SIZE 10
int f();
void maxMinAver();
int mystrcmp();
float ave();
typedef struct student
{
int num;
char name[10];
float math;
float english;
float computer;
float chinese;
float total;
float average;
}STU;
STU stu[SIZE];
void load();
struct student_ 28、type
{ char name [10];
int num;
int age;
char addr[15];
}stud[SIZE];
void output();
struct Student_type
{
char name [10];
char addr[15];
int grade;
int num;
int height;
int age;
int score;
float ave;
}Stu[SIZE];
void print();
struct sT 29、udent
{
int num;
char name[10];
float score;
}sTu[SIZE];
void comp();
struct studenT
{
int num;
char name[10];
float score;
}StU[SIZE];
void searchscore();
struct stuDent
{
int num;
char name[15];
int chinese;
int math;
int english;
}; 30、
int sw(int m);
void menu();
int main()
{
int num1,num2;
char str;
menu();
scanf("%d",&num1);
sw(num1);
getchar();
scanf("%c",&str);
while (str=='N'||str=='n'&&str=='Y'||str=='y')
{ if(str=='y')
{scanf("%d",&num2);
sw(num2);}
31、 if(str=='n')
break;
getchar();
scanf("%c",&str);
}
return 0;
}
int sw(int m)
{ int x,n,i,max,min;
char str1[100],str2[100];
float kave;
int *data;
struct stuDent stuD[5]={{10110,"zhang",70,80,90},{10111,"lin",90,80,90},
32、 {10086,"zhao",70,80,90},{10010,"zhang",70,70,70},{10120,"chen",80,80,90}};
switch(m)
{
case 1:scanf("%d",&x);
printf("%d\n",f(x));break;
case 2:scanf("%d",&n);
data=(int*)malloc(n*sizeof(int));
for(i=0;i 33、data[i]);
maxMinAver(data,&max,&min,&kave,n);
printf("max:%d\nmin:%d\nave:%.1f\n",max,min,kave);break;
case 3:scanf("%s %s",str1,str2);
printf("%d\n",mystrcmp(str1,str2));break;
case 4:for(i=0;i 34、um,stu[i].name,
&stu[i].math,&stu[i].english,&stu[i].computer,&stu[i].chinese);
ave(stu,SIZE);
for(i=0;i 35、 case 6:output();break;
case 7:for(n=0;n 36、er Is:\n");
comp(StU);
for(n=0;n 37、\n");
printf("|| 请选择你所需要的函数 ||\n");
printf("||**********************************************||\n");
printf("|| 1.求分段函数的值f(x) ||\n");
printf("|| 2.求一组数据的最大值和最小值以及平均值 ||\n");
printf("|| 3.比较两个 38、字符串大小 ||\n");
printf("|| 4.求一组学生每个学生各门课程的平均值 ||\n");
printf("|| 5.从文件读入一组学生的信息 ||\n");
printf("|| 6.输出结构体数组的信息到文本文件中 ||\n");
printf("|| 7.打印输出学生结构体数组的信息到屏幕上 ||\n");
printf("|| 8.把一组学生成绩信息按总分进行排序 ||\n");
39、
printf("|| 9.查找给定学号的学生成绩信息 ||\n");
printf("||**********************************************||\n");
printf("||**********************************************||\n\n");
printf("请输入所调用函数序号:\n");
}
int f(int n)
{ int s;
if(n>0) s=3*n*n-4;
if(n==0) s=2;
40、
if(n<0) s=0;
return s;
}
void maxMinAver(int *data,int *max, int *min,float * ave,int size)
{
int i,sum=0;
*max=data[0];
*min=data[0];
for(i=0;i 41、um+=data[i];
}
*ave=(float)sum/size;
}
int mystrcmp(const char *str1, const char *str2)
{
int i;
for(i=0;*(str1+i) != '\0' && *(str2+i) !='\0';i++)
{
if(*(str1+i) > *(str2+i))
return 1;
if(*(str1+i) < *(str2+i))
return -1;
42、
if(*(str1+i) ==*(str2+i))
return 0;
}
}
float ave(STU stu[],int size)
{
int i;
for(i=0;i 43、 int i;
FILE*fp;
if((fp=fopen("stu.txt","r"))==NULL)
{ printf("cannot open file\n");
exit (0);
}
for(i=0;i 44、tud[i].name,
stud[i].num,stud[i].age,stud[i].addr);
}
fclose (fp);
}
void output()
{
int i;
FILE*fp;
fp=fopen("PRINT.txt","w");
for(i=0;i 45、num,
&Stu[i].height,&Stu[i].age,&Stu[i].score,&Stu[i].ave);
//fprintf(fp,"name addr grade num height age score ave\n");
fprintf(fp,"%s %s %d %d %d %d %d %5.2f\n",
Stu[i].name,Stu[i].addr,Stu[i].grade,Stu[i].num,
Stu[i].height,S 46、tu[i].age,Stu[i].score,Stu[i].ave);
}
}
void print(struct sTudent sTu[],int size)
{
int i;
for(i=0;i 47、
{k=i;
for(j=i+1;j 48、
scanf("%d",&m);
printf("The Result Is:\n");
for(n=0;n<5;n++)
{
if(m==stu[n].num)
{
printf("num:%d\nname:%s\nchinese:%d\nmath:%d\nenglish:%d\n",stu[n].num,stu[n].name,
stu[n].chinese,stu[n].math,stu[n].english);
numbe 49、r=1;
}
} if(number==0)
printf("not found!\n");
}
评析:这是一个大型数据系统,将以上9个函数集结成一个大型数据,制作了精美的封面,主要用途与前9个题目相似,需要注意变量名与结构体数组名不能重复定义,系统结构要清晰。
题目11:
创建一个工程文件,包含三个文件,第一个是主函数所在的源文件,含有显示界面,选择1-10,调用不同的函数,第二个是各个函数所在的源文件,第三个是各个函数原型所在的头文件。
解:
1. arrangemain.c
#include 50、include






