《算法笔记》2.8小节——C/C++快速入门->结构体(struct)的使用
1303 Problem A C语言11.1
#include <cstdio>
#include <cstring>
int main() {
struct person {
char name[20];
int count;
}leader[3] = { "Li", 0, "Zhang", 0, "Fun", 0 };
int num;
scanf("%d", &num);
for (int i = 0; i < num; i++) {
char toupiao[20];
scanf("%s", &toupiao);
if (strcmp(toupiao, leader[0].name) == 0) {
leader[0].count++;
}
else if (strcmp(toupiao, leader[1].name) == 0) {
leader[1].count++;
}
else leader[2].count++;
}
for (int i = 0; i < 3; i++) {
printf("%s:%d\n", leader[i].name,leader[i].count);
}
return 0;
}
1304 Problem B C语言11.2
#include <stdio.h>
#include <string.h>
//#include <stdlib.h>
//#include <iostream>
//using namespace std;
struct student {
int num;
char name[20];
char sex;
int age;
};
int main() {
int num = 0;
scanf("%d", &num);
student stu[20];
student *p = stu;
for (int i = 0; i < num; i++) {
scanf("%d %s %c %d", &(p + i)->num, &(p + i)->name, &(p + i)->sex, &(p + i)->age);
}
//scanf中间必须要加空格,也就是要与输入的格式一致
for (int i = 0; i < num; i++) {
printf("%d %s %c %d\n", (p + i)->num, (p + i)->name, (p + i)->sex, (p + i)->age);
}
/* for (int i = 0; i < num; i++) {
cin >> (p + i)->num >> (p + i)->name >> (p + i)->sex >> (p + i)->age;
cout << (p + i)->num << " " << (p + i)->name << " " << (p + i)->sex << " " << (p + i)->age << endl;;
}
*/
return 0;
}
1306 Problem C C语言11.4
#include <stdio.h>
#include <string.h>
struct{
int num;
char name[10];
char sex;
char job;
union {
int sclass; //class是类声明的关键字,不能用来定义变量
char position[10];
}category;
}stuff[100];
int main() {
int num;
scanf("%d", &num);
for (int i = 0; i < num; i++) {
scanf("%d %s %c %c", &stuff[i].num, &stuff[i].name, &stuff[i].sex, &stuff[i].job);
if (stuff[i].job == 's') scanf("%d", &stuff[i].category.sclass);
else scanf("%s", &stuff[i].category.position);
}
for (int i = 0; i < num; i++) {
printf("%d %s %c %c ", stuff[i].num, stuff[i].name, stuff[i].sex, stuff[i].job);
if (stuff[i].job == 's') printf("%d\n", stuff[i].category.sclass);
else printf("%s\n", stuff[i].category.position);
}
return 0;
}
1309 Problem D C语言11.7
#include <stdio.h>
struct{
int num;
char name[20];
int score1, score2, score3;
}student[5];
void input();
void print();
int main() {
input(); //结构体不能作为参数;数组可以
print();
return 0;
}
void input() {
for (int i = 0; i < 5; i++) {
scanf("%d %s %d %d %d", &student[i].num, &student[i].name, &student[i].score1, &student[i].score2, &student[i].score3);
}
}
void print() {
for (int i = 0; i < 5; i++) {
printf("%d %s %d %d %d\n", student[i].num, student[i].name, student[i].score1, student[i].score2, student[i].score3);
}
}
1310 Problem E C语言11.8
#include <stdio.h>
struct student{
int num;
char name[20];
int score1, score2, score3;
}stu[10];
void input();
void advance(double &,double &, double &, int &);
void output(double &, double &, double &, int &);
int main() {
double num1=0.0, num2=0.0, num3=0.0;
int maxnum=0;
input();
advance(num1, num2, num3,maxnum);
output(num1, num2, num3, maxnum);
return 0;
}
void input() {
for (int i = 0; i < 10; i++) {
scanf("%d %s %d %d %d", &stu[i].num, &stu[i].name, &stu[i].score1, &stu[i].score2, &stu[i].score3);
}
}
void advance(double &num1, double &num2, double &num3, int &maxnum) {
int sum = 0, max = 0;
for (int i = 0; i < 10; i++) {
num1 += stu[i].score1;
num2 += stu[i].score2;
num3 += stu[i].score3;
sum = (stu[i].score1 + stu[i].score2 + stu[i].score3) / 3;
if (max < sum) {
max = sum;
maxnum = i;
}
}
}
void output (double &num1, double &num2, double &num3, int &maxnum) {
printf("%.2f %.2f %.2f\n%d %s %d %d %d", num1/10, num2/10, num3/10, stu[maxnum].num, stu[maxnum].name, stu[maxnum].score1, stu[maxnum].score2, stu[maxnum].score3);
}