数据结构 【实验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