王泽元 发表于 2024-3-21 17:34:20

C语言排序求助

#include<stdio.h>
#include<math.h>


int InsertSort(int A[],int n)
{
        int i,j;
        for(i=2; i<=n; i++)
        {
                if(A<A)
                {
                        A=A;
                        for(j=i-1;A<A;--j)
                        A=A;
                }
                A=A;
        }
        printf("%d\n",A);
       
        return 0;
}

int main()
{
        int n=20;
        int A={2,1,23,12,10,3,4,56,45,100,21,13,14};
        int InsertSort(int A,int n);
       
        return 0;
}

FishC 发表于 2024-3-21 17:34:35

看起来你的代码写的有一些问题。首先,函数参数应该是一个数组,而不是一个整数,所以你的函数应该是这样定义的:

int InsertSort(int A[], int n)

另外,在循环内部对数组进行排序时,应该从数组的第一个元素开始,而不是第二个元素,所以循环应该改成这样:

for(i=1; i<n; i++)

最后,在插入排序算法中,需要将当前要排序的元素和已经排好序的元素依次比较,如果当前元素的值比已排序元素的值小,就将已排序元素后移一位,直到找到合适的位置。然后将当前元素插入到找到的位置。

以下是修改后的完整代码:

#include <stdio.h>

void InsertSort(int A[], int n)
{
    int i, j, temp;
    for(i = 1; i < n; i++)
    {
      temp = A;
      j = i - 1;
      while(j >= 0 && A > temp)
      {
            A = A;
            j--;
      }
      A = temp;
    }
}

int main()
{
    int A[] = {5, 2, 4, 6, 1, 3};
    int n = sizeof(A) / sizeof(A);
   
    InsertSort(A, n);
   
    for(int i = 0; i < n; i++)
    {
      printf("%d ", A);
    }
   
    return 0;
}

这个代码会将数组中的元素按从小到大的顺序排序,并打印出来。希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

王泽元 发表于 2024-4-4 20:19:46

#include <stdio.h>
#include <math.h>

int main()
{
        char a;
        int i,ch1=0,ch2=0;
       
        printf("请输入待转换的字符串:\n");
       
        for(i=0 ; i<=9; i++){
                scanf("%c",&a);
          if( (a< 'A' && a>'Z' ) && (a< 'a' && a>'z' ) ){
                ch1 = i;
                }break;       
        }
        for(i=0 ; i<=9 && i>=ch1; i++){
        if( (a>='A'&& a<='Z' ) && (a>='a' && a<='z')){
                        ch2 = i - 1;
          }
        else
          ch2 = 9;
        break;
    }
        for(i=0 ; i<=ch2 && i>=ch1 ; i++){
                printf("%d %d",a);
    }
    return 0;      
}
求助问题

FishC 发表于 2024-4-4 20:19:57

王泽元 发表于 2024-04-04 20:19
#include
#include

