扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#include stdio.h
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的合江网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
//商不能超过最大的long型数,小数部分最后一位四舍五入太难了,希望能给你参考
void func(double m,double n,double k){
long mi,i,ki;
int s;
mi=(long)(m/n);
m=m-mi*n;
ki=(long)k;
printf("%lf/%lf=%ld.",m,n,mi);
for(i=1;i=ki;i++){
m=m*10;
s=(int)(m/n);
printf("%d",s);
m=m-s*n;
}
}
int main(){
double m,n,k;
printf("请输入三个正数:");
while(1){
scanf("%lf%lf%lf",m,n,k);
if (m0 n0 k0) break;
printf("不能有负数出现\n请重新输入三个正数:");
}
func(m,n,k);
}
第五行输出,是6 11,21
第六行输出5,6,11
第七行输出8,21,42
你的fun函数没有声明或(放在主函数前面),是错误的
第六行a=5,b=6,毫无疑问,c经过fun函数加了10为11
第七行,第一次调用fun后a=6,c=11,b=21
因为static声明,值不丢失,第二次调用后变为8,21,42
首先给出该程序的输出结果:48
func()函数中的m为静态变量,意味着m在程序开始时被初始化一次,并且在程序结束前一直存在。即不会在每次调用func()函数时,都会创建新的m。
第一次调用func(k),m的初始值为0,m+=4,m的值为4,输出结果为4.
func(k)运行结束后m并没有被销毁。
第二次调用func(k),m的值为4,m+=4,m的值为8,输出结果为8
第一题的知识点是,逗号表达式,逗号表达式的值是最右边的那个值,这个要记住了。比如说,z=(2,3,4);z是被赋予4的。那又比如说,z=((2,3),4);z还是被赋予4的。顺便说一下,因为逗号运算符是C中优先级最低的一个,所以括号一定要写的。比如说z=2,3,4;这样的话z是被赋值为2,而3和4在编译的时候就会出现warnings,说它们没有no efforts。
所以说r=func ((x--,y++,x+y),z--);实际上是r=func ((6,7,13),8);即是r=func (13,8); 所以答案应该是21.
第二题的知识点是实参传递。我想说,如果这道题有正确的编译结果的话就是奇异的。因为,书上说得很明确,实参在进行函数调用的时候,必须有确定的值,这样才能把这些值传递给形参。所以这道题编译时不成功的,因为c的值不确定。并且,这里并没有return语句,所以就算c能够算出来也输出不了。(这是因为这里是传值,形参的改变时改变不了实参的。)如果要成功,我认为要这么写。#include stdio.h
int fun(int a,int b,int c)
{c=a*b;
return c;}
main()
{int c;
c=fun (2,3);printf("%d\n",c);
} 结果为6。
第三题,首先,主函数i=0时,i=0传递给子函数n,这时s=1.0不变;接着,主函数i=1时,i=1传递给子函数n,这时s=1.0+1.0+1.0/1=3.0;接着,主函数i=2时,i=2传递给子函数n,这时s=3.0+1.0+1.0/1+1.0/2=5.5,输出的时候输出%f,没有精度控制的话就默认保留6到7位数字。 结果是5.500000
第四题,嗯,我觉得你应该先自己想想,unsigned是无符号整数的意思,就是没有负数的。k*=num%10是k=k*(num%10),(num%10)是取余数的意思。do-while语句,while(num)num为0时候才跳出循环。首先,实参26传递过去,num为26,k=1*(26%10)=1*6=6;然后num=26/10=2.6,自动取2.(因为num为unsigned型);然后循环,继续,k=6*(2%10)=12;num=2/10=0.5,自动取0;这时候跳出循环,返回值为k=12,即是主函数显示12. 结果是12
#include stdio.h
int main()
{
int k = 4, m = 1, p;
p = func (k, m);
printf("p = %d\n" , p);
p = func(k, m);
printf("p = %d\n" , p);
return 0;
}
int func(int a, int b)
{
static int m,i=2;
printf("m = %d, i = %d\n" , m, i);
i += m+1;
printf("i = %d," ,i);
m = i+a+b;
printf("m = %d\n" ,m);
return(m);
}
先说两件事
这两张图片治好了我的颈椎病
static int m, i=2;
这里面m的值没有初始化, 这应该是不应该的, 我敢说题有问题
根据上面的打印, 可以看出我的编译器将m的初始值定为0
为了区别两个m, 下面将main()里面定义的m写为大写M
第一次func, 输入值a = k = 4, b = M = 1
i = i + m + 1 = 2 + 0 + 1 = 3
m = i + a + b = 3 + 4 + 1 = 8
第一次func, 输入值a = k = 4, b = M = 1
i = i + m + 1 = 3 + 8 + 1 = 12
m = i + a + b = 12 + 4 + 1 = 17
这题主要考的就是全局变量局部变量区别, 静态变量与非静态变量的区别
在func里面定义的m作用域就在func函数里面,
在main()函数里面出现相同的变量m作用域是在main()函数里, 有区别
static类型的静态变量有个特点, 就是只初始化一次
第一次调用func() 将m, i 的数值初始化了,
并且经过运算最总 m =8, i = 3
第二次调用func()的时候m, i的数值不再次初始化, 依然是以前的数值 8, 3
该函数参数传递属于值传递;
对于这个程序所谓值传递就是在func函数把x的地址上的值拷贝过去,函数只是对临时分配的栈中内容进行操作,此时x内存地址上的值是8,所以调用到func时就是8+8=16了;
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流