2019春季第九周做业

问题 回答
这个做业属于哪一个课程 C语言程序设计
这个做业要求在哪里 第九周做业
我在这个课程的目标是 了解并熟练掌握结构体的使用方法
这个做业在哪一个具体方面帮助我实现目标 此次的pta上的做业都有用结构体
参考文献 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 <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数组

###1)实验代码app

int set_grade( struct student *p, int n )
{
	int sum=0,i;
	for(i=0;i<n;i++){
		if(p[i].score<=100&&p[i].score>=85){
			p[i].grade='A';
		}
		if(p[i].score<=84&&p[i].score>=70){
			p[i].grade='B';
		}
		if(p[i].score<=69&&p[i].score>=60){
			p[i].grade='C';
		}
		if(p[i].score<=59&&p[i].score>=0){
			p[i].grade='D';
			sum++;
		}
	}
	return sum;
}

###2)流程图 函数

###3)本题调试过程碰到的问题及解决办法 无 ###4)运行结果截图 学习

###5)评价 感想:这道题目仍是比较简单的,就是指针的自定义函数 用时:20分钟测试

##一帮一 “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工做,即在获得全班学生的排名后,在当前还没有分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。 ###输入格式: 输入第一行给出正偶数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设计

###1)实验代码指针

#include<stdio.h>
#define MAXN 50
struct student{
    int num;
    char name[9];
};
int main(void)
{
	struct student stu[MAXN];
	int n,i,j,l,count,sum[25],k=0;
	scanf("%d",&n);
	for(i=0;i<n;i++){
        scanf("%d %s\n",&stu[i].num,&stu[i].name);
    } 
    for(i=0;i<n/2;i++){
    	for(j=n-1;j>=n/2;j--){
    		if(stu[i].num!=stu[j].num&&stu[j].num!=2){
    			printf("%s %s\n",stu[i].name,stu[j].name);
                stu[j].num=2;
                break;
		    }  
		}
	}
	return 0;
}

###2)流程图 调试

###3)本题调试过程当中碰到的问题及解决办法 code

问题:一方面是名字的那个字符串定义范围小了,没有留‘\0’的位置,另外一方面是我在想那个不同性别的组合时,怎么控制那个后面学生不重复输出,想要一次性跳出第二个循环 解决办法:第一个是根据那个提交时的提示字符串边界,另外一个是我在寻找如何一次性跳出两个循环的时候,看到了一个用标记的方法来判断循环 ###4)运行结果截图

###5)评价 感想:就是思路太过于局限,想问题的思路不够简洁 用时:一小时

##考试座位号 每一个 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

###1)实验代码

#include<stdio.h>
struct student{
    long int num;
    int a;
    int b;
};
int main(void)
{
	struct student stu[1000];
	int i,N,M,j,a1[1000];
	scanf("%d",&N); 
	for(i=0;i<N;i++){
		scanf("%ld %d %d\n",&stu[i].num,&stu[i].a,&stu[i].b);
	}
	scanf("%d\n",&M);
	for(i=0;i<M;i++){
		scanf("%d ",&a1[i]);
	}
	for(i=0;i<M;i++){
		for(j=0;j<N;j++){
			if(a1[i]==stu[j].a){
				printf("%ld %d\n",stu[j].num,stu[j].b);
				break;
			}
		}
	}
	return 0;
}

###2)流程图

###3)本题调试过程碰到的问题及解决办法

问题:一个是没有注意输出格式,还有就是太粗心了,把那个座位输进数组的时候写成了范围,应该是a1[i] 解决办法:就是反复的调试,查看

###4)运行结果截图

###5)评价 感想:题不是很难,主要是老是出一些小错误,无奈 用时:一个小时

#预习做业 问题:什么是递归? 在我看来,递归就是先想一个问题的最直接的解决办法,也就是说最特殊的状况,即跳出循环的那种状况,而后就是不断的简化问题,找出规律,能够不停的套用同时使用函数循环 优势:使得代码更加的精简,而且减小了咱们的思考量相对状况下的,就是说咱们只须要简单的想大的运行计算,相对的内部运算不用太过去想,像课本中的汉诺塔问题 缺点:就是对于找递归式子很差找,还有就是代码看起来彷佛不是那么好理解 问题:如何概括出递归式? 我的以为,找递归式仍是须要靠作题来练的吧,主要是找出里面的规则,多作题,有了那个思惟就行了吧 ###学习进度条 |周/日期|这周所花的时间|代码行数|学到的知识点简介|目前比较迷惑大问题| |----------|---------------------|------------|---------------------------------|-----------------------------| |4/22-4/26|15个小时|200行|结构体的使用,递归法,一些头文件|汉诺塔问题| ####累计代码行数和博客字数 |时间|博客字数|代码行数| |-------|-----------|------------| |第一周|0|80| |第二周|100|180| |第三周|400|330| |第四周|600|480| |第五周|900|720| |第六周|1250|890| |第七周|1610|1065| |第八周|2010|1295| |第九周|2480|1495|

###学习感悟 1)老是莫名其妙的写错一些不应写错的地方,可能仍是由于不够专一吧 2)疑惑:对于此次预习的内容,那个汉诺塔问题的那个递归,我不是特别明白他是怎么搬运的那个盘子,还有那个本身定义头文件是要把他存在哪里我不是特别清楚 ###结对编程 过程:就是一块儿思考该怎么作,讨论解题的的思路 优势:1.能够更加的清楚思路,就是对程序更加的熟悉和清楚 2.能够更有效的交流,在交流的过程当中本身的思路会更加的清楚,能够解决更多的问题,以及本身自己忽略的问题 3.相互学习,传递经验 4.能够督促学习 缺点:经验不足!

相关文章
相关标签/搜索