2019春第九周作业

这个作业属于哪个课程 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、互相学习编程技巧:在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。

自己优点:细心,认真,提出建议。缺点:不会遇难而上。
彭星文优点:认真,有耐心,提出建议。缺点:不会往后学习

posted @ 2019-04-25 17:54  L磊  阅读(331)  评论(1编辑  收藏  举报