天天看點

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

作業要求二

第一次PTA

題目6-7删除字元串中數字字元

1.設計思路

(1).描述算法:

第一步:閱讀題目,明确題意要求。
      第二步:找到對應函數中的實參和形參并寫出函數接口。
      第三步:重新定義一個指針變量*a,對*s中的字元進行周遊。
      第四步:若s[]中的字元不在‘0’到‘9’中,則将字元儲存在a[]中。
           

(2).流程圖:

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

2.實驗代碼:

void delnum(char *s)
{   int i,j;
    char *a=s;
    for(i=0,j=0;s[i]!='\0';i++)
    {
         if(s[i]<'0'||s[i]>'9')
         {
            a[j]=s[i];
            j++;
         } 
    }
    a[j]='\0' ;
} 
           
第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

3.本題調試過程碰到的問題和解決辦法

錯誤資訊:答案錯誤。
     錯誤原因:在儲存字元串結束後,沒有加結束标志'\0';沒有将指針*a指向s最後輸出的還是原來的字元串。
     改正方法:在循環結束後,加一個a[j]='\0';定義指針字元串時,讓其指向s。
           

題目6-8統計子串在母串出現的次數

1.設計思路

(1).描述算法:

第一步:閱讀題目,明确題意要求。
      第二步:找到對應函數中的實參和形參并寫出函數接口。
      第三步:周遊一次母串,并且母串的周遊的每一個字元都要和字串的第一個字元比較,如果相等的話,這時候母串和字串開始同時周遊。
      第四步:當滿足一次子串能夠周遊到結束符的時候,說明子串出現,num++;
           

2.實驗代碼:

int fun(char *str,char *substr)
{
  int i,j,k,num;
  for(i=0;str[i]!='\0';i++)
  {
    for(j=i,k=0;substr[k]==str[j];k++,j++)
    {
      if(substr[k+1]=='\0')
      {
        num++;
        break;
      }
    }
  }
  return num;
}
           

3.本題調試過程碰到的問題和解決辦法(無)

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

題目6-9字元串中除首尾字元外的其餘字元按降序排列

1.設計思路

(1).描述算法:

第一步:閱讀題目,明确題意要求。
      第二步:找到對應函數中的實參和形參并寫出函數接口。
      第三步:從s中的第二個字元元素開始經行周遊,直到倒數第二個字元元素(也就是第一個和最後一個字元元素不進行判斷)。
      第三步:然後再讓相鄰的兩個字元元素進行比較,若是s[i]>s[i-1],重新定義一個字元串,進行交換,否則i++,繼續判斷。
           

2.實驗代碼

int fun(char *s,int num)
{
  int  i=1,j=1;
  int len;
  strlen(len);
  for(i=1;i<len-1;i++)
  {
    for(j=1;j<i;j++)
    {
      if(s[i]>s[j])
      {
        char *t;
        t=s[i];
        s[i]=s[j];
        s[j]=t;
      }
    }
  }
}
           
第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

3.本題調試過程碰到的問題和解決辦法

錯誤資訊:

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

錯誤原因:

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

改正方法:

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

題目7-1. 輸出學生成績

1.設計思路:

(1)描述算法:

第一步:輸入人數n;
              第二步:分别輸入n個人的分數,并求和;
              第三步:用一次循環,比較出n個人分數的最大值,最小值;
              第四步:按題意輸出。
           

2.實驗代碼:

#include <stdio.h>
int main()
{
    int i,n,a[n];
    float sum = 0,average = 0,max,min;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        sum = sum + a[i];
    }
    max = a[0];
    min = a[0];
    for(i=0;i<n;i++)
    {
        if(a[i]>max)
        {
            max=a[i];
        }
        if(a[i]<min)
        {
            min=a[i];
        }
    }
    
    printf("average = %.2f\nmax = %.2f\nmin = %.2f",sum/n,max,min);
    return 0;
}
           

3.本題調試過程碰到的問題和解決辦法

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

第二次PTA

題目7-1 計算職工工資

1.設計思路:

(1).描述算法:

第一步:定義結構類型。
       第二步:輸入人數n,再用一個for循環輸入n個職員的資訊。
       第三步:for循環分别輸出每位職員的實發工資。
           

2.實驗代碼:

#include <stdio.h>
  struct staff
{
    char name[1000];
    float  fixation;
    float  floating;
    float  outlay;
    float  salary;
}a[1000];
int main()
{

    int i,n;
    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
        scanf("%s%f%f%f",a[i].name,&a[i].fixation,&a[i].floating,&a[i].outlay);
        a[i].salary=a[i].fixation+a[i].floating-a[i].outlay;
         
  }
  for(i=0;i<n;i++)
  {
    printf("%s %.2f\n",a[i].name,a[i].salary); 
  }
 return 0;
}
           

