实验八总结

第一题:

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

//应为作业太长了有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;
}
原文地址:https://www.cnblogs.com/ght-c/p/6070133.html