• 数组的建立和使用


    实验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] = '';
    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("
    ");
    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列的元素是马鞍点
    ",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 }
  • 相关阅读:
    macOS 升级后重装命令行工具的问题
    Windows系统制作Ubuntu启动U盘(命令行)
    远程管理相关命令的学习(域名和端口号的概念)
    远程管理相关命令的学习(ssh工作方式的简介)
    远程管理相关命令的学习(网卡和IP地址)
    远程管理相关命令的学习(shutdown)
    其他命令的使用(echo find 硬软链接)
    文件内容相关命令(cat more grep)
    拷贝和移动文件(tree cp mv命令的使用)
    touch mkdir rm命令的使用
  • 原文地址:https://www.cnblogs.com/yfzhang/p/3961377.html
Copyright © 2020-2023  润新知