2019春第七週做業

2019春第七週做業

這個做業屬於哪一個課程 C語言程序設計Ⅱ
這個做業要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2935
我在這個課程的目標是 可以使用c語言實現基本的程序設計,以致最後可以設計出較大的項目
這個做業在哪一個具體方面幫助我實現目標 更進一步地理解數組與指針二者的結合應用,並學會指針與字符(字符數組)的結合應用
參考文獻 C語言程序設計(第3版); C Primer Plus (第6版)

1、本週完成的做業

題目1. 6-2 每一個單詞的最後一個字母改爲大寫 (10 分)

函數fun的功能是:將p所指字符串中每一個單詞的最後一個字母改爲大寫。(這裏的「單詞」是指由空格隔開的字符串)。
函數接口定義:編程

void fun( char *p );

其中 p 是用戶傳入的參數。函數將 p所指字符串中每一個單詞的最後一個字母改爲大寫。
裁判測試程序樣例:數組

#include <stdio.h>
void fun( char *p );
int main()
{
 char chrstr[64];  int d ;
  gets(chrstr);
  d=strlen(chrstr) ;
  chrstr[d] = ' ' ;
  chrstr[d+1] = 0 ;
  fun(chrstr);
  printf("\nAfter changing:   %s\n", chrstr);
return 0;
}

/* 請在這裏填寫答案 */
輸入樣例:app

my friend is happy

輸出樣例:函數

After changing:   mY frienD iS happY

1)、實驗代碼

void fun( char *p )
{
    int i;
    for (i=0; *(p+i) != '\n'; i++) {
        if (*(p+i+1) == ' '&&( (*(p+i)) >= 'a' && (*(p+i) <= 'z' )) ){
            *(p+i) = *(p+i) -32;
        }
    }
}

2)、設計思路

3)、本題調試過程碰到的問題及解決方法

學習

4)、運行結果圖

題目2. 7-2 自動售貨機 (30 分)

如圖所示的簡易自動售貨機,物品架一、2上共有10樣商品,按順序進行編號分別爲1-10,標有價格與名稱,一個編號對應一個可操做按鈕,供選擇商品使用。若是物架上的商品被用戶買走,儲物櫃中會自動取出商品送到物架上,保證物品架上必定會有商品。用戶能夠一次投入較多錢幣,並能夠選擇多樣商品,售貨機能夠一次性將商品輸出並找零錢。測試

用戶購買商品的操做方法是:ui

(1)從「錢幣入口」放入錢幣,依次放入多個硬幣或紙幣。錢幣可支持1元(紙幣、硬幣)、2元(紙幣)、5元(紙幣)、10元(紙幣),放入錢幣時,控制器會先對錢幣進行檢驗識別出幣值,並統計幣值總額,顯示在控制器顯示屏中,提示用戶確認錢幣放入完畢;設計

(2)用戶確認錢幣放入完畢,即可選擇商品,只要用手指按對應商品外面的編號按鈕便可。每選中同樣商品,售貨機控制器會判斷錢幣是否足夠購買,若是錢幣足夠,自動根據編號將物品進行計數和計算所需錢幣值,並提示餘額。若是錢幣不足,控制器則提示「Insufficient money」。用戶能夠取消購買,將會把全部放入錢幣退回給用戶。
輸入格式:
先輸入錢幣值序列,以-1做爲結束,再依次輸入多個購買商品編號,以-1結束。
輸出格式:
輸出錢幣總額與找回零錢,以及所購買商品名稱及數量。3d

輸入樣例:指針

1 1 2 2 5 5 10 10 -1
1 2 3 5 1 6 9 10 -1

輸出樣例:

Total:36yuan,change:19yuan
Table-water:2;Table-water:1;Table-water:1;Milk:1;Beer:1;Oolong-Tea:1;Green-Tea:1;

1)、實驗代碼

#include<stdio.h>
int main ()
{
    int n,m,sum=0,amount=0,i,a[10]={0},b[11]={0};
    char c[11][30]={"","Table-water","Table-water","Table-water","Coca-Cola","Milk","Beer","Oolong-Juice","Sprite","Oolong-Tea","Green-Tea"};
    
    while (scanf ("%d",&n)) {
        if (n==-1)
        break;
        else
        sum=sum+n;
        
    }
    while (scanf ("%d",&m)) {
        switch (m) {
            case 1:n=1;a[0]++;break;
            case 2:n=1;a[1]++;break;
            case 3:n=1;a[2]++;break;
            case 4:n=2;a[3]++;break;
            case 5:n=2;a[4]++;break;
            case 6:n=3;a[5]++;break;
            case 7:n=3;a[6]++;break;
            case 8:n=3;a[7]++;break;
            case 9:n=4;a[8]++;break;
            case 10:n=4;a[9]++;break;
        }
        b[m]++;
        if (m==-1)
        break;
        else
        amount=amount+n;
    }
    if(amount>sum)
        printf("Insufficient money");
    else {
        printf("Total:%dyuan,change:%dyuan\n",sum,sum-amount);
        for(i=1;i<11;i++)
           if(b[i])
               printf("%s:%d;",c[i],b[i]);
    }
    return 0;
}

2)、設計思路


3)、本題調試過程碰到的問題及解決方法


如圖,當好不容易寫完後,運行結果顯示部分正確。看了一下沒看出問題,把代碼放到了Dev C++裏運行了一下,發現結果不對;

解決方法:將第二個while循環中amount+=那裏的m換成n;

4)、運行結果圖

預習做業 7-1 使用函數刪除字符串中的字符 (10 分)

