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

实验6  数组的建立和使用

实验目的

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

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

实验内容

程序1

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

程序2

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



【程序1】

 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 #define MAXN 1000
 5 char a[MAXN],b[MAXN];
 6 struct BigNum{
 7     int data[MAXN/4];
 8     int dig;    //位数,每位存4位数字
 9 };
10 BigNum char2big(char s[])    //将数字从char型转换成Bignum型
11 {
12     int len = strlen(s),i;
13     BigNum big;
14     big.dig = (len-1)/4+1;    //转换之后的int数组的位数
15     char *p = s;
16     for(i=0;i<big.dig;i++){
17         char t[5];
18         if(i==0){    //将每4位取出来,放到字符串中
19             int tt = len%4==0?4:len%4;
20             strncpy(t,p,tt);
21             t[tt] = ‘\0‘;
22             p+=len%4;
23         }
24         else {
25             strncpy(t,p,4);
26             p+=4;
27         }
28         sscanf(t,"%d",&big.data[i]);    //从t中读取数字
29     }
30     return big;
31 }
32 BigNum Multi(BigNum ai,BigNum bi,BigNum &ci)    //计算ai*bi
33 {
34     ci.dig = ai.dig + bi.dig;
35     int i,j,pa=ai.dig,pb=bi.dig;
36     for(i=bi.dig-1;i>=0;i--){    //ai*bi
37         for(j=ai.dig-1;j>=0;j--){
38             int t = ci.dig-1-(bi.dig-1-i)-(ai.dig-1-j);
39             int sum = ai.data[j] * bi.data[i] + ci.data[t];
40             ci.data[t] = sum%10000;
41             ci.data[t-1] += sum/10000;    //进位
42         }
43     }
44     return ci;
45 }
46 void printAns(BigNum ci)    //输出结果
47 {
48     int i;
49     for(i=0;i<ci.dig;i++)
50         if(ci.data[i]!=0)
51             printf("%d",ci.data[i]);
52     printf("\n");
53 }
54 int main()
55 {
56     while(cin>>a>>b){
57         BigNum ai = char2big(a);    //转换成Bignum型
58         BigNum bi = char2big(b);
59         printAns(ai);
60         printAns(bi);
61         BigNum ci = {0};
62         Multi(ai,bi,ci);
63         printAns(ci);
64     }
65     return 0;
66 }

【程序2】

 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 #define MAXN 1010
 5 #define MAX 0x7fffffff
 6 #define MIN -0x7fffffff
 7 int a[MAXN][MAXN];
 8
 9 void Input(int a[][MAXN],int m,int n)    //输入二维矩阵
10 {
11     int i,j;
12     for(i=1;i<=m;i++)
13         for(j=1;j<=n;j++)
14             scanf("%d",&a[i][j]);
15 }
16
17 void GetMAD(int a[][MAXN],int m,int n)    //输出二维矩阵的所有马鞍点
18 {
19     int i,j;
20     for(i=1;i<=m;i++){
21         int x,y;    //马鞍点的位置
22         int Min=MAX,Max=MIN;
23         for(j=1;j<=n;j++)    //找到这一行的最小值
24             if(a[i][j]<Min)
25                 Min=a[i][j],x=i,y=j;
26         //判断这一列最大点是否为这个点
27         for(j=1;j<=m;j++)
28             if(a[j][y]>a[x][y])
29                 break;
30         if(j<=m)
31             continue;
32         else
33             printf("第%d行第%d列的元素是马鞍点\n",x,y);
34     }
35 }
36
37 int main()
38 {
39     int m,n;
40     scanf("%d%d",&m,&n);    //输入矩阵的行数和列数
41     Input(a,m,n);    //输入二维矩阵
42     GetMAD(a,m,n);    //输出二维矩阵的所有马鞍点
43     return 0;
44 }

Freecode : www.cnblogs.com/yym2013

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

时间: 2024-10-02 22:06:27

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

SDUT 3347 数据结构实验之数组三:快速转置

数据结构实验之数组三:快速转置 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它的转置矩阵T是一个n*m的矩阵,且T( i , j )=M( j , i ).显然,一个稀疏矩阵的转置仍然是稀疏矩阵.你的任务是对给定一个m*n的稀疏矩阵( m

SDUT-2136 数据结构实验之二叉树的建立与遍历

题目描述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度. 输入 输入一个长度小于50个字符的字符串. 输出 输出共有4行: 第1行输出中序遍历序列: 第2行输出后序遍历序列: 第3行输出叶子节点个数: 第4行输出二叉树深度. 示例输入 abc,,de,g,,f,,, 示例输出 cbegdfa cgefdba 3 5 #include<stdio.h> #include<

SDUTOJ 2136 数据结构实验之二叉树的建立与遍历

#include<iostream> #include<string.h> using namespace std; typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode, *BiTree; int Create(BiTree &T) { char data; cin>>data; if(data==','){ T=NULL;} else { T=new BiTN

数组的建立和使用

实验6 数组的建立和使用 实验目的 1.掌握C语言中数组的类型定义. 2.掌握数组的建立和使用的特点. 实验内容 程序1 在计算机上以字符串的形式输入了两个任意长的整数,编写求这两个整数的积的程序. 程序2 若矩阵Am´n中的某个元素aij是第i行的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点.假设以二维数组存储矩阵Am´n,试编写求出矩阵中所有马鞍点的算法. 1 #include <iostream> 2 #include <stdio.h> 3 using

数据结构实验之链表二:逆序建立链表

数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入整数个数N,再输入N个整数,按照这些整数输入的相反顺序建立单链表,并依次遍历输出单链表的数据. Input 第一行输入整数N;:第二行依次输入N个整数,逆序建立单链表. Output 依次输出单链表所存放的数据. Sample Input 10 11 3 5 27 9 12 43 16 84 22 Sample Output 22

SDUT 3340 数据结构实验之二叉树一:树的同构

数据结构实验之二叉树一:树的同构 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子互换后,就得到另外一棵树.而图2就不是同构的. 图1 图2 现给定两棵树,请你判断它们是否是同构的. Input 输入数据包含

SDUT 3344 数据结构实验之二叉树五:层序遍历

数据结构实验之二叉树五:层序遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. Input 输入数据有多行,第一行是一个整数t (t<1000),代表有t行测试数据.每行是一个长度小于50个字符的字符串. Output 输出二叉树的层次遍历序列. Example I

数据结构实验之链表五:单链表的拆分

数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数.两个子链表中数据的相对次序与原链表一致. 输入 第一行输入整数N;: 第二行依次输入N个整数. 输出 第一行分别输出偶数链表与奇数链表的元素个数: 第二行依次输出偶数子链表的所有数据: 第三行依次输出奇数子链表的所有数据. 示例输入 10 1 3 22

数据结构实验之链表三:链表的逆置

数据结构实验之链表三:链表的逆置 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据. 输入 输入多个整数,以-1作为结束标志. 输出 输出逆置后的单链表数据. 示例输入 12 56 4 6 55 15 33 62 -1 示例输出 62 33 15 55 6 4 56 12 提示 不得使用数组. 来源 示例程序 /*************