第二次作业: 二维数组

高级语言程序设计报告

 


实习题目


第二次作业: 二维数组

    1. P228计算机双学位第8章实验题:学生成绩管理系统

l 在上次作业的基础上,改为每学生2门课,用二维数组编程实现相应功能,相应功能所有涉及分数的均需可以处理每门课程分数及每个学生课程总分。

l 涉及到排序的,均需提供冒泡及选择两种排序方法,可增加菜单项。

l 功能5中按学号查询学生排名及成绩,要求用折半法,为此你的学生数据可以多一点。

l 数组中可以事先有数据(省却每次输入数据浪费时间),为此输入数据菜单可以改造为增加数据菜单。

l 在一次运行过程中,菜单功能应该可以循环多次使用,直到确定退出。

l 程序输入界面应该是美观、友好的。

l 本题无需在ACM系统中完成。

 

 

    1. 你的代码、注释及运行结果贴图。

#include <stdio.h>

#include <stdlib.h>

#define N 30

#define M  4

void paixu(int a[][M],int m);

void shuxuepaiming(int a[][M],int m);

void yingyupaiming(int a[][M],int m);

void zongfenpaiming(int a[][M],int m);

void xuehaopaiming(int a[][M],int m);

void  fenlei(int a[][M],int m);

int chazhao(int a[][M],int m);

void shuru(int a[][M],int m);

int jisuan(int a[][M],int m);

void shuchu(int a[][M],int m);

int main()

{

    int x,o,y,n,z,m,a[N][M];

    printf("      欢迎进入学生成绩管理系统\n");//进入系统

  printf("请输入人数 m:");

    scanf("%d",&m);

    for(o=0;o<m;o++)

   {

  a[o][0]=2014011000+o;

    a[o][1]=rand()%90+10;

      a[o][2]=rand()%90+10;

      a[o][3]=a[o][1]+a[o][2];

    }      

    for(y=0;y>=0;y++)                        //选择菜单

    {

    printf("1.手动输入数据\n");

    printf("2.计算总分和平均分\n");

    printf("3.按分数排名\n");

    printf("4.按学号排名\n");

    printf("5.按学号查找\n");

    printf("6.数据分析\n");

    printf("7.清单记录\n");

    printf("0.退出系统\n");

    printf("请输入您的选择:");

scanf("%d",&n);                                                         

switch(n)                             //选择结果

{

case 1:shuru(a,m);

       break;

case 2:jisuan(a,m);

   break;

case 3:paixu(a,m);

       break;

case 4:xuehaopaiming(a,m);

   break;

case 5:x=chazhao(a,m);

   printf("数学:%d 英语:%d 总分:%d\n",a[x][1],a[x][2],a[x][3]);

     break;

case 6:fenlei(a,m);

    break;

case 7:shuchu(a,m);

   break;

case 0:break;

}

if(n==0)  break;                         //退出系统

    }

    return 0;

}

void shuru(int a[][M],int m)                 //手动输入数据函数

{

int  i,n,o;

printf("请输入数据\n");

for(i=0;i<m;i++)

{

        printf("学号 数学 英语\n");

scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);

        if(a[i][0]<0) break;

        a[i][3]=a[i][1]+a[i][2];

        printf("个人总分:%d\n",a[i][3]);

}

}

int jisuan(int a[][M],int m)                   //计算各种分函数

{

int i,s=0,y=0,z=0;

for(i=0;i<m;i++)

{  

s=s+a[i][1];

        y=y+a[i][2];

        z=z+a[i][3];        

}

    printf("数学总分:%d 数学平均:%d 英语总分:%d 英语平均:%d\n",s,s/m,y,y/m);

    printf("              总分数:%d 平均分:%d\n",z,z/m);

return (z);

}

void paixu(int a[][M],int m)                     //排序函数

{

int t;

printf("按数学排名输入1,按英语排名输入2,按总分排名输入3\n");                //选择排序方法

scanf("%d",&t);                         

if(t==1)  shuxuepaiming(a,m);

    else   {                                        

            if(t==2)    yingyupaiming(a,m);

else    zongfenpaiming(a,m);               

           }

}

void shuxuepaiming(int a[][M],int m)//数学排序函数

