【结构体】习题

沈阳航空航天大学习题的整理,仅供参考。

1.生日相同问题

【问题描述】

在一个有n个学生的大班级中,存在两个学生生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。(只有一组生日相同的情况,不存在多组)

【输入形式】

第1行为正整数n,表示有n个学生,n≦100。

此后n行,每行包含一个字符串和两个正整数,分别表示学生的名字(名字中不含空格,且长度小于20)和出生月m、出生日d,1≦m≦12,1≦d≦31,名字、月、日之间用一个空格分隔。

【输出形式】

每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对生日相同的名字,按输入顺序输出。如果没有生日相同的学生,输出“None”。
【样例输入】

6

Avril 3 2

Candy 4 4

Tim 3 2

Sufia 4 5

Lagrange 4 7

Bill 3 2
【样例输出】

3 2 Avril Tim Bill

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
struct stu
{
	char name[20];
	int m, d;
};
int main()
{
	int n, i, j;
	scanf("%d", &n);
	stu s[100] = { 0 };
	for (i = 0; i < n; i++)
	{
		scanf("%s %d %d", s[i].name, &s[i].m, &s[i].d);
	}
	int flag = 0;
	int m = 0;
	for (i = 0; i < n; i++)
	{
		for (j = i + 1; j < n; j++)
		{
			if (s[i].m == s[j].m && s[i].d == s[j].d)
			{
				if (flag == 0)
				{
					printf("%d %d %s %s ", s[i].m, s[i].d, s[i].name, s[j].name);
					flag = 1;
					strcpy(s[j].name, " ");
				}
				else
				{
					printf("%s ", s[j].name);
					strcpy(s[j].name, " ");

				}
			}
		}
		printf("\n");
	}
	if (!flag)
		printf("None");
	return 0;
}

2.某班劳动之星选举程序

【问题描述】某班劳动之星选举程序

某班学生信息包括以下几项:学号、姓名和性别。定义一个结构体数组来保存学生信息,从键盘输入学生数 n 和 n 个学生的数据;再输入一组投票数据:学生的学号,非正数代表输入结束。输出得票数最高的学生信息,同票的要全部输出(最多两人同票),各占一行。

【输入形式】输入学生数 n 和 n 个学生的数据;再输入一组投票数据:学生的学号。

【输出形式】输出得票数最高的学生信息。

【样例输入】

3

101 jhko F

102 it99 M

103 oiug M

101 101 101 101 103 103 102 101 0

【样例输出】

101 jhko F

【样例输入】

4

5 K F

6 T F

8 A M

9 V M

5 6 8 9 8 8 5 5 -1

【样例输出】

5 K F

8 A M

【样例说明】提示:n 个学生按照得票数进行降序排序后再输出满足条件的学生信息。不定义结构体数组0分。

#include <stdio.h>
 
// 定义学生结构体
typedef struct
{
    int id;
    char name[20];
    char gender;
} Student;
 
int main()
{
    int n, vote;
    scanf("%d", &n);
 
    // 创建并初始化学生信息数组
    Student students[100];
    for (int i = 0; i < n; ++i)
    {
        scanf("%d %s %c", &students[i].id, students[i].name, &students[i].gender);
    }
 
    // 初始化投票计数器
    int votes[100];
    for (int i = 0; i < n; ++i)
    {
        votes[i] = 0;
    }
 
    // 输入投票数据并统计票数
    while (1)
    {
        scanf("%d", &vote);
        if (vote <= 0)
        {
            break;
        }
        for (int i = 0; i < n; ++i)
        {
            if (students[i].id == vote)
            {
                votes[i]++;
                break;
            }
        }
    }
 
    // 找出得票最多的学号及其票数
    int max_votes = 0, max_count = 0;
    for (int i = 0; i < n; ++i)
    {
        if (votes[i] > max_votes)
        {
            max_votes = votes[i];
            max_count = 1;
        } else if (votes[i] == max_votes)
        {
            max_count++;
        }
    }
 
    // 输出得票最多的学生信息
    for (int i = 0; i < n; ++i)
    {
        if (votes[i] == max_votes)
        {
            printf("%d %s %c\n", students[i].id, students[i].name, students[i].gender);
        }
    }
 
    return 0;
}

3.谁的年龄是居中年龄

【问题描述】设有n个人的姓名和年龄存在数组中,输出这些人年龄居中的年龄,和同年龄的所有人姓名(如多人,姓名按字母顺序排序),如偶数算中间两人平均值,没有相同年龄则输出error。
【输入形式】人数 姓名 年龄
【输出形式】年龄 姓名
【样例输入】
5

Ewry 32

Jdkfg 54

Dfhsj 20

Kvirk 32

Sgkf 53 
 

【样例输出】32 Ewry Kvirk

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

struct man
{
	char name[50];
	int age;
}; 
struct man s[10];
int main() {
	int n, i, j;
	int arr[10] = { 0 };
	int a = 1, f1 = 0, f2 = 0;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%s %d", s[i].name, &s[i].age);
		arr[i] = s[i].age;
	}
	int t;
	for (i = 0; i < n - 1; i++)
	{
		for (j = 0; j < n - 1 - i; j++)
		{
			if (arr[j] < arr[j + 1])
			{
				t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
			}
		}
	}
	if (n % 2 != 0 && n != 1)
	{
		printf("%d ", arr[(n - 1) / 2]);
		for (i = 0; i < n; i++)
		{
			for (j = i + 1; j < n; j++)
			{
				if (s[i].age == s[j].age)
				{
					f1 = 1;
					printf("%s %s", s[i].name, s[j].name);
				}
			}
		}
		if (f1 == 0)
		{
			for (i = 0; i < n; i++)
			{
				if (s[i].age == arr[(n - 1) / 2])
				{
					printf("%s", s[i].name);
					a = 0;
				}
			}
			if (a)printf("error");
		}
	}
	if (n == 1)
	{
		printf("error");
	}
	if (n % 2 == 0)
	{
		a = (arr[n / 2 - 1] + arr[n / 2]) / 2;
		printf("%d ", a);
		for (i = 0; i < n; i++)
		{
			for (j = i + 1; j < n; j++)
			{
				if (s[i].age == s[j].age)
				{
					f2 = 1;
					printf("%s %s", s[i].name, s[j].name);
				}
			}

		}
		if (f2 == 0)
			printf("error");
	}
	return 0;
}

4.奖金计算

【问题描述】

单位根据员工的销售成绩计算发给员工的奖金,A商品(单价100元)销售到达200以上,奖励总销售额的10%,200到100之间奖励总销售额的5%,100以下无奖励;B商品销售到达200以上,奖励2000元,200到100之间奖励1000,100以下奖励500;请计算给出每个员工获得的奖金数目。

【输入形式】姓名 A数量 B数量

当输入姓名为"#"时表示输入结束。

【输出形式】姓名 奖金
【样例输入】

zs 320 270

lis 207 388

we 188 46

ss 34 300

sd 56 170

# 0 0 0

【样例输出】

zs 5200

lis 4070

we 1440

ss 2000

sd 1000

#include<stdio.h>
#include<math.h>
#include<string.h>
struct
{
	char name[50];
	char s[50];
	int m;
	long a, b;
}q[50];
int main()
{

	int i, j = 0;
	char x[2] = { '#','\0' };
	for (i = 0;; i++)
	{
		scanf("%s %ld %ld\n", q[i].name, &q[i].a, &q[i].b);
		if (strcmp(q[i].name, x) == 0)
			break;
		j++;
	}
	for (i = 0; i < j; i++)
	{
		if (q[i].a > 200 && q[i].b > 200)
			q[i].m = q[i].a * 100 * 0.1 + 2000;

		if (q[i].a > 200 && q[i].b >= 100 && q[i].b <= 200)
			q[i].m = q[i].a * 100 * 0.1 + 1000;

		if (q[i].a > 200 && q[i].b < 100)
			q[i].m = q[i].a * 100 * 0.1 + 500;

		if (q[i].a >= 100 && q[i].a <= 200 && q[i].b > 200)
			q[i].m = q[i].a * 100 * 0.05 + 2000;

		if (q[i].a >= 100 && q[i].a <= 200 && q[i].b >= 100 && q[i].b <= 200)
			q[i].m = q[i].a * 100 * 0.05 + 1000;

		if (q[i].a >= 100 && q[i].a <= 200 && q[i].b < 100)
			q[i].m = q[i].a * 100 * 0.05 + 500;

		if (q[i].a < 100 && q[i].b>200)
			q[i].m = 2000;

		if (q[i].a < 100 && q[i].b >= 100 && q[i].b <= 200)
			q[i].m = 1000;

		if (q[i].a < 100 && q[i].b < 100)
			q[i].m = 500;

		printf("%s %ld\n", q[i].name, q[i].m);
	}
	return 0;
}

5.ACM比赛排名

【问题描述】ACM网络编程擂台赛比赛完后需要产生一个最终排名,排名按照完成题数多少来决定。但是有太多的队伍参与,手动计算排名已经不能满足比赛的需求。现在有一份名单记录各个队伍的ID和做出的题目数,需要你写一个程序,产生最终的排名。 

为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,假设所有队伍完成的题目数量都不同。 

【输入形式】第一行有一个正整数N(0<N<100),表示队伍数量。接下来N 行包含两个整数,分别为队伍的编号,和该队做出的题数。
【输出形式】每组数据输出包含N行,第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。
【样例输入】

1 3 

16 5 

11 2 

20 4 

3 8 

26 7

7 1 

22 6 

【样例输出】

3 8 

26 7

22 6 

16 5 

20 4 

1 3

11 2 

7 1

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <cstdlib>

// 定义结构体来存储队伍信息
typedef struct {
    int id;
    int solved;
} Team;

// 比较函数,用于排序时比较两个队伍的完成题数
int compare(const void* a, const void* b) {
    Team* team1 = (Team*)a;
    Team* team2 = (Team*)b;

    return team2->solved - team1->solved; // 降序排列(题目数量多的队伍排在前面)
}

int main() {
    int n, i;
    scanf("%d", &n);

    // 创建并初始化队伍数组
    Team teams[n];
    for (i = 0; i < n; i++) {
        scanf("%d %d", &teams[i].id, &teams[i].solved);
    }

    // 对队伍进行排序
    qsort(teams, n, sizeof(Team), compare);

    // 输出结果
    for (i = 0; i < n; i++) {
        printf("%d %d\n", teams[i].id, teams[i].solved);
    }

    return 0;
}

6.销售记录排序

【问题描述】现有若干条销售记录,每个产品的销售记录由产品代码(整型),产品名称(字符型十位),单价(整型),数量(整型),金额(整型)五部分组成,其中:前四部分直接输入,而金额使用公式计算得出,即,金额=单价*数量。

要求:读取销售记录,使用结构体数组进行保存,编写计算金额函数,计算每条销售记录的金额,最后对销售记录按金额从小到大进行排序输出。


【输入形式】输入第一行为产品个数n(n<10),以下n行为销售记录,包括产品代码(整型),产品名称(字符型十位),单价(整型),数量(整型)
【输出形式】输出排好的销售记录,包括所有信息。
【样例输入】

8

1010 PVS1966-A1 580 22 

1011 PVS1966-A2 281 95

1012 AA-LG65M-A 494 51

1013 AA-PV45M-A 128 56

1014 AA-PV45P-A 998 5

1015 AA-PV70M-A 407 29

1016 AA-PV36P-B 786 19

1017 AA-PV36P-A 149 192

【样例输出】

1014 AA-PV45P-A 998 5 4990

1013 AA-PV45M-A 128 56 7168

1015 AA-PV70M-A 407 29 11803

1010 PVS1966-A1 580 22 12760

1016 AA-PV36P-B 786 19 14934

1012 AA-LG65M-A 494 51 25194

1011 PVS1966-A2 281 95 26695

1017 AA-PV36P-A 149 192 28608

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

// 定义结构体来存储销售记录信息
typedef struct {
    int code;
    char name[11];
    int price;
    int quantity;
    int amount;
} SaleRecord;

// 计算金额函数
void calculate_amount(SaleRecord* record) {
    record->amount = record->price * record->quantity;
}

// 比较函数,用于排序时比较两个销售记录的金额
int compare(const void* a, const void* b) {
    SaleRecord* sale1 = (SaleRecord*)a;
    SaleRecord* sale2 = (SaleRecord*)b;

    return sale1->amount - sale2->amount; // 升序排列(金额小的排在前面)
}

int main() {
    int n, i;
    scanf("%d", &n);

    // 创建并初始化销售记录数组
    SaleRecord sales[100];
    for (i = 0; i < n; i++) {
        scanf("%d %s %d %d", &sales[i].code, sales[i].name, &sales[i].price, &sales[i].quantity);
        calculate_amount(&sales[i]);
    }

    // 对销售记录进行排序
    qsort(sales, n, sizeof(SaleRecord), compare);

    // 输出结果
    for (i = 0; i < n; i++) {
        printf("%d %s %d %d %d\n", sales[i].code, sales[i].name, sales[i].price, sales[i].quantity, sales[i].amount);
    }

    return 0;
}

7.找出年龄最小的学生(结构体嵌套定义实现)

【问题描述】输入6名同学信息,同学信息包括,学号,姓名,生日(年,月,日),生日信息用一个独立的结构体表示。找出年龄最小的同学,并输出该同学的所有信息。
【输入形式】输入6名同学的信息,每个同学占一行,行内信息用空格隔开。
【输出形式】输出年龄最小的同学所有信息
【样例输入】一个同学一行,一行内每个同学的信息用单个空格隔开

11001 zhangxiao 1989 12 1
11002 wangman  1990 2 4
11003 liyu 1987 6 1
11004 shencheng 1989 12 3
11005 mengtao 1992 2 3
11006 huafeng 1992 2 5
【样例输出】输出信息之间用单个空格隔开

11006 huafeng 1992 2 5

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

struct birthday
{
	int year, month, day;
};
struct student
{
	int n, age;
	char name[50];
	struct birthday b;
}; struct student n[10];
int main()
{
	int i, j;
	struct student s;
	for (i = 0; i < 6; i++)
	{
		scanf("%d %s %d %d %d\n", &n[i].n, n[i].name, &n[i].b.year, &n[i].b.month, &n[i].b.day);
	}
	struct student age[10] = { 0 };

	for (i = 0; i < 6 - 1; i++)
	{
		for (j = 0; j < 6 - 1 - i; j++)
		{
			if (n[j].b.year > n[j + 1].b.year)
			{
				s = n[j]; n[j] = n[j + 1]; n[j + 1] = s;
			}
		}
	}
	for (i = 0; i < 6 - 1; i++)
	{
		for (j = 0; j < 6 - 1 - i; j++)
		{
			if (n[j].b.month > n[j + 1].b.month && n[j].b.year == n[j + 1].b.year)
			{
				s = n[j]; n[j] = n[j + 1]; n[j + 1] = s;
			}
		}
	}
	for (i = 0; i < 6 - 1; i++)
	{
		for (j = 0; j < 6 - 1 - i; j++)
		{
			if (n[j].b.month == n[j + 1].b.month && n[j].b.day > n[j + 1].b.day && n[j].b.year == n[j + 1].b.year)
			{
				s = n[j]; n[j] = n[j + 1]; n[j + 1] = s;
			}
		}
	}
	printf("%d %s %d %d %d", n[5].n, n[5].name, n[5].b.year, n[5].b.month, n[5].b.day);
	return 0;
}

8.求解两点间距离

【问题描述】求解平面直角坐标系下两点间的距离,要求用结构体存储点信息。
【输入形式】输入两个点坐标。
【输出形式】输出两点间的距离。
【样例输入】2.3 2.1 5.6 1.2(首先输入第一个点的横坐标和纵坐标,然后再输入第二个点的信息,数据之间用单个空格隔开)

【样例输出】3.42(输出两点间的距离保留2位小数)

#include <iostream>
#include <stdio.h>
#include <math.h>
struct point
{
	double x,y;
};
//定义距离计算函数
double distance(struct point p1, struct point p2) {
    return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}

int main()
{
	point p1,p2;
        double dis;
        //输入两点坐标
scanf("%lf %lf", &p1.x, &p1.y);scanf("%lf %lf", &p2.x, &p2.y);
	//调用距离计算函数
dis = distance(p1, p2);
        printf("%.2lf",dis);

}

9.根据年月日计算天数

【问题描述】定义一个结构体变量(包括年、月、日),输入一个日期,计算在本年中是第几天,注意闰年问题。

