zoukankan      html  css  js  c++  java
  • 第二学期第二次作业

    一.PTA作业

    C高级第一次PTA作业(1)

     1-1.删除字符串中数字字符

    1.设计思路

    (1)

    第一步:设a为原数组的角标,b为所删除数字字符数组角标,令b=0;遍历数组a,当字符数组在‘0’~‘9’时不做运算,超过时,将所要删除的数字字符赋值给数                组b;

    第二步:当a为结束字符时停止,添加结束字符;

    第三步:返回主函数

    (2)流程图

    2.实验代码

       部分代码:

     1 void delnum(char *s)
     2 {
     3         int a,b=0;
     4         for(a=0;*(s+a)!='';a++)
     5         {
     6             if(*(s+a)>='0'&&*(s+a)<='9')
     7             {}else
     8             {
     9                 *(s+b)=*(s+a);
    10                 b++;
    11             }
    12         }
    13         *(s+b)='';
    14 }

    全部代码:

     1 #include "stdio.h"
     2 void delnum(char *s);
     3 int main ()
     4 { char item[80];
     5 gets(item);
     6  delnum(item);
     7  printf("%s
    ",item);
     8  return 0;
     9 }
    10 void delnum(char *s)
    11 {
    12         int a,b=0;
    13         for(a=0;*(s+a)!='';a++)
    14         {
    15             if(*(s+a)>='0'&&*(s+a)<='9')
    16             {}else
    17             {
    18                 *(s+b)=*(s+a);
    19                 b++;
    20             }
    21         }
    22         *(s+b)='';
    23 }

      3.本题调试中遇到的问题

     错误信息1:

    在进行遍历数组过程中,由于马虎,把‘’写成了‘0’;

    解决办法:把‘0’改成‘0’即可;

     1-2统计子串在母串出现的次数

     1.设计思路

    第一步:根据主函数中输入的母串str,子串substr,遍历母串数组,找出子串中的字母,并且计算数目。

    第二步:被调函数中设c为子串在母串中出现的数目,利用if条件句求出str中出现的substr。

    第三步:返回主函数,输出n;

     2.实验代码

    部分代码:

     1 int fun(char *str,char *substr)
     2 {
     3         int a,c=0;
     4         for(a=0;*(str+a)!='';a++)
     5         {
     6             if(*(str+a)==*(substr))
     7             {
     8                 if(*(str+a+1)==*(substr+1))
     9                 {
    10                     if(*(str+a+2)==*(substr+2))
    11                     {
    12                         c++;
    13                     }
    14                 }
    15             }
    16         }
    17         return c;
    18     }
    19     

     全部代码:

     1 #include<stdio.h>
     2 int fun(char *str,char *substr);
     3 int main()
     4 { char str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd";
     5  int n;
     6  n=fun(str,substr);
     7  printf("n=%d
    ",n);
     8  return 0;
     9 }
    10 int fun(char *str,char *substr)
    11 {
    12         int a,c=0;
    13         for(a=0;*(str+a)!='';a++)
    14         {
    15             if(*(str+a)==*(substr))
    16             {
    17                 if(*(str+a+1)==*(substr+1))
    18                 {
    19                     if(*(str+a+2)==*(substr+2))
    20                     {
    21                         c++;
    22                     }
    23                 }
    24             }
    25         }
    26         return c;
    27     }
    28     

     3.本题调试过程碰到问题及解决办法

    错误信息1:

    本题调试中,与上一题出现的问题相同,‘’写成了‘0’;忘记了返回值c;

    解决方法:将‘0’改成‘、‘’即可,后面加上return c;

    1-3字符串中除首尾字符外的其余字符按降序排列

     1.设计思路

    第一步:根据主函数设出被调用函数fun;输入s;运行被调函数;

    第二步:利用for循环,if条件句,根据字符大小进行排序;

    第三步:若*(s+c)< *(s+b),则把b的值赋给c,若c不等于a,则进行交换。

    第四步:返回主函数。

     2.实验代码 

    部分代码:

     1 int fun(char *s,int num)
     2 {
     3          int a,b,c,temp;
     4          for(a=1;a<num-2;a++)
     5          {
     6              c=a;
     7              for(b=a+1;b<num-1;b++)
     8              {
     9                  if((int)(*(s+c))<(int)(*(s+b)))
    10                  {
    11                      c=b;
    12                  }
    13              }
    14             if(c!=a)
    15             {
    16              temp=*(s+a);
    17              *(s+a)=*(s+c);
    18              *(s+c)=temp;
    19              }
    20          }
    21 }

    全部代码:

     1 #include <stdio.h>
     2 int fun(char *s,int num);
     3 int main()
     4 {
     5  char s[10];
     6  gets(s);
     7  fun(s,7);
     8  printf("%s",s);
     9  return 0;
    10  }
    11 int fun(char *s,int num)
    12 {
    13          int a,b,c,temp;
    14          for(a=1;a<num-2;a++)
    15          {
    16              c=a;
    17              for(b=a+1;b<num-1;b++)
    18              {
    19                  if((int)(*(s+c))<(int)(*(s+b)))
    20                  {
    21                      c=b;
    22                  }
    23              }
    24             if(c!=a)
    25             {
    26              temp=*(s+a);
    27              *(s+a)=*(s+c);
    28              *(s+c)=temp;
    29              }
    30          }
    31 }

    3.本题调试过程碰到问题及解决办法

    错误信息1;

    进行大小比较的时候,忘记对*(s+c)和*(s+b)的值进行强制转换成int类型;

    解决方法:将*(s+c)和*(s+b)强制成int型。

    1-4输出学生成绩

     1.设计思路

    第一步:设需要用到的数据,输入学生的数量;设sum,average,max,min为float型;

    第二步:对p的数据进行动态分配内存的操作;

    第三步:使用for循环,指针型p接受数据,计算sum的值。

    第四步:再使用for循环,min,max均为p+0;与其他数据进行比较,最后输出结果。

     2.实验代码

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int i,n;
     5     float sum=0;
     6     float average,max,min;
     7     scanf("%d",&n);
     8     float *p=(float *)malloc(n);
     9     for(i=0;i<n;i++)
    10     {
    11         scanf("%f",(p+i));
    12       sum=sum+*(p+i);
    13     }
    14     min=*(p+0);max=*(p+0);
    15     for(i=0;i<n;i++)
    16     {
    17         if(min>*(p+i))
    18         {
    19             min=*(p+i);
    20          }
    21         if(max<*(p+i))
    22         {
    23             max=*(p+i);
    24          }
    25     }
    26     printf("average = %.2f
    ",sum/n*1.0);
    27     printf("max = %.2f
    ",max);
    28     printf("min = %.2f
    ",min);
    29 }

    3.本题调试过程碰到问题及解决办法

    错误信息1;

     在定义数据类型的时候,sum的类型与average,max,min不同;

    解决办法:把sum,average,max,min的类型都定义成double或者float。

     C高级第一次PTA作业(2)

    2-1计算职工工资

     1.设计思路

    (1)

    第一步:构建一个数据结构,并在主函数中引用;

    第二步:运用for循环输入结构的内容,并且计算所求值;

    第三步:对所求值进行输出,结束;

    (2)流程图

      2.实验代码

     1 #include <stdio.h>
     2 struct clerk
     3 {
     4   char name[10];
     5   float b,r,f;
     6   float s;
     7 };
     8 
     9 int main()
    10 {
    11 
    12     int i,N;
    13     struct clerk s1;
    14     scanf("%d",&N);
    15     for(i=1;i<=N;i++)
    16     {
    17      scanf("%s %f %f %f
    ",s1.name,&s1.b,&s1.r,&s1.f);
    18      s1.s =(s1.b + s1.r - s1.f);
    19       printf("%s %.2lf
    ",s1.name,s1.s);
    20     }
    21     
    22   return 0;
    23 }

     3.调试中遇到的问题及解决方法;

    错误信息1:

     问题,在解题中,忽略了b,r,f,s的类型,以至于答案错误,

    解决方法:把b,r,f,s都定义为float即可。

    1-2 计算平均成绩

     1.设计思路

    第一步:构建数据结构,并在主函数中引用;

    第二步:新设立双精度浮点数average;整数grade;利用for循环,输入数据,并计算所有人成绩的总和grade;求出avergage,并输出;

    第三步:利用for循环输出要输出的数据,结束;

     2.实验代码 

     1 #include <stdio.h>
     2 struct student
     3 {
     4   char num[6];
     5   char name[10];
     6   int grade;
     7   double average;
     8 };
     9 int main()
    10 {
    11   int i,N,grade,j;
    12   double average;
    13   scanf("%d",&N);
    14   struct student si[N];
    15   grade = 0;
    16   for(i=0;i<N;i++)
    17   {
    18     scanf("%s %s %d",si[i].num,si[i].name,&si[i].grade);
    19     grade = grade +si[i].grade;
    20   }
    21   average = (double)(grade /N);
    22   printf("%.2f
    ", average);
    23   for(i=0;i<N;i++)
    24   {
    25     if(si[i].grade<average)
    26     {
    27       printf("%s %s
    ",si[i].name,si[i].num);
    28     }
    29   }
    30   return 0;
    31 }

    3.本题调试过程碰到问题及解决办法

     错误信息1;

    问题:本题中忽略了数组的表示方法,和average是输出时是以两个小数点的形式输出的;

    解决方法:把si→si[i]即可,%lf→%.2lf即可。

    C高级第一次PTA作业(3)

    1.按等级统计学生成绩

    1.设计思路

    第一步:读题;利用for循环写出条件,设j为整形,同时以j表示不及格同学的数量。

    第二步:利用if,else if条件句评定等级;

    第三步:返回主函数;

    2.实验代码 

        部分代码:

     1 int set_grade( struct student *p, int n )
     2 {
     3   int i,j=0;
     4   for(i=0;i<n;i++,p++)
     5   {
     6     if(p->score <60)
     7     {
     8       j++;
     9     }
    10     if((p->score >=85)&&(p->score <=100))
    11     {
    12       p->grade = 'A';
    13     }
    14     else if((p->score >=70)&&(p->score <=84))
    15     {
    16       p->grade = 'B';
    17     }
    18     else if((p->score >=60)&&(p->score <=69))
    19     {
    20       p->grade = 'C';
    21     }else
    22     {
    23       p->grade = 'D';
    24     }
    25     }
    26   return j;
    27 }

         全部代码:

     1 #include <stdio.h>
     2 #define MAXN 10
     3 
     4 struct student{
     5     int num;
     6     char name[20];
     7     int score;
     8     char grade;
     9 };
    10 
    11 int set_grade( struct student *p, int n );
    12 
    13 int main()
    14 {   struct student stu[MAXN], *ptr;
    15     int n, i, count;
    16 
    17     ptr = stu;
    18     scanf("%d
    ", &n);
    19     for(i = 0; i < n; i++){
    20        scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
    21     } 
    22    count = set_grade(ptr, n);
    23    printf("The count for failed (<60): %d
    ", count);
    24    printf("The grades:
    "); 
    25    for(i = 0; i < n; i++)
    26        printf("%d %s %c
    ", stu[i].num, stu[i].name, stu[i].grade);
    27     return 0;
    28 }
    29 int set_grade( struct student *p, int n )
    30 {
    31   int i,j=0;
    32   for(i=0;i<n;i++,p++)
    33   {
    34     if(p->score <60)
    35     {
    36       j++;
    37     }
    38     if((p->score >=85)&&(p->score <=100))
    39     {
    40       p->grade = 'A';
    41     }
    42     else if((p->score >=70)&&(p->score <=84))
    43     {
    44       p->grade = 'B';
    45     }
    46     else if((p->score >=60)&&(p->score <=69))
    47     {
    48       p->grade = 'C';
    49     }else
    50     {
    51       p->grade = 'D';
    52     }
    53     }
    54   return j;
    55 }

     3.本题调试过程碰到问题及解决办法

      错误信息1:

    本题中,在对学生成绩进行评定的时候,对p所代表的学生没有进行逐一检查,只排查了一名学生;

    解决办法:在i++后面加上p++即可。

    2.结构体数组按总分排序

    1.设计思路

    (1)

    第一步:本题有两个函数,第一个函数目的是计算学生的总成绩,设立新的结构sum表示学生的总成绩,利用for循环进行计算;

    第二步:第二个函数的目的是把学生数据按总分降序排序。新设立结构temp进行交换,利用for循环比较学生成绩的大小并且进行排序;

    第三步:返回主函数;

    (2)流程图

    主函数:

    被调函数calc

    被调函数sort

     

    2.实验代码

       部分代码:

     1 void calc(struct student *p,int n)
     2 {
     3     struct student sum;
     4   int i,j=0;
     5   for(i=0;i<n;i++)
     6   {
     7     for(j=0;j<3;j++)
     8     {
     9       (p+i)->sum =(p+i)->sum + (p+i)->score[j];
    10     }
    11   }
    12 
    13 }
    14 
    15 void sort(struct student *p,int n)
    16 {
    17     int i,j,a;
    18     struct student temp;
    19     for(i=0;i<n-1;i++)
    20     {
    21         a=i;
    22         for(j=i;j<n;j++)
    23         {
    24             if(((p+a)->sum)<((p+j)->sum))
    25             {
    26                 a=j;
    27             }
    28         }
    29         if(a!=i)
    30         {
    31             temp=*(p+i);
    32             *(p+i)=*(p+a);
    33             *(p+a)=temp;
    34         }
    35     }
    36 }

        全部代码:

     1 #include <stdio.h>
     2 struct student                    
     3 {
     4 int num;
     5 char name[15];
     6 float score[3];
     7 float sum;
     8 };
     9 void calc(struct student *p,int n);     
    10 void sort(struct student *p,int n);
    11 int main()
    12 {
    13 struct student stu[5];
    14 int i,j;
    15 float f;
    16 for(i=0;i<5;i++)
    17 {
    18     scanf("%d%s",&stu[i].num,stu[i].name);
    19     for(j=0;j<3;j++)
    20     { 
    21         scanf("%f",&f);
    22         stu[i].score[j]=f;
    23     }
    24 }
    25 calc(stu,5);
    26 sort(stu,5);
    27 for(i=0;i<5;i++)
    28 {
    29     printf("%5d%15s",stu[i].num,stu[i].name);
    30     printf("  %.1f  %.1f  %.1f  %.1f
    ",stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].sum);
    31 }
    32 return 0;
    33 void calc(struct student *p,int n)
    34 {
    35     struct student sum;
    36   int i,j=0;
    37   for(i=0;i<n;i++)
    38   {
    39     for(j=0;j<3;j++)
    40     {
    41       (p+i)->sum =(p+i)->sum + (p+i)->score[j];
    42     }
    43   }
    44 
    45 }
    46 
    47 void sort(struct student *p,int n)
    48 {
    49     int i,j,a;
    50     struct student temp;
    51     for(i=0;i<n-1;i++)
    52     {
    53         a=i;
    54         for(j=i;j<n;j++)
    55         {
    56             if(((p+a)->sum)<((p+j)->sum))
    57             {
    58                 a=j;
    59             }
    60         }
    61         if(a!=i)
    62         {
    63             temp=*(p+i);
    64             *(p+i)=*(p+a);
    65             *(p+a)=temp;
    66         }
    67     }
    68 }

     3.本题调试过程碰到问题及解决办法

      错误信息1:

    在本题中,对学生成绩进行相加时,出现了错误。

    解决办法:把p→p+i即可。

    二.学习总结和进度

    1.总结

    这两周老师讲述了malloc,realloc,calloc及他们的应用;

    学习了结构的构建和应用,用结构输入并按程序排序学生名词,利用指针进行被调用函数运算;

    2.git

    1.git地址:https://git.coding.net/smj031915/dexqdeczy.git

    2.上传的截图:

     

    3.点评的同学(点评我的同学)

    王姝雯:http://www.cnblogs.com/phsudie/p/8661686.html

    张心悦:http://www.cnblogs.com/zxy980612/p/8696690.html

    吴晓明:http://www.cnblogs.com/phsudie/p/8661686.html#3945506

    点评我的同学:

    王姝雯:http://www.cnblogs.com/phsudie/p/8661686.html

    张心悦:http://www.cnblogs.com/zxy980612/p/8696690.html

    董雅洁:http://www.cnblogs.com/exo123/p/8663311.html

    4.表格:

    5.折线图:

  • 相关阅读:
    ZOJ 3656Bit Magic解题报告——2sat问题建图总结
    gcc和g++的区别
    07车展,流水账。。
    放开思维啊~~~
    SC2和其他
    幻觉~
    去横店咯~
    ETS。。New G。。
    老子毕业鸟。。。
    gcc常用参数和环境变量小结
  • 原文地址:https://www.cnblogs.com/sun031915/p/8687824.html
Copyright © 2011-2022 走看看