数据结构与算法(1) #期末复习

​期末要考试了,你是不是还没复习!!!

怎么办?

我不想挂科啊!!!

来找我啊。嘿嘿嘿。

​想要不挂科,就只有一个路可以走,那就是。。。刷题。。。来吧!!!开整!!!

#1.取数位I

题目描述

​ 给定一个两位数的整数,分别输出它的十位数和个位数。

输入

​ 一个整数 a(10≤a≤99)

输出

​ 第一行为 a 的十位数​ 第二行为 a 的个位数

#include <stdio.h>

int main() {
    int a; //定义一个整数变量
    scanf("%d", &a); //从标准输入读取一个整数
    printf("%d\n", a / 10); //输出十位数,即整数除以10的商
    printf("%d\n", a % 10); //输出个位数,即整数除以10的余数
    return 0;
}

 

#2.取数位II

题目描述

​ 给定一个三位数的整数,分别输出它的百位数、十位数和个位数。

输入

​ 一个整数 a(100≤a≤999)

输出

​ 第一行为 a 的百位数​ 第二行为 a 的十位数​ 第三行为 a 的个位数

#include <stdio.h>

int main() {
    int a; //定义一个整数变量
    scanf("%d", &a); //从标准输入读取一个整数
    printf("%d\n", a / 100); //输出百位数,即整数除以100的商
    printf("%d\n", (a / 10) % 10); //输出十位数,即整数除以10的商再除以10的余数
    printf("%d\n", a % 10); //输出个位数,即整数除以10的余数
    return 0;
}

1.printf("%d\n", (a / 10) % 10)?

 

这一行的意思是输出整数 a 的十位数。具体的步骤如下:

  • 首先,a / 10 表示将 a 除以 10,得到一个新的整数,比如 456 / 10 = 45。{不要有疑惑!C语言除不进就会到前一位}

  • 然后,(a / 10) % 10 表示将上一步得到的整数再除以 10,并取余数,比如 45 % 10 = 5。

  • 最后,printf(“%d\n”, (a / 10) % 10) 表示将上一步得到的余数作为参数,用 %d 格式符输出,并换行,比如 printf(“%d\n”, 5) 输出 5 并换行。

这样就得到了 a 的十位数。你明白了吗?

 

#3.交换两位数

题目描述

​ 读入一个两位的个位不为零的正整数,将它的十位数和个位数调换后输出。

输入

​ 一个整数 n(11≤n≤99)

输出

​ 一个整数表示调换后的数。

#include <stdio.h>

int main() {
    int n; //定义一个整数变量
    scanf("%d", &n); //从标准输入读取一个整数
    int ten = n / 10; //得到十位数,即整数除以10的商
    int one = n % 10; //得到个位数,即整数除以10的余数
    int result = one * 10 + ten; //将个位数和十位数调换后得到新的整数,即个位数乘以10加上十位数
    printf("%d\n", result); //输出新的整数
    return 0;
}

#4.计算各位和

题目描述

​ 输入一个不超过 10000 的整数 n,计算它每一位上的数字总和。

输入

​ 一个整数 n。(1≤n<10000)

输出

​ 输出这个整数每一位的数字和。

#include <stdio.h>

int main() {
    int n; //定义一个整数变量
    scanf("%d", &n); //从标准输入读取一个整数
    int sum = 0; //定义一个变量存储数字和,初始为0
    while (n > 0) { //循环条件为n大于0
        int digit = n % 10; //得到n的最后一位数字,即n除以10的余数
        sum += digit; //将数字加到sum上
        n /= 10; //将n除以10,去掉最后一位数字
    }
    printf("%d\n", sum); //输出数字和
    return 0;
}

2.n /= 10; //将n除以10,去掉最后一位数字?

这一行的意思是将 n 的值更新为 n 除以 10 的商,这样就可以去掉 n 的最后一位数字。具体的步骤如下:

  • 首先,n / 10 表示将 n 除以 10,得到一个新的整数,比如 1234 / 10 = 123。

  • 然后,n /= 10 表示将上一步得到的整数赋值给 n,相当于 n = n / 10,比如 n = 123。

  • 这样就完成了将 n 的最后一位数字去掉的操作,因为 n 的值变成了 123,没有了个位数。

