作業要求一
請將pta作業編程題目的解題思路和調試過程記錄在博客中,每道題目的具體格式如下:
6-7 刪除字符串中數字字符
1.設計思路
(1)主要描述題目算法。可以用文字描述(不允許使用偽代碼),
第一步:定義指針變量p並將s賦值
第二步:利用for循環遍歷數組,if語句完成刪除數字指令
第三步:當賦值為結束字符'\0'時,循環結束
(2)流程圖


2.實驗代碼
void delnum(char *s) { char *p=s; for(;*s;s++) { if(*s>'9'||*s<'0') *p++=*s; } *p='\0'; }
3.本題調試過程碰到問題及解決辦法
錯誤信息:
錯誤原因:字符數組元素未用單引號‘’括起。
改正方法:詢問同學及查詢課本后,進一步熟悉了字符數組的運用。


6-8 統計子串在母串出現的次數
1.設計思路
(1)主要描述題目算法。可以用文字描述(不允許使用偽代碼),
第一步:定義i,n
第二步:創建一個for循環遍歷數組,並在其中利用if語句判斷前三個字符值
2.實驗代碼
int fun(char *str,char *substr) { int n=0,i; for(i=0;*(str+i)!='\0';i++){ if(*(str+i)=='a'&&*(str+i+1)=='s'&&*(str+i+2)=='d') { n++; } } return n; }
3.本題調試過程碰到問題及解決辦法
錯誤信息:
錯誤原因:語句后缺少‘;’,並且返回值應該是n。
改正方法:低級錯誤,通過編譯器提示發現並改正。


6-9 字符串中除首尾字符外的其余字符按降序排列
1.設計思路
(1)主要描述題目算法。可以用文字描述(不允許使用偽代碼),
第一步:定義整形變量i,j,字符型變量t
第二步:套用兩個for循環進行排序
第三步:用if語句比較大小並進行交換
2.實驗代碼
int fun(char *s,int num) { int i,j; char t; for(j=0;j<num-3;j++) for(i=1;i<num-j-2;i++) if(s[i]<s[i+1]) { t=s[i]; s[i]=s[i+1]; s[i+1]=t; } }
3.本題調試過程碰到問題及解決辦法
錯誤信息:無

7-1 輸出學生成績
1.設計思路
(1)主要描述題目算法。可以用文字描述(不允許使用偽代碼),
第一步:定義所需變量並按要求執行輸入指令
第二步:調用函數,將p中首地址賦最大最小值,之后判斷大小並重新賦值,並用for循環進行數據計算
第三步:使用if語句進行比較大小並輸出
2.實驗代碼
#include <stdio.h> int main() { int i,n; float sum=0,average,max,min; scanf("%d",&n); float *p=(float *)malloc(n); for(i=0;i<n;i++) { scanf("%f",(p+i)); sum+=*(p+i); } min=*(p+0); max=*(p+0); for(i=0;i<n;i++){ if(min>*(p+i)) { min=*(p+i); } if(max<*(p+i)) { max=*(p+i); } } printf("average = %.2f\n",sum/n); printf("max = %.2f\n",max); printf("min = %.2f\n",min); return 0; }
3.本題調試過程碰到問題及解決辦法
錯誤信息:
錯誤原因:缺少函數定義 float *p=(float *)malloc(n);
改正方法:通過與同學交流並查詢書籍得知


7-1 計算職工工資
1.設計思路
(1)主要描述題目算法。可以用文字描述(不允許使用偽代碼),
第一步:使用結構來表示職員信息
第二步:使用嵌套的結構類型進行結構變量操作
(2)流程圖

2.實驗代碼
# include <stdio.h> struct salary { int num; char name[10]; float a,b,c; double sum; }; int main(void) { int i, n; struct salary s1; scanf ("%d", &n); for (i = 1; i <= n; i++){ scanf ("%s %f %f %f",s1.name,&s1.a,&s1.b,&s1.c); s1.sum = s1.a + s1.b - s1.c; printf("%s %.2lf\n", s1.name,s1.sum); } return 0; }
3.本題調試過程碰到問題及解決辦法
錯誤信息1:
錯誤原因:輸出指令中sum格式不正確
改正方法:通過編譯器輸出框提示及觀察改正
錯誤信息2:
錯誤原因:printf應在上一個括號內,未知錯誤導致輸出結果錯誤
改正方法:同學幫助並指出

