C语言基础习题50例(一)1-5

CuterCorley 等级 580 0 0
标签: C/C++

虎为百兽尊,罔敢触其怒。 惟有父子情,一步一回顾。

习题1

有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

实现思路: 显然,这个题目需要用到循环,并且是循环嵌套,先列出所有可能的组合,再去掉重复的组合即可。 代码如下:

#include <stdio.h>

int main(){
    int i, j, k, n = 0;
    for(i = 1; i < 5; i++){
        for(j = 1; j < 5; j++){
            for(k = 1; k < 5; k++){
                if(i != j && i != k && j != k){
                    n++;
                    printf("%d%d%d", i, j, k);
                    if(n % 5){
                        printf(" ");
                    }
                    else{
                        printf("\n");
                    }
                }
            }
        }
    }
    printf("\n\nThere are %d numbers.\n", n);

    return 0;
} 

打印:

123 124 132 134 142
143 213 214 231 234
241 243 312 314 321
324 341 342 412 413
421 423 431 432

There are 24 numbers.

习题2

企业发放的奖金根据利润提成。利润 (I) 低于或等于 10 万元时,奖金可提 10% ;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10% 提成,高于 10 万元的部分,可可提成 7.5% ; 20 万到 40 万之间时,高于 20 万元的部分,可提成 5% ; 40 万到 60 万之间时高于 40 万元的部分,可提成 3% ; 60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5% ,高于 100 万元时,超过 100 万元的部分按 1% 提成,从键盘输入当月利润 I ,求应发放奖金总数?

实现思路: 该题需要用到if条件判断或switch语句。

方式一——if语句:

#include <stdio.h>

int main(){
    long profit, bonus;
    float ratio;
    printf("Please input the profit:");
    scanf("%ld", &profit);
    if(profit > 0 && profit <= 100000){
        bonus = profit * 0.1;
    }
    else if(profit > 100000 && profit < 200000){
        bonus = 100000 * 0.1 + (profit - 100000) * 0.075;
    }
    else if(profit >= 200000 && profit < 400000){
        bonus = 100000 * 0.1 + 100000 * 0.075 + (profit - 200000) * 0.05;
    }
    else if(profit >= 400000 && profit < 600000){
        bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (profit - 400000) * 0.03;
    }
    else if(profit >= 600000 && profit < 1000000){
        bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (profit - 600000) * 0.015;
    }
    else{
        bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (profit - 1000000) * 0.01;
    };
    printf("The bonus is %ld", bonus);

    return 0;
} 

打印:

Please input the profit:1234567
The bonus is 41845

方式二——switch语句:

#include <stdio.h>

int main(){
    long profit, bonus = 0;
    printf("Please input the profit:");
    scanf("%ld", &profit);
    int pr = profit / 100000;
    if(pr > 10){
        pr = 10;
    }
    switch(pr){
        case 0:
            bonus = profit * 0.1;break;
        case 1:
            bonus = 100000 * 0.1 + (profit - 100000) * 0.075;break;
        case 2:
        case 3:
            bonus = 100000 * 0.1 + 100000 * 0.075 + (profit - 200000) * 0.05;break;
        case 4:
        case 5:
            bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (profit - 400000) * 0.03;
        case 6:
        case 7:
        case 8:
        case 9:
            bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (profit - 600000) * 0.015;break;
        case 10:
            bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (profit - 1000000) * 0.01;break;
        default:
            printf("Input Error!!\n");break;

    }
    printf("The bonus is %ld", bonus);

    return 0;
} 

效果与方式一相同。

习题3

一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?

实现思路: 方式一——使用简单循环:

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

int main(){
    int i;
    for(i = 0; i <= 100000; i++){
        int root1 = sqrt(i + 100), root2 = sqrt(i + 268);
        if(pow(root1, 2) == (i + 100) && pow(root2, 2) == (i + 268)){
            printf("%8d", i);
        }
    }
    printf("\n");

    return 0;
} 

打印:

      21     261    1581

方式二: 假设该数为 x。

  1. 则:x + 100 = n^2^, x + 100 + 168 = m^2^;
  2. 计算等式:m^2^ - n^2^ = (m + n)(m - n) = 168;
  3. 设m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数;
  4. 可得m = (i + j) / 2, n = (i - j) / 2,因为m、n为整数,所以i 和 j 要么都是偶数、要么都是奇数;
  5. 从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数;
  6. 由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1;
  7. 接下来将 i 的所有数字循环计算即可。
#include <stdio.h>

int main (void)
{
    int  i, j, n, x;
    for (i = 1; i < 168 / 2 + 1; i++){
        if (168 % i == 0){
            j = 168 / i;
            if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0){
                n = (i - j) / 2;
                x = n * n - 100;
                printf ("%8d", x);
            }
        }
    }
    printf("\n");

    return 0;
}

打印:

     -99      21     261    1581

显然,此时比方式一多了一个数-99,只要在方式一中i的初始值减小为-100即可。

习题4

输入某年某月某日,判断这一天是这一年的第几天?

实现思路: 假设月份为n,则天数为前n-1个月的天数加第n月的天数,如果n大于3时,要考虑是否为闰年,如果为闰年,则2月还要多加1天。

#include <stdio.h>

int main (void)
{
    int year, month, day, days, leap = 0;
    printf("Please input the date(YYYY_MM-DD):");
    scanf("%d-%d-%d", &year, &month, &day);
    switch(month){
        case 1:
            days = 0;break;
        case 2:
            days = 31;break;
        case 3:
            days = 59;break;
        case 4:
            days = 90;break;
        case 5:
            days = 120;break;
        case 6:
            days = 151;break;
        case 7:
            days = 181;break;
        case 8:
            days = 212;break;
        case 9:
            days = 243;break;
        case 10:
            days = 273;break;
        case 11:
            days = 304;break;
        case 12:
            days = 334;break;
        default:
            printf("Input Error");break;       
    }
    days += day;
    if(year % 4 ==0 && year % 100 != 0 || year % 400 == 0){
        leap = 1;
    }
    if(leap && month > 2){
        days += 1;
    }
    printf("Days = %d\n", days);

    return 0;
}

打印:

Please input the date(YYYY_MM-DD):2020-05-26
Days = 147

习题5

输入三个整数 x、y、z ,请把这三个数由小到大输出。

实现思路: 通过两两比较找出三者中最大和最小的数。

#include <stdio.h>

int main (void)
{
    int x, y, z, temp;
    printf("Please input 3 numbers:\n");
    scanf("%d %d %d", &x, &y, &z);
    if(x > y){
        temp = x;
        x = y;
        y = temp;
    }
    if(x > z){
        temp = x;
        x = z;
        z = temp;
    }
    if(y > z){
        temp = y;
        y = z;
        z = temp;
    }
    printf("Small to big: %d %d %d", x, y, z);

    return 0;
}

打印:

Please input 3 numbers:
12 34 23
Small to big: 12 23 34

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

收藏
评论区

相关推荐

C++概述
概述 C 是静态,可编译,通用,大小写敏感,格式自由的编程语言,它支持程序化,面向对象的,和泛型编程方式。 C 被看作是中间层语言,因为它同时包含了低级语言和高级语言的特性。 C 是于 1979 年在新泽西的茉莉山丘的贝尔实验室由 Bjarne Stroustrup 开发的,它是 C 语言的加强版,最开始它被称作 “C with Classes”,但是
C++ 基本语法
C 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 对象具有状态和行为。例如:一只狗的状态 颜色、名称、品种,行为 摇动、叫唤、吃。对象是类的实例。 类 类可以定义为描述对象行为/状态的模板/蓝图。 方法 从基本上说,一个方法表示一种行为。一个类可以包含多个
统计字符串中字符出现的次数(Python版)
字符串转list python s 'aabbccd' list1 list(s) 方法一: python list1 'a', 'a', 'b', 'c', 'c', 'c', 'c' dict_cnt {} for value in list1: dict_cntvalue dict_cnt.get(value,
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语言基础
C语言32个关键字auto 声明自动变量short 声明短整型变量或函数int 声明整型变量或函数long 声明长整型变量或函数float 声明浮点型变量或函数double 声明双精度变量或函数char 声明字符型变量或函数struct 声明结构体变量或函数union 声明共用数据类型enum 声明枚举类型typedef 用以给数据类型取别名co
C语言入门系列之1.C语言概述和上机运行简单C程序
一、C语言的发展过程C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言,同时由B.W.Kernighan和D.M.Ritchit合著了著名的《THE C PROGRAMMING LANGUAGE》一书 ,通常简称为《K&R》,也有人称之为 《K&R》标准。但是,在《K&R》中并没有定义一个完整的C语言标
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例(七)31-35
喜提头条号黄V,有兴趣的朋友可以关注一波,主写IT领域。 习题31 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。实现思路:使用switch语句,如果第1个字母一样,则判断用情况语句或if语句判断第2个字母。也可以使用条件判断语句,实现相近。代码如下:cinclude<stdio.hint ma
C语言基础习题50例(十)46-50
知足常足,终身不辱。月圆缺,水满溢,事情到了极致一定会遭受祸患,只有懂得知足,才是富足。 习题46 宏define命令练习。实现思路:宏通过define命令定义,分为无参宏和带参宏,可以分别进行测试。这只是一种简单的字符串代换。代码如下:cinclude <stdio.hdefine TRUE 1define FALSE 0
游戏安全实践的一些思考
移动的游戏能够稳定健康的上线。主要需要依赖以下在四个方面:1.前端展示,或者说客户端正常运行。性能稳定不崩溃,不过热能够稳定运行。2.后端,或者游戏后台服务端的。不但要稳定。还有能在有限的服务器资源下,能承受大量的同时在线用户。而且要让游戏中的每个模块都能够承受承受大量的同时在线用户。3.安全也是重点之中。这既包括客户端,又包括服务端。客户端的安全,包括要防
小学生都能听懂的C++:第一讲 初识C++
视频链接:<https://www.bilibili.com/video/BV1hw411f7nz/请留下你的三连支持!!