輸入一個正整數 repeat (0<repeat<10),作 repeat 次下列運算:

輸入一個字符串 str,再輸入一個字符c,將字符串 str 中出現的全部字符c 刪除。

要求定義並調用函數delchar(str,c), 它的功能是將字符串 str中出現的全部 c 字符刪除,函數形參str的類型是字符指針,形參c的類型是char,函數類型是void

輸入輸出示例:括號內爲說明,無需輸入輸出

輸入樣例:

3               (repeat=3)
happy new year  (字符串"happy new year")
a               (待刪除的字符'a')
bee             (字符串"bee")
e               (待刪除的字符'e')
111211          (字符串"111211")
1               (待刪除的字符'1')

輸出樣例:

result: hppy new yer    (字符串"happy new year"中的字符'a'都被刪除)
result: b               (字符串"bee"中的字符'e'都被刪除)
result: 2               (字符串"111211"中的字符'1'都被刪除)

1)、實驗代碼

#include<stdio.h>
void delchar(char *str,char c) ;
int main ()
{
    char a[80],c;
    int n,i;
    scanf ("%d",&n);
    getchar();
    for (i=0; i<n; i++) {
        gets(a);
        scanf ("%s",&c);
        printf ("result: ");
        delchar(a,c);
    }
    return 0;
}
void delchar(char *str,char c)
{
    int i;
    for (i=0; *(str+i)!='\n'; i++) {
        if (*(str+i)!=c) 
        printf ("%c",*(str+i));
    }
    printf ("\n");
}

2)、設計思路


3)、本題調試過程碰到的問題及解決方法

如圖,第一次提交後,提示運行超時。通讀一遍後,發如今自定義函數中用的while語句有些不妥;

解決方法:將while語句用for語句代替;

第二次提交後,提示段錯誤,我改了不少地方,最終找到緣由:輸入字符c時,用%c老是過不去,但能夠用%s;

還有一出問題是代碼中一開始沒有寫第八行的getchar();而後就老是提示段錯誤;後來問同窗後,獲得解釋,加了該句代碼,能消除一開始輸入數字後敲下的那個回車,不能少;

4)、運行結果圖

2、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
3/2-3/8 三天六小時 50 一、定義、運用文件指針;二、如何打開、關閉文件三、如何讀出指定文件中的數據;四、如何向指定文件中寫入數據; 字符、字符串有什麼區別?兩者輸入、輸出有沒有很大不一樣?什麼纔算字符串?什麼算字符?在文件中兩者有沒有差異?
3/9-3/15 四天三小時 180 一、運用二維數組解決問題,矩陣的判斷;二、對一組數的全部子數組求和 如何在輸出時利用數組的性質
3/16-3/22 三天八小時 210 一、二維數組加深理解,二維數組與矩陣;二、選擇排序法解決問題;三、二分查找法 二分查找法這周沒練習,只是看看書上例題大體懂了,不知道真正應用時可否掌握。
3/23-3/29 三天兩小時 120 一、判斷回;文二、字符數組的概念及其簡單運用;三、一些簡單的與字符數組相關的暫時沒接觸補充知識,一些函數,用法等。 在做業運用文件指針時,一開始老是出現從文件裏輸不出來結果,打印不出來,後來發現可能與本身輸入時格式未搞好,原本不該該出現的空格出現了,致使打印不出來結果。文件指針還不是很熟練
3/30-4/5 兩天 150 一、指針的含義,變量、地址、指針變量等間的關係;二、指針變量的初始化,運用指針作一些簡單運算;三、指針與數組之間的關係 在用指針處理字符串時,應怎樣定義指針變量
4/6-4/12 三天 200 一、更深一步掌握指針與數組間的關係;二、懂得指針能夠實現數組的一些功能;三、指針在碰到字符數組時的應用 在代碼中,若是遇到要輸出單個字符,%s與%c有什麼區別? scanf()與 getchar 兩種輸入方式有區別嗎?會不會在有些狀況下能影響到輸出結果?

3、學習感悟

原本這周題目感受也不是很困難,第二題一開始寫的時候我想用之前學的 switch 語句,但想來想去,以爲商品的名稱那裏在輸出時不會用 switch ,而後就想着試試其餘方法,以後有同窗用 switch 語句,我看了以後感受用 switch 語句確實比較繁瑣,但確實很清晰易懂。還有預習題目,一開始我老是得不到結果,自認爲代碼沒什麼問題但就是有問題。本身進行了調試,但調試時程序運行到一半就不能調了。當時就非常氣啊,爲何連調都調不了。麻煩同窗看了一眼代碼,緣由很簡單,我對於自定義函數調用時考慮的太「裏面」了,沒有「跳出來」看問題,總之一語點醒夢中人。

結對編程感想

本週在結對時,我跟個人隊友一直在研究第二題,當定義數組 char[11] [30] 時,我說這好像不是二維數組,由於上次做業我認爲這是定義了一個字符型數組,11表明的是數組中有11個字符串;30表明每一個字符串長度不超過30.他說這就是二維數組;我一直認爲二維數組就是一個矩陣,產生分歧後,先查了課本,發現也仍是很模糊,解決不了,而後就問了旁邊的同窗,獲得確定回答。上面的解釋就能夠理解爲二位數組,只是我沒有意識到兩者是一個意思。

表格-折線圖

時間 累計代碼行數 累計博客字數
第一週 80 275
第二週 50 883
第三週 180 1303
第四周 210 1849
第五週 120 1988
第六週 150 2717
第七週 200 3000

相關文章
相關標籤/搜索