C++程序设计教程 第3版——习题,第八章习题解答(有关宏定义的一些解答)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

有关宏的问题的一些解答


一、题目

请添加图片描述

二、代码解答

1.1-4的代码解答

代码如下(示例):

1.#include<iostream>
#include<iomanip>
using namespace std;
struct student
{
	int num;
	char name[20];
	float score;
};
student Input()
{
	student stud;
	cout<<"请输入学号,姓名和成绩:";
	cin>>stud.num>>stud.name>>stud.score;
	return stud;
}
void Output(student stud)
{
	cout<<setw(10)<<stud.num<<setw(20)<<stud.name<<setw(10)<<stud.score<<endl;
}
void high(student stud)
{
	cout<<"最高分同学:"<<endl;
	cout<<setw(10)<<stud.num<<setw(20)<<stud.name<<setw(10)<<stud.score<<endl;
}
int main()
{
	int i,t=0,n=3;
	student stud[3];
	for(i=0;i<n;i++)
		stud[i]=Input();
	cout<<setw(10)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"成绩"<<endl;
	for(i=0;i<n;i++)
		Output(stud[i]);
	cout<<endl;
	for(i=0;i<n;i++)
	{
		if(stud[i].score<stud[i+1].score) t=i+1;
	}
	high(stud[t]);
	return 0;
}
2.#include<iostream>
#include<iomanip>
using namespace std;
struct time
{
	int year;
	int month;
	int day;
};
time Input()
{
	time ti;
	cout<<"请输入年月日:";
	cin>>ti.year>>ti.month>>ti.day;
	return ti;
}
int run(int i)
{
	int a,b,c;
	a=i%4;
	b=i%100;
	c=i%400;
	if(a==0&&b!=0) return 1;
	else if(c==0) return 1;
	else return 0;
}
int yue(int x)
{
	int y;
	switch(x)
	{
	case 1:y=31;break;
	case 2:y=28;break;
	case 3:y=31;break;
	case 4:y=30;break;
	case 5:y=31;break;
	case 6:y=30;break;
	case 7:y=31;break;
	case 8:y=31;break;
	case 9:y=30;break;
	case 10:y=31;break;
	case 11:y=30;break;
	case 12:y=31;break;
	}
	return y;
}
void Output(time ti)
{
	int i=1,y,sum=0;
	if(run(ti.year))
	{
		for(i=1;i<ti.month;i++)
		{
			y=yue(i);
			if(i=2) y=y+1;
			sum=sum+y;
		}
	}
	else
	{
		for(i=1;i<ti.month;i++)
		{
			y=yue(i);
			sum=sum+y;
		}
	}
	sum=sum+ti.day;
	cout<<"这是这一年的第"<<sum<<"天。"<<endl;
}
int main()
{
	time ti[1];
	ti[0]=Input();
	Output(ti[0]);
	return 0;
}
3.#include<iostream>
#include<iomanip>
using namespace std;
struct student
{
	int num;
	char name[20];
	float math;
	float chinese;
	float english;
	float music;
	float biology;
};
student input()
{
	student stud;
	cout<<"请输入学号姓名和五科成绩:";
	cin>>stud.num>>stud.name>>stud.math>>stud.chinese>>stud.english>>stud.music>>stud.biology;
	return stud;
}
void output(student stud)
{
	cout<<setw(10)<<stud.num<<setw(20)<<stud.name<<setw(10)<<stud.math<<setw(10)<<stud.chinese<<setw(10)<<stud.english<<setw(10)<<stud.music<<setw(10)<<stud.biology<<endl;
}
int main()
{
	int i;
	student stud[3];
	for(i=0;i<3;i++)
		stud[i]=input();
	cout<<setw(10)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"数学"<<setw(10)<<"语文"<<setw(10)<<"英语"<<setw(10)<<"音乐"<<setw(10)<<"生物"<<endl;
	for(i=0;i<3;i++)
	output(stud[i]);
	cout<<endl;
	return 0;
}
4.#include<iostream>
#include<iomanip>
using namespace std;
#define N 3
struct student
{
	int num;
	char name[20];
	char address[40];
	char phone[12];
	char email[40];
};
student input()
{
	student stud;
	cout<<"请输入学号,姓名,家庭住址,电话号码和邮箱地址:";
	cin>>stud.num>>stud.name>>stud.address>>stud.phone>>stud.email;
	return stud;
}
void output(student stud)
{
	cout<<setw(10)<<stud.num<<setw(20)<<stud.name<<setw(20)<<stud.address<<setw(20)<<stud.phone<<setw(20)<<stud.email<<endl;
}
int main()
{
	int i;
	student stud[N];
	for(i=0;i<3;i++)
		stud[i]=input();
	cout<<setw(10)<<"学号"<<setw(20)<<"姓名"<<setw(20)<<"家庭住址"<<setw(20)<<"电话号码"<<setw(20)<<"邮箱地址"<<endl;
	for(i=0;i<3;i++)
	output(stud[i]);
	cout<<endl;
	return 0;
}