7-2 計算平均成績
1.設計思路
(1)主要描述題目算法。可以用文字描述(不允許使用偽代碼),
第一步:使用結構來表示學生基本信息
第二步:使用嵌套的結構類型進行結構變量操作
2.實驗代碼
#include<stdio.h> struct student{ char num[6]; char name[10]; int grade; }student1[10]; int main() { int n,i; double average=0,sum=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s %s %d",student1[i].num,student1[i].name,&student1[i].grade); sum=sum+student1[i].grade; }average=sum/n; printf("%.2f\n",average); for(i=0;i<n;i++) { if(student1[i].grade<average) printf("%s %s\n",student1[i].name,student1[i].num); } return 0; }
3.本題調試過程碰到問題及解決辦法
錯誤信息:
錯誤原因:num定義時未設置字節長度
改正方法:對基本概念認知不清淅,詢問室友了解

6-1 按等級統計學生成績
1.設計思路
(1)主要描述題目算法。可以用文字描述(不允許使用偽代碼),
第一步:用else-if條件句分類討論,設定i,j=0進行人數計算
第二步:用指向運算符"->"訪問指針指向的結構成員
(2)流程圖

2.實驗代碼
int set_grade( struct student *p, int n ) { int i,j=0; for(i=0;i<n;i++,p++) { if(p->score <60) { j++; } if((p->score >=85)&&(p->score <=100)) { p->grade = 'A'; } else if((p->score >=70)&&(p->score <=84)) { p->grade = 'B'; } else if((p->score >=60)&&(p->score <=69)) { p->grade = 'C'; }else if((p->score >=0)&&(p->score <=59)) { p->grade = 'D'; } } return j; }
3.本題調試過程碰到問題及解決辦法
錯誤信息1:
錯誤原因:字符未用 ' ' 括起無法編譯
改正方法:通過Dev-c++編譯器提示改正
錯誤信息2:
錯誤原因:if-else條件句不完整
改正方法:用else隔離每一個新的條件句使情況分離


6-2 結構體數組按總分排序
1.設計思路
(1)主要描述題目算法。可以用文字描述(不允許使用偽代碼),
第一步:引用主函數中結構體,並用兩個for循環和calc函數進行計算及輸入輸出
第二步:用冒泡法排序,並按大小順序進行交換
2.實驗代碼
void calc(struct student *p,int n) { struct student sum; int i,j=0; for(i=0;i<n;i++) { for(j=0;j<3;j++) { (p+i)->sum =(p+i)->sum + (p+i)->score[j]; } } } void sort(struct student *p,int n) { int i,j,k; struct student t; for(i=0;i<n-1;i++) { k=i; for(j=i;j<n;j++) { if(((p+k)->sum)<((p+j)->sum)) { k=j; } } if(k!=i) { t=*(p+i); *(p+i)=*(p+k); *(p+k)=t; } } }
3.本題調試過程碰到問題及解決辦法
錯誤信息:定義t時用了int型發現無法編譯
改正方法:改用結構體定義t


要求三、學習總結和進度
1、總結兩周里所學的知識點有哪些學會了?哪些還沒有學會?
本章學習了結構、結構類型的一般定義以及如何嵌套使用,結構指針由於接觸時間較短所以還並未完全熟練掌握,還需要再以后的作業及練習中繼續努力。
2、將PTA作業的源代碼使用git提交到托管平台上,要求給出上傳成功截圖和你的git地址。

我的git鏈接: https://git.coding.net/Downager/180408.git
3、點評3個同學的本周作業(在作業中給出被點評同學博客的鏈接),並邀請3名同學點評你的作業,無點評作業(你的作業未被3人點評)/或者沒有回復同學或老師的點評都倒扣該題分數。
豐大為:https://home.cnblogs.com/u/DavidPark/
孫銘婧:http://www.cnblogs.com/sun031915/
吳曉明:https://home.cnblogs.com/u/gu-an-cheng-wxm/
4、請用表格和折線圖呈現你本周(3/26 8:00~4/9 8:00)的代碼行數和所用時間、博客字數和所用時間


