2019春第七週做業


這個做業屬於哪一個課程 C語言程序設計
這個做業的要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2935
我在這個課程的目標是 掌握數組名做爲函數參數的用法,理解指針、數組和地址之間的關係,理解指針和數組能夠實現相同的操做
這個做業在哪一個具體方面幫助我實現目標 讓我理解了字符串和指針之間的關係;掌握經常使用的字符串處理函數
參考文獻 C語言程序設計

一.基礎題

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 )
{
    for(;*p!='\0';p++){
        if(*(p+1)==' '){
            *p=(*p-'a')+'A';
        }
    }
}

2.設計思路

3)本題調試過稱中遇到的問題及解決辦法

本題比較簡單,一次性經過,沒有遇到問題。學習

4)運行截圖

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

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

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

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>
void panduan(int *yv_e, int xu_hao);
int main()
{
    int m[100],h[100];
    static int s[11];
    int i=0,j=0,z=0,y=0,x=1;
    int *p;
    p=&y;//計算餘額 
    //輸入錢幣值
    do{
        scanf("%d",&m[i]);
        z+=m[i];//計算總金額 
        i++;
    }while(m[i-1]!=-1);
    y=z=z+1;
    
    //輸入購買商品序號
    //每輸入一個商品序號,判斷錢幣是否能購買
    do{
        scanf("%d",&h[j]);
        panduan(p,h[j]);
        //若是錢幣不足,控制器則提示「Insufficient money」
        if(*p<0){
            printf("Insufficient money\n");
            x=0;
            break;
        }
        j++;
    }while(h[j-1]!=-1);
    
    //輸出錢幣總額與找回零錢,以及所購買商品名稱及數量。

    if(x){
    printf("Total:%dyuan,change:%dyuan\n",z,*p);
    for(int k=0;k<j-1;k++){
        switch(h[k]){
            case 1:s[1]++;break;
            case 2:s[2]++;break;
            case 3:s[3]++;break;
            case 4:s[4]++;break;
            case 5:s[5]++;break;
            case 6:s[6]++;break;
            case 7:s[7]++;break;
            case 8:s[8]++;break;
            case 9:s[9]++;break;
            case 10:s[10]++;break;  
        }
    }
    for(int k=1;k<11;k++){
        if(s[k]>0){
        switch(k){
            case 1:case 2:case 3:printf("Table-water:%d;",s[k]);break;
            case 4:printf("Coca-Cola:%d;",s[k]);break;
            case 5:printf("Milk:%d;",s[k]);break;
            case 6:printf("Beer:%d;",s[k]);break;
            case 7:printf("Orange-Juice:%d;",s[k]);break;
            case 8:printf("Sprite:%d;",s[k]);break;
            case 9:printf("Oolong-Tea:%d;",s[k]);break;
            case 10:printf("Green-Tea:%d;",s[k]);break;
        }
    }
    }
} 
}

void panduan(int *yv_e,int xu_hao)
//若是錢幣足夠,自動根據編號將物品進行計數和計算所需錢幣值,並提示餘額 
{
    switch(xu_hao){
        case 1:case 2:case 3:*yv_e-=1;break;
        case 4:case 5:*yv_e-=2;break;
        case 6:case 7:case 8:*yv_e-=3;break;
        case 9:case 10:*yv_e-=4;break;
        default:break;
    }
}

2.設計思路

3)本題調試過稱中遇到的問題及解決辦法


