2019春第五週做業

這個做業屬於那個課程 C語言程序設計II
這個做業要求在哪裏 (https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2824)
我在這個課程的目標是 能熟練應用字符數組
這個做業在那個具體方面幫助我實現目標 本次做業須要知道對字符串的儲存,字符串的長度大小
參考文獻 字符串長度獲取的三種方法

英文單詞排序

本題要求編寫程序,輸入若干英文單詞,對這些單詞按長度從小到大排序後輸出。若是長度相同,按照輸入的順序不變。c++

輸入格式:

輸入爲若干英文單詞,每行一個,以#做爲輸入結束標誌。其中英文單詞總數不超過20個,英文單詞爲長度小於10的僅由小寫英文字母組成的字符串。編程

輸出格式:

輸出爲排序後的結果,每一個單詞後面都額外輸出一個空格。數組

輸入樣例:

blue
red
yellow
green
purple
#

輸出樣例:

red blue green yellow purple

實驗代碼

#include<bits/stdc++.h>
int main()
{
    
    char str[21][11];
    char a[11];
    int i=0,j;
    while(1){    //儲存字符串
        scanf("%s",str[i]);
        if(str[i][0]=='#') break;
        else i++;
    }
    int len=i;    //一共多少個單詞賦給len
    for(i=0;i<len;i++)   //兩個for循環是經過冒泡排序把字符串按其長度從小到大排序
        for(j=1;j<len-i;j++)
            if(strlen(str[j-1])>strlen(str[j]))    //比較字符串長度大小
             {
                strcpy(a,str[j-1]);    //將str[j-1]與str[j]的字符串交換
                strcpy(str[j-1],str[j]);
                strcpy(str[j],a);
            }
    for(i=0;i<len;i++)    //循環輸出字符串
        printf("%s ",str[i]);
    return 0;
}

思路流程圖

本題調試過程碰到的問題及解決辦法

#include<stdio.h>
int main()
{
    int i,j,n,min;
    char word[10][20];
    int a[10];
    for(i=0;i<10;i++){
        for(j=0;j<20;j++){
            word[i][j]=getchar();
            if(word[i][j]=='#'||word[i][j]=='\n')
                break;    
        }
        a[i]=j;
        if(word[i][j]=='#')
            break;
    }
    for(n=0;n<i;n++){
        min=0;
        for(j=1;j<i;j++){
            while(a[min]==0)    min++;
            if(a[j]<a[min]&&a[j]>0)    min=j;
        }
        for(j=0;j<a[min];j++)
            putchar(word[min][j]);
        printf(" ");
        a[min]=0;
    }
    return 0;
}

剛開始我是寫的這樣的代碼,而後就出現了這樣的問題,我經過調試發現是我單詞數量與長度搞反了,而後我把兩項交換後發現依然這裏提示錯誤,我調試發現把最大單詞輸入後,程序就會返回亂碼,以後我經過檢查發現應該還要在長度上在+1,由於在字符串最後還有一個字符結束符'\0',因此致使了數據的溢出最後就返回了亂碼,而後再修改就能夠了,修改後的截圖以下:
函數

運行結果截圖

實驗代碼(文件)

#include<bits/stdc++.h>
int main()
{
    FILE*fp;
    char str[21][11];
    char a[11];
    int i=0,j;
    if((fp=fopen("D:\\pz.txt","r+"))==NULL)
    {
        printf("File open error!\n");
        exit(0);
    }
    while(1){
        fscanf(fp,"%s",str[i]);
        if(str[i][0]=='+') break;
        else i++;
    }
    int len=i;
    for(i=0;i<len;i++)
        for(j=1;j<len-i;j++)
            if(strlen(str[j-1])>strlen(str[j]))
             {
                strcpy(a,str[j-1]);
                strcpy(str[j-1],str[j]);
                strcpy(str[j],a);
            }
    fprintf(fp,"\n");
    for(i=0;i<len;i++){
        fprintf(fp,"%s ",str[i]);
        printf("%s ",str[i]);
    }
    if(fclose(fp)){
        printf("Can not close the file!\n");
        exit(0);
    }
    return 0;
}

運行結果截圖

選擇題





預習的主要內容:指針與數組的區別,指針的基本運算與應用
預習中存在的疑惑:雖然目前我沒有什麼疑惑的地方,可是對於指針我依舊是懵懵懂懂的感受學習

周/日期 這周所花時間 代碼行數 學到的知識點 目前比較迷惑的問題
3月4-3月10 4天 130行 如何讀取文件中的數據並寫入數據
3/11-3/17 2天 66行 一些有關文件的函數
3/18-3/24 2天 103行 二維數組的定義與使用
3/25-3/31 2天 140行 與字符串有關的函數strlen,strcpy 一些與字符串有關的函數使用方法

學習感悟

之前寫題目都是能夠根據所學知識很快就有思路而且寫出來,可是這一次的編輯題我是雖然有思路可是寫起來卻很麻煩,這就說明個人知識儲備已經快不能知足個人需求了,因此我應該要多去補充補充知識儲備了spa

結對編程感悟

經過結對編程我能知道我存在的一些問題,好比和結對夥伴說明個人作題思路時,我就發現個人思路就由於過於複雜而不容易理解,因而我就去百度找能快速運算的函數,而後就學習到了一些新的函數.net

相關文章
相關標籤/搜索