{

int i,t,p,q,o,g;

printf("请选择排序方法:1.冒泡法 2.选择法");//选择排序方法

scanf("%d",&g);

if(g==2)

{

for(i=0;i<m;i++)//选择排序法

{

q=i;

for(t=i+1;t<m;t++)

        {

if(a[t][1]>a[i][1])

{

q=t;

}    

        }

if(q!=i)

{

a[q][1]=a[q][1]+a[i][1];

a[i][1]=a[q][1]-a[i][1];

a[q][1]=a[q][1]-a[i][1];

}

}

}

else

    {

for(i=0;i<m;i++)//冒泡排序法

{

for(t=i+1;t<m;t++)

        {

if(a[t][1]<a[i][1])

{

a[t][1]=a[t][1]+a[i][1];

a[i][1]=a[t][1]-a[i][1];

a[t][1]=a[t][1]-a[i][1];

}    

        }

}

    }

printf("学号              数学     英语           总分\n");

for(p=0;p<m;p++)

{

printf("%d     *      %d      *     %d      *      %d\n",a[p][0],a[p][1],a[p][2],a[p][3]);

    }

}

void yingyupaiming(int a[][M],int m)//英语排序函数

{

int i,t,p,q,o,g;

printf("请选择排序方法:1.冒泡法 2.选择法");

scanf("%d",&g);

if(g==2)

{

for(i=0;i<m;i++)//选择排序法

{

q=i;

for(t=i+1;t<m;t++)

        {

if(a[t][2]>a[i][2])

{

q=t;

}    

        }

if(q!=i)

{

a[q][2]=a[q][2]+a[i][2];

a[i][2]=a[q][2]-a[i][2];

a[q][2]=a[q][2]-a[i][2];

}

}

}

else

    {

for(i=0;i<m;i++)//冒泡排序法

{

for(t=i+1;t<m;t++)

        {

if(a[t][2]<a[i][2])

{

a[t][2]=a[t][2]+a[i][2];

a[i][2]=a[t][2]-a[i][2];

a[t][2]=a[t][2]-a[i][2];

}    

        }

}

    }

printf("学号              数学     英语           总分\n");

for(p=0;p<m;p++)

{

printf("%d     *      %d      *     %d      *      %d\n",a[p][0],a[p][1],a[p][2],a[p][3]);

    }

}

void zongfenpaiming(int a[][M],int m)//总分排序函数

{

int i,t,p,q,o,g;

printf("请选择排序方法:1.冒泡法 2.选择法");

scanf("%d",&g);

if(g==2)

{

for(i=0;i<m;i++)//选择排序法

{

q=i;

for(t=i+1;t<m;t++)

        {

if(a[t][3]>a[i][3])

{

q=t;

}    

        }

if(q!=i)

{

a[q][3]=a[q][3]+a[i][3];

a[i][3]=a[q][3]-a[i][3];

a[q][3]=a[q][3]-a[i][3];

}

}

 }

else

    {

for(i=0;i<m;i++)//冒泡排序法

{

for(t=i+1;t<m;t++)

        {

if(a[t][3]<a[i][3])

{

a[t][3]=a[t][3]+a[i][3];

a[i][3]=a[t][3]-a[i][3];

a[t][3]=a[t][3]-a[i][3];

}    

        }

}

    }

printf("学号              数学     英语           总分\n");

for(p=0;p<m;p++)

{

printf("%d      *     %d      *     %d      *      %d\n",a[p][0],a[p][1],a[p][2],a[p][3]);

    }

}

void xuehaopaiming(int a[][M],int m)//学号排序函数

{

int i,t,p,q,o,g;

printf("请选择排序方法:1.冒泡法 2.选择法");

scanf("%d",&g);

if(g==2)

{

    for(i=0;i<m;i++)//选择排序法

{

q=i;

for(t=i+1;t<m;t++)

        {

if(a[t][0]>a[i][0])

{

q=t;

}    

        }

if(q!=i)

{

a[q][0]=a[q][0]+a[i][0];

a[i][0]=a[q][0]-a[i][0];

a[q][0]=a[q][0]-a[i][0];

}

}

    }

    else

    {

for(i=0;i<m;i++)//冒泡排序法

{

for(t=i+1;t<m;t++)

        {

if(a[t][0]<a[i][0])

{

a[t][0]=a[t][0]+a[i][0];

a[i][0]=a[t][0]-a[i][0];

a[t][0]=a[t][0]-a[i][0];

}    

        }

}

    }

printf("学号              数学     英语           总分\n");

for(p=0;p<m;p++)

{

printf("%d     *      %d      *     %d      *      %d\n",a[p][0],a[p][1],a[p][2],a[p][3]);

    }

}

