第2次做業

做業要求一

請將pta做業編程題目的解題思路和調試過程記錄在博客中,每道題目的具體格式以下:c++

6-7 刪除字符串中數字字符git

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.本題調試過程碰到問題及解決辦法spa

      錯誤信息:
       錯誤緣由:字符數組元素未用單引號‘’括起。
       改正方法:詢問同窗及查詢課本後,進一步熟悉了字符數組的運用。.net

 

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

 

 

要求3、學習總結和進度

一、總結兩週裏所學的知識點有哪些學會了?哪些尚未學會?

      本章學習告終構、結構類型的通常定義以及如何嵌套使用,結構指針因爲接觸時間較短因此還並未徹底熟練掌握,還須要再之後的做業及練習中繼續努力。

二、將PTA做業的源代碼使用git提交到託管平臺上,要求給出上傳成功截圖和你的git地址。

      個人git連接: https://git.coding.net/Downager/180408.git

三、點評3個同窗的本週做業(在做業中給出被點評同窗博客的連接),並邀請3名同窗點評你的做業,無點評做業(你的做業未被3人點評)/或者沒有回覆同窗或老師的點評都倒扣該題分數。

      豐大爲:https://home.cnblogs.com/u/DavidPark/

      孫銘婧:http://www.cnblogs.com/sun031915/

      吳曉明:https://home.cnblogs.com/u/gu-an-cheng-wxm/

四、請用表格和折線圖呈現你本週(3/26 8:00~4/9 8:00)的代碼行數和所用時間、博客字數和所用時間

相關文章
相關標籤/搜索