第十次作业

 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("\tChinese\tmonth\tEnglish\tsum\tave\n");
    average(b);
    for(i=0;i<6;i++)
    {
        for(j=0;j<6;j++)
        {
            if(j==5)
            {
                printf("%.2f\t",b[i][j]);
            }
            else if(i==5)
            {
                printf("ave\t");
                for(y=1;y<=3;y++)
                {
                    printf("%.2f\t",b[i][y]);
                }
                exit(0);
            }
            else
            {
                printf("%.0f\t",b[i][j]);
            }
        }
        printf("\n");
    }
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("请输入方阵的行数\n");
    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\n",i+1,c[i]);
        printf("第%d列的和是%.0lf\n",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("\n");
        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):\n");
    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.变量分为实参和形参,实参可以任意调用,但形参不行。

posted @ 2016-12-06 22:41  王佳诺  阅读(383)  评论(4编辑  收藏  举报