C语言基础习题50例(四)16-20

CuterCorley 等级 489 0 0

给大家介绍一堂Python入门课https://www.bilibili.com/video/BV1RZ4y1n75v,感觉还不错,适合初学者入门。

习题16

输入两个正整数 m 和 n ,求其最大公约数和最小公倍数。

实现思路: 求两个数的最大公约数分别采用辗转相除法、辗转相减法、枚举法得到,最小公倍数用两个数之积除以最大公约数即可获得。

方式一——辗转相除法: 思路: (1)将两整数求余 a%b = x; (2)如果x = 0;则b为最大公约数; (3)如果x != 0,则 a = b、b = x,继续从1开始执行。

该循环是否继续的判断条件是x是否为0

代码如下:

#include <stdio.h>

int main(){
    int m, n, gcd, mcm, mid;
    printf("Please input 2 numbers:\n");
    scanf("%d %d", &m, &n);
    mid = m % n;
    mcm = m * n;
    while(mid != 0){
        m = n;
        n = mid;
        mid = m % n;
    }
    gcd = n;
    mcm /= gcd;
    printf("Greatest common divisor is %d\nMinimum common multiple is %d\n", gcd, mcm);


    return 0;
}

打印:

Please input 2 numbers:
12 45
Greatest common divisor is 3
Minimum common multiple is 180

方式二——辗转相减法: 思路: (1)如果a>b ,a = a - b; (2)如果b>a ,b = b - a; (3)假如a = b ,则 a或b 是最大公约数; (4)如果a != b,则继续相减,直至a = b。

代码如下:

#include <stdio.h>

int main(){
    int m, n, gcd, mcm;
    printf("Please input 2 numbers:\n");
    scanf("%d %d", &m, &n);
    mcm = m * n;
    while(m != n){
        if(m > n){
            m -= n;
        }
        else if(m < n){
            n -= m;
        }
    }
    gcd = m;
    mcm /= gcd;
    printf("Greatest common divisor is %d\nMinimum common multiple is %d\n", gcd, mcm);


    return 0;
}

打印:

Please input 2 numbers:
18 56
Greatest common divisor is 2
Minimum common multiple is 504

方式三——枚举法: 思路: (1)min为a、b中最小的一个数; (2)分别用a、b对i求余数,即看是否能被整除; (3)直到a、b同时都能被i整除; (4)如不能整除,i加1、继续开始执行,直到i等于min。

代码如下:

#include <stdio.h>

int main(){
    int m, n, gcd, mcm, min, i;
    printf("Please input 2 numbers:\n");
    scanf("%d %d", &m, &n);
    mcm = m * n;
    min = m > n ? n : m;
    for(i = 1; i <= min; ){
        if(m % i == 0 && n % i == 0){
            gcd = i;
        }
        i++;
    }
    mcm /= gcd;
    printf("Greatest common divisor is %d\nMinimum common multiple is %d\n", gcd, mcm);    

    return 0;
}

打印:

Please input 2 numbers:
28 70
Greatest common divisor is 14
Minimum common multiple is 140

习题17

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

实现思路: 使用循环和条件判断。 代码如下:

#include <stdio.h>

int main(){
    int digit = 0, space = 0, chara = 0, other = 0;
    char inchar;    
    while((inchar = getchar()) != '\n'){
        if(inchar >= 'a' && inchar <= 'z' || inchar >= 'A' && inchar <= 'Z'){
            chara++;
        }
        else if(inchar >= '0' && inchar <= '9'){
            digit++;
        }
        else if(inchar == ' '){
            space++;
        }
        else{
            other++;
        }
    }
    printf("char = %d, digit = %d, space = %d, other = %d\n", chara, digit, space, other);

    return 0;
}

打印:

zxcvb 123 #$% ASDFG!@ #$%
char = 10, digit = 3, space = 4, other = 8

习题18

求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

实现思路: 先计算出每一项的值,再相加。

代码如下:

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

int main(){
    int gen_num(int a, int i);
    int a, n, sum, i;
    printf("Please input a and n: ");
    scanf("%d %d", &a, &n);
    for(i = 1; i <= n; i++){
        sum += gen_num(a, i);
    }
    printf("sum = %d\n", sum);

    return 0;
}

int gen_num(int a, int i){
    int j, num = 0;
    for(j = 1; j <= i; j++){
        num += a * pow(10, j - 1);
    }
    return num;
}

打印:

Please input a and n: 3 7
sum = 3703701

习题19

一个数如果恰好等于它的因子之和,这个数就称为完数。 例如6=1 + 2 + 3,所以6是完数。 编程找出1000以内的所有完数。

实现思路: 循环和判断相结合。

代码如下:

#include<stdio.h>
#define N 1000

int main(){
    int i,j,k,n,sum;
    int a[256];
    for(i=2;i<=N;i++){
        sum=a[0]=1;
        k=0;
        for(j=2;j<=(i/2);j++){
            if(i%j==0){
                sum+=j;
                a[++k]=j;
            }            
        }
        if(i==sum){
            printf("%d=%d",i,a[0]);
            for(n=1;n<=k;n++)
                printf("+%d",a[n]);
            printf("\n");
        }        
    }

    return 0;
}

打印:

6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248

习题20

一球从100米高度自由落下,每次落地后反跳回原高度的一半、再落下,求它在第 10 次落地时,共经过多少米?第 10 次反弹多高?

实现思路: 简单循环实现。

代码如下:

#include<stdio.h>
#define N 1000

int main(){
    float sum = 100, height = 100, i;
    for(i = 1; i < 10; i++){
        height /= 2.0;
        sum += (height * 2);
    }
    printf("Sum = %10.6f\nHeight = %10.6f", sum, height / 2.0);

    return 0;
}

打印:

Sum = 299.609375
Height =   0.097656

本文原文首发来自博客专栏C语言实战,由本人转发至https://www.helloworld.net/p/wyZS57fXKCgb,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/106478490查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

收藏
评论区

相关推荐

C++概述
概述 C 是静态,可编译,通用,大小写敏感,格式自由的编程语言,它支持程序化,面向对象的,和泛型编程方式。 C 被看作是中间层语言,因为它同时包含了低级语言和高级语言的特性。 C 是于 1979 年在新泽西的茉莉山丘的贝尔实验室由 Bjarne Stroustrup 开发的,它是 C 语言的加强版,最开始它被称作 “C with Classes”,但是
【Golang】Go入门及进阶书籍推荐
Go入门教程全集 链接: https://pan.baidu.com/s/1mWD7DpRa56WXi7WmNaohOg(https://pan.baidu.com/s/1mWD7DpRa56WXi7WmNaohOg) 提取码: ki1e Cloud.Native.Go.pdf C和指针.pdf C面向对象多线程编程.pdf Design Patt
带你掌握不一样的监控进程技术
文章目录 1.技术应用背景(about:blank1_6) 2.效果展示(about:blank2_11) 3.功能代码实现(about:blank3_18) 4.知识背景清单(about:blank4_43) 5.WMI相关概念(about:blank5WMI_70) 6.WMI相关函数(abo
c++11 实现单例模式
C11出来后,里面新增加了好多好用的功能 下面的单例就是使用了C11中的标准库中的mutex和unique_prt 进行内存管理的. 此单例模式不用担心内存的释放问题 pragma once include <memory include <mutex template <class T class Singleton { public: ty
C语言_练习题(一)
前言: 看懂理解代码很容易,难的是把所理解的融会贯通,融合到实例中,你会发现事实和理论会有些许差别,编写实例能更好的帮你积累经验。 0x1 编写一个程序,要求提示输入一个ASCII码值(如,66),然后打印输入的字符。 代码: include <stdio.h int main(){ char i; printf("请输入一个ASCI
C语言基础习题50例(一)1-5
虎为百兽尊,罔敢触其怒。惟有父子情,一步一回顾。 习题1 有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?实现思路:显然,这个题目需要用到循环,并且是循环嵌套,先列出所有可能的组合,再去掉重复的组合即可。代码如下:cinclude <stdio.hint main(){ int i, j, k,
C语言基础习题50例(二)6-10
给大家推荐一门大数据Spark入门课程,希望大家喜欢。 习题6 用 号输出字母C的图案。实现思路:单行打印即可。代码如下:cinclude <stdio.h int main (void){ printf("\n"); printf("\n"); printf("\n"); printf("
C语言基础习题50例(三)11-15
你们看出神马了吗(\\^_\^\) 习题11 有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少实现思路:从第1个月起,兔子对数分别为1、1、2、3、5、8、13、21...,显然是斐波拉契数列。代码如下:cinclude<stdio.hint mai
C语言基础习题50例(四)16-20
给大家介绍一堂Python入门课,感觉还不错,适合初学者入门。 习题16 输入两个正整数 m 和 n ,求其最大公约数和最小公倍数。实现思路:求两个数的最大公约数分别采用辗转相除法、辗转相减法、枚举法得到,最小公倍数用两个数之积除以最大公约数即可获得。方式一——辗转相除法:思路:(1)将两整数求余 a%b x;(2)如果x 0;则b为最大公
C语言基础习题50例(五)21-25
你不得不学的职场高效表达训练,需要的朋友自取哟。 习题21 猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少。实现思路:采用逆向思维进行反推。代码如下:c
C语言基础习题50例(六)26-30
习题26 利用递归方法求5。实现思路:使用递归。代码如下:cinclude<stdio.hint main(){ int rec(int n); int result rec(5); printf("5 %d\n", result); return 0;}int rec(int n){ if(n 1 || n
C语言基础习题50例(七)31-35
喜提头条号黄V,有兴趣的朋友可以关注一波,主写IT领域。 习题31 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。实现思路:使用switch语句,如果第1个字母一样,则判断用情况语句或if语句判断第2个字母。也可以使用条件判断语句,实现相近。代码如下:cinclude<stdio.hint ma
C语言基础习题50例(八)36-40
习题36 求100之内的素数。实现思路:使用函数实现,并循环遍历依次判断。代码如下:cinclude <stdio.hinclude <math.h int main(){ int isPrime(int n); int i, count 0; for(i 2; i < 101; i){ if(isPrime(i)){
C语言基础习题50例(十)46-50
知足常足,终身不辱。月圆缺,水满溢,事情到了极致一定会遭受祸患,只有懂得知足,才是富足。 习题46 宏define命令练习。实现思路:宏通过define命令定义,分为无参宏和带参宏,可以分别进行测试。这只是一种简单的字符串代换。代码如下:cinclude <stdio.hdefine TRUE 1define FALSE 0
ONNX 开始
环境 基础 bashconda create n onnx python3.8 yconda activate onnx ONNX https://github.com/onnx/onnxconda install c condaforge onnx ypython c "import onnx; print(onnx.version)"pyimport