c语言的函数问题?
int 和 void 的区别:
int 返回值,void 不返回值。当需要返回值给主函数时,用int;当不需要返回值给主函数时,用void。
至于括号里的内容:
int n是接收主函数的实参作为形参,就是函数中要用到这个形参。如果不需要从主函数中接收实参,那么就用void。
至于返回值:
当函数返回值给主函数时,主函数需要调用函数并赋值给某一个变量。
例如:
函数int fun() 返回值:return (a);
主函数调用函数fun()
p=fun(int n);
这时,p就接收了函数返回的a的值。
printf("%d",a);
就可以将a的值显示在屏幕上。
程序没有问题。
这是个数组反序函数。函数名 inv,有2个形式参数,int x[] 是一个数组 , int n 是该数组元素个数。void 型函数,无return 语句。
for(i=0;i<n/2;i++) 循环语句,循环到 数组长度的 一半。 第 i 个元素 与 j=n-1-i;个元素交换 ,即 第一个元素与最后一个元素交换,第二个元素与倒数第2个元素交换,。。。循环到 数组长度的 一半时,就完成了 反序。反序结果由参数1带回去。
mian() 函数中的 反序函数 调用 语句inv(a,5); 这里的 a 是 main() 里的
局部量 a[5]={3,7,9,11,0}, 该数组元素个数是 5。这个 a, 与全局量 int a=100; 没有关系。
for(i=0;i<5;i++) printf("%d",a[i]); 输出反序后的结果。
两个表达式分别用两个递归函数来实现。
所以,题目中两个表达式的描述,就是告诉你不同情况下的函数返回值。
之后根据题意,主函数通过函数指针调用,函数指针就是指向函数的指针。把两个函数分别赋值给指针,再通过指针调用函数。
下面是代码:
#include <stdio.h>
int fn1(int n);
int fn2(int n);
int main()
{
int k=3,n=-1,(*p)(int n);
while(n<0)
printf("请输入n的值(大于等于0):"),scanf("%d",&n);
while(k!=1 && k!=2)
printf("请选择表达式(输入1或者2):"),scanf("%d",&k);
switch(k)
{
case 1:p=fn1;break;
case 2:p=fn2;break;
}
printf("通过表示式%d计算得第N项值为:%d
",k,p(n));
return 0;
}
int fn1(int n)
{
if(n==0) return 1;
if(n==1) return 2;
return 2*fn1(n-1)+fn1(n-2);
}
int fn2(int n)
{
if(n==0) return 0;
if(n==1) return 1;
return fn2(n-1)+2*fn2(n-2);
}
可以不写,但是要把你的自定义函数写在主函数前面才行。
就是说把Z的值返回到主函数,本例中就是把Z的值返回给C。
不能不写的,否则当编译器编译到你main函数时,由于还没编译到下面的max定义。
所以它找不到max到底是什么符号。
一般申明都写在函数后面的,否则,出了main外,其他函数看不到max的申明的。
return(z)有什么不了解的吗
return
(z)就是max返回给调用者的,c
=
max(a,b)表示c接收了max的返回值z,这里相当于c=z
{
float
y;
if(z==0)
y=1;
else
y=sin(z)/z
;
return(y);
}
在其中Y为float型,而z为double型,运算过程中发生强制转换
因为你这样处理的话,(2*i-1)/(2*n)这个会变成整形处理,所以会是0。如果你想输出的是f(0.5)要强制类型转换
#include<stdio.h>
#include<math.h>
void
main()
{
int
i,n;double
sum;
double
f(double
z);
sum=0;
n=1;for(i=1;i<=n;i++)
sum+=f((2*(double)i-1)/(2*(double)n));
printf("%e",sum);
}
double
f(double
z)
{
float
y;
if(z==0)
y=1;
else
y=sin(z)/z
;
return(y);
}
这样就能输出f(0.5)了
关于C语言中IF函数的问题
int main(void){int a=2,b=-1,c=2;if (a<b)\/\/第1个ifif (b<0) \/\/第2个ifc = 0;else c++;printf("%d\\n",c); \/\/输出结果为: 2return 0;}\/**分析如下:你的理解是不对的,你可能还没有弄明白else与if的匹配规则:else总是与其最近的没有被else匹配的if相匹配,有点绕,...
c语言函数times()问题
请问,这个times()函数怎么用,它是统计一个进程所花费的cpu时间等数据的。比如我在c程序里,用system调用一个shell的命令,如何用times()这个函数统计这个shell命令花费的时间呢?... 请问,这个times()函数怎么用,它是统计一个进程所花费的cpu时间等数据的。比如我在c程序里,用system调用一个shell的命令,如何用times...
C语言问题,一个函数中有多个return时,是不是只要遇到第一个return,后面...
不会执行return 2 在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行,也就是说跳出函数的执行,回到原来的地方继续执行下去。但是如果是在主函数中碰到return语句,那么整个程序就会停止,退出程序的执行。
C语言问题。编写一个函数:int isprime(int n)用于判断一个整数是否为...
int isPrime(int num) { int divisor = 3;int testLimit = num;if (num < 2)return 0;if ( num < 4 )return 1;if (num % 2 == 0)return 0;while ( testLimit >= divisor ){ if ( num % divisor == 0 )return 0;testLimit = num \/ divisor;divisor += 2;} return 1;} ...
关于C语言的二维数组作为函数参数的问题?
所谓二维数组,实际上是指向数组的指针,比如:int n=2,m=3;int arr[n][m];实际上相当于:int n=2,m=3;int (*arr)[m];所以,传递二维数组作为参数,实际上就是传递了一个指针。将形参的类型定义成int*,再在函数内部转换回指向数组的指针就行了,比如:void f(int *p,int row,int ...
提问几个C语言的问题,关于函数概念的
2、这里涉及到了强制类型转换,因为在fun2里的return 用了(int)把a+b的结果强制转化成了int型变量,例如:double a = 1.6; 执行了(int)a;之后,a的值就为1了,小数部分被省略。3、fun(32,32)正确,而fun("abchina",32.0)不正确,在函数的形参里面定义的是一个char型和一个float型...
c语言自定义函数问题,自定义函数中void f(int)和 void f(int n)一...
int)是一样的,甚至你可以在声明的时候int f(int n);在定义的时候int f(int a){ return a;} \/\/即定义函数的参数名与声明时不一样都是可以的,但是类型必须一致,所以int f(char n){ return 1; } 是不行的,因为int和char不一样,这是c语言的规则,在c++里面可以重载你以后才会学吧 ...
关于c语言中数组作为函数参数的函数之间调用问题
1、新建一个数组作为参数项目,如图所示:2、添加一个array.c文件,如图所示:3、包含stdio.h和stdlib.h头文件,如图所示:4、输入main函数主体及返回值,如图所示:5、定义一个数组arr,如图所示:6、定义一个function函数,如图所示:7、将数组作为参数传递给function函数,如图所示:8、运行程序,输出...
关于C语言的sleep函数的问题,怎么解决
有些编译环境下不支持 sleep 函数,可以换用 _sleep( unsigned time ) 函数,time 单位为 ms 。如果都不行,可以使用 for(int i=0;i<T ; i++); 作为延时器,T 根据电脑速度确定,一般在 1000000 以上 。
C语言中用函数做函数的形式参数的问题
给你举个例子吧,这样就容易理解得多。例子:设计一个函数func();在调用它时每次实现不同的函数功能,输入两个参数a和b,第一次调用func()时找出a和b中的较大者,第二次调用找出较小者,第三次调用求a和b之和。说明:格式 (*p)()表示定义一个指向函数的指针变量p,在c语言中这个格式是固定的...
臾拜巴氯: 两个表达式分别用两个递归函数来实现. 所以,题目中两个表达式的描述,就是告诉你不同情况下的函数返回值. 之后根据题意,主函数通过函数指针调用,函数指针就是指向函数的指针.把两个函数分别赋值给指针,再通过指针调用函数. ...
榕江县13297498802: c语言中函数返回值的问题 - ?
臾拜巴氯: 楼主,你想知道什么?真没搞懂...比如int testFun();这么一个函数是返回int型的函数.也即函数结束要有一个return空格、值的语句.比如void testFun2();这么一个函数不返回任何类型(void解释为虚无的).不需要return语句,当然,加了也不会错,不过return后不接任何值,后面加一个分号就算语句结束.任何函数执行return语句就退出该函数.
榕江县13297498802: C语言的加密函数问题. - ?
臾拜巴氯: char* encode(const char* str) { int i, s; s = 0; for(i = 0; str[i]; i++) s += str[i] * str[i]; for(i = 0; str[i]; i++) { if(str[i] >= 'a' && str[i] <= 'z') { str[i] = (str[i] + s) % 128; } } return str; } 不能准确地恢复
榕江县13297498802: C语言 函数定义概念问题 - ?
臾拜巴氯: 可以,声明函数时可以不需要形参名称,只要形参类型.注意这叫函数声明,不叫定义.在大括号中给出函数具体实现的才叫函数定义.定义函数时形参名不能省略.
榕江县13297498802: C语言函数声明的问题?
臾拜巴氯: 我也来 说几句.. 标准编译器 对函数的调用 都要 先申明 才能 调用 (生产的时候就这样设定的)..我推荐试用 大点的 vs2005,vc2000. 小点的 Dev-cpp ,Turboc 3.0 (2.0 不支持鼠标有点 麻烦) 这里 就涉及: 申明和定义之间的区别. 申明-- 不...
榕江县13297498802: 一个C语言定义函数的简单问题 - ?
臾拜巴氯: 这不能算是定义一种函数,只能说是定义了一个宏 在编译时,product(x)就会被替换成右边的表达式(x*x) 例如:int main() { int x; x=product(5); cout<<x<<endl; return 0; } 在编译时,就会被自动换成 int main() { int x; x=(5*5); cout<<x<<endl; return 0; } 其实理解成一个函数倒也可以,至少容易理解,不过编译过程中是这么进行的,编译系统不会把他当成一个函数,也不会给他分配内存空间.祝你学习愉快
榕江县13297498802: c语言printf函数的问题 - ?
臾拜巴氯: 这个问题开始我也觉得很奇怪,现在终于明白了,估计是这样的 printf是从右到左的输出顺序,并且是最终一次性输出,即:printf("%d,%d,%d,%d\n",a=b=c,a=(b==c),a==(b=c),a==(b==c)); 先判断a==(b==c) ,b不等于c a不等于0 所以判断结果...
榕江县13297498802: C语言关于函数的问题?
臾拜巴氯: C/C++语言中,默认情况下,函数时可以从文件外部调用的.因此,函数存储类型 extern 可以省略,表示是外部函数.static 用来表示函数存储类型时,表示内部函数,不能从外部文件调用.
榕江县13297498802: c语言中有关函数的说法以下正确的是? - ?
臾拜巴氯: 标准ANSI/ISO C不允许函数的嵌套定义.某些方言如GNU C允许函数的嵌套定义,并有限地支持闭包.学习C语言应以标准C为准,所以,C正确.fun((2,3), (4,5+6,7))含有2个参数,每个参数均为一个逗号表达式,值分别为3和7,相当于fun(3, 7).所以,B正确.
榕江县13297498802: C语言函数的小问题?
臾拜巴氯: 是的,它会一直占用系统内存,就是栈那一段内存,并且递归层次越深,占的内存就越大,最后导致栈溢出.