天天看點

第三次作業

第一題:

删除字元串中數字字元
           

設計思路:

1:看題目:主函數與函數聲明,知道它要你幹什麼
                  2:了解與分析:在main中,給你一個字元串,要你删除指針 s所指的字元串中的所有數字字元
                  3:解答:第一步:定義i=0,n,j=0,i位a[]下标,j為s[]下标,調用函數strlen(s),n用于記錄字元串的長度
                                   第二步:定義一個字元數組a[81],調用函數strcpy(a,s)
                                   第三步:利用一個for循環,如果(a[i]>'9'或a[i]<'0'),則s[j]=a[i];  j++;
                                   第四步:循環結束後,s[j]=‘\0’,表示字元串結束
           

流程圖:

第三次作業

實驗代碼:

#include<string.h>
void delnum(char *s)
{
  int i=0,n,j=0;
  n=strlen(s);
  char a[81];
   strcpy(a,s);
  for(i=0;i<n;i++)
  {
    if(a[i]<'0'||a[i]>'9')
    {
      s[j]=a[i];
      j++;
    }
}
s[j]='\0';
}
           

錯誤資訊:

a[i]<'0'&&a[i]>'9'
           

改正方式:

a[i]<'0'||a[i]>'9'
           

第二題:

統計子串在母串出現的次數
           

1:看題目:主函數與函數聲明,知道它要你幹什麼
                  2:了解與分析:在main中,給你兩個字元串,一個是長度為3的字元串,要你統計一個長度為3的字元串在另一個字元串中出現的次數
                  3:解答:第一步:定義i=0,n,k=0;i為str[]的下标,k統計substr[]在str[]中出現的次數
                                  第二步:調用函數strlen( str),利用n用于記錄字元串的長度
                                  第三步:利用for函數,如果(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])成立,k++
                                  第四步:傳回k
           

流程圖:

第三次作業

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

第三題:

字元串中除首尾字元外的其餘字元按降序排列
           

1:看題目:主函數與函數聲明,知道它要你幹什麼
                  2:了解與分析:在main中,給你一個字元串,要你對字元串中除首、尾字元外的其餘字元按降序排列
                  3:解答:第一步:定義i=1,k,j=1,n=1;在冒泡循環中,i用于外層for循環,表示跑了第幾輪了,j用于内層for循環,為s[]的下标,k為交換的中間量
                                  第二步:在定義一個char max=s[1];暫時記錄最大值
                                  第三步:利用冒泡排序法,讓字元串中除首尾字元外的其餘字元按降序排列
           

int fun(char *s,int num)
{
  int i,k,j,n=1;
  char max=s[1];
   for(i=1;i<num-1;i++)
   {
     for(j=1;j<num-1-i;j++)
     {
       if(s[j]<s[j+1])
       {
         k=s[j];s[j]=s[j+1];s[j+1]=k;
       }
     }
   }
}
           

int max=s[1];
           

char max=s[1];
           

第四題:

輸出學生成績
           

1:看題目:主函數,知道它要你幹什麼
                   2:了解與分析:給你N個學生的成績,讓你統計并輸出學生的平均成績、最高成績和最低成績
                   3:解答:第一步:定義整形n,i,*p;其中:n為學生個數,i用于表示*(p+i),*p表示p為指針
                                   第二步:定義浮點型average,max=0,min=0,sum=0;分别表示平均成績、最高成績、最低成績、所有成績和
                                   第三步:輸入n,再利用動态記憶體配置設定
                                   第四步:輸入n個成績,并将第一個元素指派給max,min,再求和、找最大值及最小值,最後求average
                                   第五步:輸出學生的平均成績、最高成績和最低成績
           

#include<stdio.h>
int main()
{
   int n,i=0,*p;
   float average,max=0,min=0,sum=0;
  scanf("%d",&n);
  if((p=(int*)calloc(n,sizeof(int)))==NULL){
    printf("Not able to allocate memory.\n");
    exit(1);
  }
  for(i=0;i<n;i++)
  {
    scanf("%d",p+i);
    if(i==0)
    {
    	max=*(p+i);min=*(p+i);
	}
    sum=sum+*(p+i);
    if(max<*(p+i))
    max=*(p+i);
    if(min>*(p+i))
    min=*(p+i);
  }
  printf("average = %.2f\n",sum*1.0/n);
  printf("max = %.2f\n",max);
  printf("min = %.2f\n",min);
  free(p);
}
           

第五題:

計算職工工資
           

1:看題目:主函數,知道它要你幹什麼
                  2:構造結構:struct worker,并且在裡面定義每個職工:姓名、基本工資、浮動工資和支出;名字為字元數組,其它都為float型;最後再用一個數組s[]記錄這樣的worker有多少
                  3:在主函數中:
                                          第一步:定義N,i=0;N為有多少職工,i為s[]的下标;
                                          第二步:輸入N,在利用一個for循環,将s[i]中元素全都輸入,再s[i].w=s[i].bgong+s[i].fgong-s[i].x;最後輸出s[i].name,s[i].w;
           

