求解两道C语言程序设计的题目。
程序阅读题
1.写出下面程序的运行结果。
func (int a,int b)
{ static int m=0,i=2;
i+=m+1;
m=i+a+b;
return (m);
}
main ( )
{ int k=4,m=1,p1,p2;
p1=func(k,m) ; p2=func(k,m) ;
printf(“%d,%d\n”,p1,p2) ;
}
程序判断题
1.下面add函数求两个参数的和;判断下面程序的正误,如果错误请改正过来。
void add(int a,int b)
{ int c ;
c = a + b;
return (c) ;
}
第一题: 输出是8,17
在func函数.static int m=0,i=2; 在编译时就将m 和i定义成静态全局变量.
所以每次进入func函数并不会将m 和 i重新赋值. 所以其他也就很容易算出来了.
调用func(),传递4和1作为实参.第一次调用m=0,i=2; i+=m+1; i就等于3;
m=i+a+b; m就等于3+4+1. m=8; 将m的值返回并赋值给p1. 所以p1的值是8;
第二次调用. 由于m 和i是静态全局变量. 所以第二次进入func函数时. 并不会在执行static int m=0,i=2;
m和i的值仍然为上一次的结果, 所以m=8. i=3; 执行i+=m+1; i就等于12;
执行m=i+a+b; m就等于17;
所以最终输出是8,17
第二题:
int add(int a,int b) //由于函数返回一个整形变量. 所以返回类型要声明为int.
{ int c ;
c = a + b;
return (c) ;
}