大一第二学期第一次上机作业

1 篇文章 0 订阅

题目1:建立一个学生档案的结构体数组,输入并输出学生信息。

字段名如下表一所示。

序号

字段名

数据类型

长度

字段含义

1

num

int

4

学号

2

name

char数组

20

姓名

3

score

int数组

2

二门学科成绩

主要程序:

#include <iostream>
#include <iomanip>
using namespace std;
struct student
{
	int num;
	char name[20];
	int score[2];
};
int main()
{
	student stu[3];
	for(int i=0;i<3;i++)
	{
		cout<<"请输入学号、姓名、成绩和成绩:";
		cin>>stu[i].num>>stu[i].name>>stu[i].score[0]>>stu[i].score[1];
	}
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"
		<<setw(10)<<"成绩"<<setw(10)<<"成绩"<<endl;
	for(int j=0;j<3;j++)
	{
		cout<<setw(10)<<stu[j].num<<setw(10)<<stu[j].name
			<<setw(10)<<stu[j].score[0]<<setw(10)<<stu[j].score[1]<<endl;
	}
	return 0;
}

运行结果:

题目2:(此题为第1题目的提高版)建立一个学生档案的结构体数组,输入并输出学生信息。

要求:(1) 将第一题中的学生人数改成由键盘随机输入;

      (2)输入学生信息模块改成由函数student Input(student &stud,int m)调用完成;

      (3)输出学生信息模块改成由函数void Output(student stud)调用完成;

思考并抽问:

第(1)个要求对改进程序有什么好处?

第(2)和第(3)个要求对改进程序有什么好处?

函数student Input(student &stud,int m)的参数有二个,如果省掉最后一个参数可以吗?为什么第一个参数要加&?

你觉得此程序还有哪些可以改进的地方?

主要程序:

#include <iostream>
#include <iomanip>
using namespace std;
struct student
{
	int num;
	char name[20];
	int score[2];
};
student Input(student &stu,int m)
{
	cout<<"请输入第"<<m+1<<"个同学的学号、姓名、成绩和成绩:";
	cin>>stu.num>>stu.name>>stu.score[0]>>stu.score[1];
	return stu;
}
void Output(student stu)
{
	cout<<setw(10)<<stu.num<<setw(10)<<stu.name
			<<setw(10)<<stu.score[0]<<setw(10)<<stu.score[1]<<endl;
}
int main()
{
	student stu[100];
	int n;
	cout<<"输入学生的人数(最多个):";
	cin>>n;
	for(int i=0;i<n;i++)
	{
		stu[i]=Input(stu[i],i);
	}

    cout<<setw(10)<<"学号"<<setw(10)<<"姓名"
		<<setw(10)<<"成绩"<<setw(10)<<"成绩"<<endl;
    for(int j=0;j<n;j++)
	{
		Output(stu[j]);
	}
	return 0;
}

运行结果:

题目3:编写一个函数output,输入一个学生各门课的成绩并求全班的平均成绩。设计一个程序,输入本班同学的成绩,假定学生信息有学号、姓名及2门课的成绩。要求使用结构体数组作函数参数。

主要程序:

#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
struct student
{
	char num[10];
	char name[20];
	int score[2];
};
void Input(student stu[],int n)
{
	int i,j;
	for(i=0;i<n;i++)
	{

		cout<<"请输入第"<<i+1<<"个同学的学号:";
		cin>>stu[i].num;
		cout<<"请输入第"<<i+1<<"个同学的姓名:";
		cin>>stu[i].name;
		cout<<"请输入第"<<i+1<<"个同学的两门成绩:";
		for(j=0;j<2;j++)
		  cin>>stu[i].score[j];
	}
}
void Output(student stu[],int n)
{
	int i,j;
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"
		<<setw(10)<<"成绩"<<setw(10)<<"成绩"<<endl;
	for(i=0;i<n;i++)
	{
		cout<<setw(10)<<stu[i].num<<setw(10)<<stu[i].name<<setw(10);
		for(j=0;j<2;j++)
			cout<<stu[i].score[j]<<setw(10);
		cout<<endl;
	}
}
double average(student stu[],int n)
{
	double ave,sum=0;
	int i,j;
	for(i=0;i<n;i++)
		for(j=0;j<2;j++)
			sum+=stu[i].score[j];

	ave=sum/n;
	return ave;
}
int main()
{
	student stu[100];
	int n;
	double aver;
	cout<<"请输入学生人数(最多人):";
	cin>>n;
	Input(stu,n);
	Output(stu,n);
    aver=average(stu,n);
	cout<<"全班平均分为:"<<aver<<endl;
	return 0;
}

运行结果:


题目4:为全班同学建立一个通讯录(用结构体数组实现),包括学号、姓名、家庭住址、电话号码、手机号码及E-mail地址,并完成数据的输入和输出。

主要程序:

#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
#define N 4
struct address_list
{
	char num[10];
	char name[20];
	char addr[80];
	int phonenum;
	char mobilenum[20];
	char email[30];
};
void Input(address_list stu[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{

		cout<<"请输入第"<<i+1<<"个学生的学号:";
		cin>>stu[i].num;
		cout<<"请输入第"<<i+1<<"个学生的姓名:";
		cin>>stu[i].name;
		cout<<"请输入第"<<i+1<<"个学生的地址:";
		cin>>stu[i].addr;
		cout<<"请输入第"<<i+1<<"个学生的电话号码:";
		cin>>stu[i].phonenum;
		cout<<"请输入第"<<i+1<<"个学生的手机号码:";
		cin>>stu[i].mobilenum;
		cout<<"请输入第"<<i+1<<"个学生的E-mail地址:";
		cin>>stu[i].email;
	}
}
void Output(address_list stu[],int n)
{	
	int i;
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"地址";
	cout<<setw(10)<<"电话号码"<<setw(10)<<"手机号码"<<setw(10)<<"E-mail地址"<<endl;
	for(i=0;i<n;i++)
	{	
		cout<<setw(10)<<stu[i].num<<setw(10)<<stu[i].name<<setw(10)<<stu[i].addr;
		cout<<setw(10)<<stu[i].phonenum<<setw(10)<<stu[i].mobilenum;
		cout<<setw(10)<<stu[i].email<<endl;
	}
}
int main()
{
	void Input(address_list stu[],int n);
	void Output(address_list stu[],int n);
	address_list stu[N];
	Input(stu,N);
	Output(stu,N);
	return 0;
}

运行结果:





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值