/*时间:2011年6月29日
*@作者:风之风信子
*@功能:1、检测指针的效果。2、swap函数的功能,测试形参实参的作用。3.测试指向数组的指针的作用。
鄙视一下出题的老师,代码写的真难看,我把格式修改了一下,有的地方为了方便讲解,也改了形式。
只要你稍微学过一点,一定能看懂。
我希望你别把我给你的解释直接复制粘贴,一定要自己好好看看,认真消化!
小弟弟,学点东西就比不学强,c语言很重要的,加油吧!
*/
/* 问题一:
这个问题的结果是8。
*/
/*
#include
void main()
{
int k=2,m=4,n=6;
int *pk=&k;//定义pk指针指向k的地址
int *pm=&m;//定义pm指针指向m的地址
int *p=&n;//定义p指针指向n的地址
*p=*pk*(*pm);//*p指的是p的地址中的数的值,也就是n的值。
//它的值是pk地址中的值(*pk)乘以pm地址中的值(*pm)
//也就是2乘以4。
printf("%d\n",n);//n等于2*4等于8。
}
*/
/*问题二:
这个问题的结果是5,10 5,10
看似进过了swap函数的转换,a和b的值应该互换是吧?
你预想的结果是不是5,10 10,5呢?
但是,作为函数来说,它只能有一个或者没有返回值,不可能通过形参的变化实现实参的改变。
如果你想让两个数互换的话,必须应用指针。
把swap函数改为:
void swap(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
最程序中应用swap的时候也应该用到swap(&a,&b);
因为你调用的就是指针了。现在的结果就变成了5,10 10,5了。
懂了吗?
*/
/*
#include"stdio.h"
void swap(int x,int y)
{
int t;
t=x;
x=y;
y=t;
}
void main()
{
int a=5,b=10;
printf("%d,%d\n",a,b);
swap(a,b);
printf("%d,%d\n",a,b);
}
*/
/*问题三:
结果为30。
注释见程序,再次鄙视一下编这些题目的老师,代码写的真烂。
*/
/*
#include
void main()
{
int a[5],i,t;//定义一个5个元素的数组,一个i(循环数),一个t(接结果)。
int sub(int *,int);//声明函数
for(i=0;i<5;i++)
a[i]=i*i;//a[0]=0,a[1]=1,a[2]=4,a[3]=9,a[4]=16
t=sub(a,5);//运行函数,函数返回结果是s=0(s的初始值)+0(a[0])+1+4+9+16=30。
printf("t=%d",t);//输出结果,最后结果是30。懂了吗?
}
int sub(int *p,int n)
{
int i,s=0;
for(i=0;i
//注意这个*(p+i)的格式,如果p指向的是一个一维数组a[5]的起始地址。
//那么,*(p+i)的意思就是a[i]。
//鉴于sub函数格式,这里的意思是s=s+a[i]的循环。
return s;
}
*/
/*问题四:
输出结果是第一行:x=4,y=25,z=14.50
第二行:x=2,y=3,z=14
*/
/*
#include"stdio.h"
void main()
{
int x=2,y=3,z;
int js(int,int);
z=js(x,5);
printf("(2)x=%dy=%dz=%d\n",x,y,z);}//在主程序中输出,形参的改变不改变实参的值,所以x还是2,y还是3。
//而z的值是函数带回的,所以它的值还是14.50。
//但是,这里z的输出形式是整数型(int)所以这里的输出是:x=2,y=3,z=14
int js(int x,int y)
{
float z;
x*=x;y*=y;//x=2*2=4,y=5*5=25
z=(x+y)/2.0;
printf("(1)x=%dy=%dz=%.2f\n",x,y,z);//在函数中输出x=4,y=9,z=14.50
//因为z的输出形式是浮点型float,而且只能输出到小数点之后两位。
return z;
}
*/
另外,站长团上有产品团购,便宜有保证
第一个是8;
进入循环首先进行一次x++,此时x=x+1=0+1=1;
总的循环次数是2*3=6次;则当退出循环时候x=1进行了六次x++,最后x=7;
退出循环后在循环外面再一次x++,所以最后x=8.
第二个是-3
n=9;
i=n/5=1;
j=n-i*5-1=3;
printf("a[%d][%d]=%d\n", i,j,a[i][j]);
a[1][3]=-3
第三个是D,A
你把两个数组画出来一计算就明白了
第一个是8;
进入循环首先进行一次x++,此时x=x+1=0+1=1;
总的循环次数是2*3=6次;则当退出循环时候x=1进行了六次x++,最后x=7;
退出循环后在循环外面再一次x++,所以最后x=8.
第二个是-3
n=9;
i=n/5=1;
j=n-i*5-1=3;
printf("a[%d][%d]=%d\n", i,j,a[i][j]);
a[1][3]=-3
第三个是D,A
1.A
2.B
3.①D②A