堆积如山的第五周作业

这个作业属于哪个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2824
我在该课程的目标是 学会灵活使用sort排序算法,与strlen命令的使用
这个作业在那个具体方面帮助我实现目标 关注相关的算法博客以及查阅以上相关应用的资料
参考文献 https://blog.csdn.net/step_ma/article/details/74115184

作业一:英文单词的排序:
一:试题:7-1 英文单词排序 (25 分)

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple

输出样例:
red blue green yellow purple
二:分析:1.实际上该题的思路很简单,即输入数组单词,但是难点就是在如何将单词的长度与其所属的单词对应。很多人将字符输入后不能单词的长度与其所属的单词对应起来
2.由于英文单词总数不超过20个,英文单词为长度小于10,所以我们需要用到二维数组,以下的思路将会在执行代码中标注出来!
三.执行代码:

#include<bits/stdc++.h>
using namespace std;
int main ()
{
    int i;
    char a[20][10],js[10];//20代表单词数量不超过20,10代表长度不超过10 
    for(i= 0 ; i < 20 ; i++)
    {
        scanf("%s",a[i]);
        if(a[i][0]=='#')//代表字符若为#号 ,则结束循环结束
        break;
        
    }                                                            
    for(int len = 1; len < i  ; len++)   //重点在                        
    for(int lens = 0 ; lens < i - len  ; lens++ ) //此处           
      {                                                         
           if(strlen(a[lens])>strlen(a[lens+1])){       //本处直接使用strlen命令,利用c语言自带的库函数进行对字符串的处理,直接把求出的字符串长度与其所属英文单词对应!        
                            strcpy(js,a[lens]);                 
                              strcpy(a[lens],a[lens+1]);//strcpy在冒泡排序中起到至关重要的作用,即 交换
                             strcpy(a[lens+1],js);
                         }
}
    for(int s = 0 ; s < i ; s++)
    printf("%s ",a[s]);//将排序后的单词输出!
    
    return 0;

四.运行结果正确截图:

五.运行流程图:

六.本题总结:由于这次是在c++上自行调试运行,所以本题在PTA提交时直接一次性AC,其实本次作业使用的方法包含了很多技巧性的东西,包括有一部分老师没有讲解过的知识,所以用了许多小技巧,省去了许多麻烦步骤。本来这次想使用c自带sort命令进行排序,但是据相关文档,得知sort属于不稳定排序,无法将单词的长度与其所属的单词对应起来,所以在PTA上直接编译报错!关于sort命令排序的使用,我还需要多练习相关的习题,并熟练掌握和运用!strlen命令亦是如此!
任务二:1)通过以自己名字命名的文件输入英文单词,(2)英文单词输入的结束标记为你学号最后一位数+37所对应的ASCII字符。(例如:你的学号最后一位为9,则结束标记为9+37=46所对应的ASCII字符“.”)(3)在不删除原有内容的情况下,将排序后的单词输出到文件。
分析:只需要在自己源代码的基础上进行一定的修改即可!由于我的学号最后一位为8,所以加上37为45,对应的ASC||的元素为K!输入K结束即可
二:执行代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    FILE*pointer;
    int i,lens,s;
    char a[20][10],js[10],len;//20代表单词数量不超过20,10代表长度不超过10 
    if((pointer=fopen("D:\\wonzenkei.txt","r+"))==NULL)
    {
        printf("Error!\n");
        exit(0);
    }
    for(i= 0 ; i < 20 ; i++)
    {
        scanf("%s",a[i]);
        fprintf(pointer,"%s\n",a[i]);
        if(a[i][0]=='K')//代表首个字符若为K号 
        break;
        
    }
    for(int len = 0; len < i  ; len++)
    for(int lens = 0 ; lens < i - len - 1 ; lens++ )
      {
           if(strlen(a[lens])>strlen(a[lens+1])){
                            strcpy(js,a[lens]);
                              strcpy(a[lens],a[lens+1]);
                             strcpy(a[lens+1],js);
                         }
}
    for(int s = 0 ; s < i ; s++){
    printf("%s ",a[s]);
    fprintf(pointer,"%s ",a[s]);
 }

    if(fclose (pointer)){
        printf("Can't close!\n");
        exit(0);
    }
    return 0;
}

三:正确相关截图:

四:总结:很久没有用到相关的文件指针,手还是有些生,不过我后期还是会努力学习指针相关方面的应用,加大对其学习力度
五.另外,本次对单词长度的冒泡排序我没有再多注释,因为自己是按照教材上说明的方法键入,就具体内容就直接参见教材吧

结对编程总结:本次结对编程我的队友是王雅琼,在这当中我们相互讨论,帮她解决了很多问题,并且将我所学到的相关技巧告诉了她,在帮其修改代码时,发现她错把“ ”打成了‘ ’号,,导致多次测试时出现了乱码的情况,并且多次查找都未找出错因,对我自己来说:还是因为对代码的阅读不仔细,阅读代码能力欠佳,在这一方面我还需要注重相关思维的培养,学会流畅阅读他人代码。对于我队友来说:可能还是输入代码不仔细,编程是一项很细心的活,在执行相关的任务时,容错率几乎为零,所以我们还是需要多一个心眼。至此,我想到了蓝桥杯许多未获奖的选手,他们的代码本身能通过编译,可惜的是他们未按照大赛要求将main函数进行0值得返回,这导致题目得分直接为零,所以差之毫厘,失之千里!还有不少的选手,连最简单的第一道填空题都未算对,痛失了本应得到的分,他们很多人借用电脑的计算器运算时,竟然将数字输错。而我在比赛时,为防止意外,我在计算器上算得的结果到最后还用手算验算了一遍。总之,盲目自信不可有,细心留意不可无,最后还是需要感谢博客,感谢老师,感谢一切的IT平台给了我一个这样的“吐槽”机会,让我能时刻意识到自己的问题所在并将其记录下来

猜你喜欢

转载自www.cnblogs.com/wonzenkei/p/10618690.html