zoukankan      html  css  js  c++  java
  • 第二次作业

    第二次作业

    提交列表

    第一题

    设计思路

    1.因为要删除所有数字,那么在输出字符时,当数组内的元素等于数字时,数组输出零
    2.用循环,把输出出来的新数组整合,就能得到想要的结果

    流程图

    代码

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

    调试

    对或跟且运用不是很熟悉

    第二题

    设计思路

    1.设计个循环控制数组输出
    2.当数组连续三次都相等时让num+1,最后输出num,即为出现的次数

    代码

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

    调试


    改正方法:‘'忘记加,字符串是以为结束标志,找不到会越界访问。

    第三题

    设计思路

    1.设计两个循环形成循环嵌套,然后控制字符串排序
    2.借用冒泡排序法的思路,完成代码

    代码

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

    调试

    无错误

    第四题

    设计思路

    1.输入学生人数,动态分配,用for循环相加成绩
    2.令max,min,等于数组第一个元素,比较大小,并用for循环交换

    代码

    #include<stdio.h>
    float max_a(float x,float y);
    float min_a(float x,float y);
    int main()
    {
    	int N,flag=1,D;
    	float average,max,min,sum=0.0;
    	scanf("%d",&N);
    	int i=0;
    	for(;i<N;i++){
    		scanf("%d",&D);
    		sum=sum+D;
    	if (flag==1)
       { 
        max=D;
        min=D;
        flag--;
       }
        max=max_a(max,D);
        min=min_a(min,D);
       }
        average=sum/N;
        printf("average = %.2f
    max = %.2f
    min = %.2f",average,max,min);
        
    }
    
    float max_a(float x,float y)
    {
     float z;
     if(x>y)
     z=x;
     else
     z=y;
     return(z);
    }
    float min_a(float x,float y)
    {
     float z;
     if(x<y)
     z=x;
     else
     z=y;
     return(z);
    }
    

    调试

    原因:缺少函数定义 float *p=(float *)malloc(n);
    方法:通过与同学交流并查询书籍得知

    第五题

    设计思路

    1.定义结构体。
    2.用for循环输入n个员工的姓名 基本工资 浮动工资 支出。
    3.计算并输出。

    流程图

    代码

    #include<stdio.h>
    struct person{
        char name[100];
        float w;
        float w1;
        float account;
    }person1;
    int main()
    {
    
        int n,i;
        float pay;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%s %f %f %f",&person1.name,&person1.w,&person1.w1,&person1.account);
            pay=person1.w+person1.w1-person1.account;
            printf("%s %.2f
    ",person1.name,pay);
        }
        return 0;
    }
    

    调试


    问题:在编译器运行时结果跟输出样例一样,但是PTA判断我答案错误。
    原因:在我仔细的审过题目后,我发现我漏掉了这一点 把定义的变量类型改为float后答案正确。

    第六题

    设计思路

    1.使用结构体类型进行结构体变量的引用,且根据题意后面应为s1[10]。
    2.输入N的值,遍历数组,输入s1[i].number,s1[i].name,s1[i].score并将它们储存起来,计算出sum的值。
    3.在for循环中,判断s1[i].score与avg的大小,最后按要求输出元素

    流程图

    代码

    #include <stdio.h>
    struct score {
        char number[6];
        char name[10];
        int score;
    } s1[10];
    int main ()
    {
        
        int N,i,sum=0;
        float avg;
        scanf("%d",&N);
        for(i=0;i<N;i++) {
            scanf("%s %s %d",s1[i].number,s1[i].name,&s1[i].score);
            sum = sum + s1[i].score;
        }
        avg = sum/N;
        printf("%.2f
    ",avg);
        for(i=0;i<N;i++) {
            if(s1[i].score<avg) {
                printf("%s %s
    ",s1[i].name,s1[i].number);
            }
        }
        return 0;
    }
    


    问题:输出时将s1[i].number的%s写成%d。
    解决:在单步调试后知道错误的代码行,重新观察后找出问题所在

    第七题

    设计思路

    1.定义一个结构体,并在其中定义学号num,姓名name,分数score,成绩等级grade。
    2.主函数中:引用结构体,并输入学生个数n,用一个for语句进行数据录入,引用函数进行计算,最后进行输出。
    3.函数中:用for语句进行遍历,并用if语句进行等级的区分,其中如果在D等级则不及格人数count加一。最后返回count值

    代码

    #include <stdio.h>
    #define MAXN 10
    int set_grade( struct student *p, int n )
    {
    	int j=0,result=0;
    	for(j=0;j<n;j++)
    	{
    		if(p[j].score<60)
    		{
    			result++;
    		}
    	}
    	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';
    		}
    	}
    	return result;
     } 
    

    调试

    问题:最开始没有看到返回不及格人数的条件,导致前两个点出现错误

    第八题

    设计思路

    1.先定义函数,引入变量
    2.在for循环中通过if语句进行多层判断,将学生成绩分出等级,然后使小于60分的单独计算出其数目,最后返回其值(count)即可

    代码

    #include <stdio.h>
    void calc(struct student *p,int n)
    {
    	int k=0;
    	for(k=0;k<n;k++)
    	{
    		(p+k)->sum=(p+k)->score[0]+(p+k)->score[1]+(p+k)->score[2];
    	}	
    }
    void sort(struct student *p,int n)
    {
    	int k=0,l=0;
    	struct student swap;
    	for(k=0;k<n;k++)
    	{
    		for(l=k+1;l<n;l++)
    		{
    			if(p[k].sum<p[l].sum)
    			{
    				swap=p[k];p[k]=p[l];p[l]=swap;
    			}
    		}
    	}
    	
    }
    

    点评

    黄国戎
    金海宽
    金海东

    学习总结和进度

    1.本周学习的结构,但是运用还不是很纯熟,需要多加练习

    学习曲线

  • 相关阅读:
    重构手法之简化函数调用【5】
    netstat命令
    Python使用wxpy模块实现微信两两群组消息同步
    format函数格式化显示的方法
    scrapy介绍及使用
    Linux常用命令复习
    Django实现博客项目
    Django中CKEditor富文本编译器的使用
    Django-admin站点管理的详细使用
    电脑修改密码后,git push 报错unable to access
  • 原文地址:https://www.cnblogs.com/jinjian155/p/8746877.html
Copyright © 2011-2022 走看看