PTA第二次做業
C高級第二次做業(1)
第一題:刪除字符串中數字字符
1 設計思路
(1)主要描述題目算法
第一步:讀清題目,看清楚要求
第二步:看出函數中的實參和形參
第三步:定義一個指針變量p,對s中的字符進行遍歷。
第四步:若s[]中的字符不在‘0’到‘9’中,則將字符儲存在p[]中。算法
(2)流程圖數組
(3)代碼函數
void delnum(char *s) { char *p=s; int i; for(i=0;p[i]!= '\0';i++) { if((p[i]<'0') ||( p[i]>'9')) { *s=p[i]; s++; } } *s='\0';
(4)本題調試過程碰到問題及解決辦法學習
無錯誤.net
第二題:統計子串在母串出現的次數設計
(1). 主要描述題目算法指針
第一步:閱讀題目並瞭解函數及其定義
第二步:找到對應函數中的實參和形參並寫出函數接口。
第三步:遍歷一次母串,把母串的遍歷的每個字符都與子串的第一個字符比較,假如同樣的話這時候母串和字串開始同時遍歷。
第四步:當字符串遍歷到‘0'的時候,進行num++;調試
(2)流程圖
code
(3)代碼orm
int fun(char *str,char *substr) { int i; int a=0; for(i=0;str[i]!='\0';i++){ if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2]) a++; } return a; }
(4)本題調試過程碰到問題及解決辦法
答案錯誤
緣由是字符串結束時須要加上'\0'
第三題:字符串中除首尾字符外的其他字符按降序排列
(1). 主要描述題目算法
第一步:閱讀題目並瞭解函數及其定義。
第二步:找到字符串中首尾字符串的位置
第三步:而後把中間的字符降序排列
int fun(char *s,int num)
{
int i,j,temp;
for(i=1;i<num-2;i++)
for(j=1;j<num-1-i;j++){
if(s[j]<s[j+1]){
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}return 0;
}
(3)本題調試過程碰到問題及解決辦法
循環時條件設定錯誤
把num-1改爲num-2
第四題:輸出學生成績
(1). 主要描述題目算法
第一步:閱讀題目並瞭解函數及其定義。
第二步:先定義數組和浮點型的sum,average,max,min
第三步:而後使用for循環算出sum而後輸出average,最後找出max,min
int fun(char *str,char *substr) { int i; int a=0; for(i=0;str[i]!='\0';i++){ if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2]) a++; } return a; }
(3)本題調試過程碰到問題及解決辦法
無
C高級第二次做業(2)
第一題:計算職工工資
(1). 主要描述題目算法
第一步:定義結構體salary,裏面的元素分別爲real name basic change disbursement real
第二步:而後把定義結構體a[n]使用for循環輸入
第三步:用for循環計算並輸出代碼
#include <stdio.h> #include <stdlib.h> struct wage{ char name[10]; float base_pay; float floating_wage; float expend; float net_payroll; }; int main() { int N,i; scanf("%d",&N); struct wage salary[N]; for(i=0;i<N;i++){ scanf("%s %f %f %f",salary[i].name,&salary[i].base_pay,&salary[i].floating_wage,&salary[i].expend); salary[i].net_payroll=salary[i].base_pay+salary[i].floating_wage-salary[i].expend*1.0; } for(i=0;i<N;i++){ printf("%s %.2f\n",salary[i].name,salary[i].net_payroll); } return 0; }
(3)本題調試過程碰到問題及解決辦法
第二題:計算平均成績
(1). 主要描述題目算法
第一步:閱讀題目並瞭解函數及其定義。
第二步:找到對應函數中的實參和形參。
第三步:
(2)流程圖
(3)代碼
#include <stdio.h> #include <stdlib.h> struct information{ char num[6]; char name[11]; int grade; }; int main() { int i,N; float average=0; int sum=0; scanf("%d",&N); struct information massage[N]; if(N>0&&N<=10){ for(i=0;i<N;i++){ scanf("%s %s %d",massage[i].num,massage[i].name,&massage[i].grade); sum=sum+massage[i].grade; } average=sum*1.0/N; printf("%.2f\n",average); for(i=0;i<N;i++){ if(average>massage[i].grade){ printf("%s %s\n",massage[i].name,massage[i].num); } } } return 0; }
(4)本題調試過程碰到問題及解決辦法
C高級第二次做業(3)
第一題:按等級統計學生成績
(1). 主要描述題目算法
第一步:閱讀題目並瞭解調用函數函數及其定義。
第二步:把count,i初始爲0
第三步:而後設置分數在85-100以內爲A,70-84以內爲B,60-69以內爲C,0-59以內爲D。
(2)流程圖
int set_grade( struct student *p, int n ) { int count,i; int A,B,C,D; i=0; count=0; for(i=0;i<n;i++) { if((p[i].score)>=85 && (p[i].score<=100)) { p[i].grade='A'; } if((p[i].score)>=70 && (p[i].score<=84)) { p[i].grade='B'; } if((p[i].score)>=60 && (p[i].score<=69)) { p[i].grade='C'; } if((p[i].score)>=0 && (p[i].score<=59)) { p[i].grade='D'; count++; } } return count; }
(4)本題調試過程碰到問題及解決辦法
a,b,c,d缺乏單引號加上單引號
第二題:結構體數組按總分排序
(1). 主要描述題目算法
第一步:定義一個函數,而後求出三個成績的和。
第二步:定義一個結構t
第三步:用選擇排序比出相鄰兩個數的大小而後調換位置,用函數t執行
(2)代碼
void calc(struct student *p,int n) { int i; for(i=0;i<n;i++) { (p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2]; } } void sort(struct student *p,int n) { int i,j; struct student t; for(i=0;i<n;i++) { for(j=0;j<n-1;j++) { if(p[j].sum<p[j+1].sum) { t=p[j]; p[j]=p[j+1]; p[j+1]=t; } } } }
(3)本題調試過程碰到問題及解決辦法
循環時條件設置錯誤
j<n-1等於j<=n
學習進度和總結 一、最近學習的字符串和指針沒弄太懂,