实验09 结构

更新时间:2024-03-09 01:11:01 阅读量: 综合文库 文档下载

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

实验九 结构程序设计

班级: 学号: 姓名: 评分:

一.【实验目的】

1、掌握结构变量的基本使用方法。 2、掌握结构数组的基本使用方法。

3、掌握结构指针的概念以及结构指针作为函数参数的编程方法。 4、进一步掌握C程序的调试方法和技巧。 二.【实验内容和步骤】 1、程序调试题

A.目标:进一步学习掌握程序调试的方法和技巧。

B.内容:输入一个正整数n(3≤n≤10),再输入n个雇员的信息(如下表所示),输出每个雇员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。改正程序中的错误,使其实现程序的功能。(注:程序文件保存在“调试示例”文件夹中,文件名为error09_1.cpp) ① 调试正确的源程序清单

#include int main(void) {

int n;

double x, root;

double fun(int n, double x);

printf(\ scanf(\ printf(\ scanf(\ root = fun(n, x);

printf(\

return 0; }

double fun(int n, double x) {

if(n == 0) return 1; else

return x * fun(n-1, x); }

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

2、完善程序,并调试运行程序

题目(1)日期换算。程序功能:定义一个关于年、月、日的日期结构,并编写一个函数计算某日期是该年中的

第几天(注意闰年问题)。要求用结构体指针作为函数参数。在主函数中输入一个日期(年、月、日),调用函数计算并输出该日期是该年中的第几天。(注:程序文件保存在“第1题”文件夹中)打开proj1.cpp

文件,在两条星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单

#include struct date{

int year; //年 int month; //月 int day; //日 };

int main (void ) {

int n;

struct date d,*p;

int ComputeDays(struct date *p); printf(\

scanf(\输入一个日期

p=&d; //指针p指向日期变量d

//请在两条星线之间填入相应的代码, 调用ComputeDays(struct date *p)函数计算。 /************************************************************************/

n=ComputeDays(p);

/************************************************************************/

printf(\ return 0; }

int ComputeDays(struct date *p) {

int i,num=0,flag; //num作为计算天数的累计和变量,flag作为是否闰年的标记。 int tab[2][13]={

{0, 31, 28, 31, 30,31,30,31,31,30,31, 30,31}, {0, 31, 29, 31, 30,31,30,31,31,30,31, 30,31}};

if((p->year%4==0 && p->year0!=0) || (p->year@0==0))flag=1; //判定闰年 else flag=0;

//请在两条星线之间填入相应的代码, 计算某日期是该年中的第几天(注意闰年问题)。 /*************************************************************************/

for (i=1; imonth; i++)

num = num + tab[flag][i]; num += p->day;

/*************************************************************************/ return num; }

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(2)计算时间差期。程序功能:定义一个关于时、分、秒的时间结构,并编写一个函数计算两个时刻的时

间差(注:两个时刻的时间差小于24小时)。要求用结构体指针作为函数参数。在主函数中输入两个时刻(时、分、秒),调用函数计算并输出两个时刻的时间差。(注:程序文件保存在“第2题”文件夹中)打开proj2.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单

#include struct time{

int hour; //年

算。 /

int minute; //月 int second; //日 };

int main (void ) {

struct time t,t1,t2,*p,*q;

struct time TimeDiff(struct time *p,struct time *q); printf(\

scanf(\输入第一个时间 printf(\

scanf(\输入第二个日期

p=&t1;q=&t2; //指针p、q分别指向日期变量d1、d2

//请在两条星线之间填入相应的代码, 调用TimeDiff(struct time *p,struct time *q)函数计

/************************************************************************************t=TimeDiff(p,q);

/************************************************************************************

/

printf(\

printf(\ return 0; }

struct time TimeDiff(struct time *p,struct time *q) {

struct time tt;

int num1,num2,num; //num作为计算时间差的总秒数变量 num1=p->hour*3600+p->minute*60+p->second; num2=q->hour*3600+q->minute*60+q->second;

//请在两条星线之间填入相应的代码, 计算两个时刻的时间差。 /*****************************************************/

num=(num1>=num2)?num1-num2:num2-num1;

tt.hour=num/3600;tt.minute=(num600)/60;tt.second=num`;

/*****************************************************/ return tt; }

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

题目(3)成绩处理。程序功能:定义一个关于学生成绩单的结构(包含:学号、姓名、语文、数学、计算机和

平均成绩),编写4个对应的函数,分别完成以下几项计算和统计汇总工作:

(1) 计算每一个学生的平均成绩。 (2) 计算每门课程的平均成绩。 (3) 输出平均成绩最高的学生的记录。 (4) 按平均成绩从高到低输出学生的成绩单(学号、姓名、数学、英语、计算机和平均成绩)。 要求用结构体指针作为函数参数。在主函数中输入5个学生的学号、姓名和数学、英语、计算机三门课程的成绩数据,分别调用不同的函数完成以上4项工作。(注:程序文件保存在“第3题”文件夹中)打开proj3.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。

① 调试正确的源程序清单

#include #include

struct score{ //定义学生成绩单结构 int No; //学号 char Name[20]; //姓名 int Chinese; //语文 int Maths; //数学 int Computer; //计算机 float Average; //平均成绩 };

void main () {

int i,n=5;

struct score s[5],*p;

void Compute_Student_avg(struct score *p,int n); void Compute_Course_avg(struct score *p,int n); void Compute_Average_max(struct score *p,int n); void sort_Average(struct score *p,int n);

//输入5个学生的成绩数据

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

printf(\ scanf(\输入学号 scanf(\输入姓名 scanf(\输入语文 scanf(\输入数学 scanf(\输入计算机 }

p=s; //指针p指向s数组

//请在两条星线之间填入相应的代码, 调用4个不同的函数,依次完成4项计算和统计工作。 /*****************************************************************************/ Compute_Student_avg(p,n); Compute_Course_avg(p,n); Compute_Average_max(p,n); sort_Average(p,n);

/*****************************************************************************/ }

void Compute_Student_avg(struct score *p,int n) //计算每一个学生的平均成绩函数 {

int i;

//请在两条星线之间填入相应的代码, 计算每一个学生的平均成绩。

/*****************************************************************************/ for(i=0;i<5;i++,p++)

p->Average=1.0*(p->Chinese+p->Maths+p->Computer)/3;

/*****************************************************************************/ }

void Compute_Course_avg(struct score *p,int n) //计算每门课程的平均成绩函数 {

int i;

float yuwen=0,shuxue=0,jisuanji=0;

//请在两条星线之间填入相应的代码, 计算每门课程的平均成绩。 ////包括:数学、英语、计算机三门课程的平均成绩。

/************************************************************/ for(i=0;i<5;i++,p++){

yuwen+=p->Chinese;shuxue+=p->Maths;jisuanji+=p->Computer;}

/************************************************************/ printf(\ printf(\ printf(\}

void Compute_Average_max(struct score *p,int n) //输出平均成绩最高的学生记录函数 {

int i,max=0;

//请在两条星线之间填入相应的代码, 输出平均成绩最高的学生的记录。

成绩。

////包括:学号、姓名、数学、英语、计算机和平均成绩。

/*************************************************************/ for(i=1;i<5;i++){

if (p[max].Average

/*************************************************************/ printf(\ printf(\ printf(\

printf(\ printf(\

printf(\ printf(\}

void sort_Average(struct score *p,int n) //按平均成绩从高到低输出学生的成绩单函数 {

int i,j,iMax; struct score t;

//请在两条星线之间填入相应的代码, 按平均成绩从高到低排序学生成绩单。 /*******************************************************************/ for(i=1;i

for(j=0;j

if(p[j].Average

/*******************************************************************/

//输出按平均成绩从高到低排序后的学生成绩单。包括:学号、姓名、数学、英语、计算机和平均

printf(\ for(i=0;i

printf(\ printf(\

printf(\ printf(\

printf(\ printf(\ } }

② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

三.【实验总结】

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

Top