
//自定义函数声明
void add(int *m,int *m1,int *m2,int r,int c)//矩阵加法
void sub(int *m,int *m1,int *m2,int r,int c)//矩阵减法
void mult(int *m,int *m1,int *m2,int r,int p,int c)//矩阵乘法
void disp(int *m,int r,int c)//打印数组数据(矩阵里的数据)
//主测试函数
void main()
{
int a[3][4]={{4,3,5,2},{5,1,7,3},{2,7,6,2}}
int b[3][4]={{2,4,4,-7},{4,2,5,-8},{7,-3,-4,2}}
int c[4][3]={{5,4,4},{1,3,1},{4,4,2},{7,1,3}}
int d[3][4]={0}
int e[3][4]={0}
int f[3][3]={0}
printf("\nA(3x4):\n")
disp(a[0],3,4)//显示矩阵a
printf("\nB(3x4):\n")
disp(b[0],3,4)//显示矩阵b
add(d[0],a[0],b[0],3,4)// 计算矩阵 a + b,并将结果存到d中
printf("\nD(3x4)=A+B:\n")
disp(d[0],3,4)//显示a+b的结果(即d中的数据)
sub(e[0],a[0],b[0],3,4)// 计算矩阵 a - b,并将结果存到e中
printf("\nE(3x4)=A-B:\n")
disp(e[0],3,4)//显示a-b的结果(即e中的数据)
printf("\nA(3x4):\n")
disp(a[0],3,4)// 显示矩阵a
printf("\nC(4x3):\n")
disp(c[0],4,3)//显示矩阵c
mult(f[0],a[0],c[0],3,4,3)//计算矩阵a*c 并将结果存到f中
printf("\nF(3x3)=A*C:\n")
disp(f[0],3,3)//显示a*c的结果(即f中的数据)
}
//函数定义
/*
*****函数功能:两个矩阵进行加法运算 C = A+B
*****参数: m 指向运算结果存放的二维数组(即矩阵) C的首地址
***** m1为矩形A的首地址,m2为矩形B的首地址
***** r 为矩阵的行数, c为矩阵的列数
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j)这个表示将矩阵A的第i行j列的数据 与 矩阵B的第i行j列的数据 相加
然后将结果赋值给矩阵C的第i行j列数据
*(m1+i*c+j) :m1+i*c+j 这个表示指向矩阵A的第i行第j列的数据的指针,则 *(m1+i*c+j) 就表示矩阵A的第i行第j列的数据
*(m2+i*c+j) :m2+i*c+j 这个表示指向矩阵B的第i行第j列的数据的指针,则 *(m2+i*c+j) 就表示矩阵B的第i行第j列的数据
*(m+i*c+j) : m+i*c+j 这个表示指向矩阵C的第i行第j列的数据的指针,则 *(m+i*c+j) 就表示矩阵C的第i行第j列的数据
这里是用指针实现的,
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j)
等价于
c[i][j] = a[i][j] + b[i][j]
*/
void add(int *m,int *m1,int *m2,int r,int c) //
{
int i,j
for(i=0i<ri++)
for(j=0j<cj++)
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j)
}
//注释与上边加法类似
void sub(int *m,int *m1,int *m2,int r,int c) //两个矩阵之间的减法运算
{
int i,j
for(i=0i<ri++)
for(j=0j<cj++)
*(m+i*c+j) = *(m1+i*c+j) - *(m2+i*c+j)
}
/*注释与上边类似,因为矩阵乘法运算公式较为复杂一些,可自行对照矩阵乘法运算公式
如矩阵c = a * b
for(k=0k<pk++)
t += *(m1+i*p+k) * *(m2+k*c+j)//表示将m1的第i行k列的数据 与 m2的第k行j列的数据相乘 ,
//并将p (k的值从0到p) 次结果进行累加
*(m+i*c+j)=t //最后将这个累加的结果赋值给矩阵c的第i行第j列的数据
*/
void mult(int *m,int *m1,int *m2,int r,int p,int c)//两个矩阵之间的乘法运算
{
int i,j,k,t
for(i=0i<ri++)
for(j=0j<cj++)
{
t=0
for(k=0k<pk++)
t += *(m1+i*p+k) * *(m2+k*c+j)
*(m+i*c+j)=t
}
}
//显示打印矩阵中的数据
void disp(int *m,int r,int c)
{
int i,j
for(i=0i<ri++)
{
for(j=0j<cj++)
printf("%6d",*(m+i*c+j))
printf("\n")
}
}
程序不全。给你注释前段:int priority(char operator) //优先权函数,输入参数加减乘除之一
{
switch(operator)
{
case '+': case '-' : return 1 // 如果是加减 返回1
case '*': case '/' : return 2 // 如果是 乘除返回2
default: return 0// 否则 返回0
}
}
int two_result(int operator,int operand1,int operand2) //两数运算结果函数
{
switch(operator) // 运算符
{
case '+':return(operand2+operand1) // 如果是 加,返回两数之和
case '-':return(operand2-operand1) // 如果是 减,返回第二数减第一数之差
case '*':return(operand2*operand1) // 如果是 乘,返回两数之积
case '/':return(operand2/operand1) // 如果是 除,返回两数之商
}
}
void main()
{
char expression[50] // 字符串,存表达式
int position=0 // 位置,初始为0
int op=0 // *** 作
int operand1=0// 数1
int operand2=0// 数2
int evaluate=0 // 计算值
printf("\nPlease input the inorder expression:")//提示输入表达式
gets(expression)//读一行字符串
while(expression[position]!='\0'&&expression[position]!='\n') //如果该字符既不是新行,也不是字符串结束标志 则循环
{
if(is_operator(expression[position])) //判断该字符是不是运算符
{
接下去是栈 *** 作,压入和d出,按优先权找到 *** 作符和 *** 作数,依次计算结果,最后输出表达式 和四则运算结果。
#include调入基本输入输出函数库
int
main()
主函数(整形)
void
sort(int
x[],int
n)
说明
无类型函数sort函数参数为整形数组x和整形变量n
int
i,*p,a[10]
定义整形变量
i
,整形指针变量p
及整形数组
a
p=a
指针p得到数组
a的首地址
printf("please
enter
10个整数:")
显示输入10个整数提示
for(i=0,i<10,i++)
十次循环
输入值
scanf
程序不全缺东西,只能解答到这
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)