大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
10年积累的成都网站设计、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有丰台免费网站建设让你可以放心的选择与我们合作。
void swap(int *p, int *q);//用传地址的方法交换
void main()
{
int i, j;
scanf("%d%d", i, j);//从键盘输入两个交换的数
swap(i, j);//传入i,j的地址
printf("i = %d, j = %d\n", i, j);//输出交换后的两个值
}
void swap(int *p, int *q)
{
int temp;//定义临时变量 存放中间值
temp = *p;
*p = *q;
*q = temp;
}
注意:不能直接写void swap(int i, int j);
因为那只是临时变量,函数调用完后,便释放空间,两个值并没有交换。
1、正确答案D
原题中swap函数的两个参数分别是int p和int q,实际在主程序调用swap时,swap内部的赋值改变的只是参数值的副本,返回后主程序内部的a、b变量并没有因其副本内容的改变而变化,所以必须改写swap函数,将要交互的变量地址作为指针型的参数传给swap,才能在swap中直接修改main中的变量。
修改后的swap函数可以是:
swap( int *p, int *q )
{int t;
t=*p; *p=*q; *q=t;
}
因此原题中答案A明显错误。答案B虽然能去掉编译过程中的参数类型不匹配的警告,但运行结果是错误的(原因见上)。答案C错在不仅要改变形参中p、q的类型(int改为int*),还要相应改变swap函数内部的赋值语句。所以D是正确的。
2、正确答案A
malloc分配了一块20字节的内存、并通过赋值语句将指针p指向该内存区域,之后马上将q也指向这里,这就是说q和p指向的是同一块内存区域。
scanf会将输入的abc def按空白字符分解为abc和def两个部分,先将abc放入p指向的地方,然后再将def放入q指向的地方。然而p与q指向的是同一块内存区域,因此def会将之前的abc覆盖掉,导致输出了两次def,即def def。即选项A。
实参a=3,b=5,传给形参后,形参的a=3,b=5,ab,满足if条件,执行if语句块,交换a,b的值,
a=5,b=3,return(a,b); 这条语句,逗号运算符的结合性是从左至右,因此最后return返回的是
变量b的值,也就是3了,所以main()函数的变量c的值是3了。
void
swap(int
*a,int*
b)
{
int
temp=0;
temp=*a;
*a=*b;
*b=temp;
}
因为是指针,只要更换指针内的内容就可以了;
还有一种是
换指针,就设a指向没存A,b指向内存B,交换后把b指向内存A,把a指向内存B
void
swap(int
*a,int*
b)
{
int
*temp;
temp=a;
a=b;
b=temp;
}
#include "stdio.h"
int swap(int *p,int n)
{int temp;
for(i=0;i=(n/2);i++)
{temp=*(p+n-i-1);
*(pn-i-1)=a[i];
a[i]=temp;
}
}
main()
{int a[100],n,i;
printf("shuru n\n");
scanf("%d",n);
printf("\n shuru shuzu a[]\n");
for(i=0;in;i++)
scanf("%d",a[i]);
for(i=0;in;i++)
printf("%d,",a[i]);
printf("\n");
swap(a,n);
printf("huhuan houshi\n");
for(i=0;in;i++)
printf("%d,",a[i]);
}