6-1 按等级统计学生成绩 (20 分)
本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。 函数接口定义:
int set_grade( struct student *p, int n );其中p是指向学生信息的结构体数组的指针,该结构体的定义为:
struct student{ int num; char name[20]; int score; char grade; };n是数组元素个数。学号num、姓名name和成绩score均是已经存储好的。set_grade函数需要根据学生的成绩score设置其等级grade。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时,set_grade还需要返回不及格的人数。 裁判测试程序样例:
#include <stdio.h> #define MAXN 10 struct student{ int num; char name[20]; int score; char grade; }; int set_grade( struct student *p, int n ); int main() { struct student stu[MAXN], *ptr; int n, i, count; ptr = stu; scanf("%d\n", &n); for(i = 0; i < n; i++){ scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score); } count = set_grade(ptr, n); printf("The count for failed (<60): %d\n", count); printf("The grades:\n"); for(i = 0; i < n; i++) printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade); return 0; }/* 你的代码将被嵌在这里 */ 输入样例:
10 31001 annie 85 31002 bonny 75 31003 carol 70 31004 dan 84 31005 susan 90 31006 paul 69 31007 pam 60 31008 apple 50 31009 nancy 100 31010 bob 78输出样例:
The count for failed (<60): 1 The grades: 31001 annie A 31002 bonny B 31003 carol B 31004 dan B 31005 susan A 31006 paul C 31007 pam C 31008 apple D 31009 nancy A 31010 bob B实验代码:
int set_grade( struct student *p, int n ) { int i,a=0; for(i=0;i<n;i++) { if((*p).score>=85&&(*p).score<=100) (*p).grade='A'; else if((*p).score>=70&&(*p).score<=84) (*p).grade='B'; else if((*p).score>=60&&(*p).score<=69) (*p).grade='C'; else {(*p).grade='D'; a++; } p++; } return a; }流程图 本题倒是没多大问题 只是需要多注意学号查找函数之间的关系这一方面 7-1 一帮一 (15 分)
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。 输入格式: 输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。 输出格式: 每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。 输入样例:
8 0 Amy 1 Tom 1 Bill 0 Cindy 0 Maya 1 John 1 Jack 0 Linda输出样例:
Amy Jack Tom Linda Bill Maya Cindy John实验代码
#include<stdio.h> struct student { int a; char name[10]; int flag; }; int main() { int i,n; struct student students[52]; scanf ("%d",&n); for(i=0;i<n;i++) { scanf("%d %s",&students[i].a,students[i].name); students[i].flag=0; } for (int i=0;i<=n/2;i++) { for (int j=n-1;j>=n/2;j--) { if ((students[i].a!=students[j].a)&&students[i].flag==0&&students[j].flag==0) { printf("%s %s\n",students[i].name,students[j].name); students[i].flag=students[j].flag=1; } } } return 0; }流程图 结构循环不严谨导致两个for循环体同时循环结果计算错误 7-2 考试座位号 (15 分)
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。 输入格式: 输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。 考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。 输出格式: 对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。 输入样例:
4 3310120150912233 2 4 3310120150912119 4 1 3310120150912126 1 3 3310120150912002 3 2 2 3 4输出样例:
3310120150912002 2 3310120150912119 1实验代码
#include<stdio.h> struct a { char num1[100]; int num2; int num3; }; int main() { int i,N; scanf ("%d",&N); struct a s[N]; for(i=0;i<N;i++) { scanf ("%s %d %d\n",s[i].num1,&s[i].num2,&s[i].num3); } int m,n,p[1000]; scanf ("%d\n",&m); for(i=0;i<m;i++) { scanf ("%d",&p[i]); } for(i=0;i<m;i++) { for(n=0;n<N;n++) { if(p[i]==s[n].num2) { printf("%s %d\n",s[n].num1,s[n].num3); } } } return 0; }流程图 题中s[i].flag 和s[j].flag与循环体结构出现错位问题导致计算错误 调动部分顺序计算正确https://img2018.cnblogs.com/blog/1580056/201904/1580056-20190426232107320-1686763399.png) 结对编程感悟:两个人一起解决问题比一个人解决效率和正确率提高 思路也拓宽不少 学习感悟: 对C语言的熟练度进一步提高 还需努力
转载于:https://www.cnblogs.com/cgp233333/p/10776447.html
相关资源:各显卡算力对照表!