你明白了吗?

 

#5.数字之中有9么

题目描述

​ 输入一个三位数,判断组成它的各个位上是否存在数字9。

输入

​ 输入一个整数 a (100≤a≤999)

输出

​ a 中包含 9 输出 YES 否则输出 NO

#include <stdio.h>

int main() {
    int a; //定义一个整数变量
    scanf("%d", &a); //从标准输入读取一个整数
    int hundred = a / 100; //得到百位数,即整数除以100的商
    int ten = (a / 10) % 10; //得到十位数,即整数除以10的商再除以10的余数
    int one = a % 10; //得到个位数,即整数除以10的余数
    if (hundred == 9 || ten == 9 || one == 9) { //判断三个位数中是否有9
        printf("YES\n"); //如果有9,输出YES
    } else {
        printf("NO\n"); //如果没有9,输出NO
    }
    return 0;
}

#6.四位数中有偶数位么

题目描述

​ 输入一个四位的正整数,判断它的各个位上是否存在偶数。

输入

​ 输入一个四位正整数 n (1000≤n≤9999)

输出

​ 如果 n 的千位、百位、十位、个位中的任何一个数为偶数则输出 YES 否则输出 NO

#include <stdio.h>

int main() {
    int n; //定义一个整数变量
    scanf("%d", &n); //从标准输入读取一个整数
    int thousand = n / 1000; //得到千位数,即整数除以1000的商
    int hundred = (n / 100) % 10; //得到百位数,即整数除以100的商再除以10的余数
    int ten = (n / 10) % 10; //得到十位数,即整数除以10的商再除以10的余数
    int one = n % 10; //得到个位数,即整数除以10的余数
    if (thousand % 2 == 0 || hundred % 2 == 0 || ten % 2 == 0 || one % 2 == 0) { //判断四个位数中是否有偶数,即能被2整除的数
        printf("YES\n"); //如果有偶数,输出YES
    } else {
        printf("NO\n"); //如果没有偶数,输出NO
    }
    return 0;
}

#7.乘车费用

题目描述

​ 小明要乘出租车去奶奶家。出租车计价方案为:3 公里内(含)的起步价是 13 元,超过 3 公里之后按 2.3 元 / 公里,另外在整个乘车途中另加 1 元燃油附加费。已知小明到奶奶家的路程为 N 公里,请计算出租车费用是多少元。

输入

​ 输入一个整数 N (1≤N≤30)

输出

​ 输出乘车费用,若在起步价内,输出起步价,否则保留一位小数输出。

#include <stdio.h>

int main() {
    int N; //定义一个整数变量
    scanf("%d", &N); //从标准输入读取一个整数
    double fee; //定义一个浮点数变量,存储费用
    if (N <= 3) { //如果路程小于等于3公里,按起步价计算
        fee = 13 + 1; //起步价加燃油附加费
    } else { //如果路程大于3公里,按超出部分计算
        fee = 13 + 1 + (N - 3) * 2.3; //起步价加燃油附加费加超出部分的费用
    }
    printf("%.1f\n", fee); //输出费用,保留一位小数
    return 0;
}

微改一下,我们使它更符合常理化!!!

#include <stdio.h>

int main() {
    int N; //定义一个整数变量
    scanf("%d", &N); //从标准输入读取一个整数
    double fee; //定义一个浮点数变量,存储费用
    if (N <= 3) { //如果路程小于等于3公里,按起步价计算
        fee = 13 + 1; //起步价加燃油附加费
    } else { //如果路程大于3公里,按超出部分计算
        fee = 13 + 1 + (N - 3) * 2.3; //起步价加燃油附加费加超出部分的费用
    }
    if (fee == (int)fee) { //如果费用是整数,不保留小数
        printf("%d\n", (int)fee); //输出费用,转换为整数
    } else { //如果费用不是整数,保留一位小数
        printf("%.1f\n", fee); //输出费用,保留一位小数
    }
    return 0;
}

3.printf("%.1f\n", fee); //输出费用,保留一位小数?

