第二次作业

作业要求一

已完成。

作业要求二

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

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

1.设计思路

(1)主要描述题目算法

第一步:题目要求删除字符串中数字字符
第二步:定义i,j为整数 并且i = 0.
第三步:当s[i]不等于的时候,用if语句判断s[i]是数字的情况,如果是数字,就把i赋值给j,,进行第四步,然后i++;
第四步:当s[j]不等于的时候,把s[j+1]赋值给s[j],这么做就是把数字后面的赋值给前面,达到把数字消除的目的,然后j++;

(2)流程图


2.实验代码

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

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

本题最开始不会,让后问了室友给讲会了

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

1.设计思路

(1)主要描述题目算法

第一步:定义i,j,k,num为整形变量,num = 0.
第二步:使用for循环
第三步:判断substr[k+1]是否为,若是,则num++,跳出循环
第四步:返回num。

(2)流程图

无。

2.实验代码

int fun(char *str,char *substr)
{
   int i,j,k,num=0;
   for(i=0;str[i];i++)
   for(j=i,k=0;substr[k]==str[j];k++,j++)
   if(substr[k+1]=='')
   {
      num++;
      break; 
   }
   return(num);
}

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

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

1.设计思路

(1)主要描述题目算法

第一步:定义i,j,k,m为整型变量且都为0,t为字符变量。
第二步:第一个for循环,如果s[n]是'',则跳出循环,此步骤表明了n的大小
第三步:降序

(2)流程图

无。

2.实验代码

int fun(char *s,int num)
{
    int i=0, j=0, k=0, m=0;
    char t;
    for(m=0;;m++)
    {
        if(*(s+m)=='')break;
    }
    m--;
        for(i=1;i<m-1;i++)
        {
            for(j=i;j<m;j++)
            {
                if(*(s+i)<*(s+j))
                {
                    t=*(s+i);
                    *(s+i)=*(s+j);
                    *(s+j)=t;
                }
            }
        }
}

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

无。

7-1 输出学生成绩

1.设计思路

(1)主要描述题目算法

第一步:定义n,i为整型变量,max,min,sum,a为double型,且max,sum为0,min为100。
第二步:用for循环输入学生成绩再用if语句,当遇到比max大的数就赋值给max,比min小的数就赋值给min;
第三步:求和除以人数就是平均数

(2)流程图

无。

2.实验代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
    int n,i;
    double max=0,min=100,sum=0,now;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%lf",&now);
        if(now>max) max=now;
        if(now<min) min=now;
        sum=sum+now;
    }
    printf("average = %.2lf
",sum/n);
    printf("max = %.2lf
",max);
    printf("min = %.2lf",min);

    return 0;
}  

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

注意使用for循环,并知道括号的位置。

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

7-1 计算职工工资

1.设计思路

(1)主要描述题目算法

第一步:先创建一个结构,包含信息
第二步:定义整形变量n,定义数组a[n]。
第三步:用for循环输出。

(2)流程图

2.实验代码

#include <stdio.h>
struct people{                              
   char name[10];                 
   double y,z,q,x;               
}; 
int main()
{
  int i,n,j;
  scanf ("%d", &n);
  struct people a[n];    
  for(i=0;i<n;i++){
	scanf ("%s%lf%lf%lf",&a[i].name,&a[i].q,&a[i].z,&a[i].x);
  a[i].y=a[i].q+a[i].z-a[i].x;
}
for(j=0;j<n;j++){
printf("%s %.2lf
",a[j].name,a[j].y);
}
return 0;
}

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

最开始不明白struct的意思,后来上网查询,明白了创建结构。

7-2 计算平均成绩

1.设计思路

(1)主要描述题目算法

第一步:创建结构,定义a[n],i,j,n为整形变量,sum,average为浮点型变量。
第二步:利用for循环写入学生信息,并求学生成绩之和
第三步:利用for循环使学生成绩和平均成绩比较,如果小于平均 就输出其部分学生信息。

(2)流程图

无。

2.实验代码

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

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

还是struct不明白,不知道是定义结构,上网查询明白的。

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

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

1.设计思路

(1)主要描述题目算法

第一步:子函数起的作用就是统计低于60分以下的个数和给不同分数的学生划分层次;
第二步:统计60分以下的人数的算法
第三步:用if语句

(2)流程图

2.实验代码

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

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

最开始根本不明白怎么下手,不明白题意。经过室友讲解弄明白。

6-2 指针选择法排序

1.设计思路

(1)主要描述题目算法

(2)流程图

无。

2.实验代码

void sort(int *x,int n)
{ 
 int i,j,t,temp;
 for(i=0;i<n-1;i++)
 {
 t=i;
 for(j=i+1;j<n;j++)
 {

 if(*(x+t)<*(x+j))
 t=j;
 }
 temp=*(x+i);
 *(x+i)=*(x+t);
 *(x+t)=temp;
 }
} 

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

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

1.设计思路

(1)主要描述题目算法

第一步:本题有两个调用函数,一个是要求每名同学的成绩总和;一个是把学生总分按照从大到小排序;
第二步:主函数就是输入学生信息,再通过调用函数对信息进行处理后输出
第三步:求总和,用for循环求总和

(2)流程图

无。

2.实验代码

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

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

struct不会用,经过上网查询和问室友才明白。

要求三、学习总结和进度

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

这两周复习了指针,学习了结构以及结构数组,还有动态分配内存,第一次作业是指针,动态分配内存,第二次作业是结构数组,作业三是结构指针。学到了struct这个结构概念。

2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。请注意git地址应是类似“https://git.coding.net/Dawnfox/wf4_2.git”这样的字符串且是可被访问者直接点击进行访问的链接

GIT地址:https://git.coding.net/yangyuxin/77777.git

3、点评3个同学的本周作业

徐伟业:http://www.cnblogs.com/xuweiye/p/8747209.html
于耀淞:http://www.cnblogs.com/jsjyys/p/8672972.html
董欣:http://www.cnblogs.com/dx2017/p/8666072.html

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


原文地址:https://www.cnblogs.com/yangyuxin/p/8747235.html