第三次作業


第一題:

             刪除字符串中數字字符

設計思路:

                  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的條件判斷
                   結構體數組按總分排序:利用結構解決問題,還有排序


免責聲明!

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



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