• 实验八总结


    第一题:

      在做这道题时,遇到一个问题,要求输出其总分和平均分,但是助教老师告诉我,这个需要用到指针或者位运算。。。。。然后我发现我想复杂了,只需要在自定义函数中输出一个总数就行了,平均数在主函数中计算

    //应为作业太长了有100多行代码,所以仅列出直接相关的部分,下同
    case 1:printf("总分为%d,平均分为%d",first(i),first(i)/10);break;

    就像上边,但是遇到了第二个问题:在运行中会不断的出现“请输入十名学生的成绩:”的情况,原因是在上面的代码中,我引用了两次first函数,所以这个函数被引用了两次,助教老师交给我一个办法

    int first(int i)
    {
        int grade[10];
        static int sum=0;
        if(0==sum){
            printf("请输入十名学生的成绩:");
            for(i=0;i<=9;i++)
            {
                scanf("%d",&grade[i]);
                sum=sum+grade[i];
            }
        }
        return sum;
    }

    就像上面代码中大红字,static变量一旦初始化后就不会再被初始化,那么if(0==sum)这个判断中的代码就只会被执行一次;但是这样,这个函数就变成一次性了,后面这个函数中的内容就不能用了,所以说是一次性的。

    第二题

      首先第一点就是赋值运算‘=’它的意思是将右边的值赋给左边,a=b及将b的值赋给a,而‘==’得意思是两边相等a==b为a等于b,这一点通常会在条件语句中使用错误。

    第五题

    这道题更多的是逻辑,我已开始的想法是是从数组a,b的第0个数开始,如果相等就再和b的下一个数比较,这样无法确保将b数组中a没有的元素找出来。。。。,于是助教老师给了我一个想法,从a中拿出一个元素与b中的元素一一比较,如果都不一样,就打印出这个数,如果相同就将b中这个元素删除,然后再从a中拿出一个,依次进行。至于删除可以这样比如想要删除a【3】,那么就将a【4】放到a【3】,a【5】放到a【4】,然后实际的数组长度-1。

    还有一些其他的问题,函数结束的标志是}而不是return,return的含义是抛出一个值,但他有一个特点,及一旦执行到一个return语句,那么后边的语句都不再执行,主函数的返回值理论上是没有意义的,因为main不能被其他函数调用,但实际上返回0表示的是告诉系统,这个程序被正确执行了。

    //删除b中的这个元素
            {
                do
                {
                    z=q;
                    a[z]=a[z+1];
                    z=z+1;
                } while(z==m);
                x=a[p+1];

    感受:

    我觉得在学习的深入中,逻辑越来越重要,没有一个正确的逻辑,不可能编写出一个好的程序,必须要在动手写代码之前明确你的开始与目的,并条理清晰的在心中罗列出每一步要干什么,否则只会越来越晕,直到一个语句也写不出来

    以下为代码

    #include<stdio.h>
    int first(int i);
    int secend(int i);
    int third(int i);
    int forth(int i);
    int forth(int i);
    int main()
    {
        int n,i,m;
        do
        {
            printf("实验八
    ");
            printf("******第一题******
    ");
            printf("******第二题******
    ");
            printf("******第三题******
    ");
            printf("******第四题******
    ");
            printf("******第五题******
    ");
            printf("输入0则退出
    ");
            printf("请输入题号:");
            scanf("%d",&n);
            switch(n)
            {
                case 1:printf("总分为%d,平均分为%d",first(i),first(i)/10);break;
                case 2:m=secend(i);
                       if(m==0)
                            printf("Not Found");
                       else
                               printf("是第%d个数",m);
                          break;
                  case 3:printf("是第%d个数",third(i));break;
                  case 4:m=forth(i);
                  case 5:m=forth(i);
                case 0:return 0;break;
            }
        }while(n==0);
        return 0;
    }
    
    int first(int i)
    {
        int grade[10];
        static int sum=0;
        if(0==sum){
            printf("请输入十名学生的成绩:");
            for(i=0;i<=9;i++)
            {
                scanf("%d",&grade[i]);
                sum=sum+grade[i];
            }
        }
        return sum;
    }
    
    int secend(int i)
    {
        int sum[5],n,m=0;
        printf("请输入五个整数:");
        for(i=0;i<=4;i++)
            scanf("%d",&sum[i]);
        printf("请输入一个数字:");
        scanf("%d",&n);
        for(i=0;i<=4;i++)
        {
            if(n==sum[i])
            {
                m=i;
                break;
            }        
        }
        return m;
    }
    
    int third(int i)
    {
        int n,m=0,b;
        int a[10];
        printf("请输入数组的大小:");
        scanf("%d",&n);
        printf("请输入%d个数字",n);
        for(i=0;i<n;i++) 
        {
            scanf("%d",&a[i]);
        }
        for(i=0;i<n;i++)
        {
            if(m<=a[i])
                m=a[i];
                b=i;
        }
        printf("最大值为%d",m);
        return b;
    }
    
    int forth(int i)
    {
        int n,m,x,y,z,p=0,q=0;
        int a[10];
        int b[10];
        //第一个数组的赋值 
        printf("请输入第一个数组的大小:");
        scanf("%d",&n);
        printf("请输入%d个数字",n);
        for(i=0;i<n;i++) 
        {
            scanf("%d",&a[i]);
        }
        //第二个数组的赋值 
        printf("请输入数组的大小:");
        scanf("%d",&m);
        printf("请输入%d个数字",m);
        for(i=0;i<n;i++) 
        {
            scanf("%d",&b[i]);
        }
        while(p<n||q<m)
        {
            x=a[p],y=b[q];//从a中取一个数,从b中取一个数
            //两个元素不相同 
            if(x!=y) 
                printf("%d
    ",x);
            //两个元素不相同
            else
            //删除b中的这个元素
            {
                do
                {
                    z=q;
                    a[z]=a[z+1];
                    z=z+1;
                } while(z==m);
                x=a[p+1];
            }
        }
        for(i=0;i<n;i++)
            printf("%d",b[i]);
        return 0;
    }
  • 相关阅读:
    Sum Root to Leaf Numbers 解答
    459. Repeated Substring Pattern
    71. Simplify Path
    89. Gray Code
    73. Set Matrix Zeroes
    297. Serialize and Deserialize Binary Tree
    449. Serialize and Deserialize BST
    451. Sort Characters By Frequency
    165. Compare Version Numbers
    447. Number of Boomerangs
  • 原文地址:https://www.cnblogs.com/ght-c/p/6070133.html
Copyright © 2020-2023  润新知