2.5-8的代码解答

代码如下(示例):

5.#include<iostream>
#include<cmath>
using namespace std;
struct kkkk
{
		int x;
		int y;
		int z;
} a,b;
int main()
{
	double l;
	cout<<"请输入六个整数:"<<endl;
	cin>>a.x;
	cin>>a.y;
	cin>>a.z;
	cin>>b.x;
	cin>>b.y;
	cin>>b.z;
	l=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));
	cout<<l<<endl;
    return 0;
}
6.#include<iostream>
#include<iomanip>
using namespace std;
struct fushu
{
	int shi;
	int xv;
};
fushu input()
{
	fushu fs;
	cout<<"请输入实部和虚部:";
	cin>>fs.shi>>fs.xv;
	return fs;
}
void output(fushu fs)
{
	if(fs.shi==0&&fs.xv==0) cout<<"0"<<endl;
	else
	{
		if(fs.shi==0) cout<<fs.xv<<"i"<<endl;
		else
		{
			if(fs.xv>0) cout<<fs.shi<<"+"<<fs.xv<<"i"<<endl;
	        if(fs.xv==0) cout<<fs.shi<<endl;
        	if(fs.xv<0) cout<<fs.shi<<"-"<<fs.xv<<"i"<<endl;
		}
	}
}
void jian(fushu fs1,fushu fs2)
{
	int x,y;
	x=fs1.shi-fs2.shi;
	y=fs1.xv-fs2.xv;
	if(x==0&&y==0) cout<<"0"<<endl;
	else
	{
		if(x==0) cout<<y<<"i"<<endl;
	    else
		{
		if(y>0) cout<<x<<"+"<<y<<"i"<<endl;
	    if(y==0) cout<<x<<endl;
	    if(y<0) cout<<x<<"-"<<y<<"i"<<endl;
		}
	}
}
void add(fushu fs1,fushu fs2)
{
	int x,y;
	x=fs1.shi+fs2.shi;
	y=fs1.xv+fs2.xv;
	if(x==0&&y==0) cout<<"0"<<endl;
	else
	{
		if(x==0) cout<<y<<"i"<<endl;
	    else
		{
		if(y>0) cout<<x<<"+"<<y<<"i"<<endl;
	    if(y==0) cout<<x<<endl;
	    if(y<0) cout<<x<<"-"<<y<<"i"<<endl;
		}
	}
}
int main()
{
	int i;
	fushu fs[2];
	for(i=0;i<2;i++)
		fs[i]=input();
	for(i=0;i<2;i++)
	{
		cout<<"该复数为:";
		output(fs[i]);
	}
	cout<<"两者之和为:";
	add(fs[0],fs[1]);
	cout<<"两者之差为:";
	jian(fs[0],fs[1]);
	cout<<endl;
	return 0;
}
7.#include<iostream>
#include<iomanip>
using namespace std;
enum color{Monday,Tuesday,Wesnday,Thursday,Friday,Saturday,Sunday};
void print (color c)
{
	switch(c)
	{
	case Monday:cout<<setw(10)<<"Monday"<<endl;break;
	case Tuesday:cout<<setw(10)<<"Tuesday"<<endl;break;
	case Wesnday:cout<<setw(10)<<"Wesnday"<<endl;break;
	case Thursday:cout<<setw(10)<<"Thursday"<<endl;break;
	case Friday:cout<<setw(10)<<"Friday"<<endl;break;
    case Saturday:cout<<setw(10)<<"Saturday"<<endl;break;
	case Sunday:cout<<setw(10)<<"Sunday"<<endl;break;
	}
}
int main()
{
	int j=100;
	color i;
	int m;
	cin>>m;
	i=color(m);
	for(;j>0;j--)
	{
		print(i);
		if(i==Sunday) i=Monday;
		else i=color(int(i)+1);
	}
	cout<<endl;
	cout<<"今天是:"<<'\t';
	print(i);
	cout<<endl;
	return 0;
}
8.#include<iostream>
#include<iomanip>
using namespace std;
enum color{Red,Blue,Green};
void print (color c)
{
	switch(c)
	{
	case Red:cout<<setw(10)<<"Red";break;
	case Blue:cout<<setw(10)<<"Blue";break;
	case Green:cout<<setw(10)<<"Green";break;
	}
}
int main()
{
	int count=0;
	color i,j,k;
	for(i=Red;i<=Green;i=color(int(i)+1))
		for(j=Red;j<=Green;j=color(int(j)+1))
			if(i!=j)
				for(k=Red;k<=Green;k=color(int(k)+1))
					if((k!=i)&&(k!=j))
					{
						cout<<setw(10)<<++count;
						print(i);
						print(j);
						print(k);
						cout<<endl;
					}
	cout<<"所有的可能数为:"<<count<<endl;
	return 0;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值