11个c语言编程练习题

0. 钞票和硬币

money.c

读取一个带有两个小数位的浮点数,代表货币价值。将该值分解为多种钞票和硬币的和,要求使用的钞票和硬币的总数量尽可能少。 货币面值有100,50,20,10,5,1,0.5,0.1,0.05,0.01。

c 复制代码
#include <stdio.h>
 
int main() {
    float input;
    printf("输入货币价值: ");
    scanf("%f", &input);
 
    float money[] = {100.00, 50.00, 20.00, 10.00, 5.00, 1.00, 0.50, 0.10, 0.05, 0.01};//钞票 和 硬币 
 
    for (int i = 0; i < 10; i++) {
        int count = input / money[i];
        if(count!=0) printf("%d个%.2f元 ", count, money[i]);
        input -= count * money[i];
    }
 
    return 0;
}

1. 算术平方根

square_root.c

用二分法的方法求一个非负数的算术平方根,精度到0.0001

eg: 输入3.8输出1.9494

c 复制代码
#include <stdio.h>
#include <math.h>
 
double sqrt_binary(double num, double epsilon) {
    double left = 0;
    double right = num;
    double mid;
    while (right - left > epsilon) {
        mid = (left + right) / 2;
        if (mid * mid > num) {
            right = mid;
        } else {
            left = mid;
        }
    }
    return (left + right) / 2;
}
 
int main() {
    float input_num;
    printf("输入非负数: ");
    scanf("%f", &input_num);
    double epsilon = 0.0001; 
    double result = sqrt_binary(input_num, epsilon);
    printf("算术平方根为: %.4f", result);
    return 0;
}

2. 哥德巴赫猜想

Goldbach_conjecture.c

验证哥德巴赫猜想:任何一大于6的偶数均可表示为两个质数之和。即,输入一个大于6的偶数,输出一组满足条件的两个质数。

eg: 输入20 输出3 17

c 复制代码
#include <stdio.h>

int is_prime(int num) {
	int i;
    if (num <= 1) return 0;
    for (i = 2; i * i <= num; i++) {
        if (num % i == 0) return 0;
    }
    return 1;
}// 检查一个数是否为质数

int main() {
    int n,i;
    printf("请输入一个大于6的偶数: ");
    scanf("%d", &n);
    if (n <= 6 || n % 2 != 0) {
        printf("输入无效,请输入一个大于6的偶数。\n");
        return 1;
    }
    // 寻找两个质数,使其和等于 n
    for (i = 2; i <= n / 2; i++) {
        if (is_prime(i) && is_prime(n - i)) {
            printf("%d %d\n", i, n - i);
            return 0; // 找到一对质数后退出
        }
    }
    printf("未找到符合条件的质数对。\n");
    return 0;
}

3. 打印星号菱形

rhombus.c

打印星号组成的菱形图案

c 复制代码
#include <stdio.h>

int main() {
    int i, j, k, n = 4;  // n 菱形的一半高度(即上三角形的行数)
    for (i = 1; i <= n; i++) { // 上半部分(包括中间行)
        for (j = 1; j <= n - i; j++) {
            printf(" ");  // 打印前导空格,使*居中
        }
        for (k = 1; k <= 2 * i - 1; k++) {
            printf("*");  // 打印*
        }
        printf("\n");  // 换行
    }
    for (i = n - 1; i >= 1; i--) { // 下半部分
        for (j = 1; j <= n - i; j++) {
            printf(" ");  // 打印前导空格,使*居中
        }
        for (k = 1; k <= 2 * i - 1; k++) {
            printf("*");  // 打印*
        }
        printf("\n");  // 换行
    }
    return 0;
}

4. 分解质因数

factorize_into_prime.c

质因数分解是将一个合数(非质数)分解为若干个质数的乘积。将一个正整数分解质因数。例如:输入90,打印出90=233*5。

c 复制代码
#include <stdio.h>

int is_prime(int num) {
	int i;
    if (num <= 1) return 0;
    for (i = 2; i * i <= num; i++) {
        if (num % i == 0) return 0;
    }
    return 1;
}// 检查一个数是否为质数


int main() {
    int n, i;
    printf("请输入需要分解的正整数(大于3且为非质数): ");
    scanf("%d", &n);
	//printf("分解质因数的结果为: %d=", n);
	if(n>3 && is_prime(n)==0) {
		printf("%d=", n);
		for (i = 2; i <= n; i++) {
        while (n % i == 0) {
            printf("%d", i);
            n = n / i;
            if (n > 1)  // 如果 n 不是最后一个质因数,则打印 '*'
                printf("*");
			}
    	}
	}    	
    else printf("输入不合理"); 
    printf("\n");
    return 0;
}

