两道c语言程序题,求解

1.输入一串字母字符,长度不超过20,存放到 a 数组中,将宇符串中毎一个小写字母减去' A ’宇符的结果值存放到另一个整型数组 b 中,长度可以定义为20,最后输出 b 数组内容。例如:输入“ AScxDmbTk 2”,各个元素与’ A ’计算后的结果存放到数组中,最后输出数组 b 每一个元素结果为34,55,44,3
3,57.
2.编程找出1000-9999范围内,数据的前两位和后两位之和的平方等于其自身的数据并统计其个数,最后输出每一个符合条件的数据及个数。要求:主函数完成子函数的调用及符合条件的数据的输出,数据的拆分计算及判定采用子函数实现,判定结果返回主函数。例如:9801,其前两位98和后两位01,满足
(98+01)*(98+01)-9801.

题1:

#include<stdio.h>
#include<math.h>
int main()
{
    char a[20];
    int b[20],k=0,count=0;
    gets(a);        //输入a数组
    for (int i = 0; i < strlen(a); i++)   //将a数组元素转换为b数组元素
        if (a[i] >= 'a' && a[i] <= 'z')   //转换条件是:a的数组元素是小写字母,即a<=a[i]<=z
        {
            b[k] = a[i] - 'A';
            count++;            //统计小写字母个数,方便输出b数组
            k++;
        }
    for (int i = 0; i < count; i++)  //输出b数组
        printf("%d", b[i]);
    return 0;
}

题2:

#include<stdio.h>
#include<math.h>
int fun(int i)
{
    int a, b, c, d,num_12,num_34;
    a = i % 10;//个位
    b = i / 10 % 10;//十位
    c = i / 100 % 10;//百位
    d = i / 1000 % 10;//千位
    num_12 = b * 10 + a;  //前两位
    num_34 = d * 10 + c;  //后两位
    if ((num_12 + num_34) * (num_12 + num_34) == i)
        return 1;
    else
        return 0;
}
int main()
{
    int i, count = 0,flag;
    for (i = 1000; i < 9999; i++)
    {
        if (fun(i))
        {
            count;
            flag = i;
        }
    }
    printf("最后输出每一个符合条件的数据:%d\n符合条件的数据个数:%d", flag, count);
    return 0;
}

题目一就是字符输入和减法操作

img

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    char a[21]; //不超过20,所以申请21个空间
    int i=0,n=0;
    int b[20];
    gets_s(a); //如有错误,改成gets(a);
    while (a[i]!='\0')
    {
        if (a[i] >= 'a' && a[i] <= 'z')
            b[n++] = a[i] - 'A';
        i++;
    }
    for (i = 0; i < n; i++)
    {
        if (i < n - 1)
            printf("%d,", b[i]);
        else
            printf("%d", b[i]);
    }
    return 0;
}

题目二:

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//数据拆分
void splitnmb(int n, int* a, int* b)
{
    *a = n / 100;
    *b = n % 100;
}
//判断是否满足
int isfun(int n, int a, int b)
{
    if ((a + b) * (a + b) == n)
        return 1;
    else
        return 0;
}


int main()
{
    int i;
    int a, b;
    int nmb = 0;
    for (i = 1000; i <= 9999; i++)
    {
        splitnmb(i, &a, &b);
        if (isfun(i, a, b)) 
        {
            nmb++;
            printf("%d ", i);
        }
            
    }
    printf("\n总共%d个\n", nmb);
    return 0;
}

#include <stdio.h>
#include <string.h>
int main(){
    //输入一串字母字符,长度不超过20,存放到 a 数组中,将宇符串中毎一个小写字母减去' A ’宇符的结果值存放到另一个整型数组 b 中,
    //长度可以定义为20,最后输出 b 数组内容。例如:输入“ AScxDmbTk 2”,各个元素与’ A ’计算后的结果存放到数组中,
    //最后输出数组 b 每一个元素结果为34,55,44,33,57.
    char a[20];
    int b[20]={0};
    int i, j =0;
    gets(a);
    for(i =0; i<20; i++){
        if (a[i]<='z' && a[i]>= 'a'){
            b[j] = a[i] - 'A';
            j++;
        }
    }
    for (int k =0;k<j;k++){
        printf("%d ",b[k]);
    }
}