void  fenlei(int a[][M],int m)//按成绩分类函数

{

int i,t,p=0,q=0,r=0,s=0;

printf("数学分类输入1,英语分类输入2\n");

scanf("%d",&i);

for(t=0;t<m;t++)//优秀的

{

if(a[t][i]>=90)   p++;

}

for(t=0;t<m;t++)//良好的

{

if(a[t][i]>=80&&a[t][i]<=89)   q++;

}

for(t=0;t<m;t++)//中等的

{

if(a[t][i]>=70&&a[t][i]<=79)   r++;

}

for(t=0;t<m;t++)//及格的

{

if(a[t][i]>=60&&a[t][i]<=69)   s++;

}

printf("   优秀:%d 良好:%d 中等:%d 及格:%d 不及格:%d\n",p,q,r,s,m-p-q-r-s);

printf("百分率:%d%%      %d%%     %d%%     %d%%       %d%%\n",100*p/m,100*q/m,100*r/m,100*s/m,100*(m-p-q-r-s)/m );

}

int chazhao(int a[][M],int m)//按学号查找函数

{

int b,c,d=0,e,f=0,low=0,high=m-1,mid;

printf("请选择查找方法:1.折半查找 2.顺序查找\n");//选择查找方法

scanf("%d",&e);

if(e==1)

{

printf("请输入学生学号:");//折半查找

    scanf("%d",&b);

    do

    {

while(low<=high)

{

mid=(high+low)/2;

if(b>a[mid][0])

  low=mid+1;

else if(b<a[mid][0])

     high=mid-1;

     else  {return mid ;f++;}

}

if(f!=0)  {

   break;}

printf("无此学生成绩,请重试,若输入0,则退出:");

        scanf("%d",&b);

        if(b==0)  break;

        }while(b==0);

}

else

{

printf("请输入学生学号:");//顺序查找

scanf("%d",&b);

do

{

for(c=0;c<m;c++)

{

if(b==a[c][0])

{   

printf("数学:%d 英语:%d 总分:%d\n",a[c][1],a[c][2],a[c][3]);

        d++;

}    

}

if(d==1)  break;

    printf("无此学生成绩,请重试,若输入0,则退出:");

    scanf("%d",&b);

    if(b==0)  break;

    }while(d==0);

    }

}

void shuchu(int a[][M],int m)//输出成绩单函数

{

int i,s=0,y=0,z=0,b;

for(b=0;b<m;b++)

{

printf("学号:%d 数学:%d 英语:%d 总分:%d\n",a[b][0],a[b][1],a[b][2],a[b][3]);

    }

    for(i=0;i<m;i++)

{  

s=s+a[i][1];

        y=y+a[i][2];

        z=z+a[i][3];        

}

    printf("数学总分:%d 数学平均:%d 英语总分:%d 英语平均:%d\n",s,s/m,y,y/m);

    printf("                总分数:%d 平均分:%d\n",z,z/m);

}

 

 

    1. 设计及调试过程遇到的问题及解决方案。

不会折半查找,不知道冒泡排序就是交换法,开始时遇到的各种高级问题,从没见过,还有对二维数组的使用真是尴尬,连调用都不会,后来才慢慢从书上边抄边学,明白了二维数组的调用注意什么,其实每次报告都会知道许多注意事项,然后就会用了,折半查找完全是从书上copy下来的,抄完也就会的差不多了,区分冒泡和交换是问同学的,那个高级问题其实我没有解决,后来直接按书上的抄下来,也就对了,波波老师死活不肯告诉我。看了刘兴的程序后震惊了,自己又添加了美化的零件,弥补了一些细节,让使用者不仅用的舒服,而且看得舒服,才是一个好的程序猿。

    1. 心得体会和自我对程序的评价。