3.本題調試過程碰到的問題和解決辦法

錯誤資訊:部分錯誤
   錯誤原因:定義的數組過小
   改正方法:将name[10],a[10]改為name[1000],a[1000].
           

題目7-2 計算平均成績

1.設計思路:

(1).描述算法:

第一步:定義結構類型
      第二步:輸入人數n,再用一個for循環輸入每個人的資訊,并求出總的分數和。
      第三步:在for循環中判斷是否每個人的分數小于平均數,若小于則輸出名字和學号。
           

(2).流程圖:

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

2.實驗代碼:

#include <stdio.h>
struct student
{
  char s[1000];
  char name[1000];
  int code;
  
};
int main()
{
  int i,N,sum=0;
  double average;
  struct student a[1000];
  scanf("%d",&N);
  for(i=0;i<N;i++)
  {
    scanf("%s %s %d",a[i].s,a[i].name,&a[i].code);
    sum = sum + a[i].code;
  }
  average=sum/N*1.0;
  printf("%.2f\n",average);
  for(i=0;i<N;i++)
  {
    if(a[i].code<average)
    {
      printf("%s %s\n",a[i].name,a[i].s);
    }
  }
  return 0;
}
           

3.本題調試過程碰到的問題和解決辦法

(1)錯誤資訊:編譯錯誤。
          錯誤原因:sum定義成了結構類型。
          改正原因:因為sum是所有人的分數和,是以不能定義成結構類型,應該定義成整型。
 (2)錯誤資訊:格式錯誤
          錯誤原因:在輸出後沒有加‘\n’。
           

第三次PTA

題目6-1 按等級統計學生成績

1.設計思路

(1).描述算法:

第一步:閱讀題目,明确題意要求。
       第二步:找到對應函數中的實參和形參并寫出函數接口。
       第三步:在for循環中,周遊每個學生的成績,然後做判斷。
       第四步:根據判斷,确定成績等級。
           

(2).流程圖:

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

2.實驗代碼:

int set_grade( struct student *p, int n )
{
  int i;
  int count = 0;
  for(i=0;i<n;i++,p++)
  {
    if(p->score<60)
    {
      p->grade = 'D';
      count++;
    }else if(( p->score>=85)&&(p->score<=100))
    {
     p->grade = 'A';
    }else if(( p->score>=70)&&(p->score<85))
    {
      p->grade = 'B';
    }else
    {
      p->grade = 'C';
    }
  }
  return count;
}
           

3.本題調試過程碰到的問題和解決辦法:

錯誤資訊:答案錯誤
   錯誤原因:if做判斷時,沒有考慮到1-100内的所有數字。
   改正方法:認真檢查哪裡需要加“=”号,哪裡不需要。
           

題目6-2 結構體數組按總分排序

1.設計思路

(1).描述算法:

第一步:閱讀題目,明确題意要求。
       第二步:找到對應函數中的實參和形參并寫出函數接口。
       第三步:函數calc:使用一個for循環周遊每個學生的成績,計算出每名學生的總分。
       第四步:函數sort:使用冒泡排序法對學生總成績按降序排序。
           

2.實驗代碼:

void calc(struct student *p,int n)   
{
  int i;
  for(i=0;i<n;i++,p++)
  {
  p->sum=p->score[0]+p->score[1]+p->score[2];
  }
}
  void sort(struct student *p,int n)
{
  int i,j;
  struct student t;
  for(i=0;i<n-1;i++)
  {
    for(j=0;j<n-1-i;j++)
    {
      if((p+j)->sum<(p+j+1)->sum)
      {
        t=*(p+j);
      *(p+j)=*(p+j+1);
      *(p+j+1)=t;
        
      }
    }
  }
}
           

3.本題調試過程碰到的問題和解決辦法

錯誤資訊:編譯錯誤

錯誤原因:

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

改正方法:

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

進行交換的是(p+i)和(p+i+1)的值,而不是位址。

作業要求三

1.總結。

(1).這兩周主要學會了結構體:結構體的定義,結構體類型的定義,結構體變量的定義,結構體初始化以及結構體的引用。
 (2).上兩周學的指針在這幾次作業中有應用,也比剛學的時候熟悉很多。
           

2.git托管平台。

https://github.com/Vinecy666/C-/tree/master

3.點評。

王文博

李伍壹

馬钰娟

4.統計.

第二次作業作業要求二第一次PTA第二次PTA第三次PTA作業要求三

轉載于:https://www.cnblogs.com/Vinecy/p/8660124.html

git