作业 十

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

#include<stdio.h>
#define N 5
#define M 5
void readScore(int score[N][M]);
void printScore(int score[N][M]);
void sumScore(int score[N][M],int sum[M]);
void aveScore1(int score[N][M],double ave[N]);
void aveScore2(int score[N][M],double ave[M]);
int main()
{
    int score[N][M]={0},j;
    double ave[M];
    readScore(score);
    printf("       语文\t数学\t英语\t总分\t平均分\n");
    printScore(score);
    printf("平均分  ");
    aveScore2(score,ave);
    for(j=0;j<3;j++)
    {
        printf("%.2f\t",ave[j]);
     }
    return 0;
}
void readScore(int score[N][M])
{
    int i,j;
    for(i=0;i<N;i++)
    {
        printf("请输入第%d个人成绩\n",i+1);
        for(j=0;j<3;j++)
        {
            scanf("%d",&score[i][j]);
        }
    }
}
void printScore(int score[N][M])
{
     int i,j,sum[N]={0};
     double ave[N]={0};
     sumScore(score,sum);
     aveScore1(score,ave);
     for(i=0;i<N;i++)
     {
         for(j=0;j<3;j++)
        {
            printf("\t%d",score[i][j]);
        }
        printf("\t%d",sum[i]);
        printf("\t%.2f",ave[i]);
        printf("\n");
      }
}
void sumScore(int score[N][M], int sum[M])
{
    int i,j,he;
     for(i=0;i<N;i++)
     {
        he=0;
        for(j=0;j<3;j++)
        {
            he+=score[i][j];
        }
        sum[i]=he;
     }
}
void aveScore1(int score[N][M],double ave[N])
{
    int i,j,he;
     for(i=0;i<N;i++)
     {
        he=0;
        for(j=0;j<3;j++)
        {
            he+=score[i][j];
        }
        ave[i]=(double)he/3;
     }
}
void aveScore2(int score[N][M],double ave[M])
{
    int i,j,he;
     for(j=0;j<3;j++)
     {
        he=0;
        for(i=0;i<N;i++)
        {
            he+=score[i][j];
        }
        ave[j]=(double)he/N;
     }
}

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

#include<stdio.h>
#define N 4
#define M 4
void readNum(int num[N][M]);
void sumHeng(int num[N][M]);
void sumShu(int num[N][M]);
void sumXie1(int num[N][M]);
void sumXie2(int num[N][M]);
int main()
{
    int num[N][M]={{1,2,3,4},{5,6,7,8},{9,0,2,1},{4,3,6,2}};
    int a,b;
    readNum(num);
    sumHeng(num);
    printf("\n");
    sumShu(num);
    printf("\n");
    sumXie1(num);
    printf("\n");
    sumXie2(num);
    printf("\n");
    return 0;
}
void readNum(int num[N][M])
{
    int i,j;
    for(i=0;i<N;i++)
        {
            for(j=0;j<M;j++)
            {
                printf("%2d",num[i][j]);
            }
            printf("\n");
        }
}
void sumHeng(int num[N][M])
{
    int i,j,sum;
    for(i=0;i<N;i++)
    {
        sum=0;
        for(j=0;j<M;j++)
        {
            sum+=num[i][j];
        }
        printf("第%d行元素之和为%d\n",i+1,sum);
    }

}
void sumShu(int num[N][M])
{
    int i,j,sum;
    for(j=0;j<M;j++)
    {
        sum=0;
        for(i=0;i<N;i++)
        {
            sum+=num[i][j];
        }
    printf("第%d列元素之和为%d\n",j+1,sum);
    }
}
void sumXie1(int num[N][M])
{
    int i,j,sum;
    sum=0;
        for(i=0;i<N;i++)
        {
            for(j=0;j<M;j++)
            {
                if(i==j)
                {
                    sum+=num[i][j];
                }
            }
        }
        printf("左上到右下的对角线的和为%d",sum);
}
void sumXie2(int num[N][M])
{
    int i,j,sum;
    sum=0;
        for(i=0;i<N;i++)
        {
            for(j=0;j<M;j++)
            {
                if(i==M-1)
                {
                    sum+=num[i][j];
                }
            }
        }
        printf("右上到左下的对角线的和为%d",sum);
}

二、实验总结

1、写程序要一个一个的写,别一下子都写完,到时候不好检查。

2、for语句中的表达式要用;分开‘

3、二维数组要用两个[][]分别代表行和列。

