• 第二次作业


    作业要求一

    作业截图:
    6-7:

    6-8:

    6-9:

    7-1:

    7-1:

    6-1:

    6-2:

    作业要求二

    作业要求二

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

    (1) 实验代码

    void delnum(char *s)
    {
    char a[80];
    int i=0,j=0;
    for(j=0,j=0;*(s+i)!='';i++)
    {
      if(s[i]>'9'||s[i]<'0')
      {
        a[j]=s[i];
        j++;
      }
    }
    a[j]='';
    strcpy(s,a);
    }
    

    (2) 设计思路
    主要描述题目算法
    第一步:本题的要求是删除给出的一行字符串中的数字字符,需要用数组遍历字符串,遇到数字,就删除,然后将之后的字符向前移动。
    第二步:我的方法先定义两个变量ij然后用if循环遍历数组中元素判断数字字符并将其删除,之后将字符向前移动。
    (3)本题调试过程中碰到的问题及解决方法
    本题中的且的符号||最开始我用的并的符号&&,结果出现了这种情况,最后我发现只需要满足一组条件就能完成,不需要用并的符号。

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

    (1) 实验代码

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

    (2) 设计思路
    主要描述题目算法
    第一步:运用if语句来遍历数组,找出子串在母串中出现的次数,逐一判断。
    第二步:应该用子串中的每一个循环变量寻找,所以循环变量要逐一增加,而不是用子串寻找。
    流程图

    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题。

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

    (1) 实验代码

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

    (2) 设计思路
    主要描述题目算法
    第一步:跟前两道题的方法差不多,需要遍历数组,还需要加上冒泡法的方法。
    第二步:开始定义循环变量,之后遍历数组,然后用冒泡方法对除了首尾字符的字符进行排序。
    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题

    题目7-1 输出学生成绩

    (1) 实验代码

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

    (2) 设计思路
    主要描述题目算法
    第一步:
    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题

    题目7-1计算职工工资

    (1) 实验代码

    #include<stdio.h>
    struct employer{
    	char name[10];
    	float a;
    	float b;
    	float c; 
    };
    int main()
    {
    	int N=0,i=0;
        scanf("%d",&N);
        struct employer e[N];
        for(i=0;i<N;i++)
        {
        	scanf("%s %f %f %f",e[i].name,&e[i].a,&e[i].b,&e[i].c);
    	}
    	for(i=0;i<N;i++)
    	{
    	    printf("%s %.2f
    ",e[i].name,e[i].a+e[i].b-e[i].c);	
    	}
    }
    

    (2) 设计思路
    第一步:首先定义一个结构体,在结构体中定义题目中的姓名、基本工资、浮动工资和支出,还应该注意题目中的精度要求;
    第二步:在主函数里面输入正整数n,每一行输入职员的信息,再给相应的变量赋初值,在根据题目中的公式计算实发工资,最后输出。
    流程图:

    (3)本题调试过程中碰到的问题及解决方法
    上课的时候老师讲的结构体定义,只是听懂了结构体定义这个知识点,如何运用还是不懂,然后看了一下下一节的结构体数组,再结合这道题就感觉用数组比较简单,最后没注意看结应该保留小数点后两位,结果导致答案错误如下图。

    题目7-2 计算平均成绩

    (1) 实验代码

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

    (2) 设计思路
    第一步:首先定义一个结构体,里面定义学号(字符类型)、姓名和成绩,然后在主函数中定义几个变量n、i、sum、average;
    第二步:在输入n行后,把每个学生的成绩进行求和,求和后就可以求出平均值;
    第三不:最后进行遍历数组,进行比较,找出成绩在平均值以下的学生,输出结果,要注意平均值的精度范围。
    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题。

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

    (1) 实验代码

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

    (2) 设计思路
    第一步:首先定义循环变量j和用来统计不及格人数的num,在后面通过if循环条件判断不及格人数;
    第二步:然后需要遍历这个数组,用if循环条件进行判断,给出每个学生相应的等级,并给grade赋值,最后进行不及格人数返回值的操作。
    流程图:

    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题。

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

    (1) 实验代码

    #include <stdio.h>
    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,l=0;
    	struct student swap;
    	for(i=0;i<n;i++)
    	{
    		for(l=i+1;l<n;l++)
    		{
    			if(p[i].sum<p[l].sum)
    			{
    				swap=p[i];p[i]=p[l];p[l]=swap;
    			}
    		}
    	}
    	
    }
    

    (1)设计思路
    第一步:首先计算总分,先在定义的第一个函数里进行定义循环变量i,之后通过遍历数组来计算出总分;
    第二步:在计算出总分之后,可以开始根据总成绩进行排名。
    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题。

    作业要求三学习总结和进度

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

    本周主要学习了如何定义一个结构体,还有结构体数组和结构体指针,还有学习了字符串在结构体中的应用,较以前的知识更加繁琐,所以需要上课认真听讲,对于结构的应用自己不是很熟练,尤其是结构体指针的知识掌握的不娴熟,导致pta上指针的题做了很久还有通过同学的指点才做出来,以后应该多培养自己的思维能力。

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

    地址
    截图:

    3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业:

    点评的同学:
    张金禹
    高立彬
    班庆泽
    邀请点评的同学:
    丰大为
    高立彬
    班庆泽

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

    表格:

    折线图:

  • 相关阅读:
    U8g2库I2C总线再次突破性调试成功
    要学的东西太多了,还想学习opencv
    中断知识
    别人做的扫地机器人,有机会我也想搞一台!
    团队冲刺第五天
    第八周学习进度
    团队冲刺第四天
    构建之法1
    团队冲刺第三天
    团队冲刺第二天
  • 原文地址:https://www.cnblogs.com/wshjw/p/8710431.html
Copyright © 2020-2023  润新知