大学计算机复试上机2005-2007(由林子整理 :170479150)· 2005年大学计算机学院考研复试上机试题与参考答案(1/5) 第一题:A+B(10分)[结题]题目要求:读入两个小于100的正整数A和B,计算A+B需要注意的是:A和B的每一位数字由对应的英文单词给出输入格式:测试输入包含若干测试用例,每个测试用例占一行,格式为"A+ B =",相邻两字符串有一个空格间隔当A和B同时为0时输入结束,相应的结果不要输出输出格式:对每个测试用例输出1行,即A+B的值输入样例:one + two =three four + five six =zero seven + eight nine =zero + zero =输出样例:39096#include #include #include #include int main(void){ const char data[12][6] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "+", "="}; unsigned a, b; /* 转换后的表达式参数,如a+b(123+456) */ unsigned i, j, k; /* 临时变量,作为下标 */ char str[100]; /* 输入字符串,足够大容量 */ char temp[6]; /* 临时字符串,用于检索数字,如"one"->'1' */ char result[30]; /* 转换后的表达式参数,如"123+456=" */ do{ a = b = i = j = k = 0; /* 初始化变量 */ memset(str, 0, sizeof(str)); memset(temp, 0, sizeof(temp)); memset(result, 0, sizeof(result)); gets(str); /* 获取输入字符串,不能使用scanf,因为有空格 */ for(i=0, k=0; i
现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人输入格式:测试输入的第一行给出记录的总天数N ( > 0 )下面列出了N天的记录每天的记录在第一行给出记录的条目数M ( > 0 ),下面是M行,每行的格式为 证件 签到时间签离时间其中时间按“小时:分钟:秒钟”(各占2位)给出,证件是长度不超过15的字符串输出格式:对每一天的记录输出1行,即当天开门和关门人的证件,中间用1空格分隔注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况输入样例:31ME21 00:00:00 23:59:592EE301218 08:05:35 20:56:35MA301134 12:35:45 21:40:423CS301111 15:30:28 17:00:10SC3021234 08:00:00 11:25:25CS301133 21:45:00 21:58:40输出样例:ME21 ME21EE301218 MA301134SC3021234 CS301133#include #include #include typedef struct{ char id[16]; /* 证件长度不超过15位 */ char cometime[9]; /* 时间格式00:00:00 */ char leavetime[9]; /* 时间格式00:00:00 */}Record;int main(){ int N, M, i; /* 记录的总天数N,每天记录的条目数M */ Record *pTimeList;/* 记录该天出入人员的证件、进入时间、离开时间 */ int first, last; /* 记录每天开门的人和关门的人 */ scanf("%d",& N); /* 读入记录的总天数 */ while(N--) { scanf("%d", & M); /* 读入该天的进出人员数 */ pTimeList = (Record *)malloc(M*sizeof(Record)); for(i=0,first=0,last=0; i 0 ) first = i; if( strcmp( pTimeList[last].leavetime, pTimeList[i].leavetime) < 0) last = i; } } /* for i */ printf("%s %s\n", pTimeList[first].id, pTimeList[last].id); free(pTimeList); } /* for N */}· 2005年大学计算机学院考研复试上机试题与参考答案(3/5) 第三题:分数统计(12分)题目要求:今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。
给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印输入格式:测试输入包含若干场考试的信息每场考试信息的第1行给出考生人数N ( 0 < N < 1000 )、考题数M ( 0 < M < = 10)、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的号(长度不超过20的字符串)、该生解决的题目总数m、以与这m道题的题号(题目号由1到M)当读入的考生人数为0时,输入结束,该场考试不予处理输出格式:对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔若有多名考生分数相同,则按他们考号的升序输出输入样例:4 5 2510 10 12 13 15CS004 3 5 1 3CS003 5 2 4 1 3 5CS002 2 1 2CS001 3 2 3 51 2 4010 30CS001 1 22 3 2010 10 10CS1 0CS2 2 1 20输出样例:3CS003 60CS001 37CS004 3701CS2 20#include #include #include typedef struct{ char id[21]; /* 号(<=20字符) */ int score; /* 该考生总分 */}StuInfo;int main(){ int N, M, G, n; /* 考生人数,题目数,分数线,上线考生数量 */ int *pMarkList; /* 第1题至第M题的正整数分值 */ StuInfo *pStuinfo; /* 考生信息 */ int i,j,k,a,b,c,m; /* 临时变量 */ StuInfo tmp; /* 用于排序 */ while( scanf("%d", &N ) && N!=0 ) /* 读入考生人数N */ { scanf("%d%d", &M, &G); /* 读入题目数量和分数线 */ pMarkList = (int *)malloc(M*sizeof(int)); /* M道题目的分数 */ pStuinfo = (StuInfo *)malloc(N*sizeof(StuInfo)); /* N个考生 */ for(i=0; i= G) /* 如果考生上线则记录。