这个作业属于哪个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | 2019春第九周作业 |
我在这个课程的目标是 | 灵活的使用结构解决问题 |
这个作业在那个具体方面帮助我实现目标 | 锻炼我的思维 |
参考文献 | C语言程序设计(第3版) |
基础题
6-1 按等级统计学生成绩
本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。
函数接口定义:
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;
}
/* 你的代码将被嵌在这里 */
1)实验代码
int set_grade( struct student *p, int n )
{
int sun=0,c=0;
int i;
for(i=0;i<n;i++)
{
if((*p).score>=0&&(*p).score<=59)
{
(*p).grade='D';
c++;
}
else if((*p).score>=60&&(*p).score<=69)
(*p).grade='C';
else if((*p).score>=70&&(*p).score<=84)
(*p).grade='B';
else
(*p).grade='A';
p++;
}
return c;
}
2)设计思路
3)本题调试过程中碰到问题及解决办法
问题:答案错误。调试发现返回的不及格的人数错误,检查后发现自己把判断条件写错了。
解决办法:去掉求平均成绩的那部分代码,在第一个if语句中用c储存不及格人数。
4)运行结构截图
7-1 一帮一
一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
1)实验代码
#include<stdio.h>
struct student{
int num;
char name[10];
};
int main(void)
{
int N,i,p,j,q=0,r=0;
struct student x[50],y[50],z[50];
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d %s",&x[i].num,x[i].name);
}
p=N/2;
for(i=p;i<N;i++)
{
if(x[i].num==0)
{
y[q]=x[i];
q++;
}
if(x[i].num==1)
{
z[r]=x[i];
r++;
}
}
for(i=0;i<p;i++)
{
if(x[i].num==0)
{
printf("%s %s\n",x[i].name,z[r-1].name);
r--;
}
if(x[i].num==1)
{
printf("%s %s\n",x[i].name,y[q-1].name);
q--;
}
}
return 0;
}
2)设计思路
3)本题调试过程中碰到问题及解决办法
问题:部分正确。本题在调试的时候运行结果是正确的,不知道那个测试点哪里错了。
解决办法:请同学帮忙,然后根据测试点的提示将结构中字符串name的长度改长,答案正确。
4)运行结果截图
7-2 考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
1)实验代码
#include<stdio.h>
struct student{
char num[20];
int sj;
int ks;
};
int main(void)
{
int n,i,m,cx[1000],j=0;
struct student x[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d %d\n",x[i].num,&x[i].sj,&x[i].ks);
}
scanf("%d\n",&m);
for(i=0;i<m;i++)
{
scanf("%d",&cx[i]);
for(j=0;j<n;j++)
{
if(cx[i]==x[j].sj)
printf("%s %d\n",x[j].num,x[j].ks);
}
}
return 0;
}
2)设计思路
3)本题调试过程中碰到问题及解决办法
问题:部分正确。最初调试时发现在输入完数据后还要输入数据才能得到运行结果,以为是输入的那部分有问题,
但是反复检查后又觉得没问题,然后我就把输入待查询的试机座位号码后面的代码改一下,保持功能不变,最后输入的
问题解决了,但是答案老是错误。然后我再检查发现在输出的时候数据写错了。
解决办法:把“printf("%s %d\n",x[i].num,x[i].ks);”改为“printf("%s %d\n",x[j].num,x[j].ks);”。
4)运行结果截图
预习题
什么是递归函数,它的优点和缺点有哪些,如何归纳出递归式?
递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。
当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。 所以递归要有两个要素,结束条件与递推关系。
优点
1.容易实现。
2.代码简洁、清晰、易懂。
缺点
1.递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间。->效率
2.递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如fibonacci斐波那契数列的递归实现。->效率
3.调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。->性能
引自递归的优缺点
学习进度条
周/日 | 这周所花的时间 | 代码行数 | 学到的知识点简介 | 目前比较迷茫的问题 |
---|---|---|---|---|
3/11-3/15 | 6小时 | 57 | 指针的定义与调用 | 无 |
3/18-3/22 | 8小时 | 80 | 二维数组的定义与调用 | 无 |
3/25-3/29 | 6小时 | 54 | 调用处理字符的函数 | 无 |
4/01-4/05 | 6小时 | 78 | 将数组名作为指针进行调用 | 无 |
4/08-4/12 | 6小时 | 104 | 指针与数组的关系 | 无 |
4/15-4/19 | 6小时 | 133 | 字符串处理函数 | 无 |
4/22-4/26 | 6小时 | 91 | 结构的定义与调用 | 无 |
学习感悟
这周的题目比较简单,只要知道怎样使用结构就不难,但是,在遇到题目时仍然要先想好思路,有思路才能试着去解决问题。另外预习题可以拓宽我们的知识面。
对我们的学习很有帮助。
结对编程队友:彭星文2019春第九周作业
结对过程:这周双方先进行编写,晚自习的时候进行了讨论,一是各自的问题,二是各自的思路,对于每到道题双方都讲出自己的写法,如果双方都不明白问题所在就会上网去查。
结对编程对现阶段我们的好处:
1、互相鼓励,不容易沮丧:团队工作能增加成员的工作积极性。因为在面对问题的时候,会有人一起分担,共同尝试新的策略。
2、互相监督,不容易偷懒:两个人一起工作需要互相配合,如果想偷懒去干别的,就会拖延工作进度。
3、互相学习编程技巧:在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。
自己优点:细心,认真,提出建议。缺点:不会遇难而上。
彭星文优点:认真,有耐心,提出建议。缺点:不会往后学习