实验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 }