zoukankan      html  css  js  c++  java
  • 第八周编程总结

    本次作业所属课程

    C语言程序设计||

    本次作业要求

    https://edu.cnblogs.com/campus/zswxy/MS/homework/2829

    我在这个课程的目标是

    学会熟练使用结构数组

    本次学习在哪些具体方面帮组我实现目标

    利用几个新的函数可以大大减少代码行数

    参考文献

    C primer plus第六版

    一、基础题

    题目一:函数实现字符串逆序

    1)实验代码

    #include <stdio.h>
    #define MAXS 20
    
    void f( char *p );
    void ReadString( char *s ); /* 由裁判实现,略去不表 */
    
    int main()
    {
        char s[MAXS];
    
        ReadString(s);
        f(s);
        printf("%s
    ", s);
    
        return 0;
    }
    
    void f( char *p )
    {
        int i=0,j=0,h,temp;
    while(p[i]!='') { i++; } h=i-1;
    while(j<=h) { temp=p[j]; p[j]=p[h]; p[h]=temp; j++; h--; } }

    2)设计思路

     

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

    这个题目经过何铭康的讲解后一遍过

    4)运行结果截图

    题目二:字符串的连接

    1)实验代码

    #include <stdio.h>
    #include <string.h>
    
    #define MAXS 10
    
    char *str_cat( char *s, char *t );
    
    int main()
    {
        char *p;
        char str1[MAXS+MAXS] = {''}, str2[MAXS] = {''};
    
        scanf("%s%s", str1, str2);
        p = str_cat(str1, str2);
        printf("%s
    %s
    ", p, str1);
    
        return 0;
    }
    char *str_cat( char *s, char *t )
    {
        char *a=s;
        while(*s!='')
        {
            *s++;
        }
        while(*t!='')
        {
            *s=*t;
            s++;
            t++;
        }
        return a;
    }

    2)设计思路

     

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

    这两个函数题何铭康都讲了思路,一遍过

    4)运行结果截图

    题目三:输出学生成绩

    1)实验代码

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int n,i;
        int *p;
        double average=0,max,min;
        scanf("%d",&n);
        
        p = (int *) malloc (n * sizeof(int));  
        
        for(i=0;i<n;i++)
        {
            scanf("%d",p+i);   
        }
        
        max=min=*p;
         
        for(i=0;i<n;i++)
        {
            average+=*(p+i);
            
            if(max < *(p+i))
            { 
                max = *(p+i);
            } 
            if(min > *(p+i))
            { 
                min = *(p+i);
            } 
        }
        
        printf("average = %.2f
    ",average/n);
        printf("max = %.2f
    ",max);
        printf("min = %.2f
    ",min);
        
        free(p); 
        
        return 0;
    }

    2)设计思路

     

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

    这个题目主要是动态内存分配那块的代码不懂,看了一下别人的代码,后面那些求平均值最大值最小值的我们以前就做过了,转化一下就可以了

    4)运行结果截图

    题目四:字符串排序

    1)实验代码

    #include<stdio.h>
    int strcmp(char *p,char *q);
    char *strcpy(char *s,char *t);
    int main(void)
    {
        int i,j;
        char a[5][80],b[80];
        for(i=0;i<5;i++)
        {
        scanf("%s",&a[i]);
        }
        for(i=0;i<5;i++)
     {
            for(j=i+1;j<5;j++)
      {
                if(strcmp(a[i],a[j])>0)
       {
                   strcpy(b,a[i]);
                   strcpy(a[i],a[j]);
                   strcpy(a[j],b);
                }
            }
        }
        printf("After sorted: ");
       
        for(i=0;i<5;i++)
        {
            printf("%s ",a[i]);
        }
        return 0;
    }
    int strcmp(char *p,char *q)
    {
        while((*p!='')&&(*p==*q))
     {
        p++;
        q++;
    }
        return *p-*q;

    char *strcpy(char *s,char *t)
    {
        char *a=s;
       
        while(*t!='')
     {
        *s=*t;
        s++;
        t++;
        }
        *s='';
        return a;
    }

    2)设计思路

     

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

    这个题目一开始是用strcpy函数写的,后来发现不能使用这个函数,然后一直没有头绪,后来彭星文说可以使用自定义函数,我就尝试了一下。出现了很多问题,

    详情请参考彭星文博客:https://www.cnblogs.com/leisidiya/p/10729657.html

    4)运行结果截图

    二、预习题

    题目一:计算平均成绩

    1)实验代码

    #include<stdio.h>
    struct student
    {
        char number[10];  
        char name[10];  
        int grade;   
    };
    int main()
    {
        
        int n,i;;
        double average=0;
        struct student students[10];   
        
        scanf("%d",&n);
        
        for(i=0;i<n;i++)
        {
            scanf("%s %s %d",&students[i].number,&students[i].name,&students[i].grade);
            average += students[i].grade;   
        }
        printf("%.2f",average/n);
        
        for(i=0;i<n;i++)
        {
            if(average/n > students[i].grade)
            {
                printf("
    %s %s", students[i].name, students[i].number);
            }
        }
        return 0;
    

    2)设计思路

     

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

    结构看的不是特别懂,有关结构的流程图一开始也不会画,对于结构数组的输入存储也不是一头雾水,反反复复的看了书上P218的那个类似的代码看了好久才勉强写出来

    4)运行结果截图

     

    三、学习进度条

    时间

    这周所花时间

    代码行数

    学到的知识简介

    目前比较迷惑的问题

    第一周

    5小时

    80

    初步了解数组

    数组的引用

    第二周

    6小时

    200

    指针的了解

    完全没听懂老师上课在讲什么,继续努力

    第三周

    7小时

    200

    文件与数组的使用

    没看到代码运行后文件的内容发生改变

    第四周

    9小时

    120

    冒泡法,选择排序法

    冒泡法不会

    第五周

    9小时

    120+

    字符型数组

    把代码改成文件格式

    第六周

    4小时

    130左右

    指针

    指针的调用

    第七周

    6小时+

    200

    指针与数组

    指针与数组的连续有点模糊

    第八周

    10小时

    200+

    一些新的函数

    结构那块有点迷

     四、累积代码行数及博客字数

    五、结对编程感想

    这次题目太难,鉴于上次的情况我们决定先写完再讨论一下各自的看法

    总结:应老师的要求自己造工具用,前面几个题目还好,后面几个就完全是在找虐了,感觉大大加难了题目难度。

  • 相关阅读:
    codechef Taxi Driver
    BZOJ2190 SDOI2008 仪仗队
    BZOJ 1070: [SCOI2007]修车
    BZOJ 1066 [SCOI2007]蜥蜴
    最大流模板
    表达式计算
    codechef Polo the Penguin and the Tree
    LCA 求 树中两个点的距离
    Baby Step Giant Step model
    POJ 1330 Nearest Common Ancestors (LCA,dfs+ST在线算法)
  • 原文地址:https://www.cnblogs.com/wangweihanqq2001/p/10738639.html
Copyright © 2011-2022 走看看