問題:運行的時候格式錯誤
解決辦法:在編譯器上運行的時候,發現輸入格式錯誤,兩行數據輸入之間多輸出了一個換行符,去掉後運行正確。指針

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()
{
    int repeat;char num[10][100];char op,ch;
    //輸入正整數和回車號 
    scanf("%d%c",&repeat,&ch);
    for(int i=0;i<repeat;i++){
        gets(num[i]);
        //輸入待刪除的字符和回車號 
        scanf("%c%c",&op,&ch);
        delchar(num[i],op);
        
    }
    for(int j=0;j<repeat;j++){
    printf("result: "); 
    puts(num[j]);
}
}
void delchar(char *str,char c)
{
    for(;*str!='\0';str++){
        //遇到待刪除的字符 
        if(*str==c){
            char *a;
            //讓後面的字符覆蓋這個待刪除的字符
            //即待刪除的字符後面的字符所有向前移一位 
            for(a=str;*a!='\0';a++){
                *a=*(a+1);
            }
            //從覆蓋了待刪除的符的位置的新字符開始遍歷數組餘下的元素 
            str--;
            //由於下一步是str++,因此先要str--,才能不漏掉被覆蓋位置的新字符 
        }
    }
}

2)設計思路

3)本題調試過稱中遇到的問題及解決辦法

在編譯器上編譯時遇到一些問題,但都弄明白了,如二位字符數組的定義、引用和gets輸入;如用for循環讓待刪除的字符後面的字符所有向前移一位。

4)運行結果

三.預習的主要內容

1.字符數組和字符指針之間的關係
2.經常使用的字符串處理函數:a.輸入、輸出: gets(); puts();
b.字符串的複製:strcpy(s1,s2);
c.字符串的鏈接:strcat(s1,s2);
d.字符串的比較:strcmp(s1,s2);
e.字符串長度:strlen(s1);

四.學習進度條


周/日期 這周所花的時間 代碼行 學到的知識點簡介 目前比較迷惑的問題
2/25-3/3 6h 39 一維數組的定義和引用及初始化 字符數組和整型數組的區別
3/4-3/10 12h 47 指針的定義及運用;文件的讀取、寫入, 處理和開關;文件的打開方. 文件的分類,什麼是文本文件, 什麼是二進制文件;字符數組的讀取和寫入
3/11-3/17 6h 57 二維數組的定義及應用 二維數組的行和列的嵌套循環輸入和輸出
3/18-3/24 12h 98 選擇排序法、冒泡排序法和二分查找法 不清楚選擇排序法和冒泡排序法的區別
3/25-3/31 20h 88 字符數組和字符串的區別,字符串的輸入輸出方式和格式,二維數組更高級的運用。 不清楚指針在程序中的做用
4/1-4/7 12h 70 變量、內存單元和地址之間的關係;指針變量的定義及初始化,指針變量的基本運算,指針、數組和地址間的關係 二分法查找法不太明白
4/8-4/14 11h 99 掌握數組名做爲函數參數的用法,理解指針、數組和地址之間的關係,理解指針和數組能夠實現相同的操做 好像忘記了,可能沒有

五.學習感悟

此次做業的題目比較難,特別是基礎題第二題和預習題,如基礎題第二題的輸入數據的處理和處理結果的輸出有難度,switch語句用了好幾個,感受在這兩個題要時思路要清晰纔好作出來;如預習題輸入一個正整數 repeat (0<repeat<10),作 repeat 次下列運算,輸入格式要輸入正整數和回車號,輸入待刪除的字符和回車號 ,否則回車號就會被下面的gets(num[i]);接收,輸入就會出錯。

六.結對編程感想

過程:此次題目難,咱們倆都在想用什麼辦法作出來,討論和不少方法,也試了討論出來的方法,可是最終到下課的時候也只作出來了一道題,感受有點沮喪,課後咱們本身思考,本身作,有時候在qq上討論一下,最終將題目作出來了。
感謝:此次題目雖然難,但咱們依舊作出來了,在課上也作出了一道題,本身可能在課上還作不出來一道題,果真兩我的的力量仍是大於一我的的力量,結對編程讓咱們共同窗習,共同進步。

七.表格和折線圖


時間 代碼行數 博客字數
第一週 39 1754
第二週 47 2087
第三週 57 1993
第四周 98 2145
第五週 88 2472
第六週 70 2514
第七週 99 3127

相關文章
相關標籤/搜索