请教三道C语言题目

来源:百度知道 编辑:UC知道 时间:2024/06/06 06:13:06
一、
程序的输出结果是什么
main()
{ int a[]={1,2,3,4},i,x=0;
for(i=0;i<4;i++){sub(a,&x);printf("%d",x);}
printf("\n");
}
sub(int*s,int*y)
{static int t=3;
*y=s[t];t--;}
这道题的考察重点应该在那个static,它定义了一个局部静态变量,所以我觉得每次进入sub函数时t的值都应该是3啊?请告诉我这道题的详细步骤
二、
以下程序的输出结果是
f(int a)
{ intb=0;
static int c=3;
a=c++,b++;
return(a);
}
main()
{ int a=2,i,k;
for(i=0;i<2;i++) k=f(a++);
prontf("%d\n",k);
}这道题跟我算出来的结果完全不一样,问题可能还在那个static,请给我详细步骤
三、有以下程序
main(int argc,char*argv[])
{ int n,i=0;
while(argv[1][i]!="\0") 这里0上面的双引号应该是单引号
{n=fun();i++}
prontf("%d\n",n*argc);
}
int fun()
{ static int s=0;
s+=1;returns;
}
假设程序经编译、连接后生成可执行文件exam.exe,若输入以下命令行exam 123<回车> 则运行结果为
也是要步骤
第三题还是不大懂 请说的详细点

(1)结果为4321
原因:t被定义为static,所以没次当它的值改变时,都会被记录而不会被释放。总共调用sub()函数4次:
第一次:调用前:x=0,t=3;调用后:x=4,t=2;
第二次:调用前:x=4,t=2;调用后:x=3,t=1;
第三次:调用前:x=3,t=1;调用后:x=2,t=0;
第四次:调用前:x=2,t=0;调用后:x=1,t=-1;
(2)结果为4
原因:第一次进入f()函数后,a等于3,c等于4,b等于1;
第二次进入f()函数后,a等于4,c等于5,b等于1;
(3)结果6
原因:因为定义了s为static类型,所以它的改变是被记录的,总共3次调用fun()函数,最后s的值为3,也就是n的值,然后n*argc的结果就是6了

一、4321
说明:t是静态变量,全局有效,t--后,遍历整个数组a。理解static
二、4
说明:不知道是不是你的for的{}没写还是怎么,你的代码结果最终是4,第一遍进入是3,还是static的问题。
三、6
和上一个同样的道理。3*2=6

(1) 4321
:t被定义为static,全局有效所以没次当它的值改变时,都会被记录而不会被释放
(2) 4
:第一次进入f()函数后,a等于3,c等于4,b等于1;
第二次进入f()函数后,a等于4,c等于5,b等于1;
(3) 6
:同上