(闰年判断方法是:1、能被4整除,但不能被100整除;2、能被400整除。这两个条件有一个能满足就说明该年是闰年)

【输入形式】年<空格>月<空格>日,数据之间用单个空格隔开

【输出形式】天数

【样例输入】2015 3 18

【样例输出】77

【样例输入】2000 3 18

【样例输出】78

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

struct date
{
    int year,month,day;
};

int count(struct date d)
{
int sum = 0;
    int isLeap = (d.year % 4 == 0 && d.year % 100 != 0) || (d.year % 400 == 0);

    // 闰年的天数数组
    int leapDays[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    // 非闰年的天数数组
    int normalDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    for (int i = 0; i < d.month - 1; ++i) {
        if (isLeap) {
            sum += leapDays[i];
        } else {
            sum += normalDays[i];
        }
    }

    sum += d.day;

    return sum;
}


int main()
{
      struct date d;
      scanf("%d %d %d", &d.year,&d.month,&d.day);
      printf("%d",count(d));
}

10.投票竞选班长程序

【问题描述】某班级选班长,有3个候选人,分别是li, liu, sun ,多名同学参加投票,输入end结束(输入字符串不能包含空格),统计每个人的得票数。
【输入形式】
【输出形式】
【样例输入】li li liu liu liu sun end

【样例输出】li:2 liu:3 sun:1

#include<stdio.h>
#include<string.h>
int main()
{ struct person
    {  char name[20];
       int  count;
    }  leader[3]={"li",0,"liu",0,"sun",0};
  int i,j;
  char leader_name[20];
      while (1) {
          scanf("%s", leader_name);
  
          if (strcmp(leader_name, "end") == 0)
              break;
  
          for (i = 0; i < 3; i++) {
              if (strcmp(leader[i].name, leader_name) == 0) {
                  leader[i].count++;
                  break;
              }
          }
      }
  for(i=0;i<3;i++)
       printf("%s:%d ",leader[i].name,leader[i].count);  
  return 0;
}

11.查找 QQ 群不活跃成员

【问题描述】声明日期结构体类型,包括年、月两项;声明 QQ 群结构体类型,包括QQ号(建议声明为字符串),群昵称和最后说话时间三项,其中最后说话时间应声明为日期结构体类型。输入群成员和待比较日期,输出和待比较日期相比大于等于 6 个月不说话的所有群成员。

【输入形式】输入所有群成员,最后说话时间中的月份值非法代表输入结束;再输入待比较日期。

【输出形式】输出和待比较日期相比大于等于 6 个月不说话的所有群成员。

【样例输入】

853216595 ki999 2018 4

12378568 888 2018 3

51236985 k 2017 2

1085126957 sd 2018 4

1075125698 scsb 2017 5

567852 lgsb 2019 14

2018 5

【样例输出】

51236985 k 2017 2

1075125698 scsb 2017 5

【样例输入】

536589 uijh 2018 5

7856231 kjh 2017 10

78561236 jh 2018 3

51236985 k 2017 12

1085126957 sd 2018 4

1075125698 scsb 2018 -5

2018 5

【样例输出】

7856231 kjh 2017 10

#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

//声明日期和群结构体类型(需补充代码3-1)
struct date
{
int year, month;
};
struct qun
{
char num[15];
char name[20];
struct date xda;
};

//输入所有群成员,将实际输入的成员数作为返回值返回
int input_data(struct qun quns[]);
//计算日期差函数,返回差了几个月,da1(2015-11)较旧,da2(2018-2)较新
//若 da1(2017-11),da2(2017-12),则函数应返回 1
int cha(struct date da1,struct date da2);
//输出比较后满足要求的数据
void output_data(struct qun quns[],struct date da,int n);

int main()
{
	struct qun xquns[50];
	struct date xda;
	int n;
	
	n=input_data(xquns);
	//一行代码:读取待比较日期数据(需补充代码3-2)
	scanf("%d %d",&xda.year,&xda.month);
	output_data(xquns,xda,n);
	
	return 0;
}

//实现自定义函数(需补充代码3-3)
int input_data(struct qun quns[])
{
int i;
for(i=0; ;i++){
scanf("%s %s %d %d",quns[i].num,quns[i].name,&quns[i].xda.year,&quns[i].xda.month);
if((quns[i].xda.month<1)||(quns[i].xda.month>12)) 
break;}
return i;}
int cha(struct date da1,struct date da2)
{
int i;
if(da1.year<=da2.year ){
if(da1.month>da2.month)	
	i=(da2.year-da1.year)*12-(da1.month-da2.month);	
else
i=(da2.year-da1.year)*12+(da2.month-da1.month);}
else {
	if(da1.month>da2.month)	
i=(da1.year-da2.year)*12+(da1.month-da2.month); 
else
i=(da1.year-da2.year)*12-(da2.month-da1.month);}
if(i<6)
return 1;
 else return 0;
}
void output_data(struct qun xquns[],struct date xda,int n)
{
int  i, j;
for(i=0;i<n;i++)
{
j=cha(xquns[i].xda,xda);
if(j==0)
printf("%s %s %d %d\n",xquns[i].num,xquns[i].name,xquns[i].xda.year,xquns[i].xda. month);
}
}

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 这个问题可以通过编写C语言代码来解决。首先,可以使用一个循环来遍历每个学生的名字和出生日期,检查其是否有个学生出生日相同。如果发现有个学生的出生日相同,则将这个学生的名字打印出来。完成这个步骤后,你就可以找出所有生日相同的学生了。 ### 回答2: 要找出大班级所有生日相同的学生,可以使用C语言编写一个程序来完成。下面是一个实现的示例: ```c #include <stdio.h> #include <string.h> typedef struct student { char name[20]; int month; int day; } Student; int main() { int n = 180; // 学生数量 Student students[n]; // 输入每个学生的信息 printf("请按下列格式输入学生信息:\n"); printf("姓名 月份 日:\n"); for (int i = 0; i < n; i++) { scanf("%s %d %d", students[i].name, &students[i].month, &students[i].day); } // 检测生日相同的学生 printf("以下学生生日相同:\n"); for (int i = 0; i < n-1; i++) { for (int j = i+1; j < n; j++) { if (students[i].month == students[j].month && students[i].day == students[j].day) { printf("%s 和 %s", students[i].name, students[j].name); printf(" 生日:%d月%d日\n", students[i].month, students[i].day); } } } return 0; } ``` 在程序,我们首先定义了一个名为`Student`的结构体,其包含学生的名字,出生月份和日期。接下来,我们通过一个循环输入每个学生的信息。 随后,我们使用个嵌套的循环来比较每对学生的生日。如果个学生的月份和日期相同,就打印出这个学生的信息和生日。 最后,程序将输出所有生日相同的学生的姓名和生日。 请注意,在这种特定情况下,大班级出现个人生日相同概率常高,并不需要完全遍历所有学生即可找到生日相同的学生。 ### 回答3: 根据题目要求,我们需要找出所有生日相同的学生。我们可以使用C语言实现。 首先,我们可以定义一个结构体来存储每个学生的信息,包括姓名、出生月份和日期。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生结构体 typedef struct { char name[20]; // 姓名 int month; // 出生月份 int day; // 出生日期 } Student; ``` 接下来,我们需要读取学生的信息,并判断是否存在相同生日。我们可以使用一个二维数组来存储学生的信息。数组的每一行表示一个学生的信息,包括姓名、出生月份和日期。我们可以使用层循环来遍历所有的学生,并判断是否存在相同生日。 ```c int main() { int num_students = 180; // 学生总数 Student students[num_students]; // 读取学生的信息 for (int i = 0; i < num_students; i++) { printf("请输入第%d个学生的姓名:", i+1); scanf("%s", students[i].name); printf("请输入第%d个学生的出生月份和日期(用空格分隔):", i+1); scanf("%d %d", &students[i].month, &students[i].day); } // 查找相同生日的学生 for (int i = 0; i < num_students - 1; i++) { for (int j = i + 1; j < num_students; j++) { if (students[i].month == students[j].month && students[i].day == students[j].day) { printf("%s和%s的生日相同:%d月%d日\n", students[i].name, students[j].name, students[i].month, students[i].day); } } } return 0; } ``` 以上代码部分展示了如何读取学生信息,并通过层循环查找相同生日的学生。如果找到了生日相同的学生,将会输出他们的姓名和生日

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lnk_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值