第18周报告2---二维数组(完美版)

来源:互联网 发布:iso 8000数据质量标准 编辑:程序博客网 时间:2024/05/18 08:59
 

实验目的:学会二维数组的操作
实验内容:二维数组的操作

* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:                            
* 作    者:        雷恒鑫                  
* 完成日期:  2011 年 12 月23 
* 版本号:        V1.2

* 对任务及求解方法的描述部分
* 输入描述:由程序产生随机数作为初始值
* 问题描述:……
* 程序输出:……
* 程序头部的注释结束
#include  <iostream>
#include <time.h>
using namespace std;
void setdata(int a[8][8]);  //设置随机数
void out(int a[8][8]);  //输出数组
void outDiagonal(int a[8][8]);  //输出对角线元素的值
void mine(int a[8][8],int x, int y);  //按“扫雷”游戏的规则输出相邻格子
void change(int a[8][8]);     //按要求改变数值
int main()
{
 int a[8][8],x,y;
 setdata(a);
 out(a);
 outDiagonal(a);
 cout<<"输入一个位置:";
 cin>>x>>y;
 mine(a,x,y);
 change(a);
 out(a);
 return 0;
}


void setdata(int a[8][8])
{
 int i,j;
 srand(time(NULL));//需要用当前时间作“种子”,以便每次运行取得的序列不同
 for(i=0;i<8;i++)
  for(j=0;j<8;j++)
   a[i][j]=rand()P+1;
  return;
}

 


void out(int a[8][8])
{
 int i,j;
 for (i=0;i<8;i++)
  for(j=0;j<=8;j++)
  {
   if(j!=8)
   {
    cout<<a[i][j]<<'\t';
   }
   else
    cout<<endl;
  }
  cout<<endl;
  return;
}

 

 

void outDiagonal(int a[8][8])
{
 int i,j;
 cout<<"从左上到右下对角线元素的值为:"<<endl;
 for (i=0,j=0;i<8;i++,j++)
  cout<<a[i][j]<<'\t';
 cout<<endl;
 cout<<"从右上到左下对角线元素的值为:"<<endl;
 for (i=0,j=7;i<8;i++,j--)
  cout<<a[i][j]<<'\t';
 cout<<endl;
 return;
}

 

 

void mine(int a[8][8],int x, int y)
{
 cout<<"相邻的格子为:"<<endl;
 int m,n,p,q,sum=0;
 p=x+1;
 q=y+1;
 for (m=x-1;m<=p;m++)
 {
  if (m<0 || m>7)
  {
   ;
  }
  else
  {
   for (n=y-1;n<=q;n++)
   {
    if (n<0 || n>7)
    {
     ;
    }
    else
    {
     if (m==x && n==y)
     {
      ;
     }
     else
     {
      sum=sum+a[m][n];
      cout<<a[m][n]<<'\t';
     }
    }
   }
  }
 }
 cout<<endl;
 cout<<"这些数的和为"<<sum;
 cout<<endl;
 cout<<endl;
 return;
}

 

 

void change(int a[8][8])
{
 cout<<"改变数值后的数组元素为:"<<endl;
 int i,j,(*p)[8];
 p=a;
 
 
 
 
 //for (i=0;i<1;i++)
 // for (j=0;j<8;j++)
 //  b[i][j]=a[i][j];
 for(i=1;i<8;i++)
  for(j=0;j<8;j++)
  {
   if(j==7)
   {
    *(*(p+i)+j)=a[i-1][j]+a[i-1][0];
   }
   else
   {
    *(*(p+i)+j)=a[i-1][j]+a[i-1][j+1];
   }
  }
 
  return;
}

运行结果:

第18周报告2---二维数组

经验积累:
1.for语句能够简化程序,要想在函数调用中改变原数据的值,指针是一个不错的选择!

2.当编译没错误,连接有问题时,要看是否有两个入口。

上机感言:
这个题挺锻炼大脑的,需要多画画流程图。