关于c语言的问题,紧急!

#include <stdio.h>
int m=13;
void main()
{ int fun(int x,int y);
int a=7,b=5;
printf("%d\n",fun(a,b)/m);
}
int fun(int x,int y)
{ int m=3;
return x*y-m;
}
#include <stdio.h>
viod main()
{ int a[]={1,3,5},s=1,j,*p=a;
for(j=0;j<3;j++)
s*=*(p+j);
printf("s=%d\n",s);
}
请高手解答一下,这2道题的答案及数学和程序的运算过程,希望详尽一地,我C语言比较菜.....谢谢!!!!

第一题程序运行过程:
int fun(int x,int y);你这句在程序里是对被调用的函数的声明,这里的函数就是你定义的那个fun函数,说白点就是给计算机一个路径去找到这个fun这个函数具体怎么运算,这你在后面的程序段你也解释了fun这个函数该怎么计算,就是这个程序段:
int fun(int x,int y)
{ int m=3;
return x*y-m;
答案为(5*7-3)/13=2
第二题就是一个数组的问题,然后一个for循环。
程序运行的过程是:
你首先定义了一个int的数组a[],然后将s赋值为1,因为你后面要用到s做连乘所以得赋初值,然后你定义了一个指针变量p,将数组的第一个元素a[0]的地址赋给p,然后执行for循环,s*=*(p+j); 这句话等同于s=s**(p+j),就是连乘,所以答案为15

其实这个都可以从书上找到的,书上讲的比我还要详细了,我也是刚学c语言不太久了,呵呵,希望没讲错吧!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-04-23
#include <stdio.h>

int fun(int x,int y)
{
int m=3; //局部变量
return x*y-m; //这里的m是本函数fun()的局部变量,其值为3
//x=5,y=7,m=3,所以x*y-m=32
}

int m=13; //全局变量
void main()
{
int fun(int x,int y);
int a=7,b=5;
printf("%d\n",fun(a,b)/m); //这里m是全局变量,其值是13
//fun(a,b)=32,m=13,所以,最后输出2(取整了)
}

#include <stdio.h>
viod main()
{
int a[]={1,3,5},s=1,j,*p=a;
for(j=0;j<3;j++)
s*=*(p+j); //*(p+j)相当于p[j]=a[j],这句相当于s=s*a[i]
//循环3次,所以结果是s=1*1*3*5=15
printf("s=%d\n",s);
}本回答被提问者采纳
第2个回答  2008-04-23
第一题 应该是考察局部变量与全局变量的

fun(a,b)/m
其中m是全局变量值为13
fun(a,b)如下
int fun(int x,int y) 把a赋给x=7,b赋给y=5,然后计算
{ int m=3; //局部变量覆盖了全局变量m,所以在这个函数里m的值为3,外部变量不受影响.
return x*y-m; //这里是返回值 7*5-3=32;

所以main()函数里fun(a,b)/m就等于32/13 由于都是int类型,忽略小数
最后的值为2

第二题是对数组a中的元素求积的运算。
s=s*(*(p+j))这里的p的运算与a[i]的效果是一样的,所以就是1*1*3*5

最后输出结果
第3个回答  2008-04-23
第一题,是先计算(5*7)-3=32,然后返回给主调函数,在计算32/13然后按照整型输出。这道题是然你区分实参和行参的区别,和函数的调用。答案是2,或者显示不了,因为你的变量都是整型无法计算实数。
第二题,先让j做三次循环,在每次循环里给s赋一个一维数组里的值,完成循环后显示s的值,答案是5,这道题是让你明白指针和一维数组地址和对应元素的关系。
第4个回答  2019-01-05
#include<stdio.h>
double
k1(int
n){//1/k!(前n项和)
double
sum=0;//和
if(n>0){
double
s=1;//
1/k
for(int
i=1;i<=n;i++){
s*=(1.0/i);

sum+=s;
}
}
return
sum;
}
double
k2(int
n){//k^2(前n项和)
double
sum=0;
if(n>0){
for(int
i=1;i<=n;i++){
sum+=i*i;
}
return
sum;
}else{
return
0;
}
}
double
k3(int
n){//1/k(前n项的和)
double
sum=0;
if(n>0){
for(int
i=1;i<=n;i++){
sum+=1.0/i;
}
return
sum;
}else{
return
0;
}
}
void
main(){
printf("1/k!(前100项和)+k^2(前36项和)+1/k(前30项的和)为:%f\n",
k1(100)+k2(36)+k3(30));
}
相似回答