#include<stdio.h>
struct student{
  char num[10],name[15];
  int x;
}s[15];
int main()
{
  int i,n,sum=0;
  float average;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);
    sum=sum+s[i].x;
  }
  average=sum*1.0/n;
  printf("%.2f\n",average);
  for(i=0;i<n;i++)
  {
    if(s[i].x<average)
    printf("%s %s\n",s[i].name,s[i].num);
  }
}
           

第三次作業

第六題:

計算平均成績
           

1:看題目:主函數,知道它要你幹什麼
                 2:構造結構:struct student,并在裡面定義學号,姓名,成績;其中學号與姓名為字元數組,成績為整形;最後再用一個數組s[]記錄有多少學生
                 3:在主函數中: 
                                          第一步:定義i=0,n,sum=0;average;其中整形:i為s[]的下标,n為有多少學生,sum為求和;浮點型:平均數average
                                          第二步:輸入n;再利用一個for循環,将s[]中元素全都輸入scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);sum=sum+s[i].x;
                                          第三步:求出平均數并輸出它:average=sum*1.0/n;printf("%.2f\n",average);
                                          第四步:再利用一個for循環,輸出每位平均線以下的學生的姓名和學号:printf("%s %s\n",s[i].name,s[i].num);
           

#include<stdio.h>
struct student{
  char num[10],name[15];
  int x;
}s[15];
int main()
{
  int i,n,sum=0;
  float average;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);
    sum=sum+s[i].x;
  }
  average=sum*1.0/n;
  printf("%.2f\n",average);
  for(i=0;i<n;i++)
  {
    if(s[i].x<average)
    printf("%s %s\n",s[i].name,s[i].num);
  }
}
           

第三次作業

第七題:

按等級統計學生成績
           

1:看題目:主函數,知道它要你幹什麼——實作一個根據學生成績設定其等級,并統計不及格人數的簡單函數
                  2在set_grade中:
                                            第一步:定義i,count=0;其中i為p[]的下标,count用于記錄不及格人數
                                            第二步:利用一個for循環,判斷p[i].score屬于哪個範圍,并指派給相應的p[i].grade,最後在小于60分的條件中加入count++;
                                            第三步:傳回count—— return count;
           

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

第三次作業

錯誤1:我将p[i].grade='A'寫成了p[i].score=‘A’;其它也同理

改正方式:将它改回來

第八題:

結構體數組按總分排序
           

1:看題目:主函數,知道它要你幹什麼——編寫函數calc求出每名學生的總分。 編寫函數sort按每名學生的總分從高到低對這組資料進行排序
                 2在calc中:
                                   第一步:定義i;它作為p[]的下标
                                   第二步:利用一個for循環:求n個p[i].sum——p[i].sum=p[i].score[0]+p[i].score[1]+p[i].score[2];
                 3在sort中:第一步:定義整形i,j;在定義一個struct student x;其中i用于内層for循環,j用于外層for循環,而x為交換的中間量
                                    第二步:利用一個冒泡排序法,将它們按每名學生的總分從高到低對這組資料進行排序
           

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 x;
  for(j=0;j<n-1;j++)
  {
    for(i=0;i<n-1-j;i++)
    {
      if(p[i].sum<p[i+1].sum)
      {
        x=p[i];p[i]=p[i+1];p[i+1]=x;
      }
    }
  }
}
           

第三次作業

我的代碼:

第三次作業

https://gitee.com/yuanzhong19990808/my_code/upload/master

我評論的人:

李新華:http://www.cnblogs.com/Lixinhua18/p/8671886.html
                       陳天胤:http://www.cnblogs.com/cty-1/
                       馬钰娟:http://www.cnblogs.com/dfgfds/p/8662097.html
                       姜健:http://www.cnblogs.com/jj990519/
                       李伍壹:http://www.cnblogs.com/Lixinhua18/p/8671886.html
                       辛靜瑤:http://www.cnblogs.com/X-JY/p/8652592.html
           

評論我的人:

陳天胤
                     邱冠華
                     姜健
                     李伍壹
                     辛靜瑤
           

我的進度:

第三次作業
第三次作業

我的總結:

删除字元串中數字字元:調用函數解決問題,還有用for循環
                   統計子串在母串出現的次數:調用函數,再用一個簡單條件判斷解決問題
                   字元串中除首尾字元外的其餘字元按降序排列:用冒泡排序法進行排序
                   輸出學生成績:要用兩個for循環分别找最大值與最小值
                   計算職工工資:利用結構解決問題
                   計算平均成績:利用結構解決問題
                   按等級統計學生成績:利用結構解決問題,還有多個if的條件判斷
                   結構體數組按總分排序:利用結構解決問題,還有排序