zoukankan      html  css  js  c++  java
  • 2019春第九周作业

    这个作业属于那个课程 C语言程序设计2
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/MS/homework/3129
    我在这个课程的目标是 掌握如何运用结构
    这个作业在那个具体方面帮助我实现目标 结构的作用
    参考文献 C语言程序设计2,百度

    6-1 按等级统计学生成绩 (20 分)
    本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。

    函数接口定义:

    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);
        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
    ", count);
       printf("The grades:
    "); 
       for(i = 0; i < n; i++)
           printf("%d %s %c
    ", 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
    

    实验代码:

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

    实验思路:
    用if语句进行判断分数所在区间代表的等级,然后返回不及格人数。

    错误截图:

    错误原因:
    我看题目没有看仔细,分数区间段打错了,导致判断的结果出现错误。

    流程图:

    正确截图:

    7-1 一帮一 (15 分)
    “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

    输入格式:
    输入第一行给出正偶数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
    

    实验代码:

    #include<stdio.h>
    struct student{
        int sex;
        char name[9];
        int flog;
    };
    int main(void)
    {   
        struct student stu[52];
        int n,i,j;
        scanf("%d",&n);
        for(i=0;i<n;i++){
           scanf("%d%s", &stu[i].sex, &stu[i].name);
           stu[i].flog=0;
        } 
        for(i=0;i<n/2;i++){
        	for(j=n-1;;j--){
    	    	if(stu[i].sex!=stu[j].sex&&stu[j].flog==0&&stu[i].flog==0){
            		printf("%s %s
    ",stu[i].name,stu[j].name);
    	    		stu[j].flog=stu[i].flog=1;
                    break;
            	}
            }
        }
        return 0;
    }
    

    实验思路:
    根据题意定义struct,输入要配对的人的性别和排名,再从第一个与最后一个比较是否为异性且是否配对。如果都是否定则输出这一对并设为已配对。

    流程图:

    错误截图:

    错误原因:
    在配对的那一个循环中出现多余的循环循环次数,把i<n改成i<n/2;

    正确截图:

    7-2 考试座位号 (15 分)
    每个 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
    

    实验代码:

    #include<stdio.h>
    struct student{
        long long id;
        int num;
        int flog;
    };
    int main(void)
    {   
        struct student stu[1000];
        int n,i,j,k,m;
        scanf("%d
    ",&n);
        for(i=0;i<n;i++){
           scanf("%lld %d %d", &stu[i].id, &stu[i].num,&stu[i].flog);
        } 
        scanf("%d",&k);
        for(i=0;i<k;i++){
            	scanf("%d",&m);
            	for(j=0;j<n;j++){
            		if(stu[j].num==m){
    	        		printf("%lld %d
    ",stu[j].id,stu[j].flog);
    	        	}
            	}
        }
        return 0;
    }
    

    实验思路:
    根据题意定义struct,输入考生的准考证号、试机座位和考试座位号码,在输入要查找的人数,根据人数进行循环,每循环输入一次输入一个试机座位号并进行比较判断该试机座位号的考生的准考证号和考试座位号码并输出。

    流程图:

    错误截图:

    错误原因:
    stu[i].num前面忘记加取地址运算符&。

    正确截图:

    预习作业(由于书上的知识有限,我通过百度在百度文库中找到的一些资料结合个人所理解的一些总结):
    递归函数的定义:对于某一函数f(x),它的定义域是集合A,那么如果在A集合中的某一个值x,其函数值f(x)由f(f(x))决定,那么就称f(x)为递归函数。
    递归函数的优缺点:优点是代码清晰,结构简洁易读,缺点是使用递归函数需要一定的逻辑能力,技巧性要求较高。
    借鉴的地址:
    https://wenku.baidu.com/view/f2eaccb9fd0a79563c1e722e.html
    https://baike.baidu.com/item/递归函数/5634537?fr=aladdin
    如何归纳出递归式:我认为可以用数学的函数归纳的方法,假设找到初始值和递归的结束条件,然后通过数据进行判断。

    周/日期 这周所花时间 代码行数 目前比较迷茫的问题 学到的知识点
    第一周/2月25日 八个小时 66行 数组的下标和数的关系
    第二周/3月4日 五个小时 60行 文件的初步使用
    第三周/3月18 一天 102行 这一次的题目有点难,正在努力学习中。 熟练文件的格式和二位数组的使用
    第四周/3月25日 一天 80行 二维数组的运用总是有小问题 选择排序法和冒泡排序法
    第五周/3月29日 两天 120行 二维数组的运用不熟练 判断回文
    第六周/4月6日 两天 80行 指针运用中有些不理解 指针之间的互换
    第七周/4月12日 两天 177行 字符型的数组输入遇到一些困难 用指针写调用函数
    第八周/4月19日 一天 124行 字符型的数组输入遇到一些困难 动态内存分配
    第九周/4月25日 一天 68行 结构的运用

    挑战题的思路:
    用for语句的嵌套和switch语句进行编写代码:如第一个数是2,第二个数是6,分别把2,6所代表的字母进行排列组合,然后再把这些组合与单词库中进行比较,有意义的那一组就能代表这个号码。

    结对编程感言:
    和队友结对编程中,队友能很好地理解我的代码,基本的编程知识都懂,感觉很轻松。

    近期学习中的一些感触:
    我发现自己学的东西还是很小很小的一丢丢,在学习的过程中我有的时候会对自己未来的学习抱有一种担忧感:我能不能在以后的学习中保有现在的兴趣?
    不管如何,我自己的选择我一定会好好的进行下去!

  • 相关阅读:
    重学计算机组成原理(七)- 程序无法同时在Linux和Windows下运行?
    学习ConcurrentHashMap并发写机制
    Unsafe中CAS的实现
    LinkedHashMap源码解读
    Hashset源码分析
    复盘MySQL分页查询优化方案
    Java面试必问之Hashmap底层实现原理(JDK1.8)
    Java面试必问之Hashmap底层实现原理(JDK1.7)
    Docker实战之Kafka集群
    Docker实战之Zookeeper集群
  • 原文地址:https://www.cnblogs.com/huangnuocheng/p/10770512.html
Copyright © 2011-2022 走看看