一道关于函数指针的题:return a>b 怎么能做函数的返回值,居然还是int型。。。
不重要的地方都不写了,程序目的为:对学生成绩进行排序,升序降序的选择由键盘输入,并输出排序结果。这个程序的重点在于利用【函数指针】只用一个函数来执行升序和降序,下面是比较...
不重要的地方都不写了,程序目的为:对学生成绩进行排序,升序降序的选择由键盘输入,并输出排序结果。这个程序的重点在于利用【函数指针】只用一个函数来执行升序和降序,下面是比较关键的语句。函数指针我是能理解的,就是不太理解在调用的函数中怎么能用a>b和a<b做返回值,居然tm是int 型。。。
……
void SelectionSort(int a[],int n,int (*compare)(int a,int b));
int Ascending(int a,int b);
int Descending(int a,int b);
int main()
{
……
printf("Enter 1 to sort in ascending order ,\n");
printf("Enter 2 to ……);
scanf("%d",&order);
……
if(order==1)
}
selectionSort(score,n,Ascending);
}
else
{
SelectionSort(score,n,Descending);
}
……
return 0;
}
/*函数功能:通用的交换法排序*/
void SelectionSort(int a[],int n,int (*compare)(int a,int b))
{
……
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if((*compare)(a[j],a[k]))
{
k=j;
}
}
if(k!=i)
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
}
int Ascending(int a,int b)
{
return a<b;
}
int Dscending(int a,int b)
{
return b<a;
}
谢谢各位大神了!!!鄙人freshman刚学c不太懂,如果讲得细致一定加分! 展开
……
void SelectionSort(int a[],int n,int (*compare)(int a,int b));
int Ascending(int a,int b);
int Descending(int a,int b);
int main()
{
……
printf("Enter 1 to sort in ascending order ,\n");
printf("Enter 2 to ……);
scanf("%d",&order);
……
if(order==1)
}
selectionSort(score,n,Ascending);
}
else
{
SelectionSort(score,n,Descending);
}
……
return 0;
}
/*函数功能:通用的交换法排序*/
void SelectionSort(int a[],int n,int (*compare)(int a,int b))
{
……
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if((*compare)(a[j],a[k]))
{
k=j;
}
}
if(k!=i)
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
}
int Ascending(int a,int b)
{
return a<b;
}
int Dscending(int a,int b)
{
return b<a;
}
谢谢各位大神了!!!鄙人freshman刚学c不太懂,如果讲得细致一定加分! 展开
3个回答
展开全部
return一般都有这么几种用法:
return b常用于b为一个数据的时候,
而return(b)常用于b是一个表达式的时候,这个时候采用这个能让人读起来更容易理解!
return只是用于返回值为void的函数中断函数运行用,
LZ的问题就应该采用第二种,return(a<b);即可。
给你个例子吧,自己敲的哦,觉得好请采纳,亲!
#include<stdio.h>
bool bijiao(int a,int b)
{
return a>b;//注意这里!
}
//取最大值使用return b
int max(int a,int b)
{
if(bijiao(a,b))
return a;
else
return b;
}
//求和使用return(b)
int sum(int a,int b)
{
return (a+b);
}
//排序使用return
void sort(int &a,int &b)
{
int temp;
if(a>b)
return;//当a>b成立的时候,不需要排序了,直接用return 中断函数运行
else
{
temp = a;
a = b;
b = temp;
}
}
int main()
{
int a,b;
printf("输入a和b:");
scanf("%d,%d",&a,&b);
printf("a和b中最大值为:%d\n",max(a,b));
printf("a和b的和为:%d\n",sum(a,b));
sort(a,b);
printf("a和b从大到小为:%d,%d\n",a,b);
return 1;
}
加括号其实这不并影响结果,只是为了读起来更易懂!
你的问题里return a<b的时候将bool型提升到了int型
bool型与int型的关系,可以在网上找
例如:http://wenku.baidu.com/view/d22f40d633d4b14e852468ae.html
我会尽最大努力帮助你的,亲!
展开全部
b<a 是个逻辑运算表达式,运算的结果是1或0,分别表示真或假,而且的确是int型的
return b<a; 就返回这个结果
return b<a; 就返回这个结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实就是返回比较的结果:
如果 a<b 成立则返回1,a < b不成立则就会0
其实返回值的类型不重要,不要认为int只能存储数值,char只能存储字符,这只是表面的。
其实无论数值还是字符,最终存储在计算机中的就是二进制数,数据类型的区别只在于它占用了几个Byte(几个Bit)地址空间。
如果 a<b 成立则返回1,a < b不成立则就会0
其实返回值的类型不重要,不要认为int只能存储数值,char只能存储字符,这只是表面的。
其实无论数值还是字符,最终存储在计算机中的就是二进制数,数据类型的区别只在于它占用了几个Byte(几个Bit)地址空间。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询