標籤:style blog color os io 使用 ar for div
實驗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*bi33 {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*bi37 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 else33 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 }
數組的建立和使用