解释一下#include<stdio.h> int f(int n); main() {int a=3,s; s=f(a);s=s+=(a);printf("%d\n",s); } f(in

如题所述

main()
{ char a[]="369",*p=a;
int s=0,t=1;
while(*++p) t*=10; //这里的while(*++p)是简写形式,它等价于while(*++p!=0)又等价于
while(*++p!='\0')。因为"*"和"++"的优先级相同,而且是自由向左结合,
p先加1再指向a数组,所以在这条语句中刚开始p是指向a[1]的也就是6.
所以当while循环结束时,t=100,而不是1000,p指向a[3]也就是'\0'//
p--; //p--使得p又重新指向a数组的a[2]=9//
while(t) //while(t)也是一个简写的形式,相当于while(t!=0)//
{ s+=(*p-'0')*t; //注意这句话的理解,你的疑惑就是在这里了。下面我来帮你解释清楚//
首先要明白字符型数据的相加减实质上是字符在ASCLL码表上对应的ASCLL
值的相加减,而不是简单的直接拿字符来做相加减运算。s+=(*p-'0')*t;
这句话开始p是指向a[2],a[2]存储的是字符'9'。'9'对应的ASCLL值是57。
字符'0'对应的ASCLL值是48。
所以s+=(*p-'0')*t=s+(*p-'0')*t=0+(57-48)*1000=900。
任意一个字符型数据的数字与字符'0'相减后的结果就是这个数字的本身了。
也就是说字符'9'-'0'是等于 int型的9.也就是对char做了一个转换。(自己理解)
p--;
t/=10;
}
printf("%d\n",s); // 所以输出的s当然就是963了//
}
需要更正的是t的值是100而不是1000,楼上的回答不正确
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-16
因为是值传递 S的值不会因为用f(a)函数而改变,默认为0;
a=3;s=s+=a;意思是s=s+a;最后打印出s的值为多少······但是你这题没有写完吧??f(int a)的定义都没有看见 只有声明追问

恩,是的。但是不知道是怎么运行的。可以帮忙解析一下吗?
#include
int f(int n);
main()
{int a=3,s;
s=f(a);s=s+=(a);printf("%d\n",s);
}
f(int n)
{static int a=1;
n+=a++;
return n;
}

解释一下#include<stdio.h> int f(int n); main() {int a=3,s; s=...
{ s+=(*p-'0')*t; \/\/注意这句话的理解,你的疑惑就是在这里了。下面我来帮你解释清楚\/\/ 首先要明白字符型数据的相加减实质上是字符在ASCLL码表上对应的ASCLL 值的相加减,而不是简单的直接拿字符来做相加减运算。s+=(*p-'0')*t;这句话开始p是指向a[2],a[2]存储的是字符'9'。...

...int f(int n); main(){int a=3,s; s=f(a);s=s+f(a);printf("%d\\n...
int f(int n){ static int a=1;\/\/这里是静态变量,静态变量的特点是赋值语句仅执行一次 n+=a++;\/\/这句话相当于n=n+a;a++;后置++先返回原数值,然后自变量+1 \/\/所以第一次s=f(3)n=3,a=1;n+=1=4,a=2,f(a)=4 \/\/s=4;\/\/第二次f(3),n=3,(a=1这句话不执行),a=2,n...

int f(int n)是什么意思?问什么结果是9?请写一下详细过程!
include<stdio.h>int f(int n); \/\/这是定义一个函数,名叫f,参数是整数nmain(){int a=3,s;s=f(a); \/\/s=1s=s+f(a); \/\/s=1+1=2printf("%d\\n",s);\/\/结果是2.如果你的代码没贴错的话.不可能9return 0;}int f(int n) \/\/函数f的函数体.{static int a=1; \/\/a...

#include<stdio.h> int f(int n); main() { int
这个是100连续除以2,一共9次,由于除数和被除数都是整数,所以结果是0,如果2改成2.0,结果就是0.125

int f(int n)是什么意思?问什么结果是9?请写一下详细过程!
“int f(int n)”是个自定义的函数,返回值为整数型,形参是n,整数型。“s=f(a);”就是调用函数f,将a=3作为函数f的形式参数n的值,然后按函数f的语句执行,将最后的结果n返回给主函数,并赋值给s。下边的“s=s+f(a);”同理

#include<stdio.h> void main() { int f(int a, int
p=f(i,++i); 在执行这一步时i编程了3,所以传入函数f时a和b都等于3返回值为0 ++i时i的值就变了。改为p=f(i,i+1)就好了

C语言问题: #include <stdio.h> int main() { int a=3,
a+=b,代表给a赋值为(a+b),-=同理,同时这俩运算符平级。所以顺序为首先a+=a,此时a=2a;然后a-=a,此时=0;然后c=a=0

#include<stdio.h> main() int a=4; int f(int n) {int t=0 ; stati...
int f(int n){ int t=0 ;static int a=5; \/\/静态变量,其作用域在int f(int n)内均有效 if(n%2){ int a=6; \/\/局部变量,只在这对括号内有效 t+=a++; \/\/?这个a是哪个? 就是局部变量int a = 6,因为其声明位置就在作用域内,离本作用域最近 } else { int a=7;t+...

#include<stdio.h> void main() {int a; printf("%d\\n",(a=3*5,a*...
a值最后是15没错。不过 输出的是括号里面的 (a=3*5,a*4,a+5)这个是一个逗号运算表达式,值是最右的值,也就是a+5的值。所以 输出是15+5=20 需要注意的是赋值优先级高于逗号,所以 a=3*5是第一部分 a*4是第二部分 a+5是第三部分。

# include <stdio.h> # include <math.h> int main (void) { \/\/把三...
那个错误要把代码也贴出来看看 那个警告的意思是说 你的main函数是有int类型返回值的,但你没在main中用return 返回。所以有一个警告。

相似回答