5. 整数的所有因数

factors.c

假如a*b=c(a、b、c都是整数),那么我们称a和b就是c的因数。

c 复制代码
#include <stdio.h>
  
int main()
{
    int n, i;
    printf("输入一个整数: ");
    scanf("%d",&n);
    printf(" %d 的因数有: ", n);
    for(i=1; i <= n; ++i)
    {
        if (n%i == 0)
        {
            printf("%d ",i);
        }
    }
    return 0;
}

6. 两数的所有公因数

common_factor.c

寻找两个数的所有公因数。

c 复制代码
#include <stdio.h>

int main()
{
    int n1, n2, i;
    printf("输入两数:");
    scanf("%d %d", &n1, &n2);
    for (i = 1; i <= (n1 > n2 ? n2 : n1) ; ++i)
    {
        if (n1%i == 0 && n2%i == 0)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

7. 求Sn=a+aa+....(n个a)之值

sum.c

求Sn=a+aa+aaa+....+aa...a(n个a)之值,其中a是一个数字,n表示a的位数,a和n由键盘输入。

c 复制代码
#include <stdio.h>
int main(){
	int a,n,s=0,m,k;
	printf("请输入a和n: \n");
	scanf("%d %d",&a,&n);
	k=a;
	for(m=1;m<=n;m++){
		s=s+k;
		k=k*10+a;
	}
	printf("Sn=%d\n",s);
	return 0;
}

8. 小球反弹

ball.c

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下后再次反弹,按此规律,直到第8次反弹时,反弹多少高度?行程共有多少米?

c 复制代码
#include <stdio.h>
int main(){
	float h=100,s=100;
	int i;
	for(i=1;i<=8;i++){
		h=h/2;
		s=s+h*2;
	}
	printf("第8次反弹时,反弹高度h=%f,行程共有s=%f\n",h,s-h);
}

9. 换分币

coins.c

用一元人民币兑换成1分、2分和5分硬币,共有多少种不同的兑换方法。总硬币数目小于等于100.

c 复制代码
#include<stdio.h>
int main() {
	int i, j, k, count = 1;
	printf("兑换方法 : \n");
	for (i = 0; i <= 100; i++) {
		for (j = 0; j <=100 - i; j += 2) {
		for (k = 0; k <= 100 - i - 2* j; k += 5) {
			if (i +j + k == 100){
			printf((count-1) % 4 ? "法%d:1*%d+2*%d+5*%d\t":"法%d:1*%d+2*%d+5*%d\n", count++,i,j/2,k/5);
		}}}}			
	return 0; 	
}

10. 分数之和

sum1.c

求这样的四个自然数p,q,r,s(p<=q<=r<=s),使得以下等式成立:
1 p + 1 q + 1 r + 1 s = 1 \frac{1}{p}+\frac{1}{q}+\frac{1}{r}+\frac{1}{s}=1 p1+q1+r1+s1=1

c 复制代码
#include <stdio.h>
int main() {
    int p, q, r, s;
    for (p = 1; p <= 100; p++) { //遍历所有可能的p,q,r,s的值,设上限为100,可调
        for (q = p; q <= 100; q++) {
            for (r = q; r <= 100; r++) {
                for (s = r; s <= 100; s++) {
                    if (1.0/p + 1.0/q + 1.0/r + 1.0/s == 1) {
                        printf("p=%d\tq=%d\tr=%d\ts=%d\t" //太长了换个行 
						"1/%2d + 1/%2d + 1/%2d + 1/%2d = 1\n", p, q, r, s, p, q, r, s);
                    }}}}}
    return 0;
}
相关推荐
小牛itbull1 小时前
ReactPress与WordPress:一场内容管理系统的较量
开发语言·javascript·wordpress·reactpress
yava_free6 小时前
详解一下JVM诊断方法和其工具的使用
java·开发语言
MATLAB滤波7 小时前
MATLAB中的绘图技巧
开发语言·matlab
致宏Rex8 小时前
Rust 入门指南(零):安装及 Cargo 管理器
开发语言·rust
伏虎山真人8 小时前
R门 - rust第一课陈天 -内存知识学习笔记
开发语言·r语言
好开心338 小时前
javaScript交互补充(元素的三大系列)
开发语言·前端·javascript·ecmascript
码农多耕地呗9 小时前
刷别的学校oj—河工大oj1073-1099
开发语言·c++·算法
Envyᥫᩣ9 小时前
掌握C#中的异步编程:async和await关键字详解
开发语言·c#