数组的建立和使用

实验6  数组的建立和使用



实验目的



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



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



实验内容



程序1



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



程序2



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

 

你可能感兴趣的:(数组)