2019春第七週做業

這個做業屬於哪一個課程 C語言程序設計II
這個做業要求在哪裏 2019年春季學期第七週做業
我在這個課程的目標是 我但願可以經過學習C語言的知識,編寫程序
這個做業在哪一個具體方面幫助我實現目標 這個做業讓我知道了掌握數組名做爲函數參數的用法,理解指針和數組能夠實現相同的操做
參考文獻 字母大小寫轉換C 結構體

1、本週完成的做業

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

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

函數接口定義:c++

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 )
{
  for(int i = 0;p[i] != '\0'; i ++)
  {
    if(p[i] == ' ')
      p[i - 1] = p[i - 1] - 32;
  }
}

2). 設計思路

3).本題調試過程碰到問題及解決辦法

遇到的問題:答案錯誤,在編譯器上發現運行結果和輸入同樣,經過調試發現是循環的條件錯了
解決的辦法:詢問助教,發如今循環時可用p[i] != '\0'做爲循環終止的條件

4).運行結果截圖

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

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

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

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>

struct
{
    int amount;
    char Name[15];
    int Value;
}sold[10] =
{
    {0, "Table-water", 1},
    {0, "Table-water", 1},
    {0, "Table-water", 1},
    {0, "Coca-Cola", 2},
    {0, "Milk", 2},
    {0, "Beer", 3},
    {0, "Orange-Juice", 3},
    {0, "Sprite", 3},
    {0, "Oolong-Tea", 4},
    {0, "Green-Tea", 4}
};

int main()
{
    int single = 0, Total = 0, TotalPrice = 0;

    while (single != -1)
    {
        scanf("%d", &single);
        if(single > 0)
          Total += single;
    }
    single = 0;
    while (single != -1)
    {
        scanf("%d", &single);
        if (single > 0)
        {
            sold[single - 1].amount++;
            TotalPrice += sold[single - 1].Value;
        }
    }

    if (TotalPrice > Total)
        printf("Insufficient money");
    else
    {
        printf("Total:%dyuan,change:%dyuan\n", Total, Total - TotalPrice);
        for (int i = 0; i < 10; i++)
        {
            if (sold[i].amount != 0)
                printf("%s:%d;", sold[i].Name, sold[i].amount);
        }
    }
    return 0;
}

2). 設計思路

3).本題調試過程碰到問題及解決辦法

遇到的問題:答案錯誤,經過編譯器調試發現只有第一排的數字被輸入了,
解決的辦法:經過和助教一塊兒調試,發現了single在進行第二個循環算總價值時爲-1,不符合循環條件,因此將其在第二個循環前賦值爲0

4).運行結果截圖

題目3. 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')

輸出樣例:ui

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(void)
{
    int repeat;
    char str[1000], c, temp;
    scanf("%d%c", &repeat, &temp);
    int i = 0, j = 0;
    for (j = 0; j < repeat; j++)
    {
        i = 0;
        while (1)
        {
            scanf("%c", &str[i]);
            if (str[i] == '\n')
                break;
            i++;
        }
        str[i] = '\0';
        scanf("%c%c", &c, &temp);

        delchar(str, c);
    }
    return 0;
}

void delchar(char str[], char c)
{
    printf("result: ");
    for (int i = 0; str[i] != '\0'; i++)
    {
        if (str[i] != c)
            printf("%c", str[i]);
    }
    printf("\n");
}

2). 設計思路

3).本題調試過程碰到問題及解決辦法

遇到的問題:編譯錯誤,本題在寫時由我提供思路,助教再將個人思路進行修改,因爲助教用的是c++,因此在編譯時出現了一些不兼容的情況
解決的辦法:如"%d\n"須要改成"%d%c"

4).運行結果截圖

題目1. 挑戰做業

接着上週的挑戰做業繼續,本週, 咱們須要考慮若是 「子數組」 並不要求是一個矩形, 而是聯通的元素便可 (上下或左右相鄰即視爲聯通), 那解法會是怎麼樣呢?

具體要求請參看鄒欣老師博客 現代程序設計做業

1).設計思路

第一步 輸入二維數組
第二步 循環進行相鄰(上下或左右)的元素的比較(難點),用雙for循環比較相鄰的元素
第三步 循環比較大小的同時也不斷將最大的元素的地址存儲在另外一個數組中
第四步 輸出最大矩形子數組的和

2、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
3/2-3/8 20h 300行 數組,指針的大體意義,文件入門 數組串的使用,指針
3/9-3/15 25h 400行 二維數組,文件與數組的結合運用 雙for循環的流程圖(再不上課,光自學感受太艱難了)
3/16-3/22 22h 450行 一維數組,二維數組,幾種數組排序法 字符串使用
3/23-3/29 20h 350行 字符串的定義及其使用 指針的具體使用
3/30-4/5 15h 340行 指針變量的定義,使用,初始化及其基本運算,指針做爲函數參數的做用;使用指針實現函數調用返回多個值 指針在運行時內存的變化
4/6-4/12 13h 400行 數組名做爲函數參數的用法,理解指針、數組和地址之間的關係,指針和數組能夠實現相同的操做,結構體的定義,使用 結構體的具體使用,結構體的流程圖

3、學習感悟

心得:

(1) 學習內容:
1. 掌握數組名做爲函數參數的用法
2. 理解指針、數組和地址之間的關係
3. 理解指針和數組能夠實現相同的操做
4.結構體的定義,使用
收穫:
(2) 難點: 結構體是一個新的知識點,第一次學習有點難接受
解決的方法:努力理解,經過看書和看 C 結構體 來學習。

4、結對編程

1.結對編程過程

本次的隨機分配的搭檔依舊沒看到人,上一個搭檔學委也參加比賽去了╥﹏╥,因此我只能找助教當個人搭檔了。在本次結對編程中,助教教了我一個新的知識點,結構體,而且在本次做業中也有使用到。本次結對主要就是在理解,學習並使用新的知識點了。

2.結對編程的優缺點

優勢:1.能夠將本身知道而搭檔不知道的知識教給搭檔。
2.提供不一樣的思路
3. 一塊兒找錯效率更高
缺點: 助教實在是tql,個人思路被超速優化,腦子有點轉不過來,不過這也是我本身的問題,只能讓本身努力去接受新知識了。

完成做業的消耗時間:12h

相關文章
相關標籤/搜索