第二次做業(2)

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

一、設計思路:

第一步:定義函數。
第二步:從不是空格的第一個字符開始判斷,若是它不在0到9的範圍內就將這個字符從新放到指針s中,按順序進行。
第三步:直到空格中止。html

二、實驗代碼

void delnum(char *s)
{
    int i = 0,j = 0;
    for(i=0;s[i] != '\0';i++)
    {
        if (!(s[i] >= '0' && s[i] <= '9'))
        {
        s[j++] = s[i];
    }
    }
    s[j] = '\0';
}

三、本題調試過程碰到問題及解決辦法

錯誤1:在定義時忘記在末尾加分號並缺乏一箇中括號形成編譯錯誤。
錯誤2:將j++放在了for循環的外面,形成輸出只有一個數。git

四、提交列表


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

一、設計思路

第一步:定義函數。
第二步:由於題目給了固定的輸入和所查找的字符串因此直接經過for循環在不是空格的第一個字符開始尋找連續三個字符都相等的字符串,若是相等則n遞加。
第三步:返回n。數組

二、實驗代碼

int fun(char *str,char *substr)
{
  int i=0,n=0;
  for(i=0;str[i]!='\0';i++)
  {
     if((str[i]==substr[0])&&(str[i+1]==substr[1])&&(str[i+2]==substr[2]))
     {
       n++;
     }
}
return n;
}

三、本題調試過程碰到問題及解決辦法

錯誤1:n++錯打成n=+。

錯誤2:應該在for循環中判斷是否爲空格。
函數

四、提交列表

6-9 字符串中除首尾字符外的其他字符按降序排列

一、設計思路

第一步:定義函數。
第二步:結合冒泡排序法除去字符串的第一位和最後一位進行排序,定義temp來實現交換。
第三步:結束。學習

二、流程圖


三、實驗代碼

int fun(char *s,int num)
{
  int i,temp,j;
 for(i=1;i<num;i++)
{
    for(j=i+1;j<num-1;j++)
    {
    if(*(s+i)<*(s+j))
    {
        temp=*(s+i);
        *(s+i)=*(s+j);
        *(s+j)=temp;
     } 
}
}
}

四、本題調試過程碰到問題及解決辦法

.net

四、提交列表

7-1 輸出學生成績

一、設計思路

第一步:定義所需變量,根據要求先輸入。
第二步:將*s中的首地址看作是最大值和最小值,以後判斷若是遇到比它大的數則把新的數賦給最大值,一直到最後一個數,最小值同理。
第三步:計算平均值、輸出、加上動態內存分配,輸出。設計

二、實驗代碼

#include<stdio.h>
#include<stdlib.h>
int main()
{
  int *s;
  int N;
  double average,max,min,sum=0;
  int i=0;
  scanf("%d/n",&N);
  if((s=(int*)malloc(N*sizeof(int)))==NULL)
  exit(1);
  for(i=0;i<N;i++)
  {
    scanf("%d/n",s+i);
  }
  max=*s;
  min=*s;
  for(i=0;i<N;i++)
  {
    sum=sum+*(s+i);
   
    if(*(s+i)>max)
    {
      max=*(s+i);
    }
    if(*(s+i)<min)
    {
      min=*(s+i);
    }
  } 
  average=sum/N;
  printf("average = %.2f\n",average);
  printf("max = %.2f\n",max);
  printf("min = %.2f",min);
  free(s);
  return 0;
}

三、本題調試過程碰到問題及解決辦法

錯誤1:沒有看到題目中的提示沒有用動態內存分配,一直處於編譯錯誤的狀態,在同窗的幫助下修改完成。
3d

五、提交列表

7-1 計算職工工資

一、設計思路

第一步:定義結構,按照其要求定義變量類型。
第二步:輸入並計算平均值。
第三步:輸出。指針

二、實驗代碼

#include<stdio.h>

struct employee{
  char name[10];
  float base;
  float floating;
  float payment;
}employee1;
int main()
{
  int N,i;
  float  fsalary;
  scanf("%d\n",&N);
  for(i=0;i<N;i++)
  {
    scanf("%s %f %f %f",employee1.name,&employee1.base,&employee1.floating,&employee1.payment);
    fsalary=employee1.base+employee1.floating-employee1.payment;
    printf("%s %.2f\n",employee1.name,fsalary);
  }
}

三、本題調試過程碰到問題及解決辦法

調試

四、提交列表

7-2 計算平均成績

一、設計思路

第一步:定義結構和變量類型。
第二步:輸入並計算平均值。
第三步:經過for循環中if語句判斷分數是否高於平均值,並輸出低於平均分的同窗姓名學號。

二、流程圖:

三、實驗代碼:

#include<stdio.h>
struct student{
  char num[10];
  char name[10];
  float grade;
}student1[10];
int main()
{
  int N,i;
  float average,sum=0;
  scanf("%d\n",&N);
  for(i=0;i<N;i++)
  {
    scanf("%s %s %f",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);
    }
  } 
}

四、本題調試過程碰到問題及解決辦法

錯誤1:student打錯了。

錯誤2:剛開始並無將結構變量student1定義成數組因此一直都只能輸出一個未達到平均分的同窗姓名學號。

五、提交列表

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

一、設計思路

第一步:定義函數,根據題意可知它判斷學生分數的‘A'、’B‘、’C‘、’D‘等且計算不及格人數。
第二步:經過if語句判斷分別給等級,若是爲’D‘等則count++。
第三步:輸出。

二、流程圖

三、實驗代碼

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

四、本題調試過程碰到問題及解決辦法


最後一個if判斷出現了else,前面的‘A'、’B‘、’C‘等並無跳出循環因此會進入else輸出錯誤答案。

五、提交列表

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

一、設計思路

第一步:這道題須要完成兩個函數,首先是求總分,將總分賦初值0,後先循環確保計算了每一學生的總分,其次循環一個學生的各科成績,最後疊加。
第二步:第二個排序,利用冒泡排序法,引入一個量交換位置。
第三步:結束。

二、實驗代碼

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

三、本題調試過程碰到問題及解決辦法


在交換時直接定義了一個整型temp,沒有考慮到所要交換的是結構。

四、提交列表

學習總結和進度

一、總結兩週裏所學的知識點有哪些學會了?(可記錄每道做業題目所用的知識點)哪些尚未學會?

這兩週咱們主要學習告終構,結構的用法,但不夠熟練。

二、將PTA做業的源代碼使用git提交到託管平臺上,要求給出上傳成功截圖和你的git地址。請注意git地址應是相似「https://git.coding.net/Dawnfox/wf4_2.git」這樣的字符串且是可被訪問者直接點擊進行訪問的連接

個人git地址是:https://coding.net/u/zhouxuan12/p/123/git?public=true

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

http://www.cnblogs.com/fengzx/p/8735254.html
http://www.cnblogs.com/gu-an-cheng-wxm/p/8697025.html
http://www.cnblogs.com/dx2017/p/8666072.html

四、圖表


相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息