注册 登录
编程论坛 C语言论坛

新手上路的我瑟瑟发抖

星辰探 发布于 2020-12-27 22:37, 2582 次点击
在主函数中为数组int a[10]赋值,利用swap(int *p1,int *p2)函数对a[]进行从小到大排序输出。
15 回复
#2
星辰探2020-12-27 22:37
求大佬程序
#3
风过无痕19892020-12-28 00:39
回复 楼主 星辰探
程序代码:

#include <stdio.h>

int main()
{
    int swap(int *p1, int *p2);
    int i, n, *p1, *p2, a[10];
    n = 10;
    for (i = 0;i < n;i++)
    {
        scanf("%d", &a[i]);
    }
    p1 = a;
    p2 = &n;
    swap(p1, p2);
    for (i = 0;i < *p2;i++)
        printf("%d ", *(p1 + i));
    printf("\n");
}

int swap(int *p1, int *p2)
{
    int i, j, temp;
    for (i = 0;i < *p2;i++)
    {
        for (j = 0;j < *p2 - 1;j++)
        {
            if (*(p1 + j) > *(p1 + j + 1))
            {
                temp = *(p1 + j);
                *(p1 + j) = *(p1 + j + 1);
                *(p1 + j + 1) = temp;
            }
        }
    }
}
#4
星辰探2020-12-28 09:24
回复 3楼 风过无痕1989
感谢大佬
#5
星辰探2020-12-28 09:51
回复 3楼 风过无痕1989
貌似有点问题
#6
风过无痕19892020-12-28 12:12
回复 5楼 星辰探
有什么问题?
#7
sd2737232692020-12-28 18:21
#include <stdio.h>
void swap(int* p1);
int nub = 10;
int main(int argc, char const* argv[])
{
    int a[10] = { 2,0,12,9,3,21,5,4,6,13, };
    int b[10] = { 0 };
    int j = 0;
    for (j = 0; j < nub; j++) {
        b[j] = a[j];
    }
    swap(b);
    int i = 0;
    for (i = 0; i < nub; i++) {
        printf("%d\n", b[i]);
    }
    return 0;
}

void swap(int* p1)
{
    int i = 0;
    int j = 10;
    int temp = 0;
    for (j = 10; j >= 0; j--) {
        for (i = 0; i+1 < nub; i++) {
            if (p1[i] > p1[i + 1]) {
                temp = p1[i];
                p1[i] = p1[i + 1];
                p1[i + 1] = temp;

            }
        }
    }
    return;
}
#8
sd2737232692020-12-28 18:23
我也是刚学c,也许还能优化,但是我写的这个 新手应该能看懂
#9
do8do8do82020-12-28 19:27
c 语言和  lisp 语言  可以一起学
(defvar arr nil)
(setf arr #( 1 3 5 2 6 7 8 9 4 0) )
(sort arr #'>)
结果输出 9 8 7 6 5 4 3 2 1 0

lisp只用三行代码,精彩不是代码多少问题,而是在于这语言用起来真的不费脑
#10
风过无痕19892020-12-28 22:17
回复 7楼 sd273723269
你这个程序,初看没有什么问题(没有运行过,只能说是初看哈~~),但是你将他的题目给改了,题目要求用函数 :swap(int *p1,int *p2)
#11
请输入密码2020-12-29 08:20
Swap函数不就是交换的意思嘛,不然为啥给两个参数来用。
#12
请输入密码2020-12-29 08:27
仅仅是交换两个整数而已。

程序代码:

#include<stdio.h>

void swap( int* ,int* );

int main( void )
{
    int a,b;
   
    scanf( "%d%d",&a,&b );
   
    swap( &a, &b );
   
    printf( "%-4d%-4d\n",a,b );
   
    return 0;
}

void swap( int* a, int* b )
{
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}
#13
星辰探2020-12-30 20:25
回复 9楼 do8do8do8
感谢大佬
#14
风过无痕19892020-12-30 22:06
回复 5楼 星辰探
你还没有回答我,有什么问题。那我来猜测一下你的疑问吧:你是看到循环条件 i < *p2 吧?

在程序中 p2 = &n,这是将数组长度的变量地址赋给了指针 *p2,之所以这么定义是因为题目所给定的函数 swap(int *p1,int *p2),形参是两个指针,而比较数组的大小,只需要一个首地址和一个数组长度就足够了,也就是说函数应该这么来定义:swap(int *p1,int n),即一个指针,一个整型数值就可以了。可是题目就是题目,我们做题,不能去更改题目。既然要求用两个指针,那就将长度变量定义为指针好了
#15
星辰探2020-12-31 09:15
回复 14楼 风过无痕1989
好的好的,谢谢大佬
#16
lin51616782020-12-31 09:49
以下是引用请输入密码在2020-12-29 08:27:41的发言:

仅仅是交换两个整数而已。


#include<stdio.h>

void swap( int* ,int* );

int main( void )
{
    int a,b;
   
    scanf( "%d%d",&a,&b );
   
    swap( &a, &b );
   
    printf( "%-4d%-4d\n",a,b );
   
    return 0;
}

void swap( int* a, int* b )
{
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}

交换就用第三个变量交换 不要自作聪明
而且你这个交换函数写错了
1