数据结构 【实验6 数组的建立和使用】
2014-06-16 15:38
316 查看
实验6 数组的建立和使用
实验目的
1.掌握C语言中数组的类型定义。
2.掌握数组的建立和使用的特点。
实验内容
程序1
在计算机上以字符串的形式输入了两个任意长的整数,编写求这两个整数的积的程序。
程序2
若矩阵Am´n中的某个元素aij是第i行的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。假设以二维数组存储矩阵Am´n,试编写求出矩阵中所有马鞍点的算法。
【程序1】
【程序2】
Freecode : www.cnblogs.com/yym2013
实验目的
1.掌握C语言中数组的类型定义。
2.掌握数组的建立和使用的特点。
实验内容
程序1
在计算机上以字符串的形式输入了两个任意长的整数,编写求这两个整数的积的程序。
程序2
若矩阵Am´n中的某个元素aij是第i行的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。假设以二维数组存储矩阵Am´n,试编写求出矩阵中所有马鞍点的算法。
【程序1】
#include <iostream> #include <stdio.h> using namespace std; #define MAXN 1000 char a[MAXN],b[MAXN]; struct BigNum{ int data[MAXN/4]; int dig; //位数,每位存4位数字 }; BigNum char2big(char s[]) //将数字从char型转换成Bignum型 { int len = strlen(s),i; BigNum big; big.dig = (len-1)/4+1; //转换之后的int数组的位数 char *p = s; for(i=0;i<big.dig;i++){ char t[5]; if(i==0){ //将每4位取出来,放到字符串中 int tt = len%4==0?4:len%4; strncpy(t,p,tt); t[tt] = '\0'; p+=len%4; } else { strncpy(t,p,4); p+=4; } sscanf(t,"%d",&big.data[i]); //从t中读取数字 } return big; } BigNum Multi(BigNum ai,BigNum bi,BigNum &ci) //计算ai*bi { ci.dig = ai.dig + bi.dig; int i,j,pa=ai.dig,pb=bi.dig; for(i=bi.dig-1;i>=0;i--){ //ai*bi for(j=ai.dig-1;j>=0;j--){ int t = ci.dig-1-(bi.dig-1-i)-(ai.dig-1-j); int sum = ai.data[j] * bi.data[i] + ci.data[t]; ci.data[t] = sum%10000; ci.data[t-1] += sum/10000; //进位 } } return ci; } void printAns(BigNum ci) //输出结果 { int i; for(i=0;i<ci.dig;i++) if(ci.data[i]!=0) printf("%d",ci.data[i]); printf("\n"); } int main() { while(cin>>a>>b){ BigNum ai = char2big(a); //转换成Bignum型 BigNum bi = char2big(b); printAns(ai); printAns(bi); BigNum ci = {0}; Multi(ai,bi,ci); printAns(ci); } return 0; }
【程序2】
#include <iostream> #include <stdio.h> using namespace std; #define MAXN 1010 #define MAX 0x7fffffff #define MIN -0x7fffffff int a[MAXN][MAXN]; void Input(int a[][MAXN],int m,int n) //输入二维矩阵 { int i,j; for(i=1;i<=m;i++) for(j=1;j<=n;j++) scanf("%d",&a[i][j]); } void GetMAD(int a[][MAXN],int m,int n) //输出二维矩阵的所有马鞍点 { int i,j; for(i=1;i<=m;i++){ int x,y; //马鞍点的位置 int Min=MAX,Max=MIN; for(j=1;j<=n;j++) //找到这一行的最小值 if(a[i][j]<Min) Min=a[i][j],x=i,y=j; //判断这一列最大点是否为这个点 for(j=1;j<=m;j++) if(a[j][y]>a[x][y]) break; if(j<=m) continue; else printf("第%d行第%d列的元素是马鞍点\n",x,y); } } int main() { int m,n; scanf("%d%d",&m,&n); //输入矩阵的行数和列数 Input(a,m,n); //输入二维矩阵 GetMAD(a,m,n); //输出二维矩阵的所有马鞍点 return 0; }
Freecode : www.cnblogs.com/yym2013
相关文章推荐
- linux shell 数组建立及使用技巧
- linux shell数组的建立和使用技巧
- CentOS实验三:使用安装光盘建立本地软件源
- 数据结构--数组--稀疏矩阵的建立
- 数据结构--数组--对称矩阵的建立
- 使用标准C语言建立动态随机数组
- 【数据结构】采用数组的形式实现顺序表的建立、插入、删除等操作
- linux_shell_数组建立及使用技巧
- 《C++第十四周实验报告1-1》---建立专门的数组类处理有关数组的操作
- shell 数组建立及使用技巧
- RHCM 使用gnbd仲裁磁盘 建立HA高可用性集群 【实验补充】
- 使用静态“环形”数组建立一个队列
- c语言中头文件的建立与使用-函数、全局变量、全局数组
- CentOS实验三:使用安装光盘建立本地软件源
- PHP中使用数组实现堆栈数据结构的代码
- 实验名称: C++数组、指针、结构体的使用
- 分别使用静态数组与动态数组建立一个区域 - 回复 "老A123" 的问题
- linux shell 数组建立及使用技巧
- 数据结构--数组--对角矩阵建立
- Android JNI 使用的数据结构JNINativeMethod详解 ||建立Android SDK下的JNI、JAVA应用完整步骤---Android JAVA调用C++代码