您的位置:首页 > 理论基础 > 数据结构算法

数据结构 【实验6 数组的建立和使用】

2014-06-16 15:38 316 查看
实验6 数组的建立和使用

实验目的

1.掌握C语言中数组的类型定义。

2.掌握数组的建立和使用的特点。

实验内容

程序1

在计算机上以字符串的形式输入了两个任意长的整数,编写求这两个整数的积的程序。

程序2

若矩阵Am´n中的某个元素aij是第i行的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。假设以二维数组存储矩阵Am´n,试编写求出矩阵中所有马鞍点的算法。

【程序1】

#include <iostream>
#include <stdio.h>
using namespace std;
#define MAXN 1000
char a[MAXN],b[MAXN];
struct BigNum{
int data[MAXN/4];
int dig;    //位数,每位存4位数字
};
BigNum char2big(char s[])    //将数字从char型转换成Bignum型
{
int len = strlen(s),i;
BigNum big;
big.dig = (len-1)/4+1;    //转换之后的int数组的位数
char *p = s;
for(i=0;i<big.dig;i++){
char t[5];
if(i==0){    //将每4位取出来,放到字符串中
int tt = len%4==0?4:len%4;
strncpy(t,p,tt);
t[tt] = '\0';
p+=len%4;
}
else {
strncpy(t,p,4);
p+=4;
}
sscanf(t,"%d",&big.data[i]);    //从t中读取数字
}
return big;
}
BigNum Multi(BigNum ai,BigNum bi,BigNum &ci)    //计算ai*bi
{
ci.dig = ai.dig + bi.dig;
int i,j,pa=ai.dig,pb=bi.dig;
for(i=bi.dig-1;i>=0;i--){    //ai*bi
for(j=ai.dig-1;j>=0;j--){
int t = ci.dig-1-(bi.dig-1-i)-(ai.dig-1-j);
int sum = ai.data[j] * bi.data[i] + ci.data[t];
ci.data[t] = sum%10000;
ci.data[t-1] += sum/10000;    //进位
}
}
return ci;
}
void printAns(BigNum ci)    //输出结果
{
int i;
for(i=0;i<ci.dig;i++)
if(ci.data[i]!=0)
printf("%d",ci.data[i]);
printf("\n");
}
int main()
{
while(cin>>a>>b){
BigNum ai = char2big(a);    //转换成Bignum型
BigNum bi = char2big(b);
printAns(ai);
printAns(bi);
BigNum ci = {0};
Multi(ai,bi,ci);
printAns(ci);
}
return 0;
}


【程序2】

#include <iostream>
#include <stdio.h>
using namespace std;
#define MAXN 1010
#define MAX 0x7fffffff
#define MIN -0x7fffffff
int a[MAXN][MAXN];

void Input(int a[][MAXN],int m,int n)    //输入二维矩阵
{
int i,j;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
}

void GetMAD(int a[][MAXN],int m,int n)    //输出二维矩阵的所有马鞍点
{
int i,j;
for(i=1;i<=m;i++){
int x,y;    //马鞍点的位置
int Min=MAX,Max=MIN;
for(j=1;j<=n;j++)    //找到这一行的最小值
if(a[i][j]<Min)
Min=a[i][j],x=i,y=j;
//判断这一列最大点是否为这个点
for(j=1;j<=m;j++)
if(a[j][y]>a[x][y])
break;
if(j<=m)
continue;
else
printf("第%d行第%d列的元素是马鞍点\n",x,y);
}
}

int main()
{
int m,n;
scanf("%d%d",&m,&n);    //输入矩阵的行数和列数
Input(a,m,n);    //输入二维矩阵
GetMAD(a,m,n);    //输出二维矩阵的所有马鞍点
return 0;
}


Freecode : www.cnblogs.com/yym2013
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: