c/c++零基础坐牢第五天
c/c++从入门到入土(5)
开始时间2023-04-19 23:25:06
结束时间2023-04-20 00:44:28
实验一 C选择结构程序设计
第一题 应用if语句解决分段函数问题
一.问题描述
有一函数功能描述如下,请应用if语句编写算法实现:
输入格式: 请在一行中给出1个实数x。 输出格式: 对每一组输入,在一行中输出分段函数y的值。 输入样例1: 0 输出样例1: 0.0 输入样例2: 2 输出样例2: 3.0 输入样例3: 12 输出样例3: 25.0 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
二.设计思路
对于这一个函数,根据自变量定义域,函数表达式不同。即对应多分支控制结构,以x的取值作为if内判断条件,函数表达式作为语句序列对y进行赋值,最后输出y的值。
三.流程图
四.源代码
#include<stdio.h> int main(){ float x; scanf("%f",&x); if(x<=1) printf("%.1f",x); else if(x<10) printf("%.1f",2*x-1); else if(x>=10) printf("%.1f",3*x-11); return 0; }
第二题 奖金计算问题
一.问题描述
企业发放的奖金根据利润提成。利润低于或等于100000元时,奖金可提10%;利润高于100000元,低于200000元时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%;200000到400000之间时,高于200000元的部分,可提成5%;400000到600000之间时高于400000元的部分,可提成3%;600000到1000000之间时,高于600000元的部分,可提成1.5%,高于1000000元时,超过1000000元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数。 输入格式: 输入在一行中给出当月利润值。 输出格式: 对输入的当月利润值,在一行中输出当月的奖金总额。 输入样例1: 210000 输出样例1: prize=18000 输入样例2: -10000 输出样例2: prize=0 输入样例3: 1100000 输出样例3: prize=40500 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
二.设计思路
这属于很简单的初中数学问题,有输入为利润。根据利润不同,所获奖金不同,以此做多分支控制结构,if的语句序列给奖金赋值,最后输出奖金。
三.流程图
四.源代码
#include<stdio.h> int main(){ int lr,jj; scanf("%d",&lr); if(lr<=0) jj=0; else if(lr<=100000) jj=lr*0.1; else if(lr<=200000) jj=10000+(lr-100000)*0.075; else if(lr<=400000) jj=17500+(lr-200000)*0.05; else if(lr<=600000) jj=27500+(lr-400000)*0.03; else if(lr<=1000000) jj=33500+(lr-600000)*0.015; else if(lr>1000000) jj=39500+(lr-1000000)*0.01; printf("prize=%d",jj); return 0; }
第三题 季节判断
一.问题描述
编写程序,输入年份和月份,判断该年是否是润年,并根据输入的月份判断是什么季节和该月有多少天?(提示:规定3~5月为春季,6~8月为夏季,9~11月为秋季,1、2和12月为冬季)。 输入格式: 输入在一行中给出年份year和月份month,以空格为间隔。 输出格式: 分三行输出,第一行输出是否为闰年,第二行输出季节,第三行输出当月天数。 输入样例1: 1992 2 输出样例1: leap winter days=29 输入样例2: 1990 5 输出样例2: not leap spring days=31 输入样例3: 1990 13 输出样例3: error data 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
二.设计思路
首先有输入,为年份和月份。判断闰年的方式普通闰年是指公历年份是4的倍数的,且不是100的倍数,世纪闰年则必须是400的倍数,由此可做单分支控制结构判断闰年。接着根据输入月份采用多分支控制结构判断季度。最后用Switch语句输出天数。注意,因为有闰年元素,二月天数会因此改变。
三.流程图
四.源代码
#include<stdio.h> #include<math.h> int main() { int n,y; scanf("%d%d",&n,&y); if(n%4==0||n%400==0) {if(y<=12) printf("leap\n"); if(y>12) {} } else {if(y<=12) printf("not leap\n"); if(y>12) {} } if(y>=3&&y<=5) { printf("spring\n"); } if(y>=6&&y<=8) { printf("summer\n"); } if(y>=9&&y<=11) { printf("autumn\n"); } if(y==1||y==2||y==12) { printf("winter\n"); } if(n%4==0||n%400==0) {if(y==2) { printf("days=29\n"); } } switch(y){ case 1:printf("days=31");break; case 3:printf("days=31");break; case 5:printf("days=31");break; case 7:printf("days=31");break; case 8:printf("days=31");break; case 10:printf("days=31");break; case 12:printf("days=31");break; case 4:printf("days=31");break; case 6:printf("days=31");break; case 9:printf("days=31");break; case 11:printf("days=31");break;} if(y>=13) { printf("error data"); } return 0; }
第四题 五位逆序数
一.问题描述
(谭浩强,《C程序设计(第四版)》,清华大学出版社:第四章,P113,第9题) 给一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③输出它的逆序数。 输入格式: 输入在一行中给出1个不多于5位的正整数。 输出格式: 分三行输出。第一行输出这是一个几位数。第二行按照从高到低的顺序输出各位数字,每位数字显示宽度为2位,右对齐。第三行输出逆序数。 输入样例1: 21345 输出样例1: 5 2 1 3 4 5 54312 输入样例2: 0 输出样例2: error data 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
二.设计思路
有输入一个不超过99999的正整数。输入时,首先输出这是个几位数,接着输出各位数字,再以反向输出一次 。根据数的范围,用多分支控制结构输出这是个几位数并留下标记。计算每一位上的数并赋值,通过Switch语句输出各位上的数字。逆序数是什么?比如12345的逆序数为54321,如何求逆序数,我这里用了一种特别的方法,加入循环结构,以样例21345举例,首先m=0,t为21345,第一步,m=m*10+t取余10,t进行除10运算,此时m=5,t=2134;第二步,m=m*10+t取余10,t进行除10运算,此时m=54,t=213,同理在t为0之前一直计算,t的21345会变成m的54312最后输出m。
三.流程图
四.源代码
#include<stdio.h> int main(){ int w,q,b,s,g,t,place,m,f; scanf("%d",&t); if(t==0) printf("error data\n"),place=t; else if(t>0&&t<10) place=1,printf("%d\n",place); else if(t>=10&&t<100) place=2,printf("%d\n",place); else if(t>=100&&t<1000) place=3,printf("%d\n",place); else if(t>=1000&&t<10000) place=4,printf("%d\n",place); else if(t>=10000&&t<100000) place=5,printf("%d\n",place); w=t/10000; q=t/1000%10; b=t/100%10; s=t/10%10; g=t%10; switch(place) { case 5:printf(" %d %d %d %d %d\n",w,q,b,s,g);break; case 4:printf(" %d %d %d %d\n",q,b,s,g);break; case 3:printf(" %d %d %d\n",b,s,g);break; case 2:printf(" %d %d\n",s,g);break; case 1:printf(" %d\n",g);break; default:; } m=0; f=1; while (t!=0) { m=m*10+t%10; t/=10; } m=f*m; if(m>0){ printf("%d\n",m);} return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)