下午不想复习,会来宿舍刷了会ACM题。其实是第一次提交ACM试题。早都指到ACM比赛也很想参加,可是大一大二都在忙着看课本没有怎么花时间搞ACM,最近重温C语言加上有段时间没写程序了,突然心血来潮ACM了一把。几个小时还是有收获的。
主要是有一道题:
查找学生信息
- 题目描述:
- 输入N个学生的信息,然后进行查询。
- 输入:
- 输入的第一行为N,即学生的个数(N<=1000)接下来的N行包括N个学生的信息,信息格式如下:01 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 19然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:02030104
- 输出:
- 输出M行,每行包括一个对应于查询的学生的信息。如果没有对应的学生信息,则输出“No Answer!”
- 样例输入:
-
401 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 1950203010403
- 样例输出:
-
02 刘唐 男 2303 张军 男 1901 李江 男 2104 王娜 女 1903 张军 男 19
- 来源:
- 答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问:
1、c里是没有new关键字的!那个东西是c++的。
struct stu { char id[5]; char name[12]; char sex[4]; int age; }; struct stu *s; int selNum; scanf("%d",&stuNum); s= new (struct stu[stuNum]);
在c里面是错误的。
2、关于数组大小。
struct stu
{
char id[5];
char name[12];
char sex[4];
int age;
};
这样定义是出错,结果把数组大小调大就可以了。
3、题目不是很难,就是要注意细节。
睡觉了!
我的代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 100 struct stu { char id[MAX_LEN]; char name[MAX_LEN]; char sex[MAX_LEN]; int age; }; struct stu * selectStu(char *id,struct stu *s); int stuNum; int main(void) { struct stu *s; struct stu *mystu; int selNum; char selId[5]; int i; scanf("%d",&stuNum); s= (struct stu *)calloc(stuNum,sizeof(struct stu)); for (i=0;i<stuNum;i++) { scanf("%s%s%s%d",s[i].id,s[i].name,s[i].sex,&(s[i].age)); } scanf("%d",&selNum); for (i=0;i<selNum;i++) { scanf("%s",selId); mystu = selectStu(selId,s); if (mystu==NULL) { printf("No Answer!\n"); } else { printf("%s %s %s %d\n",mystu->id,mystu->name,mystu->sex,mystu->age); } } free(s); return 0; } struct stu * selectStu(char *id,struct stu *s) { int i; for (i=0;i<stuNum;i++) { if (!strcmp(id,s[i].id)) { return &s[i]; } } return NULL; }