C语言题目int a; int fun(int b){static int c=3; return((++a)+(++b)+(++c));} main(){int i,a=2; for(i

作者&投稿:琦潘 (若有异议请与网页底部的电邮联系)
#include <stdio.h> int fun(int a) { int b=0; static int c=3; a=(c++,b++); return (a); }~

a=(c++,b++);由于(c++,b++)中用了逗号,逗号作为运算符时返回最后的表达式值,所以这句相当于a=b++,由于++在后,所以这又相当于a=b;所以返回0

当i=0时
print i i=0
调用fun(5)
{int b=0; b=0
static int c=3; c=3
b++; b=1
c++; c=4
return(a+b+c); 5+1+4=10

当i=1时
print i i=1
调用fun(5)
{int b=0; b=0
static int c=3; 注意这里,上面已声明为静态整形,所以这里不再处理了,c=4
b++; b=1
c++; c=5
return(a+b+c); 5+1+5=11

当i=2时
print i i=2
调用fun(5)
{int b=0; b=0
static int c=3; 注意这里,上面已声明为静态整形,所以这里不再处理了,c=5
b++; b=1
c++; c=6
return(a+b+c); 5+1+6=12

所以答案是
0 10
1 11
2 12

a是全局变量,
b是局部变量,
c是局部静态变量。

在执行return((++a)+(++b)+(++c));之前,b值每次都是2,a和c每次都会自增改变自己的值。

第一次
a=0(a是全局变量,自动初始化为0),b=2(实参是2,所以b为2),c=3.
return((++a)+(++b)+(++c)) =1+3+4=8
执行完后
a=1,b=3,c=4
第二次
a=1,b=2(实参又把b的值变为2),c=4
((++a)+(++b)+(++c))=2+3+5=10

首先fun函数里面的a是全局变量a,而不是main函数里定义的int a=2,所以其初值为0(全局变量默认初始化为0)。

第一次传入fun函数中,a=0,b=2,c=3,故结果为(0+1)+(2+1)+(3+1)=8,
且此时a=1,c=4,第二次再进入fun计算时结果为(1+1)+(2+1)+(4+1)=10。
这里b=2没变是因为fun函数是传值调用,不会改变main中定义的a的值,
而static int c只在第一次时初始化为3,后面沿用之前的值不再初始化。

  • 当i=0时

    初始:a=0,b=2 ,c=3

    运算后:a=1,b=3,c=4

    结果:1+3+4=8

  • 当i=1时

    初始:a=1,b=2 ,c=4 (因为a是全局变量)

    运算后:a=2,b=3,c=5

    结果:2+3+5=10

需要明确的是,全局变量a与main中的a不是一个变量。

函数fun中使用的a是全局变量。

main中的a为局部变量。



第一次fun(a)这里的a是main局部变量是2

fun里面 ++a的a是全局变量int a产生的未初始化默认0
++a=1 ++b=3 ++c=4 =8
第二次fun(a) 仍然是fun(2)
fun里面 a全局现在a=1 c是静态变量保存在静态区 现在c=4

++a=2 ++b=3 ++c=5 =10
另外如果在main想用全局的a应该是::a

for循环两次,输出两次结果,输出fun函数返回值,c为静态值不会改变,第一次a的值为2,b为3,c的值为3,第二次a的值为3,b的值为4,c的值还为3.


莫力达瓦达斡尔族自治旗14798336910: C语言题目int a; int fun(int b){static int c=3; return((++a)+(++b)+(++c));} main(){int i,a=2; for(i -
惠安唐必: 首先fun函数里面的a是全局变量a,而不是main函数里定义的int a=2,所以其初值为0(全局变量默认初始化为0).第一次传入fun函数中,a=0,b=2,c=3,故结果为(0+1)+(2+1)+(3+1)=8, 且此时a=1,c=4,第二次再进入fun计算时结果为(1+1)+(2+1)+(4+1)=10. 这里b=2没变是因为fun函数是传值调用,不会改变main中定义的a的值, 而static int c只在第一次时初始化为3,后面沿用之前的值不再初始化.

莫力达瓦达斡尔族自治旗14798336910: 编写函数 int f(int a[]),返回调用函数中的实参对应的数组中的最小元素值 用C语言.大侠指导下. -
惠安唐必: int f(int a[], int len) { int i, min=0; for( i=1; i if(a[i]return a[min]; } 必须要有两个参数,要不然不知道数组有多长,len为数组长度.

莫力达瓦达斡尔族自治旗14798336910: C语言编程,int f(int)是什么意思? -
惠安唐必: 这个应该是在声明一个函数吧,返回类型为 int 函数名为 f,函数的参数为int 类型.应该在代码中还有一段是对这个函数的定义,比如 int f(int a) {…… }

莫力达瓦达斡尔族自治旗14798336910: 求教C语言int (*f)()是什么?
惠安唐必: int (*f)() //定义了一个指针变量f,他是指向一个返回值是整型变量的函数.叫做指向函数的指针变量.int add(int a,int b) {return (a+b);} // 定义了一个函数add,函数有两个整型的参数.返回值类型也是整型.功能是计算两个整数相加.大括号是...

莫力达瓦达斡尔族自治旗14798336910: C语言 int f(int a[],int n) -
惠安唐必: aa+2 变成了 aa[2],这是指针移动,然后把aa[2],4传给函数,函数里面实现自调用,当N>1是一次调用,函数中的a[0]就是主函数传来的aa[2],在调用函数中,aa[2]=aa[2]+aa[3],N变成了3,在自调用一次,aa[3=aa[3]+aa[4],n变成了2,再循环一次,aa[4]=aa[4]+aa[5],此时,注意,此时N变成了1,调用函数中,N不大于1时,return a[0];所以aa[5]=aa[5],,返回主函数,最后输出为aa[2]+aa[3]+aa[4]+aa[5]=3+4+5+6=18.你可能不明白调用函数中的a[0] 对应aa[2],其实这是一种实数给参数的传递关系,看看函数调用就明白了.

莫力达瓦达斡尔族自治旗14798336910: C语言求最大公因数和最小公倍数的N种方法? -
惠安唐必: (A) #include<stdio.h> int f(int a,int b,int n) {if(a%n+b%n) n=f(a,b,n-1); return n; } void main() {int a,b,t,n,m; printf("input a,b:\n"); scanf("%d%d",&a,&b); n=(a>b)?b:a; m=a*b/f(a,b,n); printf("zui da gong yue shu:%d\nzui xiao gong bei shu:%d\n",...

莫力达瓦达斡尔族自治旗14798336910: 急!!!请大家帮小弟看一下这个C程序题. -
惠安唐必: #include int a=1; //这里的a是全局变量,谁都可以访问它int f(int c) { static int a=2; //这里的a是静态变量,也是全局变量,但只有本函...

莫力达瓦达斡尔族自治旗14798336910: 计算机C语言题目求解 -
惠安唐必: int f(int a[],int n) { if(n>1) return a[0]+f(&a[1],n-1); //第一次:因为n=3>1;所以走这个分支;a[0] = 1; //第二次: n=2>1 再看函数f的第二个参数为&a[1],表示指向的数组是从第一个开始的(区别与第0个);那么走这个分支时的a[0] = 2; else ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网