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

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

    # include <stdio.h>
    # include <stdlib.h>
    # define M 6
    # define N 6
    void average(float a[M][N]);
    int main()
    {
        int i,j,y,sum;
        float b[M][N]={{1,98,95,65},{2,94,67,50},{3,84,68,90,},{4,68,84,90},{5,97,68,89}};
        printf("	Chinese	month	English	sum	ave
    ");
        average(b);
        for(i=0;i<6;i++)
        {
            for(j=0;j<6;j++)
            {
                if(j==5)
                {
                    printf("%.2f	",b[i][j]);
                }
                else if(i==5)
                {
                    printf("ave	");
                    for(y=1;y<=3;y++)
                    {
                        printf("%.2f	",b[i][y]);
                    }
                    exit(0);
                }
                else
                {
                    printf("%.0f	",b[i][j]);
                }
            }
            printf("
    ");
        }
    return 0;    
    }
    void average(float a[M][N])
    {
        int i,j,sum;
        for(j=1;j<4;j++)
        {
            sum=0;
            for(i=0;i<5;i++)
            {
                sum+=a[i][j];
            }
            a[5][j]=sum/5.0;
        }
        for(i=0;i<5;i++)
        {
            sum=0;
            for(j=1;j<4;j++)
            {
                sum+=a[i][j];
            }    
            a[i][4]=sum;
            a[i][5]=sum/3.0;
        }    
    }

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

    # include <stdio.h>
    int main()
    {
        int m,i,j;
        printf("请输入方阵的行数
    ");
        scanf("%d",&m);
        double a[m][m],x,c[m],d[m],diagonal1,diagonal2;
        x=1;
        for(i=0;i<m;i++)
        {
            c[i]=0;
            d[i]=0;
        }
        for(i=0;i<m;i++)
        {
            for(j=0;j<m;j++)
            {
                a[i][j]=x++;
            }
        }
        for(i=0;i<m;i++)
        {
            for(j=0;j<m;j++)
            {
                c[i]+=a[i][j];
                d[j]+=a[i][j];
                if(i==j)
                {
                    diagonal1+=a[i][j];
                }
                if(i+j==m-1)
                {
                    diagonal2+=a[i][j];
                }
            }
        }    
        for(i=0;i<m;i++)
        {
            printf("第%d行的和是%.0lf
    ",i+1,c[i]);
            printf("第%d列的和是%.0lf
    ",i+1,d[i]);
        }
        printf("两对角线的和分别为%.0lf,%.0lf",diagonal1,diagonal2);
    return 0;    
    }

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

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

            

    # include <stdio.h>
    int main()
    {
        int i,j,x,y,z,b,c,a[10][12]={0};
        a[0][5]=1;
        y=1;
        z=4;
        for(i=0;i<10;i++)
        {
            for(j=1;j<11-i;j++)
            {
                if(j<11-i)
                {
                    printf("  ");
                }
            }
            c=z;
            for(x=0;x<y;x++)
            {
                printf("%4d",a[i][c+1]);
                c++;
            }
            printf("
    ");
            y++;
            b=0;
            if(y%2==0)
            {
                for(x=0;x<y+1;x++)
                {
                    a[i+1][z+b]=a[i][z-1+b]+a[i][z+b];
                    b++;
                }
            }
            else
            {
                z--;
                for(x=0;x<y+1;x++)
                {
                    a[i+1][z+b]=a[i][z+b]+a[i][z+1+b];
                    b++;
                }
            }
        }
    return 0;    
    }

    2.猴子选大王

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

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

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

    # include <stdio.h>
    # define M 1000
    int main()
    {
        int i,N,n,x,y,z,m,a[M]={0};
        printf("请输入猴子的个数N(N<=1000):
    ");
        scanf("%d",&N);
        m=1;
        for(i=0;i<N;i++)
        {
            a[i]=m++;
        }
        n=0;
        y=1;
        do
        {
            for(i=0;i<N;i++)
            {
                if(a[i]!=-1)
                {
                    if(y%3==0)
                    {
                        a[i]=-1;
                        n++;
                    }
                    z=i;
                    y++;
                }
            }
        }while(N-n!=0);
        printf("%d",z+1);
    return 0;    
    }

    实验总结:

    1.在程序中使用数组时不能越界(超出数组的定义长度);

    2.二维数组在输出时并不能自动换行,需要手动添加换行;

    3.输出表格型数据适合用二维数组;

    4.变量分为实参和形参,实参可以任意调用,但形参不行。

  • 相关阅读:
    模型层
    视图层,模板层
    ORM表关系建立
    CMakeList入门
    C++标准模板库
    C++基本语法
    g++应用说明
    Linux快捷键
    Git 操作备忘
    Block的详细介绍
  • 原文地址:https://www.cnblogs.com/w123/p/6139442.html
Copyright © 2011-2022 走看看