当前位置: 首页 > news >正文

a0000网站建设wordpress房产主题

a0000网站建设,wordpress房产主题,电子商务网站的特点,联盟平台文章目录 写在前面A#xff1a;个税计算——阅读理解与数据类型转换原题输入输出样例输入样例输出 题目分析题目理解代码实现与问题解决 我的代码 B#xff1a;时制转换——问题是一点点解决的原题输入输出样例输入样例输出 题目分析我的代码 C#xff1a;统计进位——人教版… 文章目录 写在前面A个税计算——阅读理解与数据类型转换原题输入输出样例输入样例输出 题目分析题目理解代码实现与问题解决 我的代码 B时制转换——问题是一点点解决的原题输入输出样例输入样例输出 题目分析我的代码 C统计进位——人教版小学二年级数学上册第二单元《进位加》的C语言实现原题输入输出样例输入样例输出 题目分析数据读入与存储准备列竖式吧竖式的加法计算 我的代码 写在前面 题目中南大学计算机学院2023秋季C语言期中考考题共六道本文分享前三道的思路 旨在分享自己的思考过程和一点经验并给出一种输出正确的答案供大家讨论批判有任何批评、问题可以直接在评论区留言或者直接私信告诉我大家共同进步。 文字主要面向新手 A个税计算——阅读理解与数据类型转换 原题 小南毕业工作了他想知道自己每年的扣税情况。他查到的综合所得的个人所得税税率表如下 级数全年应纳税所得额税率%速算扣除数1不超过36000元的部分302超过36000-144000元的部分1025203超过144000-300000元的部分20169204超过300000-420000元的部分25319205超过420000-660000元的部分30529206超过660000-960000元的部分35859207超过960000元的部分45181920 你能根据小南的收入算出他每年所要缴纳的税款吗 输入 多个样例。每个样例输入一个整数m(104≤m≤107)代表小南的年终收入为100的整数倍。 输出 每个样例输出一个整数表示小南缴纳的个税。每个样例输出结果占一行。 样例输入 20000 36000 400000 660000样例输出 600 1080 68080 145080题目分析 这题有同学拿到手没听过速算扣除数不知怎么算。有同学知道了怎么算提交只有80%我们来看看。 题目理解 其实速算扣除数不论有没听过怎么看都是要减去这个数的怎么减乘以税率之前还是之后还有超过“的部分”是不是要单独每部分算其实这些问题全可以靠样例来解决——当题目关于计算方法、计算公式等没有用详尽的文字表述时不需要太纠结从样例输入输出可以判断出计算方法。 比如这题大可以猜一猜怎么算第一组第二组明显是20000×0.0336000×0.03没有问题。第三组400000先别想太多400000×0.25是100000而结果是68080也该看出来了是100000减去对应的速算扣除数。 现在明白了就是简单的乘以税率减去扣除数带入第四组按一下计算器没有问题。 代码实现与问题解决 大致涉及到这些知识 区间数if语句判断精度问题和解决 我们一个个看 if语句判断区间 这时候有一种思想按顺序判断承上启下结构。什么意思呢先判断是否大于Aelse if是否大于B此时由于else if只会在前一个if语句为假的时候判断所以当判断这个“是否大于B”就隐含了“不是大于A”的前提也就是大于B并且小于等于A。简单的思想自己写过一次就能知道了。 好处就是不用再写 大于B小于等于A了结构也清晰。 具体代码就是长这样 if(n 960000){t n * 0.45 - 181920; }else if(n 660000){t n * 0.35 - 85920; }else if(n 420000){t n * 0.30 - 52920; }else if(n 300000){t n * 0.25 - 31920; }else if(n 144000){t n * 0.20 - 16920; }else if(n 36000){t n * 0.10 - 2520; }else{t n * 0.03; } 精度问题和解决 有同学看到百分比下意识用了小数处理这就要注意精度问题了。例如这样写就会遇到错误80%有的数算出差1 #include stdio.h int main(){int n;while(scanf(%d, n) ! EOF){int t;if(n 960000){t n * 0.45 - 181920;}else if(n 660000){t n * 0.35 - 85920;}else if(n 420000){t n * 0.30 - 52920;}else if(n 300000){t n * 0.25 - 31920;}else if(n 144000){t n * 0.20 - 16920;}else if(n 36000){t n * 0.10 - 2520;}else{t n * 0.03;}printf(%d\n, t);}return 0; }这是因为在整数、小数之间转换的时候会丢失精度此时可以把t声明成float输出使用%.0f既可。 当然脑子转的快的同学看到题目中的“100的整数倍”下意识的除以100这是最好的也就是在积算的时候先除以100此时得到的一定是精确的整数再乘以百分比这样就不会损失精度了。 我的代码 #include stdio.h int main(){int n;while(scanf(%d, n) ! EOF){float t;if(n 960000){t n * 0.45 - 181920;}else if(n 660000){t n * 0.35 - 85920;}else if(n 420000){t n * 0.30 - 52920;}else if(n 300000){t n * 0.25 - 31920;}else if(n 144000){t n * 0.20 - 16920;}else if(n 36000){t n * 0.10 - 2520;}else{t n * 0.03;}printf(%.0f\n, t);}return 0; }或者 #include stdio.h int main(){int n;while(scanf(%d, n) ! EOF){int t;if(n 960000){t n / 100 * 45 - 181920;}else if(n 660000){t n / 100 * 35 - 85920;}else if(n 420000){t n / 100 * 30 - 52920;}else if(n 300000){t n / 100 * 25 - 31920;}else if(n 144000){t n / 100 * 20 - 16920;}else if(n 36000){t n / 100 * 10 - 2520;}else{t n / 100 * 3;}printf(%d\n, t);}return 0; }B时制转换——问题是一点点解决的 原题 12小时制和24小时制都是一种记录时间的方式两者的区别在于 112小时制是把一天二十四小时分为上午和下午两个十二小时的时间段上午从午夜12:00到上午11:59后缀标记am或者AM下午从正午12:00到晚上11:59后缀标记pm或者PM。 224小时制是把一天二十四个小时从午夜开始用00:00~23:59表示。 3使用12小时制显示时间时中午12点显示为12:00 pm或者12:00 PM而将午夜显示为12:00 am或者12:00 AM。 小南的任务将12小时制格式显示的时间转换为24小时制格式显示。 输入 多个样例。每个样例输入1行形式为hh:mmcd的数据其中整数hh(00≤hh≤12)代表小时整数mm(00≤mm≤59)代表分钟cd是字母组合“am、AM、pm、PM”中的一个分别表示上午(am或AM)和下午(pm或者PM)。 输出 每个样例输出新的24小时制格式的时间形式为hh:mm。每个样例输出结果占一行。 样例输入 12:00am 12:59PM 11:09pm 03:02AM 04:18PM样例输出 00:00 12:59 23:09 03:02 16:18题目分析 拿到这个题目大概脑子里会有两个问题怎么读入数据怎么转换我们一个个看。 我们先读入数据整数冒号整数一个字符一个字符。怎么读%d:%d%c%c这样就行了C语言先识别一个整数遇到非数字后停止这里是遇到了“:”它发现这个不是数字又把它放回去了然后找一个冒号再找一个整数同理遇到p、P、a、A后停止。最后读两个字符。 这样分别存到四个变量后就可以开始核心部分了。 怎么转换转换就是把不同的东西变成相同的什么不同12小时和24小时最大的不同就在下午也就是中午12点过后pm下午4点就是16点下午9点就是21点——明显是12。 这下明白了只要pm或者PM把小时数加12就行了。 于是乎写出代码 #include stdio.h int main(){char a, b;int h, m;while(scanf(%d:%d%c%c, h, m, a, b) ! EOF){if(a p || a P){h 12;}printf(%02d:%02d\n, h, m);}return 0; }但是看看样例就知道出了问题 12:00am应当是00:00怎么办好说如果小时数是12而且是am那就变成0——除此之外am都和24小时的小时数是一样的比如早上3点就是3:00这是一致的除了12:00am。12:00pm应当是12:00怎么办好说当是pm小时数不是12的时候再加12就行了。 我们说问题是一点点解决的虽然这个问题脑子转得快的同学第一次看题就能看出来但是如果一次想不到也没有关系通过一步步修改、调试来完善代码最后也能达到正确答案这正是遇到复杂问题的解决方法。当然在不断的训练中也要有意识的想一想漏了什么想全了吗有没有别的情况尽量在测试之前自己找出一些问题或者尽量提前预料到问题提前规避。比如这一题在题目中强调了12点的问题是应当加以留意的。 我的代码 #include stdio.h int main(){char a, b; // 存储pm、amint h, m; // 存储小时、分钟分钟是没有用的while(scanf(%d:%d%c%c, h, m, a, b) ! EOF){ // 读入数据if((a a || a A) h 12){ // 如果是am并且小时数是12的话小时数转成0h 0;}if((a p || a P) h ! 12){ // 如果是pm而且小时数不是12的话小时数加12h 12;}printf(%02d:%02d\n, h, m); // 输出%02d是用0来补位到两位}return 0; }C统计进位——人教版小学二年级数学上册第二单元《进位加》的C语言实现 原题 老师发现很多学生在进行加法的时候发现“进位”特别容易出错。于是交给小南一个任务就是统计两个整数x和y在相加时需要多少次进位其中x和y满足0≤x,y≤ 109你能帮他完成任务吗 输入 多个样例。 每个样例输入1行包括2个整数x和y(0≤x,y≤ 109)。 输出 每个样例输出一个整数代表所需要的进位数。每个样例输出结果占一行。 样例输入 8 7 9 0 154 246 555 5555 123 594样例输出 1 0 2 3 1题目分析 先来看看进位是什么根据人教版小学二年级数学上册第二单元《进位加》知识可得加法列竖式的时候每一位相加上一位有进位的还要加上上一位的进位1大于10就是进一次位以此类推。 例如9234928从右看到左 注意两点 后一次相加要加上前一次的进位1如果前一次有进位前一次没有进位可以看作加上0最后一位位数不足可以补上0思考比如上述例子928可以看作0928 很简单对吧我的思路就是把列竖式的过程完完整整地搬到代码中。来看看吧 数据读入与存储 首先想到的是需求我要把两个数字右对齐“列竖式”然后一位一位加。此时想想用int变量存储可以吗当然可以但是有点麻烦——每一位的提取很麻烦看看这些对齐的数像什么其实实质上就是一个二维数组当然这里只有两行只有两个数相加用两个长度相同的数组也是可以滴。 此时用两个数组存储两个数的每一位就是第一步。当然可以用int数组也可以用字符串数组根据输入用字符串显然方便一点scanf(%s %s, a, b)就行了 至于字符怎么转数字也是一个经典用法教材中也有提到C语言的字符是用整型存储的0就是48在ASCII码下1也就是49了自然用数字的字符减去0就是这个数的int型了这样我们得到了两个数组它们是这样的 准备列竖式吧 显然这些数的长度不尽相同默认读入的顺序明显是左对齐这时候按照小学二年级的知识我们要对它们进行右对齐 明确一下数组的长度题目要10位保险起见设为100位吧doge就可以写代码了代码的功能就是上图的转换应该是能明白的 // 这里a1数组是a数组转换右对齐后的数组b1同理 for (int i 0; i alen; i) { // alen是用strlen函数获取的a数组的实际长度也就是数字的长度例如9234长度是4a1[99 - i] a[alen - i - 1]; } for (int i 0; i blen; i) {b1[99 - i] b[blen - i - 1]; }这种代码的核心就是带数字往里带入几位试一试就可以推出应该写什么了。比如a1的最后一位应该等于a的第4位倒数第二位应该等于a的第3位也就是a1[99] a[3]a1[98] a[2]注意数组的索引从0开始。然后带入a、b的数组长度和变量ii是从零开始增长的a[99 - i] a[alen - 1 - 1]数组的索引就是这样代入出来的。 好了可以开始相加了。思考列竖式的过程明确一下需要哪些变量 存储两数再加进位1如果有的话的变量k就是判断k是否大于等于10的。进位c第一次加法c 0如果k大于等于0c赋值为1否则赋值为0下一次算k的时候加上c就行了。 想一想竖式从右到左的加法用什么实现明显是for循环循环多少次呢观察列竖式的过程不难看出4位加3位总共加了4次包括最后一位加进位1。想一想4位加4位总共加了4次4位加10位总共加了5次。——规律很清晰如果两数位数相等那就是循环次数就是两数位数如果不相等就是最短位数1。 当然你可以直接把所有列表中所有数字都循环遍历一遍等等是不是想到什么问题——早该想到的前面两个数不一样长的时候就该想到了——要保证数组中除了输入的数字外其他都是0这就需要在最开始时初始化a1、b1两个数组。这样就能保证不漏、不多因为00不可能使得进位次数增多。 初始化是这样的 for (int i 0; i 100; i){a1[i] 0; }for (int i 0; i 100; i){b1[i] 0; }为什么不能char a1[100] {0}答案是这样只会把第一项令为0但是其余项会令成ASCII码为0的空字符\0这不是我们想要的。此时用循环才是保险。 竖式的加法计算 现在列好了竖式开始计算吧原理在上面陈述的很明白了代码是这样的 int k, c 0, s 0; // k、c上面说过了s是存储进位次数的也就是题目要输出的答案 for (int i 99; i 0; i--) { // 从最后一位开始循环遍历整个列表懒了不想做判断了k a1[i] - 0 b1[i] - 0 c; // 计算k值注意最后加上进位c第一次计算的时候进位c为0if (k 10) { // 如果算出来大于等于10s; // 统计进位次数1c 1; // 进位1} else { // 如果算出来在10以内c 0; // 进位0} }结束了我本题的思路就是模拟列竖式的方式进行计算。考试的时候中间犯了几次错误 转换右对齐的时候没整明白把顺序颠倒了9234对齐到右边变成4329了没有初始化a1、b1导致错误 当然遇到错误先不要慌张通过分段调试代码、找出原因、修改都是可以解决的问题是一点点解决的嘛。 我的代码 #include stdio.h #include string.h int main() {char a[100], b[100], a1[100], b1[100];while (scanf(%s %s, a, b) ! EOF) {for (int i 0; i 100; i) {a1[i] 0;}for (int i 0; i 100; i) {b1[i] 0;}int alen strlen(a); // 注意使用strlen要#include string.hint blen strlen(b);// 这里a1数组是a数组转换右对齐后的数组b1同理for (int i 0; i alen; i) { // alen是用strlen函数获取的a数组的实际长度也就是数字的长度例如9234长度是4a1[99 - i] a[alen - i - 1];}for (int i 0; i blen; i) {b1[99 - i] b[blen - i - 1];}// 分位次加法int k, c 0, s 0; // k、c上面说过了s是存储进位次数的也就是题目要输出的答案for (int i 99; i 0; i--) { // 从最后一位开始循环遍历整个列表懒了不想做判断了k a1[i] - 0 b1[i] - 0 c; // 计算k值注意最后加上进位c第一次计算的时候进位c为0if (k 10) { // 如果算出来大于等于10s; // 统计进位次数1c 1; // 进位1} else { // 如果算出来在10以内c 0; // 进位0}}printf(%d\n, s);}return 0; }
http://www.zqtcl.cn/news/683478/

