十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这个就体现了C的模块化编程思想。正如你说的,main函数里写的是c=multi(a,b);,这只是一个函数名(看到名字就知道是实现一个乘法),你如果去掉main函数外面的int multi(x,y){ int x,y; int z; z=x*y; return(z);},在运行的时候肯定会报错,因为这个函数没有定义。就像我要找一个叫张三的人,首先他要存在,否则是没人搭理我的。
创新互联公司2013年成立,先为汕头等服务建站,汕头等地企业,进行企业商务咨询服务。为汕头企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
‘为什么不直接用main外面这个...再加个scanf来输入,printf来输出,不是也能求出积吗?’,这个是因为C语言语法规定,程序必须从main函数开始执行,所以要通过main函数来调用啊。楼主说的也不是不可行,不过你这么做就违背了模块化编程思想了。这是很小的程序,大家能看得明白,如果是很大的程序的话,纠错都会很困难,所以尽量做到一个函数只实现一个功能。
‘外面的代码和main里的代码有什么关系吗?’,就是调用和被调用的关系
严格来讲,你的代码是错误的,用int的b接收double型的a的计算结果,是不可以的,即使结果是整数。
结果当然也会出现误差。正确的应该是:
double a=10.3845;
double b;
b=10000*a;
printf("%lf",b);
补充:把上面 printf("%lf",b);改为printf("%.0lf",b); 就能使后面无小数。
#include "stdio.h"
#include "conio.h" //导入getch();函数
main(){
printf("%d",step());
getch();
}
int step(){
int i,n,j;
i=1;
j=1;
scanf ("%d", n);
for (i=1;i=n;i++){
j = j*i;
}
return j;
}
大数乘法基本上是乘法竖式笔算的代码化。
基本功能有3个
1. 大数的数组表示。
2. 大数乘以小数,得到大数。
3. 大数加大数,得到大数。
对于1,其实就是int数组的每个元素存储若干位。比如每个元素保存4个十进制位。[0]存储个十百千,[1]存储万、十万、百万、千万,诸如此类。一个数组保存一个大数。因此需要一个额外的int变量记录当前数组用了多少个元素(类似于字符串长度)。
对于2,“小数”指的是能用一个int保存的数。注意这里只限4个二进制位(和1里提到的位数一致)。
比如1 2345 6789这个数字,[0]保存6789,[1]保存2345,[2]保存1。长度3。
这个大数乘以小数,比如9999,过程就是[0] * 9999,即6789 * 9999 = 6788 3211,积的低四位(%10000)3211保存到积(大数)的[0],剩下6788的进位到[1]。
然后2345 * 9999 = 2344 7655,加上刚才进位上来的6788得到2345 4443,其中4443保存到积(大数)的[1]中,2345进位到[2]。
以此类推。
对于3,基本只要一个for,对位相加然后注意进位就行了。
大数乘以大数,其实就是第一个大数先乘以第二个大数的[0](大数乘小数,上面的2),得到一个大数A0;然后第一个大数乘以第二个大数的[1],又得到一个大数A1……最后再将A0、A1、……加起来(也就是大数加法,上面的3)。加的时候要注意,A1的[0]要和A0的[1]对齐,A2的[0]要和A1的[1]和A0的[2]对齐……这个也和我们竖式笔算一样。
PS:上面的算法基本上是“10000进制数”的计算方式。如果数组的每个元素只保存1个十进制位,那就是10进制数。之所以用10000进制,纯粹是程序员感觉上好一些。最有效的利用,是每个int保存2的15次方,也就是32768进制。要注意到,如果用10进制计算的话,程序的计算耗时会变成10000进制的16倍,也就是效率变成1/16。
PS2:用int数组的话,位数最多只能是4位。因为5位数相乘可能得到11位数,超出了int表示范围。
在C语言中,没有标准库函数计算乘积。
我们可以自定义计算乘积的函数,函数名符合标识符命名规则即可。“乘积”的英文是“ product”,常用于乘法的标识符通常使用“Multi”这个单词。
C语言标识符命名规则:
标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to。
不能把C语言关键字作为用户标识符,例如if ,for, while等.
标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长)。
标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写。
标识符命名应做到“见名知意”,例如,长度(外语:length),求和、总计(外语:sum),圆周率(外语:pi)。