题目描述
依次给你n个学生的姓名、学号,然后Q次询问,对于每一次询问你会得到一个学号,请你输出该学号对应的姓名。
输入
第一行输入一个整数n(1<=n<=100),然后n行,每行输入一个长度不超过15的字符串s,表示姓名和一个10位整数,表示学号。(学号保证没有前导零且每个学号都不相同) 再输入一个整数Q(0<=Q<=10),紧接着Q次询问,每次询问输入一个10位整数,表示询问的学号。(保证询问的学号存在)
输出
对于每一次询问输出与学号对应的姓名。
样例
输入 Copy 5 Anoyer 1000000000 LZH 1314521520 ZZ 9876543210 zhangfei 1234567890 ayi 5432198760 2 1314521520 1000000000
输出 Copy LZH Anoyer
来源/分类
结构体
题解
以下是一个基本的 C 语言程序,用于实现所描述的功能:
#include <stdio.h>
#include <string.h>
#define MAX_N 100
#define ID_LENGTH 11
/* 定义学生结构体 */
struct student {
char name[16];
char id[ID_LENGTH];
};
int main() {
int n, q, i, j;
struct student students[MAX_N];
/* 读入学生信息 */
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %s", students[i].name, students[i].id);
}
/* 处理查询请求 */
scanf("%d", &q);
for (i = 0; i < q; i++) {
char query[ID_LENGTH];
scanf("%s", query);
/* 在学生列表中查找该学号对应的姓名 */
for (j = 0; j < n; j++) {
if (strcmp(students[j].id, query) == 0) {
printf("%s\n", students[j].name);
break;
}
}
}
return 0;
}
程序首先定义了一个结构体 student
,表示一个学生的信息。该结构体包含两个成员变量:name
表示学生姓名,类型为字符数组,长度为 16;id
表示学生学号,类型为字符数组,长度为 11。
然后程序读入了一个整数 n
,表示学生数量。接下来的 n
行每行输入一个字符串 s
,即学生姓名和学号,其中姓名和学号用一个空格分隔。程序将读入的学生信息存储在一个长度为 n
的结构体数组 students
中。
接着程序读入一个整数 q
,表示查询请求的数量。程序使用一个循环处理每个查询请求:首先读入一个字符串 query
,表示要查询的学号;然后在学生列表中查找该学号对应的姓名,并输出结果。如果在列表中没有找到对应的学号,则程序不会输出任何内容。
注意,在本程序中,我们使用了 C 语言标准库中的 strcmp
函数来比较两个字符串是否相等。该函数返回值为 0 表示两个字符串相等。
问题描述
本题C链表结构体定义如下 struct lis{ int v; struct lis* next; }; typedef struct lis* Lis; 要求实现函数 int sum(Lis head)//返回以head为头指针(本身不存值)的链表各个结点值的和输入 一个数n,代表链表的长度 接下来n个数ai,代表每个节点的内容
n与ai范围[1,100]
输出
一行和
样例
样例输入 Copy 3 1 2 3 样例输出 Copy 6
下面是一个实现题目要求的 C 语言函数 sum
的代码:
int sum(Lis head) {
int sum = 0;
Lis curr = head->next;
while (curr != NULL) {
sum += curr->v;
curr = curr->next;
}
return sum;
}
该函数计算以参数 head
所指向的链表头结点为头节点的链表中各个结点值的和,并将结果作为返回值返回。其中,参数 head
是一个指向链表头节点的指针,链表的每个节点由结构体 lis
表示,其中 v
成员变量存储该节点的值,next
成员变量存储指向下一个节点的指针。
在代码中,我们首先将变量 sum
初始化为 0,然后从链表的第二个节点开始遍历整个链表。遍历过程中,对于每个节点,我们将其值加到 sum
中,然后继续遍历下一个节点。当遍历到链表尾部时,我们退出循环并返回 sum
。
需要注意的是,在链表中,头结点本身不存储任何实际数据,仅用于标记链表的起始位置。因此,我们在遍历链表时应从头结点的 next
指针所指向的节点开始遍历。
问题描述
本题C链表结构体定义如下 struct lis{ int v; struct lis* next; }; typedef struct lis* Lis; 要求实现函数 int sum(Lis head)//返回以head为头指针(本身不存值)的链表各个结点值的和输入 一个数n,代表链表的长度 接下来n个数ai,代表每个节点的内容
n与ai范围[1,100]
输出
一行和
样例
样例输入 Copy 3 1 2 3 样例输出 Copy 6
下面是一个实现题目要求的 C 语言函数 sum
的代码:
int sum(Lis head) {
int sum = 0;
Lis curr = head->next;
while (curr != NULL) {
sum += curr->v;
curr = curr->next;
}
return sum;
}
该函数计算以参数 head
所指向的链表头结点为头节点的链表中各个结点值的和,并将结果作为返回值返回。其中,参数 head
是一个指向链表头节点的指针,链表的每个节点由结构体 lis
表示,其中 v
成员变量存储该节点的值,next
成员变量存储指向下一个节点的指针。
在代码中,我们首先将变量 sum
初始化为 0,然后从链表的第二个节点开始遍历整个链表。遍历过程中,对于每个节点,我们将其值加到 sum
中,然后继续遍历下一个节点。当遍历到链表尾部时,我们退出循环并返回 sum
。
需要注意的是,在链表中,头结点本身不存储任何实际数据,仅用于标记链表的起始位置。因此,我们在遍历链表时应从头结点的 next
指针所指向的节点开始遍历。