第五週做業

😀android

這個做業屬於那個課程 C語言程序設計ll
這個做業要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2824
我在這個課程的目標是 我但願可以經過學習這一節內容,解決各類類型排序問題
這個做業在那個具體方面幫助我實現目標 出現了未接觸的函數語句,幫助我自學查詢百度,學習視頻
參考文獻 http://www.bilibili.com/video/av8302677?p=19&share_medium=android&share_source=qq&bbid=Pl0-DWgKPA1uDzcAfAB8infoc&ts=1553754700001

1. 統計一行文本的單詞個數 (15 分)

本題目要求編寫程序統計一行字符中單詞的個數。所謂「單詞」是指連續不含空格的字符串,各單詞之間用空格分隔,空格數能夠是多個。編程

輸入格式:

輸入給出一行字符。數組

輸出格式:

在一行中輸出單詞個數。ide

輸入樣例:

Let's go to room 209.函數

輸出樣例:

5學習

1.代碼:

#include<stdio.h>
#include<string.h>

int main()
{
    int len, i, num;
    char a[1000];   

    gets(a);
    len = strlen(a);
    
    if (a[0] == ' ')
        num = 0;
    else
        num = 1;
        
    for (i = 0; i<len - 1; i++)
    {
        if (a[i] == ' ' && a[i + 1] != ' ')
            num++;
    }
    
    printf("%d", num);
    
    return 0;
}

2.設計思路:

3.本題調試中遇到的問題及解決辦法

問題1:將數組寫成a[100]顯示錯誤(見錯誤截圖)
解決辦法:定義的長度過小,隨意輸入單詞很容易超出數組長度範圍設計

4.運行截圖

正確截圖:
3d

錯誤截圖:
指針

2. 英文單詞排序 (25 分)

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

輸入格式:

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

輸出格式:

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

輸入樣例:

blue
red
yellow
green
purple
#

輸出樣例:

red blue green yellow purple

1.【原題代碼】:

#include<stdio.h>
#include<string.h>
int main(void)
{
    char a[21][11] = { '\0' };
    char s[11] = { '\0' };
    int i, j = 0, len;
    
    while (1) {   
        scanf("%s", a[i]);
        
        if (a[i][0] == '#')
            break;
        i++;
    }
    
    len = i; 
    
    for (i = 0; i < len-1; i++)
    {
        for (j = 1; j < len - i; j++)
        {
            if (strlen(a[j - 1]) > strlen(a[j]))
            {
                strcpy(s, a[j - 1]);
                strcpy(a[j - 1], a[j]);
                strcpy(a[j], s);
            }
        }
    }
    
    for (i = 0; i < len; i++)
        printf("%s ", a[i]);
 
    return 0;
}

【改編成文件形式的代碼】

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
    FILE *fp;
    char a[21][11] = { '\0' };
    char s[11] = { '\0' };
    int i, j = 0, len;
    
    fp=fopen("D:\\C做業\\xiongyating.txt","r+");
        
    while (1) {   
        scanf("%s", a[i]);
        fscanf(fp,"%s", &a[i]);
        
        if (a[i][0] == '*')
            break;
        i++;
    }
    
    len = i; 
    
    for (i = 0; i < len-1; i++)
    {
        for (j = 1; j < len - i; j++)
        {
            if (strlen(a[j - 1]) > strlen(a[j]))
            {
                strcpy(s, a[j - 1]);
                strcpy(a[j - 1], a[j]);
                strcpy(a[j], s);
            }
        }
    }
    
    for (i = 0; i < len; i++)
        printf("%s ", a[i]);
        
    fprintf(fp,"\n");
    
    for(i = 0; i < len; i++)
        fprintf(fp,"%s ", a[i]);
        
    fclose(fp);

    return 0;
}

2.設計思路:

3.本題調試中遇到的問題及解決辦法

問題1:開始想的太簡單,雖然知道她的思路可是卻忽略了他是一整串字符去比較長度(見錯誤截圖1)
解決辦法:參考其餘博主,再自行編寫改寫代碼尋找問題
問題2:起初想達到while語句循環用的是len>0出現了錯誤(見錯誤圖2)
解決方法:檢查發現len沒有賦初始值,沒法去進行判斷
問題3:對於改寫成文件形式代碼,開始出現了的錯誤就是不能使最終答案按正確形式從文件打印出(見錯誤截圖3)
解決方法:將後面多加了一個for語句使數據從文件中輸出

4.運行截圖

正確截圖:

錯誤截圖1:

錯誤截圖2:

錯誤截圖3:

預習題:

二,學習進度條

周/日期 這周所花時間 代碼行數 學到的知識點 目前比較迷惑的問題
第一題 3/26-3/27 2h 25行 字符串與字符的區別對待 gets語句的使用
第二題 3/26-3/28 8h 38行 strcpy語句用法 如何看到題目就知道要用二維數組

三,學習感悟

本週學習了數組比較字符串長短排序,學到兩個新的語句:strlen()計算字符串長度,strcpy()用來覅之字符串的庫函數。可是感受對strcpy()仍是有點陌生。
預習了一下指針,其實寒假就看了一下指針的,可是當時真心沒看懂,腦袋大的我如今依舊以爲它挺難的,對於指針的預習我搜了相關視頻學習,包括老師提供的視頻,可是沒太明白。

四,結對編程感悟

結對編程這個想法我以爲是很好,可是咱們並無達到那種效果,就目前我對結對編程的見解都是感到不習慣,會在思考的時候被對方一問問題,本身就一塊兒懵了, 而後本身原本想的是啥也記不得了,因此我會在想是否是要先寫完,再去交流兩我的的想法與問題。

相關文章
相關標籤/搜索