【C语言】基础刷题训练4(含全面分析和代码改进示例)

系列文章目录

提示:该系列文章暂未全部完成,暂时欠缺系列文章目录,见谅
基础刷题训练4(含全面分析和代码改进示例)


文章目录

  • 系列文章目录
  • 前言
  • 题目链接(有需要的请自行链接做题)
  • T1:
    • 思路1:
    • 思路2:
    • T1总结:
  • T2:
    • 思路1:
    • 思路2:
    • 思路3:
    • T2总结:
  • T3:
    • 思路1:
    • T3总结:
  • T4:
    • 思路1:
    • T4总结:
  • T5:
    • 思路1:
    • T5总结:
  • T6:
    • 思路1:
    • 思路2:
    • 思路3:
    • T6总结:
  • T7:
    • 思路1:
    • T7总结:
  • T8:
    • 思路1:
    • T8总结
  • T9:
    • 思路1:
    • 思路2:
  • 所有代码展示:
  • 结语:


前言

本章刷题博客主要面向基础性题目,包含的主要知识点包括分支循环,数组的使用,循环嵌套等等…比较重点的内容有冒泡排序和库函数qsort的使用。


题目链接(有需要的请自行链接做题)

  1. 时间转换 题号:BC30 链接:https://www.nowcoder.com/practice/
    c4ae7bcac7f9491b8be82ee516a94899?tpId=290&tqId=39818&ru=/exam/oj
  2. 总成绩和平均分计算 题号:(⽆) 链接:https://www.nowcoder.com/
    questionTerminal/0fa5132c156b434da4347ad051c4be22
  3. KIKI和酸奶 题号:BC35 链接:https://www.nowcoder.com/practice/c
    7721f3a1b1a47a783974453e82cadbb?tpId=290&tqId=39823&ru=/exam/oj
  4. 发布会信息 题号:(⽆)链接:https://www.nowcoder.com/questi
    onTerminal/20e59d0f388448c68f581b9d3ca66049
  5. 输出学⽣信息 题号:(⽆)链接:https://www.nowcoder.com/que
    stionTerminal/8e94458049eb4e838f711bbd1be0045e
  6. 计算平均成绩 题号:(⽆) 链接:https://www.nowcoder.com/que
    stionTerminal/30a28eb88c3f4e87be1a5b397ddd6fe2
  7. 进制A+B 题号:BC20 链接:https://www.nowcoder.com/practice/6
    187581174ac48278ca3bccf8d534897?tpId=290&tqId=39808&ru=/exam/oj
  8. ⽹购 题号:BC63 链接:https://www.nowcoder.com/practice/5d7d
    fd405e5f4e4fbfdff6862c46b751?tpId=290&tqId=39851&ru=/exam/oj
  9. 争夺前五名 题号:BC120 链接:https://www.nowcoder.com/practi
    ce/cd052308a1c44a88ad00255f312c3e14?tpId=290&tqId=39908&ru=/exam/oj

T1:

在这里插入图片描述

思路1:

用循环的方式先处理小时再处理分钟再处理秒
代码展示:

//T1:way1
void T1_way1(void)
{//三个变量,分别用来表示秒,分钟,小时int s = 0;int m = 0;int h = 0;scanf("%d", &s);//处理分钟:while (s >= 60){s -= 60;m++;}//处理小时:while (m >= 60){m -= 60;h++;}printf("%d %d %d", h, m, s);
}
int main()
{T1_way1();return 0;
}

思路2:

用/和%的方式依次对小时分钟和秒进行处理

//T1:way2
void T1_way2(void)
{//创建三个变量,分别表示秒,分钟,小时int s = 0;int m = 0;int h = 0;scanf("%d", &s);//计算h = s / 60 / 60;m = s / 60 % 60;s = s % 60;//打印printf("%d %d %d", h, m, s);}
int main()
{//T1_way1();T1_way2();return 0;
}

T1总结:

我感觉上面两种方法都是先处理小时再处理分钟最后处理秒的一个思路,只不过感觉第一种用循环比较容易想到,第二种的话是对/和%比较深入的理解才有所想法。

T2:

在这里插入图片描述

思路1:

创建三个变量,然后打印平均值
需要注意的是:相除要得到浮点数结果,除号的两个操作数至少有一个是浮点类型的值才行。

void T2_way1(void)
{//创建三个变量,用来存储该学生的每科成绩double a, b, c;scanf("%lf %lf %lf", &a, &b, &c);//打印printf("%.2lf %.2lf", a + b + c, (a + b + c) / 3.0);}int main()
{//T1_way1();//T1_way2();T2_way1();return 0;
}

思路2:

利用数组进行存储数值,然后求平均值
用数组的好处是:可以处理大量数值,如果输入300科的成绩也可以进行处理

void T2_way2(void)
{//存储double arr[3] = { 0 };//输入scanf("%lf %lf %lf", &arr[0], &arr[1], &arr[2]);//计算double sum = arr[0] + arr[1] + arr[2];double average = sum / 3.0;//输出printf("%.2lf %.2lf\n", sum, average);
}int main()
{//T1_way1();//T1_way2();//T2_way1();T2_way2();return 0;
}

思路3:

一边输入,一边计算
这种思路的好处是节省内存空间,提升效率

void T2_way3(void)
{double sum = 0.0;double a = 0;//输入+计算int i = 0;for (i = 0; i < 3; i++){scanf("%lf", &a);sum += a;}//输出结果printf("%.2lf %.2lf\n", sum, sum / 3.0);}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();T2_way3();return 0;
}

T2总结:

我认为way3是最优的,因为我们这道题不需要存储数据浪费空间的,一边输入一边计算可以节省效率和内存空间,一举两得。

T3:

在这里插入图片描述

思路1:

void T3_way1(void)
{int n, h, m;while (scanf("%d %d %d", &n, &h, &m) != EOF){//通常情况:n = n - m/h;//如果时间有剩余,那么肯定又开了一瓶if (m % h){n--;}printf("%d\n", n);}
}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();T3_way1();return 0;
}

T3总结:

我感觉这个题目主要就是考了一下if的用法吧,没什么值得说的点,其实还有一种思路,跟way1大同小异,也就不说了。
值得注意的是多组输入这个东西,类似于一个模板,就是while(scanf()!=EOF)基本类似于这种东西的一个模板,需要简单提一下。

T4:

在这里插入图片描述

思路1:

直接打印就行了

void T4_way1(void)
{printf("I lost my cellphone!\n");
}
int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();T4_way1();return 0;
}

T4总结:

这个题目没什么好说的都会。。。
需要注意的是在OJ上做题,尤其这种打印的,直接复制就行了,自己打字打半天还容易打错。。。

T5:

在这里插入图片描述

思路1:

直接打印

void T5_way1(void)
{printf("Name    Age    Gender\n");printf("---------------------\n");printf("Jack    18     man\n");
}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();T5_way1();return 0;
}

T5总结:

这种打印的题目没啥可以做的,唯一需要掌握的是,打印时候要学会复制。

T6:

在这里插入图片描述

思路1:

五个变量,存储求值
这种代码吧,也没什么问题,总感觉就是怪怪的简单

void T6_way1(void)
{int a, b, c, d, e;scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);printf("%.1f\n", (a + b + c + d + e) / 5.0);
}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();//T5_way1();T6_way1();return 0;
}

思路2:

利用数组进行存储求值

void T6_way2(void)
{int arr[5] = { 0 };//输入int i = 0;for (i = 0; i < 5; i++){scanf("%d", &arr[i]);}//求和int sum = 0;for (i = 0; i < 5; i++){sum += arr[i];}//输出printf("%.1lf", sum / 5.0);
}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();//T5_way1();//T6_way1();T6_way2();return 0;
}

思路3:

一边输入一边求值,效率内存最高

