目录
第1关:复数类型的结构体变量
任务描述
本关任务:编写一个能描述复数类型的结构体变量的小程序。
编程要求
题目:
定义描述复数类型的结构体变量,编写减法函数sub()与乘法函数mul(),分别完成复数的减法与乘法运算。在主函数中定义四个复数类型变量c1、c2、c3、c4,输入c1、c2的复数值,调用sub()完成c3=c1-c2操作,调用mul()完成c4=c1*c2操作。最后输出c3、c4复数值。
输入格式:输入 c1的实部和虚部,c2的实部和虚部。
输出格式:输出c3和c4。
例:若c1=1+2i, c2=3+4i,则输入
1 2 3 4
得出结论就是
c3 is (-2)+(-2)i
c4 is (-5)+(10)i
效果如下:
输入:1 2 3 4
输出:c3 is (-2)+(-2)i
c4 is (-5)+(10)i
开始你的任务吧,祝你成功!
#include <iostream>
using namespace std;
struct C
{
int a,b;
}c;
C sub(C c1,C c2)
{
C c3;
c3.a=c1.a-c2.a;
c3.b=c1.b-c2.b;
return c3;
}
C mul(C c1, C c2)
{
C c4;
c4.a=c1.a*c2.a-c1.b*c2.b;
c4.b=c1.b*c2.a+c1.a*c2.b;
return c4;
}
int main(void)
{
C c1,c2,c3,c4;
cin>>c1.a>>c1.b>>c2.a>>c2.b;
c3=sub(c1,c2);
c4=mul(c1,c2);
cout<<"c3 is ("<<c3.a<<")+("<<c3.b<<")i"<<endl;
cout<<"c4 is ("<<c4.a<<")+("<<c4.b<<")i"<<endl;
}
第2关:比较举重运动员成绩
任务描述
本关任务:编写一个能比较举重运动员成绩的小程序。
相关知识
结构体定义:
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。
声明一个结构体类型的形式是:
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
}
关于结构体的类型要注意的几点:
-
类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。
-
对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于同类型的普通变量。
-
结构体的成员也可以是一个结构体变量。
编程要求
举重运动员成绩比较
Step1 定义一个用于表示举重运动员成绩的数据结构Lifting,包括以下信息:
- 姓名(字符串)、体重(小数)
- 抓举成绩、挺举成绩、总成绩(整数)
Step2 从键盘输入两个举重运动员的成绩信息
- 姓名、体重、抓举成绩、挺举成绩
Step3 输出获胜运动员的姓名
- 总成绩高者获胜(总成绩=抓举成绩+挺举成绩)
- 总成绩相同时,体重轻者获胜
输入:zhangsan 77.0 174 207
lisi 77.1 173 209
输出:lisi
开始你的任务吧,祝你成功!
#include <iostream>
using namespace std;
struct N
{
char name[20];
float weight;
int scorecatch;
int scorerise;
int score;
}n;
int main()
{
N n1,n2;
cin>>n1.name>>n1.weight>>n1.scorecatch>>n1.scorerise;
cin>>n2.name>>n2.weight>>n2.scorecatch>>n2.scorerise;
n1.score=n1.scorecatch+n1.scorerise;
n2.score=n2.scorecatch+n2.scorerise;
if(n1.score!=n2.score)
{
if(n1.score>n2.score)
cout<<n1.name;
else
cout<<n2.name;
}
else
{
if(n1.weight<n2.weight)
cout<<n1.name;
else
cout<<n2.name;
}
return 0;
}
第3关:比较10名举重运动员成绩
任务描述
本关任务:编写一个能比较10名举重运动员成绩的小程序。
编程要求
要求:
-
数据结构以及获胜规则与本次作业第一题相同;
-
依次输出10名运动员的名次、姓名、总成绩;
-
10名运动员信息在程序中直接赋值,信息如下(依次是姓名、体重、挺举成绩、抓举成绩):
子轩 75.00 174 207
子涵 75.18 170 205
宇轩 70.01 173 207
浩然 72.54 168 209
浩宇 73.99 170 200
皓轩 70.02 173 207
雨泽 73.77 176 199
博文 72.89 178 202
俊杰 74.56 180 210
子睿 75.50 177 208
效果如下:
输入:无
输出:1 俊杰 390
2 子睿 385
3 子轩 381
4 宇轩 380
5 皓轩 380
6 博文 380
7 浩然 377
8 雨泽 375
9 子涵 375
10 浩宇 370
开始你的任务吧,祝你成功!
#include <iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct C{
char name[20];
float weight;
int scorecatch;
int scorerise;
int score;
int cixu;
}c[10];
bool cmp(C x,C y)
{
if(x.score!=y.score)
return x.score>y.score;
else
return x.weight<y.weight;
}
int main()
{
c[0].weight=75.00,c[0].scorecatch=174,c[0].scorerise=207;
strcpy (c[0].name,"子轩");
c[1].weight=75.18,c[1].scorecatch=170,c[1].scorerise=205;
strcpy (c[1].name,"子涵");
c[2].weight=70.01,c[2].scorecatch=173,c[2].scorerise=207;
strcpy (c[2].name,"宇轩");
c[3].weight=72.54,c[3].scorecatch=168,c[3].scorerise=209;
strcpy (c[3].name,"浩然");
c[4].weight=73.99,c[4].scorecatch=170,c[4].scorerise=200;
strcpy (c[4].name,"浩宇");
c[5].weight=70.02,c[5].scorecatch=173,c[5].scorerise=207;
strcpy (c[5].name,"皓轩");
c[6].weight=73.77,c[6].scorecatch=176,c[6].scorerise=199;
strcpy (c[6].name,"雨泽");
c[7].weight=72.89,c[7].scorecatch=178,c[7].scorerise=202;
strcpy (c[7].name,"博文");
c[8].weight=74.56,c[8].scorecatch=180,c[8].scorerise=210;
strcpy (c[8].name,"俊杰");
c[9].weight=75.50,c[9].scorecatch=177,c[9].scorerise=208;
strcpy (c[9].name,"子睿");
for(int i=0;i<10;i++)
{
c[i].score=c[i].scorecatch+c[i].scorerise;
}
sort(c,c+10,cmp);
for(int i=0;i<10;i++)
{
cout<<i+1<<" "<<c[i].name<<" "<<c[i].score<<endl;
}
return 0;
}
第4关:记录书籍的结构
任务描述
本关任务:编写一个记录书籍的结构的小程序。
编程要求
设计一个记录书籍的结构,其成员包括书号、书名、作者、出版社和出版日期。假设一批书籍的记录存放在一个单向链表中,编写程序输出与给定作者姓名相匹配的所有书籍的记录。给定5种书籍信息如下:
Number: 1 2 3 4 5
Name: b1 b2 b3 b4 b5
Author: a1 a2 a2 a3 a3
Press: gfkd gfkd tsinghua tsinghua gfkd
Publication Date: 20150127 20150125 20140122 20130523 20150602
输入格式
第一步:输入以上书籍信息。
第二步:输入0,以结束信息录入
第三步:输入待查找作者姓名
输出格式
Number:1
Name:b1
Author:a1
Press:gfkd
Publication Date:20150127
效果如下:
输入:
1 b1 a1 gfkd 20150127
2 b2 a2 gfkd 20150125
3 b3 a2 tsinghua 20140122
4 b4 a3 tsinghua 20130523
5 b5 a3 gfkd 20150602
0
a2
输出:
Number:2
Name:b2
Author:a2
Press:gfkd
Publication Date:20150125
Number:3
Name:b3
Author:a2
Press:tsinghua
Publication Date:20140122
开始你的任务吧,祝你成功!
#include <iostream>
#include<cstring>
using namespace std;
struct BOOK
{
int num;
char name[5];
char author[20];
char press[20];
long long date;
}book[20];
int main()
{
int i,t;
cin>>i;
while(i)
{
book[i].num=i;
cin>>book[i].name>>book[i].author>>book[i].press>>book[i].date;
t=i;
cin>>i;
}
char m[20];
cin>>m;
for(int i=1;i<=t;i++)
{
if(strcmp(m,book[i].author)==0)
{
cout<<"Number:"<<book[i].num<<endl;
cout<<"Name:"<<book[i].name<<endl;
cout<<"Author:"<<book[i].author<<endl;
cout<<"Press:"<<book[i].press<<endl;
cout<<"Publication Date:"<<book[i].date<<endl;
}
}
}
第5关:排列输出
任务描述
本关任务:编写一个能将元素进行由大到小排序并输出的小程序。
编程要求
假设有如下结构的声明
struct data
{
int i;
char c;
};
用户先输入一个整数,表示需要输入的结构体的数量
然后依次输入每个结构体元素的具体内容
按照i字段对所有元素进行由大到小排序并输出
效果如下:
输入:3
12 a
14 c
10 b
输出:[14,c];[12,a];[10,b]
开始你的任务吧,祝你成功!
#include <iostream>
#include<algorithm>
using namespace std;
struct Date
{
int i;
char c;
}data[30];
bool cmp(Date x,Date y)
{
if(x.i!=y.i)
return x.i>y.i;
return x.c<y.c;
}
int main()
{
int t;
cin>>t;
for(int i=1;i<=t;i++)
cin>>data[i].i>>data[i].c;
sort(data+1,data+t+1,cmp);
for(int i=1;i<=t;i++)
{
cout<<"["<<data[i].i<<","<<data[i].c<<"]";
if(i!=t)
cout<<";";
}
cout<<endl;
return 0;
}