问题 | 回答 |
---|---|
这个作业属于哪个课程 | C语言程序设计 |
这个作业要求在哪里 | |
我在这个课程的目标是 | 了解并熟练掌握结构体的使用方法 |
这个作业在哪个具体方面帮助我实现目标 | 使用结构体写题目 |
参考文献 | C语言程序设计 |
基础作业
按等级统计学生成绩
本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。
函数接口定义:
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#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 8531002 bonny 7531003 carol 7031004 dan 8431005 susan 9031006 paul 6931007 pam 6031008 apple 5031009 nancy 10031010 bob 78输出样例:
The count for failed (<60): 1
The grades:31001 annie A31002 bonny B31003 carol B31004 dan B31005 susan A31006 paul C31007 pam C31008 apple D31009 nancy A31010 bob B1)实验代码
int set_grade( struct student *p, int n ){ int count = 0, i; for(i = 0;iscore<60){ p->grade = 'D'; count++; } else if((p->score<70)&&(p->score>=60)){ p->grade = 'C'; } else if((p->score<85)&&(p->score>=70)){ p->grade = 'B'; } else{ p->grade = 'A'; } p++; } return count;}
2)流程图
3)本题调试过程碰到的问题及解决办法
比较简单,就是要用到if-else语句,分成四种情况按题目要求输出。没什么问题。
4)运行结果截图
5)评价
感想:比较简单的指针的自定义函数,在使用结构指针访问结构成员时,通常使用结构运算符 ->
我学会了下面三条语句是一样的:s1.num=101;(*p).num=101;p->=101一帮一
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式:
输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。
输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。
输入样例:
8
0 Amy1 Tom1 Bill0 Cindy0 Maya1 John1 Jack0 Linda输出样例:
Amy Jack
Tom LindaBill MayaCindy John1)实验代码
1 #include2 struct stu{ 3 int sex; 4 char name[9]; 5 }; 6 int main() 7 { 8 struct stu p[50]; 9 int n,flag,biao=0;10 scanf("%d", &n);11 for(int i = 0; i < n ;i++)12 {13 scanf("%d %s", &p[i].sex, &p[i].name);14 }15 for(int i = 0; i < n/2; i++)16 {17 flag = 0;18 printf("%s", p[i].name);19 if(p[i].sex == 0)20 {21 for(int j = n-1; j >= n/2; j--)22 {23 if(p[j].sex == 1&&p[j].sex!= biao)24 {25 printf(" %s\n",p[j].name);26 p[j].sex = biao;27 flag = 1;28 }29 if(flag == 1)30 break;31 }32 }33 else if(p[i].sex == 1)34 {35 for(int j = n-1; j >= n/2; j--)36 {37 if(p[j].sex == 0&&p[j].sex!= biao)38 {39 printf(" %s\n",p[j].name);40 p[j].sex = biao;41 flag = 1;42 }43 if(flag == 1)44 break;45 }46 }47 }48 return 0;49 }
2)流程图
3)本题调试过程中碰到的问题及解决办法
4)运行结果截图
5)评价
感想:具体思路:就是把学生分成男女两部分,再把选出来的学生标记好,以免后面循环的时候重复出现。循环嵌套。
疑惑:有什么方法可以简化代码吗?我感觉后面那可以简化,考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4
3310120150912233 2 43310120150912119 4 13310120150912126 1 33310120150912002 3 223 4输出样例:
3310120150912002 2
3310120150912119 11)实验代码
1 #include2 struct student{ 3 long int ID; 4 int seata; 5 int seatb; 6 }; 7 int main(void) 8 { 9 struct student stu[1000];10 int N,M,i,j,p[1000];11 12 scanf("%d",&N);13 14 for(i=0;i
2)流程图
3)本题调试过程碰到的问题及解决办法
问题:就是写错了一些细节,查了很久才发现我的输入格式有问题,没有注意到就错了。
解决办法:一直看找出自己的错误
4)运行结果截图
5)评价
自我评价就是,如果不用结构体来写的话我觉得很简单,由于我对结构体不是很熟悉差点就想偷懒不写了,但是想起老师那么努力的在改进自己,为大家付出了很多,我决定尝试去用结构体写出来啦,因为我自认为学的不够多,所以写这道题用的时间比较长,上回助教提醒我要按要求来写,我做到啦。。
预习作业
问题:什么是递归?
答:emmm,递归就是先想一个问题的最直接的解决办法,简化问题,找出规律,可以不停的套用同时使用函数循环优点:使得代码更加的精简,并且减少了我们的思考量相对情况下的,就是说我们只需要简单的运行计算,相对的内部运算不用想太多,像课本中的汉诺塔问题缺点:就是对于找递归式子不好找,还有就是代码看起来似乎不是那么好理解问题:如何归纳出递归式?答:找递归式还是需要靠做题来练的吧,主要是找出里面的规则,多做题,有了那个思维就好了吧学习进度条
周 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
1 | 7d | 80 | 读取文件 | 为什么读取文件这么复杂 |
2 | 7d | 100 | 数组 | 二维数组不太懂 |
3 | 7d | 150 | 指针 | 指针不太会 |
4 | 7d | 156 | 学到了指针的基本用法,还有用指针做自定义函数的形参用法 | 指针不太熟 |
5 | 7d | 240 | 自定义函数 | 指针的拓展使用不会 |
6 | 7d | 170 | 动态分布 | PTA有好多bug |
7 | 7d | 175 | 结构体 | 指针没完全掌握 |
8 | 7d | 189 | 学习了结构体 | 递归法要数学思维很强吧 |
时间 | 博客字数 | 代码行数 |
---|---|---|
第一周 | 0 | 80 |
第二周 | 100 | 100 |
第三周 | 300 | 150 |
第四周 | 200 | 156 |
第五周 | 300 | 240 |
第六周 | 350 | 170 |
第七周 | 360 | 175 |
第八周 | 400 | 230 |
第九周 | 470 | 189 |
累计代码行数和博客字数
学习感悟
1)就是对结构体更加熟悉了,本次作业老师没有给大家太大的压力,自我感觉收获的知识更多了。
2)疑惑:就是有时候写题目感觉有更简洁的方法写出来吧,但是目前有时候我无法实现。很无奈。
结对编程
过程:就是互相交流自己的思路和想法吧。把队友不知道的知识捋了一次。
优点:学习完了指针和结构体之后,我觉得自己的代码更简洁了。但是我希望自己可以有更多的好的思路来使代码更简洁而规范缺点:我这次遇到的队友水平在我之下,没给我分享他的收获。