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

     1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。

    #include<stdio.h>
    #define N 5
    #define M 3
    int Sum(double a[][5],int m,int n);
    double Average(double a[][5],int m,int n);
    int main()
    {
        double score[N][M+2]={{90,69,78},{70,80,90},{90,90,90},{88,80,70},{66,77,88}};
        int i,j;
        double average[M]={0};
        for(i=0;i<N;i++)
        {
            score[i][3]=Sum(score,i,-1);
            score[i][4]=Average(score,i,-1); 
        }
        for(i=0;i<M;i++)
        {
        average[i]
    =Average(score,-1,i);
       } printf(
    " 语文 数学 英语 总分 平均分 "); for(i=0;i<N;i++) { for(j=0;j<M+2;j++) { printf(" %.2lf",score[i][j]); } printf(" "); } printf("平均分"); for(i=0;i<M;i++) { printf(" %.2lf",average[i]); } return 0; } int Sum(double a[][5],int m,int n) { int i,sum=0; if(m==-1) for(i=0;i<N;i++)   sum=sum+a[i][n]; else if(n==-1) for(i=0;i<M;i++)   sum=sum+a[m][i]; return sum; } double Average(double a[][5],int m,int n) { double q; if(m==-1)   q=(double)Sum(a,m,n)/N; else if(n==-1)   q=(double)Sum(a,m,n)/M; return q; }

     2.求任意方阵每行、每列、两对角线上元素之和。

    #include<stdio.h>
    #define N 100
    int main()
    {
        int i,j,n,nums[N][N]={0},a,sum[N][N]={0};
        printf("请输入方阵宽度:
    ");
        scanf("%d",&n);
        a=1;
        for(i=0;i<n;i++)
          for(j=0;j<n;j++)
            nums[i][j]=a++;
        printf("方阵为:
    ");
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                printf("%4d",nums[i][j]); 
            }
            printf("
    ");
        }
        a=0;
        for(i=0;i<n;i++)
          for(j=0;j<n;j++)
            sum[0][i]+=nums[i][j];
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
              sum[1][i]+=nums[j][i];
        for(i=0;i<n;i++)
          for(j=0;j<n;j++)
          {
              if(i==j)
                sum[2][0]+=nums[j][i];
              if(i+j==n-1)
                sum[2][1]+=nums[j][i];
          }
        for(i=0;i<n;i++)
        {
            printf("第%d行的元素和为%d
    ",i+1,sum[0][i]);
        }
        for(i=0;i<n;i++)
        {
            printf("第%d列的元素和为%d
    ",i+1,sum[1][i]);
        }
        printf("两条对角线上的元素和分别为%d,%d",sum[2][0],sum[2][1]);
        return 0;
    }

    附加题

    1.按照以下形式打印杨辉三角(要求输出10行)

    杨辉三角形具有如下特点:(1)第一列和对角线上的元素都为1 (2)除第一列和对角线上的元素之外,其他元素的值均为前一行上的同列元素和前一列元素之和。

    #include<stdio.h>
    #define N 10
    int main()
    {
        int i,j,a[N][N]={0},q;
        for(i=0;i<N;i++)
        {
            for(j=0;j<=i;j++)
            {
                if(j==0||j==i)
                {
                    a[i][j]=1;
                }
                else
                {
                    a[i][j]=a[i-1][j-1]+a[i-1][j];
                
                }
            }
        }
        for(i=0;i<N;i++)
        {
            for(q=9-i;q>0;q--)
            {
                printf("  "); 
            }
            for(j=0;j<=i;j++)
            {
                printf("%4d",a[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }        

    2.猴子选大王

     一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

    输入格式:输入在一行中给一个正整数N(≤1000)。

    输出格式:在一行中输出当选猴王的编号。

    输入样例:11

    输出样例:7

    此题可在pta网站注册提交测试。https://pta.patest.cn/pta/test/14/exam/4/question/808   

    #include<stdio.h>
    #define N 1001
    int main()
    {
        int a[N]={0},i,n,j,m,index;
        scanf("%d",&n);
        i=1,j=1,m=n;
        do
        {   for(i=1;i<=n;i++)
            {
                if(a[i]!=-1)   
                {
                    j++;
                   if((j-1)%3==0)
                   {
                       a[i]=-1;
                       m--;
                   }
                }
            } 
        }while(m!=1);
        for(i=1;i<=n;i++)
        {
            if(a[i]!=-1)
            {
                index=i;
                break;
            }
        }
        printf("%d",index);
        return 0;
    }

    实验总结:1.自定义函数里二维数组的形参,一定要定义列长度。

         2.if判断里用x++,计算不满足条件,x++也会执行。

         3.数组定义是最好初始化,不要越界。

         4.并列判断是 if 和if ,不是if 、else if。

         5.给二维数组赋值,需要循环嵌套,外循环控制行或列,内循环控制列或行。

         6.将平均分放在存放成绩的数组里,需要将成绩的数组定义为double型,输出时不要忘记是%lf。

         7.减少判断和赋值,可以节省运行时间。

  • 相关阅读:
    网络IO之阻塞、非阻塞、同步、异步总结
    C语言栈与调用惯例
    多个文件目录下Makefile的写法
    利用 mount 指令解决 Read-only file system的问题
    error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
    Centos6.4下安装protobuf及简单使用
    Centos下修改启动项和网络配置
    Centos下配置单元测试工具gtest
    Centos配置为驱动程序开发环境
    Centos安装gcc及g++
  • 原文地址:https://www.cnblogs.com/TX980502/p/6139226.html
Copyright © 2011-2022 走看看