• 实验八总结


    第一题:

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

    //应为作业太长了有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;
    }
  • 相关阅读:
    全局索引 truncate有数据的分区,索引失效,没数据的分区,索引不失效
    数组的操作
    调存储过程shell
    Flex中的折线图
    SecurityError:Error #2048:安全沙箱冲突
    Flex中对表格中某列的值进行数字格式化并求百分比
    Flex中对表格中某列的值进行数字格式化
    ORA-00904:"T1"."AREA_ID" :标识符无效
    严重:IOException while loading persisted sessions:java.io.EOFException.
    开放的平台、向上的文化——揭秘万达电商(4)
  • 原文地址:https://www.cnblogs.com/ght-c/p/6070133.html
Copyright © 2020-2023  润新知