void T6_way3(void)
{//创建变量int i = 0;int sum = 0;int num = 0;//输入+求值for (i = 0; i < 5; i++){scanf("%d", &num);sum += num;}//输出printf("%.1lf\n", sum / 5.0);
}
int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();//T5_way1();//T6_way1();//T6_way2();T6_way3();return 0;
}

T6总结:

其实这个题目跟T2基本上是一样的,注意要结合数组,一边输入一边计算来进行求值。

T7:

在这里插入图片描述

思路1:

void T7_way1(void)
{int a, b;//在C语言当中,%x是一个十六进制占位符,%o是一个八进制占位符scanf("%x %o", &a, &b);printf("%d\n", a + b);
}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();//T5_way1();//T6_way1();//T6_way2();//T6_way3();T7_way1();return 0;
}

T7总结:

这个题目主要是给大家补充一下知识点,%x是十六进制数字的占位符,%o是八进制数字的占位符。
注意,不同进制的数字只是表示方法的不同而已。

T8:

在这里插入图片描述

思路1:

void T8_way1(void)
{//表示多少钱double a;int m, d, flag;scanf("%lf %d %d %d", &a, &m, &d, &flag);if (m == 11 && d == 11){a *= 0.7;}if (m == 12 && d == 12){a *= 0.8;}if (flag == 1){a -= 50;}if (a >= 0)printf("%.2lf\n", a);elseprintf("0\n");}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();//T5_way1();//T6_way1();//T6_way2();//T6_way3();//T7_way1();T8_way1();return 0;
}

T8总结

我感觉这个题目就是训练if的使用的,理好逻辑没啥大问题

T9:

在这里插入图片描述

思路1:

利用冒泡排序

void T9_way1(void)
{//输入int n = 0;scanf("%d", &n);int arr[50] = { 0 };int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}//冒泡排序int j = 0;for (i = 0; i < n; i++){for (j = 0; j < n - 1; j++){if (arr[j] < arr[j + 1]){int t = arr[j];arr[j] = arr[j + 1];arr[j + 1] = t;}}}//输出for (i = 0; i < 5; i++){printf("%d ", arr[i]);}
}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();//T5_way1();//T6_way1();//T6_way2();//T6_way3();//T7_way1();//T8_way1();T9_way1();return 0;
}

思路2:

利用qsort函数进行排序

int cmp_int(const void* e1, const void* e2)
{return *(int*)e2 - *(int*)e1;
}void T9_way2(void)
{//输入int n = 0;scanf("%d", &n);int arr[50] = { 0 };int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}//qsort排序qsort(arr, n, sizeof(int), cmp_int);//输出for (i = 0; i < 5; i++){printf("%d ", arr[i]);}
}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();//T5_way1();//T6_way1();//T6_way2();//T6_way3();//T7_way1();//T8_way1();//T9_way1();T9_way2();return 0;
}

所有代码展示:

#include<stdio.h>
#include<stdlib.h>//T1:way1
void T1_way1(void)
{//三个变量,分别用来表示秒,分钟,小时int s = 0;int m = 0;int h = 0;scanf("%d", &s);//处理分钟:while (s >= 60){s -= 60;m++;}//处理小时:while (m >= 60){m -= 60;h++;}printf("%d %d %d", h, m, s);
}//T1:way2
void T1_way2(void)
{//创建三个变量,分别表示秒,分钟,小时int s = 0;int m = 0;int h = 0;scanf("%d", &s);//计算h = s / 60 / 60;m = s / 60 % 60;s = s % 60;//打印printf("%d %d %d", h, m, s);}void T2_way1(void)
{//创建三个变量,用来存储该学生的每科成绩double a, b, c;scanf("%lf %lf %lf", &a, &b, &c);//打印printf("%.2lf %.2lf", a + b + c, (a + b + c) / 3.0);}void T2_way2(void)
{//存储double arr[3] = { 0 };//输入scanf("%lf %lf %lf", &arr[0], &arr[1], &arr[2]);//计算double sum = arr[0] + arr[1] + arr[2];double average = sum / 3.0;//输出printf("%.2lf %.2lf\n", sum, average);
}void T2_way3(void)
{double sum = 0.0;double a = 0;//输入+计算int i = 0;for (i = 0; i < 3; i++){scanf("%lf", &a);sum += a;}//输出结果printf("%.2lf %.2lf\n", sum, sum / 3.0);}void T3_way1(void)
{int n, h, m;while (scanf("%d %d %d", &n, &h, &m) != EOF){//通常情况:n = n - m/h;//如果时间有剩余,那么肯定又开了一瓶if (m % h){n--;}printf("%d\n", n);}
}void T4_way1(void)
{printf("I lost my cellphone!\n");
}void T5_way1(void)
{printf("Name    Age    Gender\n");printf("---------------------\n");printf("Jack    18     man\n");
}void T6_way1(void)
{int a, b, c, d, e;scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);printf("%.1f\n", (a + b + c + d + e) / 5.0);
}void T6_way2(void)
{int arr[5] = { 0 };//输入int i = 0;for (i = 0; i < 5; i++){scanf("%d", &arr[i]);}//求和int sum = 0;for (i = 0; i < 5; i++){sum += arr[i];}//输出printf("%.1lf", sum / 5.0);
}void T6_way3(void)
{//创建变量int i = 0;int sum = 0;int num = 0;//输入+求值for (i = 0; i < 5; i++){scanf("%d", &num);sum += num;}//输出printf("%.1lf\n", sum / 5.0);
}void T7_way1(void)
{int a, b;//在C语言当中,%x是一个十六进制占位符,%o是一个八进制占位符scanf("%x %o", &a, &b);printf("%d\n", a + b);
}void T8_way1(void)
{//表示多少钱double a;int m, d, flag;scanf("%lf %d %d %d", &a, &m, &d, &flag);if (m == 11 && d == 11){a *= 0.7;}if (m == 12 && d == 12){a *= 0.8;}if (flag == 1){a -= 50;}if (a >= 0)printf("%.2lf\n", a);elseprintf("0\n");}void T9_way1(void)
{//输入int n = 0;scanf("%d", &n);int arr[50] = { 0 };int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}//冒泡排序int j = 0;for (i = 0; i < n; i++){for (j = 0; j < n - 1; j++){if (arr[j] < arr[j + 1]){int t = arr[j];arr[j] = arr[j + 1];arr[j + 1] = t;}}}//输出for (i = 0; i < 5; i++){printf("%d ", arr[i]);}
}int cmp_int(const void* e1, const void* e2)
{return *(int*)e2 - *(int*)e1;
}void T9_way2(void)
{//输入int n = 0;scanf("%d", &n);int arr[50] = { 0 };int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}//qsort排序qsort(arr, n, sizeof(int), cmp_int);//输出for (i = 0; i < 5; i++){printf("%d ", arr[i]);}
}int main()
{//T1_way1();//T1_way2();//T2_way1();//T2_way2();//T2_way3();//T3_way1();//T4_way1();//T5_way1();//T6_way1();//T6_way2();//T6_way3();//T7_way1();//T8_way1();//T9_way1();T9_way2();return 0;
}

结语:

感觉这种简单题目自己做一遍是最好的,为了方便我写代码时候直接放一个main函数去了。
多练习多练习,哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283479.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】:内置函数

内置函数 一.日期函数二.字符串函数三.数学函数和其他函数 一.日期函数 1.获得年月日 2.获取时分秒 3.获取时间戳 4.日期加日期 5.日期减日期 6.计算两个日期相差时间 二.字符串函数 1.获取编码 2.拼接字符串 3.判断子串 4.转大写 这些函数使用都非常简单&#xff0c;就不再举例…

初识迭代器(Iterator)——迭代器模式——迭代加深(后续更新...)

学习网页&#xff1a; Welcome to Python.orghttps://www.python.org/ 迭代器&#xff08;Iterator&#xff09; 迭代器是一个非常有用的Python特性&#xff0c;它允许我们遍历一个容器&#xff08;如列表、元组、字典、集合等&#xff09;的元素。迭代器提供了一种方法&…

设计模式——代理模式(结构型)

引言 代理模式是一种结构型设计模式&#xff0c; 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问&#xff0c; 并允许在将请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢&#xff1f; 举个例子&#xff1a; 有这样一个消耗大量…

格密码:离散高斯与子高斯分布

高斯分布我们都很熟悉&#xff0c;但在格密码中会用到一种特殊的高斯分布&#xff0c;将其取名离散高斯分布&#xff08;discrete Gaussian)。 一. N维连续高斯分布 给定一个正整数n&#xff0c;代表维度。一个正实数&#xff0c;代表标准差&#xff08;高斯分布的标准差决定着…

LeetCode刷题--- 找出所有子集的异或总和再求和

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归递归、搜…

【TB作品】STM32 PWM之实现呼吸灯,STM32F103RCT6,晨启

文章目录 完整工程参考资料实验过程 实验任务&#xff1a; 1&#xff1a;实现PWM呼吸灯&#xff0c;定时器产生PWM&#xff0c;控制实验板上的LED灯亮灭&#xff1b; 2&#xff1a;通过任意两个按键切换PWM呼吸灯输出到两个不同的LED灯&#xff0c;实现亮灭效果&#xff1b; 3&…

YOLOv5改进 | 注意力篇 | RCS-OSA替换C3实现暴力涨点(减少通道的空间对象注意力机制)

一、本文介绍 本文给大家带来的改进机制是RCS-YOLO提出的RCS-OSA模块&#xff0c;其全称是"Reduced Channel Spatial Object Attention"&#xff0c;意即"减少通道的空间对象注意力"。这个模块的主要功能是通过减少特征图的通道数量&#xff0c;同时关注空…

小程序静默登录-登录拦截实现方案【全局loginPromis加页面拦截】

实现效果&#xff1a; 用户进入小程序访问所有页面运行onload、onShow、onReady函数时保证业务登录态是有效的 实现难点&#xff1a; 由于小程序的启动流程中&#xff0c;页面级和组件级的生命周期函数都不支持异步阻塞&#xff1b;因此会造成一个情况&#xff0c;app.onLau…

鸿蒙Web组件_学习

Web组件概述 Web组件用于在应用程序中显示Web页面内容&#xff0c;为开发者提供页面加载、页面交互、页面调试等能力。 页面加载&#xff1a;Web组件提供基础的前端页面加载的能力&#xff0c;包括加载网络页面、本地页面、Html格式文本数据。页面交互&#xff1a;Web组件提供…

展示一段比较简单的人工智能自动做模型的程序

人工智能是一种模拟或模仿人类智能的技术。它通过使计算机系统具有一定的认知能力和学习能力&#xff0c;使其能够自动完成一系列复杂的任务。人工智能可以在各个领域应用&#xff0c;包括图像识别、语音识别、自然语言处理、机器学习等。人工智能还可以用于解决各种问题&#…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《市场环境下考虑全周期经济效益的工业园区共享储能优化配置》

这个标题涉及到工业园区中共享储能系统的优化配置&#xff0c;考虑了市场环境和全周期经济效益。以下是对标题中各个要素的解读&#xff1a; 市场环境下&#xff1a; 指的是工业园区所处的商业和经济背景。这可能包括市场竞争状况、电力市场价格波动、政策法规等因素。在这一环…

高通平台开发系列讲解(AI篇)SNPE工作流程介绍

文章目录 一、转换网络模型二、量化2.1、选择量化或非量化模型2.2、使用离线TensorFlow或Caffe模型2.3、使用非量化DLC初始化SNPE2.4、使用量化DLC初始化SNPE三、准备输入数据四、运行加载网络沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍SNPE模型工作…