C语言问题 有以下程序: #include<stdio.h> int f(int m) { static int n=0; 求详解

作者&投稿:蓟莲 (若有异议请与网页底部的电邮联系)
c语言问题#include <stdio.h> int f() { static int i = 0; int s = 1; s += i; i++; return s; } int main~

主函数的for循环内容执行3次,
开始,a=0,a+=f(),f()里面i=0,s=1,s+=i,s=1;i+=2,i=3,返回s=1,得:a+=1,a=1;
然后,a=1,a+=f(),f()里面,由于 i 是静态变量static,所以i 的值被保存到现在,i=2,s没保存,s=1,s+=i,s=3;i+=2,i=4,返回s=3,得a+=3,a=4;
接着,a=4,a+=f(),f()里面i=4,s=1,s+=i,s=5,i+=2,i=6,返回s=5,得a+=5,a=9;
三次完毕,打印a=9;

这个程序的主要逻辑是,看注释:
#includeint fun(int *p){int s=10;s=s+*p;//指针p地址对应的a + 10,此时a即输入的值return(s);}int main(){int i,a,b,*p;for(i=0;i<3;i++){p=&a;//指针p指向整型变量ascanf("%d",p);//输入数字,赋值给指针p指向的地址,即ab=fun(p);//把指针p即a的地址传给fun函数printf("b=%d
",b);}return 0;}

#include

int f(int m)
{
static int n=0; //静态变量,只初始化一次,第二次为上一次的剩余结果
n+=m;
return n; //第一次n=1 第二次m=1,n+=m=2
}
void main()
{
int n=0;
printf("%d,",f(++n)); //++n,先自增,后调用n,相当于调用f(1)
printf("%d\n",f(n++)); //n++,先调用n,后自增,相当于调用f(1)
}结果为1,2

这题主要考++n和n++的区别
++n:将n的值+1后作为表达式的值
n++:将n的值作为表达式的值后n自加1


周宁县17362403647: C语言问题 以下程序的输出结果是# include main(){ int a=2,c=5; printf("a=%%d,b=%%d\n",a,c); }A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=... -
剑初溴米:[答案] 这是一个优先集的问题 %%这个最终的结果是% 他比%d优先 所以显然a=%%d就等于a=%d. 因此显然选的是D

周宁县17362403647: 一道C语言试题 (11)有以下程序 #include int a=5; void fun(int b) { int a=10; a+=b;printf(“%d”,a); } main() { int c=20; fun(c);a+=c;printf(“%d\n”,a); } -
剑初溴米: 运行结果,输出:3025关键是变量的作用域问题.这个程序有相同名称不同作用域的两个变量:一个在所有函数前面定义的auto全局的a、一个在函数fun中定义的auto局部的a. 在fun中,已经定义了一个a,因此引用的是局部a; 在main中,没有名为a的符号,因此引用的是全局a.

周宁县17362403647: 有个关于C语言的问题程序如下 #include <stdio.h> void main( ) { int i=3; printf("%d,%d\n",++i,i++); } -
剑初溴米: 这里需要注意的是 前缀++,后缀++,以及 函数参数入栈的顺序 前缀++是先自加再取值,后缀++是先取值再自加 函数参数的入栈顺序是从右到左的 比如 int i=1; printf("%d,%d,%d",i++,i++,i++); 显示的结果是3,2,1 但最后 i 的值是4

周宁县17362403647: C语言程序题:输入一个字符,输出其ASCII码,直到输入的字符是Q或q.下面程序怎么改? #inc -
剑初溴米: 不好意思,写错了,应该是while(n!='Q'&&n!='q') 刚才只看了你的语法,没看逻辑

周宁县17362403647: C语言题 有以下程序 #include <stdio.h> #define PT 3.5 ; -
剑初溴米: 答案选C.原因:代入a=1,b=1,PT=3.5后,S(a+b)为(3.5*1+2*1+2)=7.5 .易错点:一般会容易以为答案是A,因为会被S(a+b)误导,认为是a,b相加后再与3.5相乘,即3.5*(1+2)*(1+2)=31.5 ,这个是错误的.所以我们要仔细看S(x)的宏定义,是PT*x*x,而不是PT*(x)*(x).

周宁县17362403647: 急求!有道c语言题目 -
剑初溴米: #includeint main() { int x[] = {10, 20, 30}; int *px = x;\\指向元素首地址 printf("%d,", ++*px);\\*px=10,++*px,用之前加1,所以输出11 printf("%d,", *px);\\还是11 px = x; \\又是令其为首地址,*px=11;printf("%d,", (*px)++);\\先输出11,然后加...

周宁县17362403647: 有如下C 语言程序: #include stdio.h int i; void main() { for (i=1;i=5;i...
剑初溴米: c语言并不检查数组是否越界,如果你越界只是访问了没有被分配的内存,那么可能不会报错,但是不保证绝对不报错.只有在破坏了其它在使用的内存地址,或者写了只有读权限的地址等情况下程序才会报错或崩溃.

周宁县17362403647: c语言的问题:以下程序的运行结果是
剑初溴米: 是 23,记得前面有空格,这很重要

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