第2次作业

作业要求一

请将pta作业编程题目的解题思路和调试过程记录在博客中,每道题目的具体格式如下:

6-7 删除字符串中数字字符

1.设计思路

     (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
         第一步:定义指针变量p并将s赋值
         第二步:利用for循环遍历数组,if语句完成删除数字指令

         第三步:当赋值为结束字符'\0'时,循环结束

      (2)流程图

2.实验代码

void delnum(char *s)
{
    char *p=s;
    for(;*s;s++)
   {
        if(*s>'9'||*s<'0')
        *p++=*s;
   }
   *p='\0';
}

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

      错误信息:
       错误原因:字符数组元素未用单引号‘’括起。
       改正方法:询问同学及查询课本后,进一步熟悉了字符数组的运用。

 

6-8 统计子串在母串出现的次数

1.设计思路
     (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
         第一步:定义i,n
         第二步:创建一个for循环遍历数组,并在其中利用if语句判断前三个字符值

2.实验代码

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

 

3.本题调试过程碰到问题及解决办法
      错误信息:
       错误原因:语句后缺少‘;’,并且返回值应该是n。
       改正方法:低级错误,通过编译器提示发现并改正。


   

 

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

1.设计思路
     (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
         第一步:定义整形变量i,j,字符型变量t
         第二步:套用两个for循环进行排序
         第三步:用if语句比较大小并进行交换

2.实验代码

int fun(char *s,int num)
{
    int i,j;
    char t;
    for(j=0;j<num-3;j++)
  for(i=1;i<num-j-2;i++)
  if(s[i]<s[i+1])
  {
    t=s[i]; 
    s[i]=s[i+1]; 
    s[i+1]=t;
  }
}

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

      错误信息:无

 

   7-1 输出学生成绩

1.设计思路
     (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
         第一步:定义所需变量并按要求执行输入指令
         第二步:调用函数,将p中首地址赋最大最小值,之后判断大小并重新赋值,并用for循环进行数据计算
         第三步:使用if语句进行比较大小并输出

2.实验代码

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

 

3.本题调试过程碰到问题及解决办法
      错误信息:
       错误原因:缺少函数定义 float *p=(float *)malloc(n);
       改正方法:通过与同学交流并查询书籍得知

 

 

7-1 计算职工工资

1.设计思路
     (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
         第一步:使用结构来表示职员信息
         第二步:使用嵌套的结构类型进行结构变量操作
      (2)流程图

 

2.实验代码

 # include <stdio.h>
struct salary {           
   int num;                      
   char name[10];                 
   float a,b,c;   
   double sum;                
}; 
 int main(void)
{   int i, n;
  struct salary s1;       

  scanf ("%d", &n);

  for (i = 1; i <= n; i++){

     scanf ("%s %f %f %f",s1.name,&s1.a,&s1.b,&s1.c);
    s1.sum = s1.a + s1.b - s1.c;
   printf("%s %.2lf\n", s1.name,s1.sum);
   }

return 0;
}

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

      错误信息1:
       错误原因:输出指令中sum格式不正确
       改正方法:通过编译器输出框提示及观察改正
      错误信息2:
       错误原因:printf应在上一个括号内,未知错误导致输出结果错误
       改正方法:
同学帮助并指出

 

7-2 计算平均成绩

1.设计思路
     (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
         第一步:使用结构来表示学生基本信息
         第二步:使用嵌套的结构类型进行结构变量操作

2.实验代码

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

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

      错误信息:
       错误原因:
num定义时未设置字节长度
       改正方法:
对基本概念认知不清淅,询问室友了解


 6-1 按等级统计学生成绩

1.设计思路
     (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
         第一步:用else-if条件句分类讨论,设定i,j=0进行人数计算

         第二步:用指向运算符"->"访问指针指向的结构成员
      (2)流程图

 

2.实验代码

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

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

      错误信息1:
       错误原因:
字符未用 ' ' 括起无法编译
       改正方法:
通过Dev-c++编译器提示改正

      错误信息2:
       错误原因:
if-else条件句不完整
       改正方法:
用else隔离每一个新的条件句使情况分离

 

 

6-2 结构体数组按总分排序

1.设计思路
     (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
         第一步:引用主函数中结构体,并用两个for循环和calc函数进行计算及输入输出
         第二步:用冒泡法排序,并按大小顺序进行交换

2.实验代码

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

}

void sort(struct student *p,int n)
{
    int i,j,k;
    struct student t;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i;j<n;j++)
        {
            if(((p+k)->sum)<((p+j)->sum))
            {
                k=j;
            }
        }
        if(k!=i)
        {
            t=*(p+i);
            *(p+i)=*(p+k);
            *(p+k)=t;
        }
    }
}

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

      错误信息:定义t时用了int型发现无法编译
       改正方法:
改用结构体定义t

 

 

要求三、学习总结和进度

1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?

      本章学习了结构、结构类型的一般定义以及如何嵌套使用,结构指针由于接触时间较短所以还并未完全熟练掌握,还需要再以后的作业及练习中继续努力。

2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。

      我的git链接: https://git.coding.net/Downager/180408.git

3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。

      丰大为:https://home.cnblogs.com/u/DavidPark/

      孙铭婧:http://www.cnblogs.com/sun031915/

      吴晓明:https://home.cnblogs.com/u/gu-an-cheng-wxm/

4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间

posted @ 2018-04-02 19:57  揆空  阅读(261)  评论(11编辑  收藏  举报