這個做業屬於哪一個課程 | C語言程序設計Ⅱ |
---|---|
這個做業要求在哪裏 | 第八週做業 |
我在這個課程的目標是 | 可以使用c語言實現基本的程序設計,以致最後可以設計出較大的項目 |
這個做業在哪一個具體方面幫助我實現目標 | 學會了一些與字符串有關的字符處理函數;並學習了用指針實現內存動態分配 ,其優勢是當不知道數組大小時,在程序執行的過程當中動態地分配或者回收存儲空間的分配內存,提升程序的可執行性,使程序更簡潔 |
參考文獻 | C語言程序設計(第3版); C Primer Plus (第6版) |
本題要求實現一個字符串逆序的簡單函數。
函數接口定義:編程
void f( char *p );
函數f對p指向的字符串進行逆序操做。要求函數f中不能定義任何數組,不能調用任何字符串處理函數。
裁判測試程序樣例:數組
#include <stdio.h> #define MAXS 20 void f( char *p ); void ReadString( char *s ); /* 由裁判實現,略去不表 */ int main() { char s[MAXS]; ReadString(s); f(s); printf("%s\n", s); return 0; }
/* 你的代碼將被嵌在這裏 */
輸入樣例:函數
Hello World!
輸出樣例:學習
!dlroW olleH
void f( char *p ) { int i=0,j,q; char k; while (p[i]!='\0') i++; q=i; i=i-1; for (j=0; j<q/2; j++) { k=p[j]; p[j]=p[i-j]; p[i-j]=k; } }
無測試
本題要求實現一個函數,將兩個字符串鏈接起來。
函數接口定義:設計
char *str_cat( char *s, char *t );
函數str_cat
應將字符串t複製到字符串s
的末端,而且返回字符串s
的首地址。
裁判測試程序樣例:3d
#include <stdio.h> #include <string.h> #define MAXS 10 char *str_cat( char *s, char *t ); int main() { char *p; char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'}; scanf("%s%s", str1, str2); p = str_cat(str1, str2); printf("%s\n%s\n", p, str1); return 0; }
/* 你的代碼將被嵌在這裏 */
輸入樣例:指針
abc def
輸出樣例:調試
abcdef abcdef
char *str_cat( char *s, char *t ) { int i,j; while (s[i]!='\0') { i++; if (s[i]=='\0') break; } for (j=0; t[j]!='\0'; j++) { s[i]=t[j]; i++; } return s; }
無code
本題要求編寫程序,根據輸入學生的成績,統計並輸出學生的平均成績、最高成績和最低成績。建議使用動態內存分配來實現。
輸入格式:
輸入第一行首先給出一個正整數N
,表示學生的個數。接下來一行給出N
個學生的成績,數字間以空格分隔。
輸出格式:
按照如下格式輸出:
average = 平均成績
max = 最高成績
min = 最低成績
結果均保留兩位小數。
輸入樣例:
3 85 90 95
輸出樣例:
average = 90.00 max = 95.00 min = 85.00
#include<stdio.h> #include<stdlib.h> int main () { int n,*p,i; double average,max=0.0,min=200.0,sum=0; scanf ("%d\n",&n); if ((p = (int *) calloc (n,sizeof (double))) == NULL) { printf ("Not able to allocate memory.\n"); exit (1); } for (i=0; i<n; i++) { scanf ("%d",p+i); sum = sum + *(p+i); } average=sum/n; for (i=0; i<n; i++) { if (*(p+i)>max) max=*(p+i); if (*(p+i)<min) min=*(p+i); } printf ("average = %.2lf\n",average); printf ("max = %.2lf\n",max); printf ("min = %.2lf\n",min); free (p); return 0; }
如圖,提示答案部分正確;
解決方法:將變量 sum 定義爲 double 型。
本題要求編寫程序,讀入5個字符串,按由小到大的順序輸出。
輸入格式:
輸入爲由空格分隔的5個非空字符串,每一個字符串不包括空格、製表符、換行符等空白字符,長度小於80。
輸出格式:
按照如下格式輸出排序後的結果:
After sorted:
每行一個字符串
輸入樣例:
red yellow blue green white
輸出樣例:
After sorted: blue green red white yellow
#include<stdio.h> #include<string.h> int main() { int i,j; char p[5][80],q[80]; for(i=0; i<5; i++) scanf("%s",p[i]); for(i=0; i<4; i++) for(j=0; j<4-i; j++) if (strcmp(p[j],p[j+1])>0) { strcpy(q,p[j]); strcpy(p[j],p[j+1]); strcpy(p[j+1],q); } printf("After sorted:\n"); for(i=0;i<5;i++) printf("%s\n",p[i]); return 0; }
無
給定N
個學生的基本信息,包括學號(由5個數字組成的字符串)、姓名(長度小於10的不包含空白字符的非空字符串)和成績([0,100]區間內的整數),要求計算他們的平均成績,並順序輸出平均線如下的學生名單。
輸入格式:
輸入在一行中給出正整數N
(≤10)。隨後N行,每行給出一位學生的信息,格式爲「學號 姓名 成績」,中間以空格分隔。
輸出格式:
首先在一行中輸出平均成績,保留2位小數。而後按照輸入順序,每行輸出一位平均線如下的學生的姓名和學號,間隔一個空格。
輸入樣例:
5 00001 zhang 70 00002 wang 80 00003 qian 90 10001 li 100 21987 chen 60
輸出樣例:
80.00 zhang 00001 chen 21987
#include<stdio.h> struct student { int fen; char name [10],num [10]; }; int main () { int n,i; double sum=0.0,average=0.0; scanf ("%d",&n); struct student p[n]; for (i=0; i<n; i++) { scanf ("%s %s %d",&p[i].num,&p[i].name,&p[i].fen); sum = sum + p[i].fen; } average = sum / n; printf ("%.2lf\n",average); for (i=0; i<n; i++) { if (average > p[i].fen) printf ("%s %s\n",p[i].name,p[i].num); } return 0; }
無,依照書上例題來的。
周/日期 | 這周所花的時間 | 代碼行數 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
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 兩種輸入方式有區別嗎?會不會在有些狀況下能影響到輸出結果? |
4/13-4/19 | 兩天 | 170 | 一、學習了與字符串有關的一些字符串處理函數;二、學習了利用指針實現內存動態分配 | 究竟什麼狀況下采用內存動態分配?具體要採用哪種動態內存分配? |
這週上課前就已經知道做業題目有五題,一開始以爲數量些許多,但當我作的時候果真,難度不大。幾乎全部題目都對應了所學的每一處知識點。就連預習題目也是書上的差很少原題,操做起來難度不大。
原本週三下午就已經寫了四道題目,有一題pta老是不給過,想着晚自習與隊友討論,但晚自習一開始,班長就讓去小禮堂開會。結束後就回寢了。不過好在次日上課間,只是與隊友提及來了,他看了我代碼,一眼發現變量定義失誤,兩分鐘內解決問題。過後感慨有個隊友仍是比較靠譜,有些低級錯誤本身當時可能發現不了,在別人看來,一眼就能看出問題。
時間 | 累計代碼行數 | 累計博客字數 |
---|---|---|
第一週 | 80 | 275 |
第二週 | 50 | 883 |
第三週 | 180 | 1303 |
第四周 | 210 | 1849 |
第五週 | 120 | 1988 |
第六週 | 150 | 2717 |
第七週 | 200 | 3000 |
第八週 | 170 | 2820 |