4二维数组用到了两层循环,内外层循环的循环变量由题决定,根据题决定先循环行还是先循环列。

时间: 2024-10-08 09:46:19

作业 十的相关文章

作业十二

---恢复内容开始--- 一查找最长字符串 #include<stdio.h> #include<string.h> int main() { int i; char sx[80],smax[80]; scanf("%s",sx); strcpy(smax,sx); for(i=1;i<5;i++) { scanf("%s",sx); if(strcpy(smax,sx)>0) strcpy(smax,sx); } printf(

作业十二总结

第一题主要考查了,字符串长度函数strlen(s1) s1可以是字符数组名或字符串常量,这个函数返回字符串s1中'.0'之间的字符个数. 例如strlen("happy")的值为5. #include<stdio.h> #include<string.h> int main() { char *a[5]; char b[5][50]; int i,max,n,m=0; printf("输入5个字符串:"); scanf("%s&qu

作业十 指针(1)

知识点: (1)变量的地址就是变量的指针. (2)变量的值和变量的地址是不同的概念,变量的值是该变量在内存单元中的数据. (3)用来存放指针/地址的变量就称为"指针变量". (4)若把某变量的地址赋值给指针变量p,则称指针变量p指向该变量. (5)定义指针变量的一般形式为: 类型名 *指针变量名; 其中"*"为说明符,而不是运算符. 遇到的困难及感想: 这周学习的指针是一个全新的内容,作业中的代码整体框架上与之前的自定义函数相仿,这再次说明了知识点不是零散的,而是一

作业十二 总结

一.知识点 1.字符串的复制.连接...: (1)字符串的复制:strcpy(str1,str2) (2)字符串的连接:strcat同上 (3)字符串的比较:strcmp同山 (4)求字符串长度:strlen同上  .字符串和字符指针 2.如果定义一个字符指针接收字符串常量的值,该指针就指向字符串的首字符.这样,字符数组和字符指针都可以用来处理字符串.例如: Char sa []="array": Char *sp="point"; Printf("%s&

作业十 总结

老师前几天生病做完作业忘记发了 不好意思 一 知识点: 1.如果程序中声明一个变量并使用地址作为该变量的值,那么这个变量就是指针变量. 2.定义指针变量时应可以同时对它赋值int a;    int *p=&a; 3.指针变量的类型不是指指针变量本身的类型,而是指它所指向的变量的数据类型. 4.无论何种类型的指针变量,他们都是用来存放地址的. 二 遇到的问题与解决方法 1.有时候赋值发现不能成功,指针类型和他所指向变量的类型必须相同 三  实验心得 要多加进行练习 锻炼 才会有进步 #inclu

作业十总结

一.知识点: 1.指针表量的概念: 变量可以用来存放数值(如整数.实数等),也可以用来存放地址(另一个变量的地址),这种专门用于储存指针(地址)的变量就称为指针变量. 2.指针变量的定义: 在定义指针变量时,需要用指针声明符"*"表示此变量并非一般变量,而是用来存放其他变量地址的指针变量.由于每一个变量都属于一个特定类型 ,因此在定义指针变量时,需要声明该变量的类型,以便能够通过指针正确访问特定类型的数据. 定义一个指针的语法格式为: 基类型标识符 *指针变量名: (1)"基

作业十

1. 设置环境变量 HISTSIZE , 使其能够保存10000条命令历史.vim /etc/profile  把 HISTSIZE=1000 改为 HISTSIZE=10000  2. 为什么如果这样设置PS1 (PS1="[\[email protected]\h \W]\$ ")  显示的结果和我们预想的不一样,那要如何设置才能恢复原来默认的?应该是 PS1='[\[email protected]\h \W]\$ ' 3. 想办法把当前目录下的文件的文件名中的小写字母全部替换为

作业十代码

1.计算两数的和与差.要求自定义一个函数 #include<Stdio.h> void sum_diff(float op1,float op2,float *psum,float *pdiff) { *psum=op1+op2; *pdiff=op1-op2; } int main() { float op1,op2,*psum,*pdiff,sum,diff; printf("请输入两个实数:"); scanf("%f%f",&op1,&am

Java作业十(2017-11-8)

public class TAutoPerson { public static void main(String args[]) { new TAutoPerson().fun(); } public void fun() { System.out.println("hello world!!!"); } } package com.baidu.www; public class Tperson { String name;int age; public Tperson(String