永发信息网

C语言 SWAP的问题

答案:3  悬赏:60  手机版
解决时间 2021-03-20 11:10
#include#include
void swapmm(double *p, double *q, double t)
{
t=*p;
*q=*p;
*q=t;

}void main()
{
int i;
double max,min,*p;
double a[6];
printf("请输入6个数值\n");
for(i=0;i<6;i++)
scanf("%d",&a[i]);
{
max=a[0];
for(i=0;i<6;i++){
if(fabs(a[i])>max)
max=a[i];
}
}
{
min=a[0];
for(i=0;i<6;i++){
if(fabs(a[i]) min=a[i];
}
}
for(p=a;p *p=a[i];
swapmm(double *p, double *q, double t=0.0);
for(i=0;i<6;i++)
printf("%d",a[i]);
}
数组转换成指针的时候不太懂,不知道有没有错,还有调用子函数的时候思路也不是还能清晰。
1>d:\documents\visual studio 2008\projects\swap\swap\swap.cpp(34) : error C2144: 语法错误 : “double”的前面应有“)”
1>d:\documents\visual studio 2008\projects\swap\swap\swap.cpp(34) : error C2660: “swapmm”: 函数不接受 0 个参数
1>d:\documents\visual studio 2008\projects\swap\swap\swap.cpp(34) : error C2059: 语法错误 : “)”
最佳答案
我觉得你连基本的函数还没搞明白,建议先把函数调用,参数传递搞清楚了再学指针。
这明显不是正确调用函数的方式 swapmm(double *p, double *q, double t=0.0);
还有,程序中逻辑也存在问题:
for(p=a;pmax)
max=a[i];
if(fabs(a[i]) min=a[i];
如果给一组数:-4,1,2,3,5,-6
按你的逻辑给出的,数组中最大值是-6, 最小值是-4,明显不对吧。
看程序,你想做的应该是输入6个数,取其绝对值的最大最小,swapmm想做什么倒是没想到。

建议你先不用指针重写一次这个程序,达到目地后,再用指针改写。
全部回答
数组定义了一个连续的内存块用来保存数组变量,当数组被使用的时候,数组名会退化成指向内存中第一个数组元素的指针。但是数组名不是一个变量,就是说他的值是不能被改变的,因为他指向的数组的第一个元素,如果改变了,指向了别处,那你原来的数组怎么办。例如: double array[10]; double *ptr = array; //这个是对的,array退化成指向double的指针,然后把他指向的地址赋值给ptr *array = 1.0; //这个也是对的,首先array是个指针,然后对他解引用得到他指向的地址的变量,然后我们把1.0赋值给他。 array = ptr; //这是错误的,因为array是一个指向数组第一个元素的指针,而且不能被改变,所以向他赋新的地址值会出错,因为他不是个变量。 再说一下,C语言为什么要把数组退化成指针,一方面这样方便了函数间传递数组,二是数组的存储在内存里是连续的,这样就可以用指针从第一个元素索引直到最后一个,而且指针的速度很快,优化也容易。 至于你这个程序,在函数调用里声明变量,C89里是不允许,C99允许但很多的编译器还没有完全支持C99, 现在C11也出来了。你的这一句swapmm(double *p, double *q, double t=0.0); 最好改为swapmm(p, q),把swapmm改成这样: void swapmm(double *p, double *q) { doible t=*p; *q=*p; *q=t; } t是个临时变量没有必要传递,这接在函数里定义。
#include  #include  using namespace std;//错误1,swap(,)需要std支持 int main(int argc, char *argv[]) { char a[4];//注意输入时候 不要超过3个字符,因为大小定义为4 scanf("%s",a);//错误2,while循环使用有问题 if(a[0]>a[1]) swap(a[0],a[1]); if(a[0]>a[2]) swap(a[0],a[2]); if(a[1]>a[2]) swap(a[1],a[2]);  printf("%c %c %c",a[0],a[1],a[2]);//错误3,输出用printf() return 0; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
正常人可以多少天不吃一点东西?
新泉镇地址有知道的么?有点事想过去
想用六道金刚解脱咒轮发个地藏表文用多少张六
麻辣香锅里面都放什么
男人经上长优是怎么回事
叫郑安浜的有几个?(全中国)
为什么人事部不喜欢人员稳定?求解答
求韩剧triangle里所有的没有人唱的ost 即背景
申请离婚到哪里去
台州宾馆我想知道这个在什么地方
消防队有空间不能对外开放的规定吗?
下列用微观概念解释生活中现象的叙述中不正确
通辽现在发展怎么样了?民风如何?
刷机软件有哪些? 哪些好用?
狮子的克星
推荐资讯
金锁固精丸徐州哪里有卖
昨天买了一只金丝熊,家人都说是老鼠,我想确
话说你们有谁知道vivo的x9s怎么样,和oppo的r
梦见别人给我买新衣服
家居收纳有什么用?
2013《快乐男声》10强 除了华晨宇之外 其他九
亚铁离子能与氟化钠反应吗?反应产物是什么?
吕姓男孩起名96分以上
江苏考生如果考武汉大学的最差专业最少要达到
桥头羊肉面地址有知道的么?有点事想过去
房屋怎么看东南西北
爱木投创始人郑一涵是什么背景?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?