2018第二次作业。

作业要求一

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

 

1.1删除字符串中数字字符

设计思路

1:使用for循环和if语句,一个一个字符判断,找到数字字符就跳过去判断下一个字符,否则使指针指向不是数字字符的字符来替换。

实验代码

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

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

流程图

1.2 统计子串在母串出现的次数

设计思路

1:使用外循环控制次数,再用for循环,令j=i,k=0,退出内循环的条件为子串中的字符不为母串中的字符。

2:在内循环中,用if语句判断子串下一个是否为结束符,如果是,说明已经判断完一次,次数加1,跳出内循环。

3:从母串的下一个字符重新进行判断。

实验代码

int fun(char *str,char *substr)
{
  int n = 0,i = 0,k = 0,flag = 0;
  for(;str[i] != '\0';i ++)
  {
  for(k = 0;substr[k] != '\0';k ++)
  {
    if(substr[k] == str[i+k])
    flag = 1;
    else
    flag = 0;
  }
  if(flag == 1)
  {
    n ++;
    flag = 0;
  }
}
return n;
}

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

流程图

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

设计思路

1:使用外循环控制次数,num个数组字符选num-1趟,首尾字符不比较。

2:再使用for循环和if语句判断下一个字符的ASCII码值是否大于前一个字符的ASCII码值,如果是就交换。

实验代码

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

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

1.4 输出学生成绩

设计思路

1:输入学生人数(使用动态分配)。

2:用for循环输入学生成绩,并把它们相加,令max、min等于数组的第一个元素。

3:   用for循环,如果下一个数组元素小于min,就交换min;如果大于max,就交换max。

实验代码

#include<stdio.h>
int main()
{
  double avg = 0,max = 0,min = 101;
  int i = 0,*s,n;
  scanf("%d",&n);
  if((s=(int *)malloc(n*sizeof(int)))==NULL)
  exit(1);
  for(i =0 ;i < n;i ++)
  {
      scanf("%d",s+i);
      if(s[i] > max)
      max = s[i];
      if(s[i] < min)
      min = s[i];
      avg = avg + s[i];
  }
  avg = avg / n;
  free(s);
  printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",avg,max,min);
}

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

 

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

 

2.1 计算职工工资

 设计思路

1:用for循环输入n个员工的姓名,基本工资,浮动工资支出。

2:计算并输出。

实验代码

#include<stdio.h>
struct people
{
  char name[10];
  float jiben,fudong,zhichu;
  float m;
};
int main()
{
  int i = 0,n;
  scanf("%d",&n);
  struct people s[n];
  for(i = 0;i < n;i++)
  {
    scanf("%s %f %f %f",&s[i].name,&s[i].jiben,&s[i].fudong,&s[i].zhichu);
    s[i].m = (s[i].jiben + s[i].fudong - s[i].zhichu);
  }
  for(i = 0;i < n;i ++)
  {
    printf("%s %.2f\n",s[i].name,s[i].m);
  }
}

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

流程图

2.2 计算平均成绩

设计思路

1:使用for循环输入学号 姓名 成绩,并将成绩相加。

2:计算平均值,并输出。

3:使用for循环和if语句判断每个人的成绩是否小于平均值,若是就输出学生的姓名和学号。

实验代码

#include<stdio.h>
struct student
{
  char num[6],name[10];
  int s;
}; 
int main()
{
  int i = 0,n;
  double avg = 0;
  scanf("%d",&n);
  struct student s[n];
  for(i = 0;i < n;i ++)
  {
      
    scanf("%s %s %d",&s[i].num,&s[i].name,&s[i].s);
    avg = avg + s[i].s;
  }
  avg/=n;
  printf("%.2lf\n",avg);
  for(i = 0;i < n;i ++)
  {
    if(s[i].s<avg)
    printf("%s %s\n",s[i].name,s[i].num);
  }
}

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

流程图

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

3.1 按等级统计学生成绩

设计思路

1:用for循环再用if语句判断学生成绩的等级,如果学生成绩小于60分,count的值增加1。

2:返回count的值到主函数。

实验代码

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

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

3.2 结构体数组按总分排序

设计思路

1:用两个for循环镶嵌,外循环为第i个人的成绩总值,内循环为计算第i个人的成绩总值。

2:用排序法,按总分从大到小交换。

实验代码

void calc(struct student *p,int n)
{
  int i = 0;
  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 = 0,min = 0;
  struct student k;
  for(i = 0;i < n;i ++)
  {
    if((p + i) -> sum < (p + min) -> sum)
    {
      min = i;
    }
  }
  k = *(p + min);
  *(p + min)=*(p + n - 1);
  *(p + n - 1) = k;
  if(n > 1)
  {
    n --;
    sort(p,n);
  }
}

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

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

并无本次作业

作业要求二

1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?

这两周的学习,让我在c语言的学习中有了较大进展,也获得了许多新知识,比如结构体struct,如何定义变量类型,还有如何使用已定义的变量类型定义变量,如何多变的使用指针等。而对于指针的使用还不是很熟悉,现在我的思路不太全面,并不能快速的解题,在脑内构成解题的程序,常常需要他人提醒,我还需要勤加练习,希望以后能有所突破。

2、将PTA作业的源代码使用git提交到托管平台上。

GIT:https://git.coding.net/ShiWithZhou/HI.git

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

徐铭博 http://www.cnblogs.com/xmb1547828350/p/8657376.html

流淌的时之沙 http://www.cnblogs.com/archeralter/p/8746738.html

冯子旋 http://www.cnblogs.com/fengzx/p/8735254.html

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

   

 

 

 

 


posted @ 2018-04-08 10:56  shilcz  阅读(274)  评论(6编辑  收藏  举报