相关文章:

  • 陕西省建设工程质量安全监督总站网站开发公司与施工单位工程造价鉴定报告
  • 嘉兴网站建设企业阿里巴巴国际贸易网站
  • 临沂手机网站建设珠海手机网站建设价格
  • 56m做图片视频的网站是什么软件开发和大数据哪个前景好
  • 郑州网站建设哪家做快消品的网站
  • 太原做网站费用东莞it外包
  • 深圳网站关键词优化公司集团网站建
  • 网站建设项目合同传奇手游网站
  • 如何学习网站建设app申请付费网站
  • 微网站开发平台案例重庆网站设计哪家公司好
  • 快递空包网站建设网站的首页怎么做的
  • 青海手机网站建设北京网站建设推荐华网天下
  • 网站网站建设公司孩子学编程网上课程哪家好
  • 跨境电商网站建设方案书江门网页制作
  • 门户网站建设定做如何使用域名访问网站
  • 做网站后台运营这个工作怎么样建设网站销售
  • 两学一做网上答题网站做网站域名是赠送的吗
  • 江苏住房城乡建设厅网站WordPress上传Excel
  • 广州淘宝网站建设济南高新区网站建设
  • 如何注册一个网站长沙的科技公司
  • 温州网络公司网站建设永久免费云linux服务器网页
  • 中国教育网站官网网站建设是半年的持久战
  • 为什么营销型网站比普通网站建站贵常州seo排名收费
  • 商贸公司寮步网站建设极致发烧学网站建设基础
  • 二手汽车手机网站模板四川百度推广排名查询
  • 做火情监控网站需要用什么系统做一个网站多少费用
  • 成都建设网站首页贺州网站建设
  • 硚口区建设局网站海绵宝宝的网页设计html源代码
  • 旅游网站建设合同成年做羞羞的视频网站
  • 海门网站建设制作道德建设 网站