這個做業屬於哪一個課程 | C語言程序設計 |
這個做業的要求在哪裏 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2935 |
我在這個課程的目標是 | 掌握數組名做爲函數參數的用法,理解指針、數組和地址之間的關係,理解指針和數組能夠實現相同的操做 |
這個做業在哪一個具體方面幫助我實現目標 | 讓我理解了字符串和指針之間的關係;掌握經常使用的字符串處理函數 |
參考文獻 | C語言程序設計 |
函數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
void fun( char *p ) { for(;*p!='\0';p++){ if(*(p+1)==' '){ *p=(*p-'a')+'A'; } } }
本題比較簡單,一次性經過,沒有遇到問題。學習
如圖所示的簡易自動售貨機,物品架一、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;
#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; } }
問題:運行的時候格式錯誤
解決辦法:在編譯器上運行的時候,發現輸入格式錯誤,兩行數據輸入之間多輸出了一個換行符,去掉後運行正確。指針
輸入一個正整數 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'都被刪除)
#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--,才能不漏掉被覆蓋位置的新字符 } } }
在編譯器上編譯時遇到一些問題,但都弄明白了,如二位字符數組的定義、引用和gets輸入;如用for循環讓待刪除的字符後面的字符所有向前移一位。
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 |