下午不想复习,会来宿舍刷了会ACM题。其实是第一次提交ACM试题。早都指到ACM比赛也很想参加,可是大一大二都在忙着看课本没有怎么花时间搞ACM,最近重温C语言加上有段时间没写程序了,突然心血来潮ACM了一把。几个小时还是有收获的。

主要是有一道题:
查找学生信息 
题目描述:
 输入N个学生的信息,然后进行查询。
输入:
 输入的第一行为N,即学生的个数(N<=1000)
接下来的N行包括N个学生的信息,信息格式如下:
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:
02
03
01
04
输出:
 输出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;
}