请问一下,这三个要怎么写?

img


这三题也不会,有人可以帮我看看吗,不知道怎么办,帮帮我,没思路了,真不会

第一题

#include <stdio.h>
int main() {
    int numbers[100];
    int n, i;
    int odd_sum = 0, even_sum = 0;

    // 获取输入的正整数个数
    printf("请输入正整数的个数:");
    scanf("%d", &n);

    // 获取正整数序列
    printf("请输入%d个正整数,以空格分隔:", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    // 计算奇数位序上的奇数之和和偶数位序上的偶数之和
    for (i = 0; i < n; i++) {
        if ((i % 2 == 0) && (numbers[i] % 2 != 0)) {
            odd_sum += numbers[i];
        } else if ((i % 2 != 0) && (numbers[i] % 2 == 0)) {
            even_sum += numbers[i];
        }
    }

    // 输出结果
    printf("奇数位序上的奇数之和:%d\n", odd_sum);
    printf("偶数位序上的偶数之和:%d\n", even_sum);

    return 0;
}

第二题:

#include <stdio.h>
#include <ctype.h>

#define MAX_SIZE 100

int main() {
    char letters[MAX_SIZE];
    int numbers[MAX_SIZE];
    int symbols[MAX_SIZE];
    int letter_count = 0, number_count = 0, symbol_count = 0;
    char input[MAX_SIZE];
    int i;

    printf("请输入字符序列(以回车分隔),最多可输入%d个字符,输入EOF结束:\n", MAX_SIZE);

    while (fgets(input, sizeof(input), stdin) != NULL) {
        for (i = 0; input[i] != '\n'; i++) {
            if (isalpha(input[i])) {
                letters[letter_count] = tolower(input[i]);
                letter_count++;
            } else if (isdigit(input[i])) {
                int number = 0;
                int j;
                for (j = i; isdigit(input[j]); j++) {
                    number = number * 10 + (input[j] - '0');
                }
                numbers[number_count] = number;
                number_count++;
                i = j - 1;
            } else {
                symbols[symbol_count] = input[i];
                symbol_count++;
            }
        }
    }

    printf("字母数组内容:");
    for (i = 0; i < letter_count; i++) {
        printf("%c ", letters[i]);
    }
    printf("\n");

    printf("数字数组内容:");
    for (i = 0; i < number_count; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");

    printf("符号数组内容:");
    for (i = 0; i < symbol_count; i++) {
        printf("%d ", symbols[i]);
    }
    printf("\n");

    return 0;
}

在程序中,您可以连续输入字符序列,以回车分隔每个字符。程序会根据输入的字符将英文字母转换为小写字母并存入字符数组,将阿拉伯数字存入整数数组,将其他符号的ASCII码存入另一个数组。最后,程序将输出三个数组的内容。请注意,输入EOF来结束输入序列。

第三题;

#include <stdio.h>
#include <string.h>

#define MAX_SIZE 1000

void findOccurrences(const char *str, const char *article) {
    int articleLen = strlen(article);
    int strLen = strlen(str);
    int occurrences[MAX_SIZE];
    int count = 0;

    // 在文章中查找字符串的出现位置
    for (int i = 0; i <= articleLen - strLen; i++) {
        int j;
        for (j = 0; j < strLen; j++) {
            if (article[i + j] != str[j]) {
                break;
            }
        }

        if (j == strLen) {
            occurrences[count++] = i;
        }
    }

    // 输出出现位置
    if (count > 0) {
        printf("字符串 '%s' 在文章中出现的位置:\n", str);
        for (int i = 0; i < count; i++) {
            printf("%d ", occurrences[i]);
        }
        printf("\n");
    } else {
        printf("字符串 '%s' 在文章中未找到。\n", str);
    }
}

int main() {
    // 英文文章
    const char *article = "This is an example article. It demonstrates how to find occurrences of a given string in a text.";

    // 给定的字符串
    const char *str = "example";

    // 在文章中查找字符串的出现位置
    findOccurrences(str, article);

    return 0;
}

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7460392
  • 你也可以参考下这篇文章:【单链表】大数据,请把它推给还不会单链表的人
  • 除此之外, 这篇博客: 使用指针输入数据中的 为啥有时不设置长度,不会报错呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • scanf()会导致缓冲区溢出

      如果忘了限制scanf()读取字符串的长度,用户就可以输入远远超出程序空间的数据,多余的数据会写到计算机还没有分配好的存储器中。如果运气好,数据不但能保存,而且不会有任何问题。
      但缓冲区溢出很有可能会导致程序出错,这种情况通常被称为段错误或abort trap,不管出现什么错误消息,程序都会崩溃。