第2次作業


作業要求一

請將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)的代碼行數和所用時間、博客字數和所用時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM