数组相关问题,编写一个程序

1.从键盘输入一段字符(最多80个字符),分别统计出其中的字母、数字、空格和其他字符的个数,并将小写字母转变为大写字母输出。

2.从键盘输入n个整数(n<1000),存放在一个一维数组中,输出其中的完全数。

3.从键盘输入n个整数(n<1000),将这些数存放在一个一维数组中,求数列中所有数值的和及平均值,并从小到大输出所有偶数元素。

4.从键盘输入一段字符,将字符串首尾互换,并与原字符串相连接后输出。

1

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

#define N 81

int main()
{
    char a[N];
    int num_letters = 0, num_digits = 0, num_spaces = 0, num_others = 0;
    fgets(a, N, stdin);
    char *p = a;
    while (*p)
    {
        if (isalpha(*p))
        {
            num_letters++;
            if (islower(*p))
                *p = toupper(*p);
        }
        else if (isdigit(*p))
            num_digits++;
        else if (*p == ' ')
            num_spaces++;
        else
            num_others++;
        p++;
    }
    printf("Number of Letters: %d\n", num_letters);
    printf("Number of Digits: %d\n", num_digits);
    printf("Number of Spaces: %d\n", num_spaces);
    printf("Number of Other Characters: %d\n", num_others);
    printf("%s\n", a);
    return 0;
}

2

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

#define N 1000

int is_perfect_number(int x)
{
    if (x < 2)
        return 0;
    int s = 1;
    int n = (int)sqrt(x);
    for (int i = 2; i <= n; i++)
    {
        if (x % i == 0)
        {
            s += i;
            int j = x / i;
            if (i != j)
                s += j;
        }
    }
    return s == x;
}

int main()
{
    int a[N];
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    int count = 0;
    for (int i = 0; i < n; i++)
    {
        if (is_perfect_number(a[i]))
        {
            printf("%d ", a[i]);
            count++;
        }
    }
    if (count == 0)
        printf("There is no perfect number in the array.");
    printf("\n");
    return 0;
}

3

#include <stdio.h>

#define N 1000

int main()
{
    int a[N];
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    int s = 0;
    for (int i = 0; i < n; i++)
        s += a[i];
    printf("Sum: %d\n", s);
    printf("Average: %.1f\n", (float)s / (float)n);
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (a[j] < a[i])
            {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
    for (int i = 0; i < n; i++)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}

4


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

#define N 256

int main()
{
    char s[N], t[N];
    scanf("%s", s);
    const char *p = s;
    char *q = t;
    while (*p)
        *q++ = *p++;
    while (--p >= s)
        *q++ = *p;
    *q = '\0';
    printf("%s\n", t);
    return 0;
}