这一行的意思是用 %f 格式符输出浮点数 fee,并保留一位小数。具体的步骤如下:

  • 首先,printf 是一个函数,用于向标准输出打印格式化的字符串,比如 printf(“Hello, world!\n”) 输出 Hello, world! 并换行。

  • 然后,printf 的第一个参数是一个字符串,其中可以包含格式符,用于指定输出的数据类型和格式,比如 %d 表示输出整数,%f 表示输出浮点数。

  • 接着,在格式符前面可以加上一个点号和一个数字,表示输出的精度,即小数点后的位数,比如 %.1f 表示输出浮点数,并保留一位小数,%.2f 表示保留两位小数。

  • 最后,printf 的第二个参数是一个变量或表达式,用于提供要输出的数据,比如 printf(“%.1f\n”, fee) 表示输出变量 fee 的值,并保留一位小数,并换行。

这样就实现了保留一位小数的功能。你明白了吗?

 4.if (fee == (int)fee) { //如果费用是整数,不保留小数?

这一行的意思是判断费用是否是整数,如果是整数就不保留小数。具体的步骤如下:

  • 首先,fee 是一个浮点数变量,它的值可能是整数,也可能是小数,比如 14.0 或 14.5。

  • 然后,(int)fee 表示将 fee 的值转换为整数类型,这样就会去掉小数部分,比如 (int)14.0 = 14,(int)14.5 = 14。

  • 接着,fee == (int)fee 表示比较 fee 的值和 (int)fee 的值是否相等,如果相等,说明 fee 的值本身就是整数,没有小数部分,比如 14.0 == (int)14.0 = 14。如果不相等,说明 fee 的值不是整数,有小数部分,比如 14.5 != (int)14.5 = 14。

  • 最后,if (fee == (int)fee) 表示如果上一步的比较结果为真,即费用是整数,就执行后面的语句块,不保留小数。否则,执行 else 后面的语句块,保留一位小数。

这样就实现了判断费用是否是整数的功能。你明白了吗?

 #8.按要求输出

题目描述

​ 按照要求输出即可。

输入

​ 输入一个字符 x(必是 a,b,c 之一)。

输出

​ 输入 a 则输出 It is good

​ 输入 b 则输出 OMG

​ 输入 c 则输出 Yes!

#include <stdio.h>

int main() {
    char x; //定义一个字符变量
    scanf("%c", &x); //从标准输入读取一个字符
    switch (x) { //根据字符的值选择不同的输出
        case 'a': //如果字符是a,输出It is good
            printf("It is good\n");
            break;
        case 'b': //如果字符是b,输出OMG
            printf("OMG\n");
            break;
        case 'c': //如果字符是c,输出Yes!
            printf("Yes!\n");
            break;
        default: //如果字符不是a,b,c之一,输出Invalid input
            printf("Invalid input\n");
    }
    return 0;
}

5.scanf("%c", &x); //从标准输入读取一个字符?

这一行的意思是从标准输入读取一个字符,并赋值给变量 x。具体的步骤如下:

  • 首先,scanf 是一个函数,用于从标准输入读取格式化的数据,比如 scanf(“%d”, &n) 读取一个整数并赋值给变量 n。

  • 然后,scanf 的第一个参数是一个字符串,其中可以包含格式符,用于指定输入的数据类型和格式,比如 %d 表示输入整数,%f 表示输入浮点数。

  • 接着,%c 表示输入字符,即一个单个的字母或符号,比如 a, b, c, !, ? 等。

  • 最后,scanf 的第二个参数是一个变量的地址,用于存储输入的数据,比如 &x 表示变量 x 的地址。这样就可以将输入的字符赋值给变量 x。

这样就实现了从标准输入读取一个字符的功能。你明白了吗?

 

#9.一个月有多少天

题目描述

​ 给出一个年份 y 和月份 m,求 y 年 m 月有多少天。

输入

​ 输入两个整数 y,m 表示年份和月份 (1000≤y≤3000,1≤m≤12)

输出

​ 输出 y 年 m 月的天数。

#include <stdio.h>

//定义一个函数,判断一个年份是否是闰年,如果是返回1,否则返回0
int isLeapYear(int y) {
    if (y % 4 == 0 && y % 100 != 0) { //如果年份能被4整除但不能被100整除,是闰年
        return 1;
    }
    if (y % 400 == 0) { //如果年份能被400整除,也是闰年
        return 1;
    }
    return 0; //其他情况都不是闰年
}

int main() {
    int y, m; //定义两个整数变量,表示年份和月份
    scanf("%d%d", &y, &m); //从标准输入读取两个整数
    int days; //定义一个整数变量,表示天数
    switch (m) { //根据月份的不同选择不同的天数
        case 1: //一月有31天
        case 3: //三月有31天
        case 5: //五月有31天
        case 7: //七月有31天
        case 8: //八月有31天
        case 10: //十月有31天
        case 12: //十二月有31天
            days = 31;
            break;
        case 4: //四月有30天
        case 6: //六月有30天
        case 9: //九月有30天
        case 11: //十一月有30天
            days = 30;
            break;
        case 2: //二月的天数要根据是否是闰年判断
            if (isLeapYear(y)) { //如果是闰年,二月有29天
                days = 29;
            } else { //如果不是闰年,二月有28天
                days = 28;
            }
            break;
        default: //其他情况都是无效的输入,输出错误信息
            printf("Invalid input\n");
            return -1;
    }
    printf("%d\n", days); //输出天数
    return 0;
}

6.return 1; return 0;return -1;在这个程序中有啥用?

return 1; return 0; return -1; 在这个程序中的作用是返回一个整数值,表示函数的执行结果或程序的退出状态。具体的含义如下:

  • return 1; 表示在 isLeapYear 函数中,如果判断年份是闰年,就返回 1,表示真。

  • return 0; 表示在 isLeapYear 函数中,如果判断年份不是闰年,就返回 0,表示假。也表示在 main 函数中,如果程序正常执行完毕,就返回 0,表示成功。

  • return -1; 表示在 main 函数中,如果输入无效,就返回 -1,表示失败。

这样就可以根据返回的值判断函数或程序的执行情况。你明白了吗?

好的,我给你举一个例子,假设输入的年份是 2020,月份是 2,那么程序的执行过程如下:

  • 首先,scanf(“%d%d”, &y, &m) 读取两个整数,分别赋值给变量 y 和 m,即 y = 2020,m = 2。

  • 然后,switch (m) 根据月份的值选择不同的分支,因为 m = 2,所以执行 case 2: 后面的语句块。

  • 接着,if (isLeapYear(y)) 调用 isLeapYear 函数,判断年份是否是闰年,传入参数 y = 2020。

  • 然后,在 isLeapYear 函数中,首先判断 y % 4 == 0 && y % 100 != 0 是否为真,即 2020 是否能被 4 整除但不能被 100 整除。因为这个条件为真,所以执行 return 1; 返回 1 给调用者。

  • 接着,在 main 函数中,if (isLeapYear(y)) 得到返回值 1,表示真,所以执行后面的语句块,即 days = 29; 将天数赋值为 29。

  • 然后,跳出 switch 结构,执行 printf(“%d\n”, days); 输出天数,即输出 29 并换行。

  • 最后,执行 return 0; 返回 0 表示程序正常退出。

这就是一个例子。你明白了吗?

 

#10.他的名字

题目描述

​ 输入一个字母 x,输出字母对应的名字。

输入

​ 输入一个小写字母 x​ [Math Processing Error]

输出

​ 输出字母对应的名字:

h 对应 He;

​ l​ 对应 Li​;

​ c​ 对应 Cao​;

​ d​ 对应 Duan​​;

​ w 对应 Wang。

​ 不属于上述列表中的字母则输出 ​Not Here​。

#include <stdio.h>

int main() {
    char x; //定义一个字符变量
    scanf("%c", &x); //从标准输入读取一个字符
    switch (x) { //根据字符的值选择不同的输出
        case 'h': //如果字符是h,输出He
            printf("He\n");
            break;
        case 'l': //如果字符是l,输出Li
            printf("Li\n");
            break;
        case 'c': //如果字符是c,输出Cao
            printf("Cao\n");
            break;
        case 'd': //如果字符是d,输出Duan
            printf("Duan\n");
            break;
        case 'w': //如果字符是w,输出Wang
            printf("Wang\n");
            break;
        default: //如果字符不属于上述列表中的字母,输出Not Here
            printf("Not Here\n");
    }
    return 0;
}

 【好了,今天的题目就讲到这里吧!!!】【题目应该会增加难度的,所以做好准备哦!!!】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

》(。・ω・。)ノ♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值