2020-10-20 整理:

第一题:

2011年开始实行新个人所得税法,要求输入月薪salary,输出应交的个人所得税 tax (保留两位小数)。

新税法方案如下:

tax=rate*(salary-3500) - deduction

当 salary<=3500时,rate=0、deduction=0;

当 3500<salary<=5000时,rate=3%、deduction=0;

当 5000<salary<=8000时,rate=10%、deduction=105;

当 8000<salary<=12500时,rate=20% 、deduction=555;

当 12500<salary<=38500时, rate=25% 、deduction=1005;

当 38500<salary<=58500时, rate=30% 、deduction=2755;

当 58500<salary<=83500时, rate=35% 、deduction=5505;

当 83500<salary时, rate=45% 、deduction=13505;

【输入输出样例1】(下划线部分表示输入)

Enter the salary: 5010.87

tax=46.09

【输入输出样例2】(下划线部分表示输入)

Enter the salary: 32098.76

tax=6144.09

【输入输出样例3】(下划线部分表示输入)

Enter the salary: 3000

tax=0.00

【输入输出样例4】(下划线部分表示输入)Enter the salary: 59000

tax=13920.00

【输入输出样例5】(下划线部分表示输入)Enter the salary: 84500

tax=22945.00

【样例说明】

输入提示符后要加一个空格。例如“ Enter the salary : ”,其中“:”后要加一个且只能一个空格。

输出语句的“=”两边无空格。

英文字母区分大小写。必须严格按样例输入输出。

#include <stdio.h>

void getTax(double salary,double rate,int deductio);
int main() {
// double salary;
// scanf("%lf",&salary);
// printf("%lf",(double )(salary-30)); double salary;
double tax,rate;
int deduction;
printf("Enter the salary: ");
scanf("%lf",&salary);
if (salary<=3500){
getTax(salary=3500,0,0);
} else if (salary<=5000) {
getTax(salary, 0.03, 0);
}else if (salary<=8000) {
getTax(salary, 0.1, 105);
}else if (salary<=12500) {
getTax(salary, 0.2, 555);
}else if (salary<=38500) {
getTax(salary, 0.25, 1005);
}else if (salary<=58500) {
getTax(salary, 0.3, 2755);
}else if (salary<=83500) {
getTax(salary, 0.35, 5505);
}else{
getTax(salary, 0.45, 13505);
} return 0;
} void getTax(double salary,double rate,int deduction){
double tax;
tax =(rate*(salary-3500)-deduction);
printf("tax=%.2lf",tax); }

解释

上面代码段使用的基础的if-else if-else结构,但是使用的时候注意if else if eles各使用范围,不要出现多余代码,影响系统运行速度。

第二题:(同构数)

【问题描述】

同构数是其平方数的尾数等于该数自身的自然数,例如:25×25=625。从键盘输入一个不大于10000的自然数,判断其是否是同构数并按样例格式输出。

【输入形式】

从键盘输入一个不大于10000的自然数。

【输出形式】

输出格式按样例。

【样例输入1】

25

【样例输出1】

25 yes,25*25=625

【样例输入2】

11

【样例输出2】

11 no,11*11=121

#include <stdio.h>
#include<math.h>
int main() {
int x,y,z;
scanf("%d",&x);
int i =0;
z = x;
//获取幂
while (x !=0){
x = x/10;
i++;
}
//pow a几次幂
y = pow(10,i);
//乘积取后i位的数
if(z == z*z%y){
printf("%d Yes,%d*%d=%d",z,z,z,z*z);
} else{
printf("%d No,%d*%d=%d",z,z,z,z*z); }
return 0; }

解释:

首先我们需要要知道怎么获得后几位数字,使用%10^n获取乘积的后几位;

In [2]: 625%100
Out[2]: 25 In [3]: 6987%1000
Out[3]: 987

但是我们怎么知道应该除以n的多少呢;

我们可以循环整除,使得x=0(x我们输入的数字),若x !=0---->i++即:

int i =0;
while (x !=0){
x = x/10;
i++;
}

这样我们就获得了n值。

后面只需要把原参数与乘积取余后i位的数做对比即可。

第三题:(加一天后日期)

问题描述】输入一个日期,显示这个日期加一天后的日期。注意要考虑这个日期是年尾或各个月的月尾的情况。

【输入形式】输入一个日期,年月日形式表示,空格分开。

【输出形式】 输出一个日期,年月日形式表示,空格分开。

【样例输入】2000 12 31

【样例输出】2001 1 1

#include <stdio.h>

int main() {
int year,month,days;
scanf("%d %d %d",&year,&month,&days);
// printf("%d %d %d",year,month,days); switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(month ==12 && days==31){
printf("%d %d %d",year+1,1,1);
} else{
if(days ==31){
printf("%d %d %d",year,month+1,1);
} else{
printf("%d %d %d",year,month,days+1);
}
}
break;
case 4:
case 6:
case 9:
if(days ==30){
printf("%d %d %d",year,month+1,1);
} else{
printf("%d %d %d",year,month,days+1);
}
break;
case 2:
if(year%400 ==0 || year%4==0 && year%100 !=0){
if(days==29){
printf("%d %d %d",year,month+1,1);
} else{
printf("%d %d %d",year,month,days+1);
}
} else{
if(days==28){
printf("%d %d %d",year,month+1,1);
} else{
printf("%d %d %d",year,month,days+1);
}
}
}
return 0;
}

解释:

首先需要明确每个月份包含的天数,即:

1 3 5 7 8 10 12包含31天,且31需要特殊处理,即31+1--->1;其中如果月份等于12,需要特殊处理,即years+1,1,1;

4 6 9包含30天,且30需要特殊处理,即30+1--->1;

2月需要判断是否为闰年:如果是闰年则包含29天,且29需要特殊处理,即29+1--->1;

如果不是则包含28天,且28需要特殊处理,即28+1--->1;

如果其他条件则,years、month、dayas+1;

分析完成,后面使用if-else即可。

第四题:(零钱换整钱)

问题描述】

某人拿了一堆硬币去银行换钱,已知1角的硬币厚1.8mm,5角的硬币厚1.5mm,1元的硬币厚2.0mm。他将1角的硬币放成一叠,将5角的硬币放成一叠,将1元的硬币放成一叠,发现3叠硬币一样高。银行正好把这些硬币换成若干张面值为10元的纸币,问此人至少带了多少钱的硬币(元为单位),每种面值的硬币各有多少枚。输出格式为:1角的枚数,5角的枚数,1元的枚数,总金额元数(样如:50,30,40,60)。

【输入形式】

无输入。

【输出形式】

输出如下用逗号分隔的4个数(样如:50,30,40,60):

1角的枚数,5角的枚数,1元的枚数,总金额元数

#include <stdio.h>
int main(){
// int x,y,z;
// 1.8*x=1.5*y=2.0*z; for (int x = 1; x <=100; x++) {
for (int y = 1; y <= 100; y++) {
for (int z = 1; z <= 100; z++) {
int result = 0.1*x+0.5*y+z;
if(result%10==0&&1.8*x==1.5*y&&1.5*y==2.0*z){
printf("%d,%d,%d,%d",x,y,z,result);
} }
}
}
return 0;
}

解释:

首先此题属于穷举范围,个人只写出一个版本,网站各版本都有,自行学习;

由题意可以得出一个等式:1.8x=1.5y=2.0*z,假设1角的数量 x, 依次 y , z;

并且result = 0.1x+0.5y+z,result的结果取余应该等于0;

假设每个硬币的数量上限为100,若没有数据或者多组数据,则相应的范围增加或减少,结果只能唯一;

满足上述条件即可。

运行成功:

50,60,45,80

总结:

上述题目的解不是唯一,例题中的解是我所理解并运行成功的,如果有不对的地方,欢迎指出。

C语言程序设计之 循环控制2020-10-20的更多相关文章

  1. C语言程序设计100例之(20):过河卒

    例20  过河卒 题目描述 如图1,在棋盘的A点有一个过河卒,需要走到目标B点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如图1的C点),该马所在的点和所有跳跃一步可达的点称 ...

  2. 2020.10.20 利用POST请求模拟登录知乎

    前两天学习了Python的requests模块的相关内容,对于用GET和PSOT请求访问网页以抓取需要的内容有了初步的了解,想要再从一些复杂的网站积累些经验.最开始我采用最简单的get(url)方法想 ...

  3. 牛客 2020.10.20 TG 前两题

    T1 GCD 数学水题... 对于每个数,如果这个数有两个及以上的质因数的话,它所有除 \(1\) 之外的因数求 \(GCD\) 的值一定为 \(1\).那么判断是否是质数或质数的次方即可(质数除 \ ...

  4. 《手把手教你学C语言》学习笔记(10)--- 程序的循环控制

    C语言程序设计中,有些代码需要重复执行很多次,循环主要有三类: 一.for循环 1.基本格式为:for(表达式1:表达式2:表达式3){ //表达式1:循环变量赋初值 //表达式2:循环变量满足的条件 ...

  5. 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串

    字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...

  6. C语言程序设计50例(经典收藏)

    本篇文章是对C语言程序设计的50个小案例进行了详细的分析介绍,需要的朋友参考下 [程序1]题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位.十 ...

  7. 【学习笔记】PYTHON语言程序设计(北理工 嵩天)

    1 Python基本语法元素 1.1 程序设计基本方法 计算机发展历史上最重要的预测法则     摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu.内存.硬盘.电子产品价格等都遵 ...

  8. C语言程序设计第4堂作业

    大家注意:本次作业稍有增加,由于放假期间大家空闲时间比较充足,将之前学习过程中遗留的问题必须在假期解决.   本次课学习主要内容: 分支结构中的二分支结构.多分支结构和else-if语句 掌握字符型数 ...

  9. 160809209_李梦鑫_C语言程序设计实验2+选择结构程序设计_进阶

    <C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学    期 2016-2017 第1学期 指导教师 黄俊莲 吴喆 实验地点 C05 机 ...

  10. 中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总

    中国大学MOOC-翁恺-C语言程序设计习题集 PAT 习题集 02-0. 整数四则运算(10) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standar ...

随机推荐

  1. Python 学习笔记: 从变量到装饰器

    从变量开始 python 中全局变量在函数作用域内只能读,不能"写".如果要在函数作用域内实现修改全局变量值操作,需要使用关键字 global 显示指明该变量是全局变量. 但是,在 ...

  2. spring boot 中WebMvcConfigurer相关使用总结

    本文为博主原创,未经允许不得转载: WebMvcConfigurer 为spring boot中的一个接口,用来配置web相关的属性或工具插件,比如消息转换器,拦截器,视图处理器,跨域设置等等. 在S ...

  3. c#(nanoframework)安装单片机环境;如何使用c#写类似于c的单片机驱动

    .NET nanoFramework 安装教程 准备材料​ esp32单片机(支持wifi蓝牙) 安卓数据线(需要支持传输) 注意!请先安装esp32驱动程序​ ESP32驱动链接 安装 .NET n ...

  4. 基于java+springboot的租房网站、房屋出租管理系统

    该系统是基于java+springboot+vue开发的租房管理系统.是给师弟开发的课程作业.学习过程中,遇到问题可以留言咨询. 演示地址 前台地址: http://zf.gitapp.cn 后台地址 ...

  5. Linux复习笔记

    Linux复习笔记 常识说明 目录结构 Linux以树型结构管理文件,其最上层文件夹为 / ,也就是根目录. 如图所示,图中展示了一部分文件夹的结构: 所有的文件夹都属于根目录的子文件夹. 安装好系统 ...

  6. [转帖]oracle 11.2.0.4 rac集群等待事件enq: TM - contention

    近期,一金融客户oracle 11.2.0.4 rac集群delete不当导致等待事件enq: TM - contention严重引起大范围会话堆积,记录的相关分析工作如下. 1.登录集群任意节点,查 ...

  7. [转帖]tiup cluster reload

    https://docs.pingcap.com/zh/tidb/stable/tiup-component-cluster-reload 4 Contributors 在修改集群配置之后,需要通过  ...

  8. [转帖]云平台部署CNA、VRM手动安装方法

    云平台部署CNA.VRM手动安装方法 分享人:郭道川 00443725 日期:2018.11.06     Ⅰ. 项目介绍 该项目主要为XX煤矿智能煤炭项目云平台部署交付,该项目所采用的服务器为RH2 ...

  9. [转帖]CPU计算性能speccpu2006的测试方法及工具下载

    https://www.yii666.com/blog/335517.html CPU计算性能speccpu2006的测试方法及工具下载 简介 测试原理 目录结构 测试方法 基准测试项解析 测试结果 ...

  10. [转帖]如何优雅的使用 Systemd 管理服务

    https://zhuanlan.zhihu.com/p/271071439 背景:我们在构建 Kubernetes 容器化平台时,会在节点上部署各种 agent ,虽然容器化当道的今天很多程序可以直 ...