用函数和指针把两个整数从大到小的顺序输出

img


显示从积分类型转换为指针类型需要重新解释强制转换,这是什么问题导致的呀,我这里也没有强制转换呀

函数调用时:swap(*pt1,*pt2) ; 实参多了 '*'号,应为:swap(pt1, pt2);

如果对你有启发和帮助,请采纳! 答案参考Chatgpt解答
根据你提供的代码和错误信息来看,存在几个问题:

  1. 错误信息中提到无法将参数1从'int'转换为'int *',这是因为在函数调用swap(*pt1, *pt2)时,swap函数的参数类型应该是指针类型,而不是整数类型。

  2. 函数swap的声明应该放在main函数之前,或者提前进行函数原型声明。

下面是修改后的代码示例:

#include <stdio.h>

void swap(int *p1, int *p2); // 函数原型声明

int main() {
    int a, b, *pt1, *pt2;
    scanf("%d%d", &a, &b);
    pt1 = &a;
    pt2 = &b;
    if (a < b)
        swap(pt1, pt2);
    printf("max=%d, min=%d\n", *pt1, *pt2);
    return 0;
}

void swap(int *p1, int *p2) {
    int temp;
    temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

在修改后的代码中,我们将swap函数的原型声明放在main函数之前,这样编译器就可以正确识别函数的参数类型。此外,还将swap(*pt1, *pt2)改为swap(pt1, pt2),以传递指针变量的地址。

请注意,上述代码是基于C语言进行修改的,因此文件扩展名应该为.c而不是.cpp

希望这个解答能够帮助你修复代码中的错误。如果你有任何进一步的问题,请随时提问。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7434917
  • 你也可以参考下这篇文章:使用指针方法实现字符串逆序存放后再输出;用指针方法编写一函数,实现两个字符串的比较
  • 除此之外, 这篇博客: 从时间复杂度和空间复杂度来看斐波那契数列中的 首先我们来看一下什么叫斐波那契数列: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 斐波那契数列是指这样一个数列:

    1 1 2 3 5 8 13 21 34 55 ~ ~ ~等这样的一组数列。
    它的规律是第三个数等于前两个数之和

    #include<stdio.h>
    #include<stdlib.h>
    int Fibonacci_1(size_t n)//注意返回值可能会很大,但c语言中最大整数为4294967295
    {                        //测试后只能计算前46个斐波那契额数列
    	int  first,second,third;//非递归算法
    	int i;
    	first=0;
    	second=1;
    	if(n<=2)
    	{
    		return 1;
    	}
    	for(i=2; i<=n; i++)
    	{
    		third=first+second;
    		first=second;
    		second=third;
    	}
    	return third;
    }
    int Fibonacci_2(size_t n)//递归算法
    {
    	if(n<=2)
    	{
    		return 1;
    	}
    	else
    		return Fibonacci_1(n-1)+Fibonacci_1(n-2);
    }
    int main()
    {
    	size_t n=40;
    	printf("非递归算法第%d个斐波那契数为>:%d\n",n,Fibonacci_1(n));
    	printf("递归算法第%d个斐波那契数为>:%d\n",n,Fibonacci_2(n));
    	system("pause");
    	return 0;
    }
    

    运行结果如下:

    在这里插入图片描述

    两个代码看起来相差不了多少,但从时间复杂度和空间复杂度上比较,还是相差很远的。

    时间复杂度

    递归算法:
    在这里插入图片描述

    非递归: 通过观察循环次数就可以发现,非递归只需要循环 n次就可以计算出第n个斐波那契数,所以它的时间复杂度时O(n);

    这时当假如n为100时,递归算法需要计算2^100次,二非递归只需要计算100次,这时候递归算法可能需要很长一段时间,而非递归却很快,这就通过时间复杂度体现了两者算法的差别。

    空间复杂度
    在这里插入图片描述

    而非递归方法开辟了三个变量空间,空间复杂度为O(1),而递归的是O(n);但现在随着硬件的发展,空间复杂度已经不那么重要了。
    所以总体来说非递归的算法效率更高。

  • 您还可以看一下 刘建萍老师的人工智能系列课程零基础讲解知识点和实例应用线性回归梯度下降逻辑回归课程中的 讲解机器学中会涉及到的有关数学方面的知识储备有哪些小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    题目要求按从大到小的顺序输出两个整数,可以使用函数和指针实现。具体步骤如下:

    1. 定义函数sort,传入两个整型指针参数。函数体内使用if语句判断两个数的大小关系,若第一个数小于第二个数,则交换两个数的值。具体代码如下:
    void sort(int *a, int *b){
        if(*a < *b){
            int temp = *a;
            *a = *b;
            *b = temp;
        }
    }
    
    1. 在主函数中定义两个int类型变量a和b,赋初值。将a和b的地址作为参数传入上面定义的sort函数中进行排序。
    int main(){
        int a = 50, b = 30;
        sort(&a, &b);
        printf("%d %d", a, b);
        return 0;
    }
    

    完整代码如下:

    #include<stdio.h>
    
    void sort(int *a, int *b){
        if(*a < *b){
            int temp = *a;
            *a = *b;
            *b = temp;
        }
    }
    
    int main(){
        int a = 50, b = 30;
        sort(&a, &b);
        printf("%d %d", a, b);
        return 0;
    }
    

    运行结果为:50 30,符合题目要求。

    关于强制类型转换的问题,可能是因为在将整型转换为指针类型时,指针类型可能不是整型的,需要进行强制类型转换。比如将int类型转换为char类型的指针,可以使用以下代码进行转换:

    int a = 65; //a为整型变量
    char *ptr = (char *)&a;//ptr为char类型指针,需要进行强制类型转换
    

    但在上面的题目中,并没有进行强制类型转换,应该不会出现这个问题。