一、作业头内容
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | |
我在这个课程的目标是 | 程序结构 |
这个作业在那个具体方面帮助我实现目标 | 习题难度上的挑战 |
参考文献 | C primer plus |
二、基础作业
6-1 按等级统计学生成绩
本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。
函数接口定义: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 10struct 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;}/* 你的代码将被嵌在这里 */
输入样例:
1031001 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): 1The grades:31001 annie A31002 bonny B31003 carol B31004 dan B31005 susan A31006 paul C31007 pam C31008 apple D31009 nancy A31010 bob B
实验代码:
int set_grade(struct student *p, int n){ int i,count=0; for(i=0;i=85&&p[i].score<=100) { p[i].grade='A'; } if(p[i].score>=70&&p[i].score<=84) { p[i].grade='B'; } if(p[i].score>=60&&p[i].score<=69) { p[i].grade='C'; } if(p[i].score<60) { p[i].grade='D'; count++; } } return count;}
设计思路:
本题调试过程碰到问题及解决办法:
最后一个if语句的条件是p[i].score<60,而不是0<=p[i].score<60)运行结果截图:
7-1 一帮一
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式: 输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。输出格式: 每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。输入样例:80 Amy1 Tom1 Bill0 Cindy0 Maya1 John1 Jack0 Linda
输出样例:
Amy JackTom LindaBill MayaCindy John
实验代码:
#includestruct student{ int gender; char name[9]; int flag;}; struct student str[51]; int main() { int n; scanf("%d\n",&n); for(int i=0;i
设计思路:
本题调试过程碰到问题及解决办法:
if语句没有break结束运行结果截图:
7-2 考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式: 输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。 考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。输出格式: 对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。输入样例:43310120150912233 2 43310120150912119 4 13310120150912126 1 33310120150912002 3 223 4
输出样例:
3310120150912002 23310120150912119 1
实验代码:
#includestruct student{char number1[1000];int number2;int number3; }; int main() { struct student sl[1000]; int i,j,n,m,number[1000];scanf("%d",&n);for(i=0;i
设计思路:
本题调试过程碰到问题及解决办法:
输出格式中忘记打空格了,呜呜呜,找出来可累死我了...运行结果截图:
三、预习作业
什么是递归函数,它的优点和缺点有哪些,如何归纳出递归式?
答:
1、递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。
2、优点:代码简洁、清晰,易懂。缺点:我看不懂。 3、引用:利用递归树方法求算法复杂度,其实是提供了一个好的猜测,简单而直观。在递归树中,每一个结点表示一个单一问题的代价,子问题对应某次递归函数调用。我们将树中每层中的代价求和,得到每层代价,然后将所有层的代价求和,得到所有层次的递归调用总代价。
四、学习进度统计
学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
3/1-3/8 | 46h | 78 | 定义文件,以及文件的导入导出和读写 | 数组的运算,输出 |
3/9-3/15 | 12h | 42 | ....未上课 | 对文件中数据的提取运用,以及一些嵌套语句的实际用法 |
3/16-3/22 | 32h | 67 | 二维数组数据的处理和输出 | 对一些复杂的循环还有些看不懂 |
3/23-3/29 | 30h | 46 | strlen函数,头文件string.h等的用法 | 新头文件的使用方法 |
3/30-4/6 | 25h | 102 | 自定义函数 | 还是一些比较复杂的循环 |
4/7-4/19 | 22h | 48 | 使用指针操作字符串 | 动态内存分配 |
4/20-4/26 | 34h | 56 | 使用结构变量与结构数组进行编程 | 结构指针 |
折线图
五、学习感悟
学到了结构变量、结构数组、结构指针等,但是我感觉我只是都学了,却都不是很懂,没有做到学得精的地步。而且''根据实际情况合理定义结构''我好像有点做不到,没有那种对比性的思维。递归函数倒是觉得,能用for解决的,不会用到递归函数。