C语言是国际上广泛使用的一种计算机语言,它适合作为系统描述语言,既可以用来编写系统软件,又可以用来编写应用软件。C语言从发布之日起就得到了广泛传播,为大多数程序员所接受,C语言使用率也一直在编程语言排行榜中稳居前三位,因此学习C语言前景也是非常可观的。
一个程序通常包含算法、数据结构、程序设计方法及语言工具和环境4个方面,其中,算法是核心,算法就是解决“做什么”和“如何做”的问题。算法与程序设计以及数据结构密切相关,是解决一个问题的完整的步骤描述,是解决问题的策略、规则、方法,是求解特定问题的一组有限的 *** 作序列。比如建造一栋楼之前,要先在图纸上绘出其构造图,算法就是在编写程序前先整理出基本思路。算法的描述形式有很多种,如传统流程图、结构化流程图及计算机程序语言等。
一个程序应该包括对数据的描述和对数据的 *** 作。其中,对数据的描述是指在程序中要指定数据结构,即数据的类型和数据的组织形式;对数据的 *** 作也就是对数据进行 *** 作的步骤,即算法。 著名的计算机科学家沃思(Nikiklaus Wirth)曾经提出过一个公式: 算法+数据结构=程序 随着时代的发展以及计算机技术的进步,这个公式已经不够准确了。
实际上,一个程序还应该包括采用一种程序设计方法进行程序设计并用计算机语言描述,经常采用的是结构化的程序设计方法。
算法一般可以分为两大类,一类是解决科学与工程计算方面的算法,如求解数值积分、微分方程、线性方程组和代数方程等,这类算法称为数值运算算法;另一类是解决数据处理方面问题的算法,称为非数值运算算法,如各种各样的查找算法、排序算法以及遍历算法等。目前,计算机在非数值运算方面的应用远远超过了在数值运算方面的应用。
程序设计方法:1.从问题的全局出发,写出一个概括性的抽象的描述。
2.定义变量,选取函数,确定算法。算法这个东西不好说,遇到的问题多了,自然就会形成自己一整套的算法。
3.按照解决问题的顺序把语句和函数在main()里面堆砌起来。
#include<stdio.h>
void
input_data(int
*l,int
*r,int
data[100][100])
{
int
i,j,k
printf("输入矩阵行数:")
scanf("%d",l)
printf("输入矩阵列数:")
scanf("%d",r)
printf("按行输入数据,数据间用空格间隔:\n")
for(i=0i<*li++)
for(j=0j<*rj++)
scanf("%d",&data[i][j])
}
int
add_subtra(int
m1[100][100],int
l1,int
r1,
int
m2[100][100],int
l2,int
r2,char
m,int
rm[100][100])
{
int
i,j
if(l1!=l2
||
r1!=r2)
{
printf("矩阵数据错误1.\n")
return
}
if(m=='+')
for(i=0i<l1i++)
for(j=0j<r1j++)
rm[i][j]=m1[i][j]+m2[i][j]
else
for(i=0i<l1i++)
for(j=0j<r1j++)
rm[i][j]=m1[i][j]-m2[i][j]
}
int
mul(int
m1[100][100],int
l1,int
r1,
int
m2[100][100],int
l2,int
r2,int
m[100][100])
{
int
i,j,k
if(l1!=r2
)
{
printf("矩阵数据错误2.\n")
return
}
for(i=0i<l1i++)
for(j=0j<r2j++)
{
m[i][j]=0
for(k=0k<r1k++)
m[i][j]+=m1[i][k]*m2[k][j]
}
}
int
output(int
m[100][100],int
l,int
r)
{
int
i,j
for(i=0i<li++)
{
for(j=0j<rj++)
printf("%3d
",m[i][j])
printf("\n")
}
}
int
main()
{
int
d1[100][100],d2[100][100],d[100][100]
int
l1,r1,l2,r2
int
i,j,k
char
mark[2]
printf("输入第一个矩阵数据:\n")
input_data(&l1,&r1,d1)
printf("输入的第一个矩阵:\n")
output(d1,l1,r1)
printf("输入第二个矩阵数据:\n")
input_data(&l2,&r2,d2)
printf("输入的第二个矩阵:\n")
output(d2,l2,r2)
printf("指定运算符(+/-/*):")
scanf("%s",mark)
while(mark[0]!='+'
&&
mark[0]!='-'
&&
mark[0]!='*')
{
printf("符号错误请重新输入(+/-/*):")
scanf("%s",mark)
}
switch(mark[0])
{
case
'+':
case
'-':
add_subtra(d1,l1,r1,d2,l2,r2,mark[0],d)
break
case
'*':
mul(d1,l1,r1,d2,l2,r2,d)
break
}
//output(d1,l1,r1)
//output(d2,l2,r2)
printf("运算:%c,计算结果为:\n",mark[0])
output(d,l1,r2)
system("pause")
}
两个运算矩阵可以是大小不同的,
输出结果由被乘数矩阵的行和乘数矩阵的列决定,
你要求的输出格式比较烦,没时间不够啦!有时间再玩吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)