【C语言每日一题】编程题入门篇-003

一、求和训练

题目描述

求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和

输入格式

a b c

输出格式

1+2+...+a + 1^2+2^2+...+b^2 + 1/1+1/2+...+1/c

样例输入

100 50 10

样例输出

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

int main() {
    int a, b, c;
    double sum1, sum2, sum3;

    // 读取输入
    scanf("%d %d %d", &a, &b, &c);

    // 计算1到a的和
    sum1 = (double)a * (a + 1) / 2;

    // 计算1到b的平方和
    sum2 = (double)b * (b + 1) * (2 * b + 1) / 6;

    // 计算1到c的倒数和
    for (int i = 1; i <= c; i++) {
        sum3 += 1.0 / i;
    }

    // 计算总和
    double total_sum = sum1 + sum2 + sum3;

    // 输出结果,保留两位小数
    printf("%.2f\n", total_sum);

    return 0;
}

二、数组插入处理

题目描述

已有一个已正序排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。

输入格式

第一行,原始数列。 第二行,需要插入的数字。

输出格式

排序后的数列

样例输入

1 7 8 17 23 24 59 62 101
50

样例输出

1
7
8
17
23
24
50
59
62
101
#include <stdio.h>

int main() {
    int arr[10] = {0};  // 定义数组,初始值为0
    int num;
    int i, j;

    // 读取原始数列
    for (i = 0; i < 9; i++) {
        scanf("%d", &arr[i]);
    }

    // 读取需要插入的数字
    scanf("%d", &num);

    // 寻找插入位置
    for (i = 0; i < 9; i++) {
        if (arr[i] >= num) {
            break;
        }
    }

    // 将大于num的元素向后移动一位
    for (j = 9; j > i; j--) {
        arr[j] = arr[j - 1];
    }

    // 插入数字
    arr[i] = num;

    // 输出排序后的数组
    for (i = 0; i < 10; i++) {
        printf("%d\n", arr[i]);
    }

    return 0;
}

三、数字逆序输出

题目描述

输入10个数字,然后逆序输出。

输入格式

十个整数

输出格式

逆序输出,空格分开

样例输入

1 2 3 4 5 6 7 8 9 0

样例输出

0 9 8 7 6 5 4 3 2 1
#include <stdio.h>

int main() {
    int numbers[10];
    int i;

    // 读取10个整数
    for (i = 0; i < 10; i++) {
        scanf("%d", &numbers[i]);
    }

    // 逆序输出
    for (i = 9; i >= 0; i--) {
        printf("%d ", numbers[i]);
    }

    printf("\n");

    return 0;
}

四、自定义函数求一元二次方程

题目描述

求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。

输入格式

a b c

输出格式

x1=? x2=?

样例输入

4 1 1

样例输出

x1=-0.125+0.484i x2=-0.125-0.484i
#include <stdio.h>
#include <math.h>
#include <complex.h>

// 函数声明
void solveQuadratic(double a, double b, double c, double *x1, double *x2);
void solveQuadraticReal(double a, double b, double c, double *x1, double *x2);
void solveQuadraticEqual(double a, double b, double c, double *x1, double *x2);
void solveQuadraticComplex(double a, double b, double c, double complex *x1, double complex *x2);

int main() {
    double a, b, c;
    double x1, x2;
    double complex cx1, cx2;

    // 读取输入
    scanf("%lf %lf %lf", &a, &b, &c);

    double discriminant = b * b - 4 * a * c;

    if (discriminant > 0) {
        solveQuadraticReal(a, b, c, &x1, &x2);
        printf("x1=%.3f x2=%.3f\n", x1, x2);
    } else if (discriminant == 0) {
        solveQuadraticEqual(a, b, c, &x1, &x2);
        printf("x1=x2=%.3f\n", x1);
    } else {
        solveQuadraticComplex(a, b, c, &cx1, &cx2);
        printf("x1=%.3f%.3fi x2=%.3f%.3fi\n", creal(cx1), cimag(cx1), creal(cx2), cimag(cx2));
    }

    return 0;
}

void solveQuadraticReal(double a, double b, double c, double *x1, double *x2) {
    *x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
    *x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
}

void solveQuadraticEqual(double a, double b, double c, double *x1, double *x2) {
    *x1 = *x2 = -b / (2 * a);
}

void solveQuadraticComplex(double a, double b, double c, double complex *x1, double complex *x2) {
    double realPart = -b / (2 * a);
    double imaginaryPart = sqrt(-1 * (b * b - 4 * a * c)) / (2 * a);
    *x1 = realPart + I * imaginaryPart;
    *x2 = realPart - I * imaginaryPart;
}

五、自定义函数处理素数

题目描述

写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。

输入格式

一个数

输出格式

如果是素数输出prime 如果不是输出not prime

样例输入

97

样例输出

prime
#include <stdio.h>

// 判断素数的函数
int isPrime(int n) {
    if (n <= 1) {
        return 0;  // 1及以下的数不是素数
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return 0;  // 发现因子则不是素数
        }
    }
    return 1;  // 没有发现因子则是素数
}

int main() {
    int number;

    // 读取输入
    scanf("%d", &number);

    // 判断并输出结果
    if (isPrime(number)) {
        printf("prime\n");
    } else {
        printf("not prime\n");
    }

    return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值