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

    第八周作业

    这个作业属于那个课程 C语言程序设计
    这个作业要求在哪里 第八周作业要求
    我在这个课程的目标是 这周作业的目标是学会定义一些函数,然后掌握动态内存分配
    这个作业在那个具体方面帮助我实现目标 这个作业让我更好的了解了指针和数组,同时掌握了一些其他的函数,并教会了我如何使用动态分配内存
    参考文献 C语言程序那一章

    6-1 函数实现字符串逆序 (15 分)

    本题要求实现一个字符串逆序的简单函数。
    函数接口定义:
    void f( char *p );
    函数f对p指向的字符串进行逆序操作。要求函数f中不能定义任何数组,不能调用任何字符串处理函数。
    裁判测试程序样例:

    #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;
    }
    

    /* 你的代码将被嵌在这里 */
    输入样例:
    Hello World!
    输出样例:
    !dlroW olleH

    实验代码

     void f (char *p)
     {
     	char *c,a;
    	 c=p; 
        for(;*p!='';p++){
        }
        p--;
        for(;c<p;c++,p--){
            a=*c;
            *c=*p;
            *p=a;
        }
    }
    

    实验思路

    本题的思路就是通过定义指针p指向字符串的最后一个字符,然后通过定义指针来记录原来字符串,
    再通过p--,c++,来实现字符的替换,从而实现程序的功能。

    实验错误截图


    本题问题不是很大,只要细心很容易做出来,带还是错了几次,所以以后争取把知识学得更牢固,加油。

    实验正确截图


    6-3 字符串的连接 (15 分)

    本题要求实现一个函数,将两个字符串连接起来。
    函数接口定义:
    char *str_cat( char *s, char *t );
    函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。
    裁判测试程序样例:

    #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;
    }
    

    /* 你的代码将被嵌在这里 */
    输入样例:
    abc
    def
    输出样例:
    abcdef
    abcdef

    实验代码

    char *str_cat( char *s, char *t ){
        int len;
        int i;
       len=strlen(s);
        for(i=0;*(t+i)!='';i++)
        {
        	*(s+i+len) = *(t+i);
    	}
    	
    	return s;	
    	
    }
    

    实验思路

    本题也是比较简单的一道编程题,通过定义str_cst这个函数,我的思路首先是把指针s指向的数组的长度记录下来,
    然后用for语句实现将另一个指针指向的数组字符一个一个的赋给另一个数组,从而实现该程序功能。

    实验代码错误截图

    正确代码


    7-1 输出学生成绩 (20 分)

    本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
    输入格式:
    输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。
    输出格式:
    按照以下格式输出:
    average = 平均成绩
    max = 最高成绩
    min = 最低成绩
    结果均保留两位小数。
    输入样例:
    3
    85 90 95
    输出样例:
    average = 90.00
    max = 95.00
    min = 85.00

    实验代码

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

    设计思路

    这个题目要用到动态内存分配,分两种情况来讨论,当只有一个字符串的时候,最大值,最小值,平均值都相等。
    当有多个字符串,把指针知道的最大值和最小值分别赋给smax,smin,然后再求平均值,总体来说,只要掌握了动态分配
    内存就很简单了。

    本题做对过程碰到问题及解决办法

    本题是查找了一些资料,然后,通过这些知识去做这道题目,然后没有什么很大的问题,一遍就过了。

    正确截图


    7-4 字符串排序 (20 分)

    本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
    输入格式:
    输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
    输出格式:
    按照以下格式输出排序后的结果:
    After sorted:
    每行一个字符串
    输入样例:
    red yellow blue green white
    输出样例:
    After sorted:
    blue
    green
    red
    white
    yellow

    实验代码

    #include<stdio.h>
    char* strcpy(char* dst, const char* src) ; 
    int strcmp(const char *str1,const char *str2); 
    int main(void)
    {
        int i,j;
        char a[5][85], t[85];
        for (i = 0; i < 5; i++)
        {
            scanf("%s",a[i]);
        }
        for (i = 1; i < 5; i++)
        {
            for (j =0; j < 5-i ;j++)
            if (strcmp(a[j], a[j+1]) > 0)
            {
            strcpy(t,a[j]);
            strcpy(a[j], a[j + 1]);
            strcpy(a[j + 1], t);
            }
        }
        printf("After sorted:
    ");
        for (i = 0; i < 5; i++)
        puts(a[i]);
        return 0;
    }
    char* strcpy(char* dst, const char* src) {
        while(*src) *dst++ = *src++;
         *dst='';
        return dst;
    }
    int strcmp(const char *str1, const char *str2)
    {   
    int ret=0;   
    while( !(ret = *(unsigned char*)str1 - *(unsigned char*)str2 ) && *str1 )    
     {       
       str1++;   
       str2++;    
    }     
      if(ret < 0)       
        return -1;    
        else if(ret > 0)        
    	return 1;  
    	   
    	  return 0;     
    }
    

    实验思路

    本题我的思路是调用strcmp函数和strcpy函数,主函数只需利用for语句去实现字符串的比较,
    然后赋值再输出就行,因为我定义的这两函数就能实现此功能,本来这两函数是string头文件中的
    函数,但老师要求重心定义,所以我觉得这也很锻炼我们编工具的能力,继续加油!

    本题做对过程碰到问题及解决办法



    正确截图


    (预习题)7-3 计算平均成绩 (15 分)

    给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。
    输入格式:
    输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。
    输出格式:
    首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。
    输入样例:
    5
    00001 zhang 70
    00002 wang 80
    00003 qian 90
    10001 li 100
    21987 chen 60
    输出样例:
    80.00
    zhang 00001
    chen 21987

    实验代码

    #include<stdio.h>
    #include<string.h>
    struct student 
    { 
    	char id[6];    
    	char name[11]; 
    	float score;   
    }; 
    int main()
        {	struct student stu[10]; 
            int i, N;	
            float sum = 0, average;	
            scanf("%d
    ", &N);	
            for (i = 0; i < N; i++)
            {
    		scanf("%s%s%f", &stu[i].id, &stu[i].name, &stu[i].score);
    		sum += stu[i].score;
    	}
    	average = sum / N;
    	printf("%.2f
    ", average);
    	for (i = 0; i<N; i++)  
    	{
         if (stu[i].score < average)
    		{
    			printf("%s %s
    ", stu[i].name, stu[i].id);
    		}
    	} 
     
    	return 0;
    }
    

    设计思路

    首先我就定义了一个结构数组,分别定义了三个数组,分别记录学生的学号,姓名,以及分数。
    逐排的输出学生的信息,然后求和,再输出平均分,再结束程序,这题用以前的知识就可以解出,
    思路还是不难。加油!

    本题做对过程碰到问题及解决办法


    这个题对结构数组当时理解得还不是很透彻,后来发现少了一个分号。改了之后就对了。

    正确截图

    预习中的疑惑

    现在疑惑少了很多,刚开始预习的时候疑惑挺多的,后来通过看书,做题,还有百度都解决了。

    对自己作业的评价

    对于自己编程水平还有很大的提升空间,还有就是速度过于慢了,所以得加快速度。

    学习进度条

    这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
    第八周 14小时 200行左右 这周学习了结构,然后学习了比较多的函数 对于那些新函数理解的还不是很深刻

    学习感悟

    学习的感悟就是自己一天天都有进步,但对于自己要求并不是很严格,所以进步得挺慢的,所以想通过下一个阶段有一个质变到量变的过程。
    学习的过程中一定要虚心求学,每天对于不懂的专业知识一定要把它搞懂。

    结对编程

    结队编程过程:
    队友都很积极的配合,感觉还是非常的棒的,队友这周表现非常棒。

    心得:好处:
    (1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
    (2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
    (3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
    (4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
    自我感觉好处:能使两个人沟通起来,得到1+1>2的效果。
    我觉得我和搭档的编程水平很一般,但是两个人不断地努力,这实现了共同进步的目的。
    我的优点:思维自我感觉还是可以的,对关于思路很很快的想出来。
    我的缺点:书看的太少,基础知识不牢固。
    队友优点:能够一起探讨问题,比较积极主动提出问题。
    队友缺点:对于知识点的掌握还不是很好。

    挑战作业

    对于这周的挑战题,想了一下思路,但由于时间原因,我以后再去编程,今天只是在这分享一下我的思路:
    首先读题,读懂题目的意思,题目要求我们利用拼音九键上的首字母组成一个单词,然后分别写出对应的
    数字号码。所以我们可以先在一个字符型数组下存很多个单词,然后,输入单词,显示出每个字符所对应
    的拼音九键的第一个字母,从而输出数字,反过来情况也差不多,除了这个方法,目前还没想到更好的,如果
    有同学有更好的方法,欢迎留言,谢谢。

  • 相关阅读:
    ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
    ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
    Asp.Net Core 单元测试正确姿势
    如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
    Asp.Net Core2.2 源码阅读系列——控制台日志源码解析
    使用VS Code 开发.NET CORE 程序指南
    .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net
    重新认识 async/await 语法糖
    EF添加
    EF修改部分字段
  • 原文地址:https://www.cnblogs.com/521-PENG/p/10734945.html
Copyright © 2011-2022 走看看