第2次作业

作业要求一

提交记录

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

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

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

作业要求二

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

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

1.设计思路:

主要描述题目算法:

第一步:调用函数
第二步:定义两个变量构成两个字符串
第三步:利用循环判断该删除字节
第四步:该删除字节利用另一个字符串的下一个补上
第五步:返回主函数

2.实验代码:

`void delnum(char *s){
  int i,j=0;
  for(i=0;*(s+i)!='\0';i++)
  {
    if(*(s+i)<'0'||*(s+i)>'9')
    {
      *(s+j)=*(s+i);
      j++;
    }
  }*(s+j)='\0';
  return *(s+j);
}`

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

1.设计思路:

主要描述题目算法:

第一步:调用函数
第二步:利用第一个循环实现字符串挨个查询
第三步:利用第二个循环确定是否有相同的字符
第四步:n返回主函数

2.实验代码:

`int fun(char *str,char *substr)
    {
      int i,j=0,n=0,a;
      for(i=0;*(str+i)!='\0';i++)
      {
        for (a=0;a<3;a++)
        {
	    if*(str+i+a)==*(substr+j+a);
	    else break;
        }	
	    n++;
      }return n;
    }`

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

1.设计思路:

主要描述题目算法:

第一步:调用主函数
第二步:第一个循环确定字符串挨个字符查询
第三步:利用判断排除第一个和最后一个
第四步:利用循环进行降序排列
第五步:返回主函数

2.实验代码:

`int fun(char *s,int num)
{
  int i,j;
  for(i=0;i<num-1;i++)
  {
    if(i!=0||i!=num-2)
    {
      for(i=1;*(s+i)!='\0';i++)
      {
        for(j = i+1;j < num-1;j++)  
        {  
              if(*(s+i)<*(s+j))  
            {  
                int temp;  
                temp = *(s+i);  
                *(s+i) = *(s+j);  
                *(s+j) = temp;  
            }  
       }
      
     }
   }
  }return *(s+i);
}`

7-1 输出学生成绩

1.设计思路:

主要描述题目算法:

第一步:创立动态内存定义平均成绩、最高成绩和最低成绩
第二步:输入学生的成绩
第三步:找出最低成绩最高成绩并求出成绩之和
第四步:利用成绩之和求出平均成绩
第五步:输出平均成绩、最高成绩和最低成绩并清除动态内存

2.实验代码:

`#include<stdio.h>
#include<stdlib.h> 
int main(void)
{
  int sum=0,*p,i,N;
  double max,min;
  double average;
  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));
  }
  min = *p,max=*p;
  for(i=0;i<N;i++){
    sum = sum + *(p+i);
    if(*(p+i)>max){
      max = *(p+i);
    }
    if(*(p+i)<min){
      min = *(p+i);
    }
  }
  average = (double)sum / (double)N;
  printf("average = %.2f\nmax = %.2f\nmin = %.2f",average,max,min);
  free(p);
  return 0;`

3.流程图:

错误信息

错误原因:第一次把`average = (double)sum / (double)N;`放在了` sum = sum + *(p+i);`下面,导致求了多个平均值。

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

7-1 计算职工工资

1.设计思路:

主要描述题目算法:

第一步:建立结构包括姓名、基本工资、浮动工资、支出、实发工资
第二步:输入一共有几个职员
第三步:利用循环输入姓名、基本工资、浮动工资、支出
第四步:利用循环求出每个人的实发工资
第五步:输出姓名和实发工资

2.实验代码:

`#include<stdio.h>
struct nest_yuangong{
  char name[10];
  double jiben;
  double fudong;
  double zhichu;
  double shifa;
};
int main(void)
{
  int i,n;
  struct nest_yuangong s[n];
  scanf("%d",&n);
  for (i=1;i<=n;i++){
    scanf("%s%lf%lf%lf",&s[i].name,&s[i].jiben,&s[i].fudong,&s[i].zhichu);
    s[i].shifa = s[i].jiben+s[i].fudong-s[i].zhichu;
  }
  for (i=1;i<=n;i++){
  	printf("%s %.2lf\n",s[i].name,s[i].shifa);
  }
  return 0;
}`

7-2 计算平均成绩

1.设计思路:

主要描述题目算法:

第一步:建立结构包括学生的学号、姓名和成绩
第二步:输入一共有几个学生
第三步:利用循环输入学生的学号、姓名和成绩
第四步:利用循环求出成绩总和
第五步:求出平均成绩并输出
第六步:挑选出平均成绩以下的学生并输出

2.实验代码:

`#include<stdio.h>
struct nest_student{
  char name[10];
  char number[5];
  int grade;
};
int main(){
  int i,n,sum=0;
  float average;
  scanf("%d\n",&n);
  struct nest_student s[n];
  for(i=1;i<=n;i++){
    scanf("%s %s %d",s[i].number,s[i].name,s[i].grade);
    sum = sum + s[i].grade;
  }
  average=(float)(sum*1.0/n*1.0);
  printf("%.2f\n",average);
  for(i=1;i<=n;i++){
    if((float)(s[i].grade) < average){
      printf("%s %s\n",s[i].name,s[i].number);
    }
  }
  return 0;
}`

3.流程图:

错误信息

错误原因:输入的时候强制改变数字类型。

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

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

1.设计思路:

主要描述题目算法:

第一步:调用函数
第二步:利用循环求出不及格数目
第三步:利用循环决定每个学生等级
第四步:返回主函数

2.实验代码:

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

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

1.设计思路:

主要描述题目算法:

第一步:调用主函数
第二步:利用循环求出每个学生总成绩
第三步:利用循环给每个学生的总分从高到低排序
第四步:返回主函数

2.实验代码:

`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 swap;
  for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if((p+i)->sum<(p+j)->sum)
            {
                swap=p[i];p[i]=p[j];p[j]=swap;
            }
        }
    }
}`

3.流程图:

错误信息

错误原因:用指针的时候与用数组弄混,忘记了`(p)->`这种指示方式。

作业要求三

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

这两周主要学习了结构还有动态内存这两方面,我觉得掌握的还可以,但是对于结构中的函数掌握的还是不够熟练。

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

git地址:https://git.coding.net/wuyaole/dayixiaxueqidiercizuoye.git
图片:

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

1.胡景文:http://www.cnblogs.com/wshjw/p/8710431.html
2.高立彬:http://www.cnblogs.com/gao628526/p/8665187.html
3.丰大为:http://www.cnblogs.com/DavidPark/p/8664273.html

4、表格和折线图

posted @ 2018-04-08 18:49  无药了  阅读(225)  评论(6编辑  收藏  举报