还是万事开头难,刚开始真不知道怎么下手,慢慢一点一点才搞出来的,有了第一个,就继续我的复制粘贴大业了,首先一定要迈出第一步,老拖着什么都做不成,这不狠下心来不也做成了吗,费劲,也要努力去抠。我感觉作报告真的很有用,能一下让我知道很多东西,以前不懂得都懂了,对于我的程序,和刘兴的相比真是不敢望其项背,在外观和实用性上有待改善,总之提升空间很大很大,加油,许恺,要做就做一个优质的程序员。

时间: 2024-12-04 10:37:41

第二次作业: 二维数组的相关文章

JAVA二维数组小记

入手JAVA第二天 1 //二维数组 2 //数据类型 [][] 数组名 = new 数据类型[行的个数][列的个数];3 4 String [][] name = {{"admin","jack"},{"tom","rose"}}; 5 for(int i=0;i<2;i++){ 6 for(int j=0;j<2;j++){ 7 System.out.println(name[i][j]); 8 } 9 } i

C语言二维数组作业

一.PTA实验作业 题目1:7-3 出生年 1. 本题PTA提交列表 2. 设计思路 1.声明一个函数different()用来计算一个年份的不同数字个数 2.定义y(y是来计算符合要求的年份的量),n(n为题目要求的不同数字个数),x(x用来存放起始年份),flag(flag是用来表示每个y值中的不同数字个数的量) 3.输入起始年份y和题目要求的n 4.x=y(存放起始年份) 5.do {flag计算y中不同数字个数:如果flag=n,符合题意,输出相应结果,并结束循环:如果不符合,y自增一}

2016-1-9作业——输出二维数组的和

1 int [][] array2 = {{1,2,3,4},{5,6,7,8}};//第二种方式创建并初始化数组 2 3 //输出数组中所有元素的和 4 int sum = 0; 5 6 for(int i = 0;i<array2.length;i++){ //利用for循环输出 7 8 for(int j = 0;j<array2[i].length;j++){ 9 10 System.out.print(array2[i][j]+" ");//输出二维数组中的元素

作业九 二维数组和字符数组的应用

知识点: (1)二维数组的定义形式为: 类型名 数组名 [行长度] [列长度]; (2)引用二维数组的元素要制定两个下标,即行下标和列下标,形式为: 数组名 [行下标] [列下标] (3)行下标的合理取值范围是[0,行长度-1],列下标合理的取值范围是[0,列长度-1]. (4)分行赋初始值,一般形式为: 类型名 数组名 [行长度] [列长度]={{初值表0},-,{初值表k},-}; 然后可把初值表k中的数据一次赋值给第k行的元素. (5) 顺序赋初始值,一般形式为: 类型名 数组名 [行长度

2016/1/10 作业 1, 二维数组遍历输出求和 2,转置运算???? 3,九宫格?? 后两个存在问题

1 public class arr1 { 2 3 4 public static void main(String[] args) { 5 // 创建二维数组arr[][],输出二维数组所有元素的和. 6 7 int arr[][]={{1,3,5,7,9},{21,23,25,27,29}, 8 {12,14,16,18},{32,34,36,38}}; 9 int sum=0; 10 System.out.println("二维数组遍历"); 11 // for循环 遍历 求和

Python 迭代器&amp;生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 迭代器&

C++二级指针第二种内存模型(二维数组)

C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4],b[5][10]; 二维数组元素地址 #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; int a[3][4]={ {1,2,3

0109作业练习二维数组

//创建二维数组 arr[][],将二维数组中所有元素的和输出 int [][]arr= {{7,8,9},{44,22,33},{41,25,68,78}};//建立arr的二维数组,初始化大小并赋值 int sum=0; //声明变量sum for(int[] n:arr){ //用foreach遍历数组 for(int m:n){ //再定义一个m ,将arr中的值通过n赋值给m,不可以直接输出n System.out.print(m+" ");//通过遍历输出数组中的数 sum

第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)

一维数组:1:/* 数组: 1. 数组是一种引用类型 2. 数组是一种简单的数据结构,线性的机构 3. 数组是一个容器,可以用来存储其他元素, 4. 数组也是可以存储任意数据类型的元素 5. 数组分为: 一维数组,二维数组,三维数组,多维数组 6. 数组中的存储的元素类型 是统一的 7. 数组的长度是不可变的,数组一旦创建长度就是不可变的,固定的 声明数组语法: <1>. 数组元素的类型[] 变量名称 <2>. 数组元素的类型 变量名称[] */ public class Arra