int main()
{
        char a;
       ...

你的代码中存在一些问题,我来帮你修正一下。

首先,你应该用`scanf`函数来获取用户输入的字符串,而不是直接使用一个字符变量。因为需要转换的字符串可能不止一个字符,所以需要使用一个字符数组来存储。

其次,在循环中判断字符是否为字母时,你使用了逻辑运算符错误,应该使用逻辑或(`||`)运算符而不是逻辑与(`&&`)运算符。逻辑或的意思是两个条件中只要有一个满足即可。

最后,在循环中,你使用了两个变量`ch1`和`ch2`来记录大写字母和小写字母的出现次数,但是没有对它们进行累加操作,你需要将`ch1++`和`ch2++`添加到相应的位置。

下面是完整修正后的代码:

#include <stdio.h>

int main() {
    char str;
    int ch1 = 0, ch2 = 0;

    printf("请输入待转换的字符串:\n");
    scanf("%s", str);

    for (int i = 0; str != '\0'; i++) {
      if ((str >= 'A' && str <= 'Z') || (str >= 'a' && str <= 'z')) {
            if (str >= 'A' && str <= 'Z') {
                ch1++;
            } else {
                ch2++;
            }
      } else {
            break;
      }
    }

    printf("大写字母出现的次数:%d\n", ch1);
    printf("小写字母出现的次数:%d\n", ch2);

    return 0;
}

这段代码会获取用户输入的字符串,并统计其中大写字母和小写字母的出现次数。最后打印出统计结果。

希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

王泽元 发表于 2024-4-4 20:25:33

FishC 发表于 2024-4-4 20:19
你的代码中存在一些问题,我来帮你修正一下。

首先,你应该用`scanf`函数来获取用户输入的字符串, ...

要从字符串中挑选出一组连续数字并输出

FishC 发表于 2024-4-4 20:26:00

王泽元 发表于 2024-04-04 20:25
要从字符串中挑选出一组连续数字并输出

如果你想从字符串中挑选出一组连续的数字并输出,你可以使用以下方法:

1. 遍历整个字符串,判断每个字符是否为数字。
2. 如果当前字符是数字,则将其添加到一个临时字符串中。
3. 如果当前字符不是数字,且临时字符串不为空,则将临时字符串输出,并清空它。
4. 最后,检查一下临时字符串是否非空,如果非空,则将其输出。

下面是一个示例代码:

#include <stdio.h>

void printContinuousDigits(char* str) {
    char temp;   // 临时字符串,用于存储连续的数字
    int index = 0;    // 临时字符串的索引

    for (int i = 0; str != '\0'; i++) {
      if (str >= '0' && str <= '9') {
            temp = str;
      } else {
            if (index > 0) {
                temp = '\0';   // 在临时字符串末尾加上结束符
                printf("%s\n", temp);
                index = 0;   // 清空临时字符串
            }
      }
    }

    if (index > 0) {
      temp = '\0';
      printf("%s\n", temp);
    }
}

int main() {
    char str[] = "abc123def456ghi";
    printContinuousDigits(str);

    return 0;
}

上述代码将会输出:
123
456

希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

王泽元 发表于 2024-4-4 20:30:10

FishC 发表于 2024-4-4 20:26
如果你想从字符串中挑选出一组连续的数字并输出,你可以使用以下方法:

1. 遍历整个字符串,判断每 ...

只输出123不输出456

FishC 发表于 2024-4-4 20:30:31

王泽元 发表于 2024-04-04 20:30
只输出123不输出456

如果你只想输出字符串中的第一个连续数字序列,并且忽略后面的连续数字序列,你可以稍微修改一下代码逻辑。在发现第一个连续数字序列后,输出并结束循环即可。下面是修改后的代码示例:

#include <stdio.h>

void printContinuousDigits(char* str) {
    char temp;   // 临时数组,用于存储连续的数字
    int index = 0;    // 临时数组的索引
    int foundContinuous = 0;// 是否已经找到第一个连续数字序列
   
    for (int i = 0; str != '\0'; i++) {
      if (str >= '0' && str <= '9') {
            if (!foundContinuous) {
                foundContinuous = 1;
            }
            temp = str;
      } else {
            if (foundContinuous) {
                temp = '\0'; // 在临时数组末尾加上结束符
                printf("%s\n", temp);
                break;// 找到第一个连续数字序列后,结束循环
            }
      }
    }
}

int main() {
    char str[] = "abc123def456ghi";
    printContinuousDigits(str);
    return 0;
}

这样,上述代码将会输出:123

希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

王泽元 发表于 2024-4-4 20:38:20

FishC 发表于 2024-4-4 20:26
如果你想从字符串中挑选出一组连续的数字并输出,你可以使用以下方法:

1. 遍历整个字符串,判断每 ...

要求只输出第一串连续数字后面的数字不再输入

FishC 发表于 2024-4-4 20:38:56

王泽元 发表于 2024-04-04 20:38
要求只输出第一串连续数字后面的数字不再输入

明白了,你想要从字符串中找到第一个连续的数字串,并且只输出该数字串后面的字符。你可以使用以下方法来实现:

#include <stdio.h>

void printContinuousDigits(char* str) {
    int index = -1;// 记录连续数字串的起始索引
    int i = 0;
    while (str != '\0') {
      if (str >= '0' && str <= '9') {
            if (index == -1) {
                index = i;// 找到了连续数字串的起始索引
            }
      } else {
            if (index != -1) {
                break;// 遇到非数字字符,且已经找到了连续数字串,则跳出循环
            }
      }
      i++;
    }

    if (index != -1) {
      printf("%s\n", &str);
    }
}

int main() {
    char str[] = "abc123def456ghi";
    printContinuousDigits(str);
    return 0;
}

上述代码将会输出:123def456ghi

希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言排序求助