C语言程序设计基础练习题

PTA上C语言程序设计练习题,包含 换硬币、水仙花数、最大公约数最小公倍数、高空坠球、猴子吃桃、兔子繁衍、出租车计价、三角形判断、简单计算器、平面向量加法。

这些题需要一些细节或思维。

1.换硬币:

习题4-5 换硬币 (20 分)
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

输入样例:
13
结尾无空行
输出样例:
fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4
结尾无空行

1.1 分析

  1. 要求按5分、2分和1分硬币的数量依次从大到小的顺序,所以先找最多有几个5分,由于要求每种硬币至少有一枚,所以从最多可能的个数遍历到只有一个。
  2. 其中i,j,k表示每个硬币的个数。确定了5分硬币个数后,可以继续确定2分硬币的个数j=(x-i*5)/2。然后确定1分硬币的个数k。
  3. 最后进行判断,如果所有硬币加起来等于待换的零钱数额,那么输出。

1.2 代码:

#include<stdio.h>
int main(){int x;scanf("%d",&x);int five,sum=0,i,j,k;five=x/5;//找最多有几个5for(i=five;i>=1;--i){for(j=(x-i*5)/2;j>=1;--j){for(k=x-i*5-j*2;k>=1;--k){if(i*5+j*2+k==x){sum++;printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,i+j+k);}}}}printf("count = %d",sum);
} 

2.水仙花数 :

习题4-6 水仙花数 (20 分)
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13 + 53+33。 本题要求编写程序,计算所有N位水仙花数。

输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:
3
结尾无空行
输出样例:
153
370
371
407
结尾无空行

2.1分析与代码

如果引用math.h头文件中的pow函数,会导致运行超时。
所以需要自己写一个pow函数。

#include<stdio.h>
long long pow(int a,int b){long long sum=1;for(int i=0;i<b;++i){sum=sum*a;}return sum;
}
int main(){int n;scanf("%d",&n);long long begin=pow(10,n-1),end=pow(10,n);long long m,sum=0,i;for(i=begin;i<end;++i){//水仙花数的范围-N位正整数m=i;while(m>0){//对m的每一项进行处理sum+=pow(m%10,n);if(sum>i) break;m=m/10;}if(sum==i) {printf("%d\n",i);}sum=0;} 
} 

3.最大公约数和最小公倍数:

习题4-7 最大公约数和最小公倍数 (15 分)
本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:
输入在一行中给出两个正整数M和N(≤1000)。

输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

输入样例:
511 292
结尾无空行
输出样例:
73 2044
结尾无空行

3.1 分析

  1. 假设现在要求最小公倍数的两个数为x,y,他们的最大公约数为p,最小公倍数为q。则xy=pq

  2. 最大公约数求法

求最大公约数可以使用辗转相除法:

gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)

int gg(int a,int b){int c;while(b){c=a;a=b;b=c%b;/*a mod b为零时,由于上面把b给了a,*//*所以此时的a就是最大公约数*/}return a;
}

3.2 代码

#include<stdio.h>
int gg(int a,int b){int c;while(b){c=a;a=b;b=c%b;}return a;
}
int main(){int a,b;scanf("%d %d",&a,&b);int k=gg(a,b);int m=a*b/k;//他们的最大公约数为k,最小公倍数为m。则ab=kmprintf("%d %d",k,m);
}

4.高空坠球

习题4-8 高空坠球 (20 分)
皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:
输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:
在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

输入样例:
33 5
结尾无空行
输出样例:
94.9 1.0

4.1分析与代码

从空中到落地,从地面到空中,这是两个过程,不要只加上反弹的距离,还要考虑落地的距离。

第1次落地时,反弹数为0。我在代码中的移动距离为离地距离加上反弹距离,所以最后一次落地时,移动距离要减去第n次反弹的距离。

#include<stdio.h>int main(){double h,n;scanf("%lf %lf",&h,&n);double sum=0,num=0;for(int i=0;i<n;++i){num = h/2;sum+=num+h;//代码中的移动距离为离地距离加上反弹距离h=num;}printf("%.1lf %.1lf",sum-num,num);//移动距离要减去第n次反弹的距离。
}

5.猴子吃桃问题

习题4-10 猴子吃桃问题 (15 分)
一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

输入格式:
输入在一行中给出正整数N(1<N≤10)。

输出格式:
在一行中输出第一天共摘了多少个桃子。

输入样例:
3
结尾无空行
输出样例:
10

5.1分析与代码

现在是知道第n天剩的桃求第1天的桃,

第二天的桃子=第一天桃子/2-1

第i天的桃等于(第i+1天的剩的桃+1)*2,因此有:f(i)=(f(i+1)+1)∗2,结束条件是f(n)=1。

#include<stdio.h>
int f(int x,int n){if(x==n) return 1;else return (f(x+1,n)+1)*2;
}
int main(){int n,sum=1;scanf("%d",&n);printf("%d",f(1,n));
}

6.兔子繁衍问题

习题4-11 兔子繁衍问题 (15 分)
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式:
输入在一行中给出一个不超过10000的正整数N。

输出格式:
在一行中输出兔子总数达到N最少需要的月数。

输入样例:
30
结尾无空行
输出样例:
9

6.1分析与代码

f(n)表示n个月后的兔子总数
f(n)=n那个月原有的兔子+n那个月新生的兔子

n那个月原有的兔子是:f(n-1)

由于是第三个月起,小兔子每个月就能生,也就是说小兔子跨到大兔子其实只需要两个月。

n那个月新生的兔子就等于两个月前所有的兔子,因为两个月后,这些兔子都能生了。

也就是说:n那个月新生的兔子=f(n-2)

每个月的兔子总对数可以归纳为一个分段函数:
f(n) = 1 (n=1,2)
f(n) = f(n-1) + f(n-2) (n=3,4,5)

#include<stdio.h>int main(){int n;scanf("%d",&n);int a[100],i;a[1]=a[2]=1;if(n==1){printf("%d",1);return 0;}for(i=3;;i++){a[i]=a[i-1]+a[i-2];if(a[i]>=n) {printf("%d",i);return 0;}}
}

7.出租车计价

习题3-3 出租车计价 (15 分)
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

输入样例1:
2.6 2
结尾无空行
输出样例1:
10

7.1分析与代码

这个题主要是题意,每5分钟2元计收,六分钟也是两元,因为是每5分钟。所以t要设置为int类型。

#include<stdio.h>int main(){double x;int t;double sum=0;scanf("%lf %d",&x,&t);sum+=10;if(t>=5)sum+=t/5*2;if(x>3){//起步里程于3公里 if(x<=10) //起步里程小于等于10公里{sum+=(x-3)*2;}else{//起步里程大于10公里sum+=7*2+(x-10)*3;}}printf("%.0lf",sum);//四舍五入
}

8.三角形判断

习题3-5 三角形判断 (15 分)
给定平面上任意三个点的坐标,检验它们能否构成三角形。

输入格式:
输入在一行中顺序给出六个[−100,100]范围内的数字,即三个点的坐标

输出格式:
若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。

输入样例1:
4 5 6 9 7 8
结尾无空行
输出样例1:
L = 10.13, A = 3.00
结尾无空行
输入样例2:
4 6 8 12 12 18
输出样例2:
Impossible

8.1分析与代码

这个题需要知道海伦公式,通过三边长度求得三角形面积。

已知三角形三边a,b,c,(p=(a+b+c)/2)

S=sqrt[p(p-a)(p-b)(p-c)]

=sqrt[(1/16)(a+b+c)(a+b-c)(a+c-b)(b+c-a)]

=1/4sqrt[(a+b+c)(a+b-c)(a+c-b)(b+c-a)]

而且经过测试发现只需要判断两边之和大于第三边,就可以确定它可以构成三角形。

三角形三边关系的定理:“三角形任何两边的和大于第三边”和它的推论:“三角形任何两边的差小于第三边”

进行判断的时候,其实只需要判断最小的两边和大于最长一边即可

#include<stdio.h>
#include<math.h>
int main(){double x1,y1,x2,y2,x3,y3;double l1,l2,l3;double s,c,a;scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);l1=sqrt(pow(x1-x2,2)+pow(y1-y2,2));l2=sqrt(pow(x2-x3,2)+pow(y2-y3,2));l3=sqrt(pow(x1-x3,2)+pow(y1-y3,2));if((l1+l2>l3)&&(l2+l3>l1)&&(l1+l3>l2)){//两边之和大于第三边 if((l1-l2<l3)&&(l1-l3<l2)&&(l2-l1<l3)&&(l2-l3<l1)&&(l3-l2<l1)&&(l3-l1<l2)){//两边之差小于第三边,这个可以忽略c=l1+l2+l3;a=c/2;s=sqrt(a*(a-l1)*(a-l2)*(a-l3));printf("L = %.2lf, A = %.2lf",c,s);}}else {printf("Impossible");}
}

9.简单计算器

习题6-7 简单计算器 (20 分)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例:
1+2*10-10/2=
结尾无空行
输出样例:
10
结尾无空行

9.1分析与代码

题意说在一行中给出一个四则运算算式,说明数字和字符是交叉输入的。所以就分别对每次的输入进行判断处理即可。

#include<stdio.h>int main(){int sum;int num;char a;scanf("%d",&sum);while(scanf("%c",&a)&&a!='='){scanf("%d",&num);if(a=='+') sum+=num;else if(a=='-') sum-=num;else if(a=='*') sum=sum*num;else if(a=='/'){if(num==0) {printf("ERROR");return 0;}else{sum=sum/num;}}else{printf("ERROR");return 0;}}printf("%d",sum);
}

10.平面向量加法

习题9-3 平面向量加法 (15 分)
本题要求编写程序,计算两个二维平面向量的和向量。

输入格式:
输入在一行中给出两个二维平面向量的分量。

输出格式:
在一行中按照(x, y)的格式输出和向量,坐标输出小数点后一位(注意不能输出−0.0)。

输入样例:
3.5 -2.7 -13.9 8.7
结尾无空行
输出样例:
(-10.4, 6.0)
结尾无空行

分析与解答

小数部分按指定位数输出,编译器会进行四舍五入处理,如果和的结果是-0.04,输出会是-0.0,而如果绝对值结果是0.05及以上,四舍五入是0.1,有了上面的条件就可以保证 结果不会出现-0.0的情况了。

#include<stdio.h>
#include<string.h>
int main()
{double x1,y1,x2,y2;scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);double a=x1+x2;double b=y1+y2;if(fabs(a)<0.05) a=0.0;if(fabs(b)<0.05) b=0.0;printf("(%.1lf, %.1lf)",a,b);
}

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

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

相关文章

使用zigbee的协议栈进行协调器路由器终端初始化

实验目的&#xff1a; 使用协议栈,外加自己写的数码管的代码模块 配置协调器路由器终端&#xff0c;各自对应数码管数字C,R,E。 本身不是很细致&#xff0c;只是把一些重要步骤截了一下&#xff0c;IAR工程什么的默认大家都会了。 zigbee协议栈的下载 下载完找以下文件夹 找…

工程用计算机是什么样子的,【2人回答】学软件工程的应该买什么样的处理器电脑?-3D溜溜网...

回答&#xff1a;1、荣耀MagicBook Pro 2020&#xff1a;&#xff0c;荣耀MagicBook Pro 2020还搭载了MX350独显&#xff0c;MX350基于同GTX 1050一样的GP107核心&#xff0c;让笔记本具备了一定的游戏能力&#xff0c;学习、办公之余的游戏场景也可以从容应对&#xff0c;编程…

zigbee无线通信数码管实验、usbDongle抓包、发字符串

文章目录无线通信数码管实验无线通信抓包usbDongle无线通信发字符串&#xff1a;无线通信数码管实验 给一个模块下载发送程序&#xff0c;模块数码管变为1&#xff0c;说明该模块已成为发送模块。 给一个模块下载接收程序&#xff0c;模块数码管变为2&#xff0c;说明该模块已…

计算机安全加固自动检查,Windows主机安全加固检查列表.doc

第 PAGE 13 页 共 NUMPAGES 13 页目 录TOC \o "1-3" \h \z \u HYPERLINK \l "_To 1账户管理 PAGEREF _To\h 3HYPERLINK \l "_To 1.1用户管理 PAGEREF _To\h 3HYPERLINK \l "_To 1.2弱口令修改 PAGEREF _To\h 3HYPERLINK \l "_To 1.3密码策略 PAG…

zigbee协议栈的系统相关函数的使用 仿照协议栈写事件

文章目录1.osal_set_event函数的使用2.osal_start_timerEx函数&#xff0c;数码管变成c&#xff0c;两秒钟以后&#xff0c;灯点亮。3.我们能不能自己添加一个事件而不用GENERICAPP_SEND_MSG_EVT事件。主要就是通过这个实验知道了&#xff1a;怎么在初始化时候干一些事情那些函…

老年人自学计算机,老年人怎样学电脑?请问从网上能找到学习资吗?

首先学一些基础的知识&#xff0c;这样入门之后其他的就好说了&#xff01;推荐一些基础性的知识&#xff1a;计算机基础可以分为硬件和软件硬件&#xff1a;主板、CPU、硬盘、内存、显卡、机箱电源、鼠标键盘、光驱、音响等软件&#xff1a;WINDOWS系统、OFFICE等一般基本工具…

zigbee上位机通过vs2019的mfc实现

文章目录一、操作系统和输入输出设备的联系二、应用程序和操作系统的联系三、zigbee上位机具体实现结果&#xff1a;四、实现上位机的具体流程&#xff1a;五、通过windows API实现串口通信的原理&#xff1a;一、操作系统和输入输出设备的联系 操作系统能操纵输出设备执行特定…

网上读书关于软件测试,【读书笔记】之软件测试

1.引论1.1 什么是软件测试软件测试主要是对制作的软件产品进行检查和测试&#xff0c;及时地发现程序中的故障和逻辑错误&#xff0c;以保障软件产品的可靠性。软件测试是保证软件质量的关键步骤&#xff0c;也是提高软件可靠性的重要手段&#xff0c;因此它是软件工程的的重要…

matlab guide 自定义右键菜单

在一个gui图形显示界面上点击右键&#xff0c;出现一些选项可以进行操作。 实验效果&#xff1a; 找到菜单编辑器的上下文菜单&#xff1a; 我们看几个回调函数即可&#xff1a; function clear_Callback(hObject, eventdata, handles) cla; function gridoff_Callback(hObj…

计算机活动感悟怎么写,计算机教学心得体会范文五篇.doc

计算机教学心得体会范文五篇计算机教学心得体会范文五篇【一】一、开卷有益&#xff0c;爱不释手然而&#xff0c;在我参加了第一次培训&#xff0c;我就发现自己错了&#xff0c;此次的电脑培训与以前参加过的培训大相径庭。以前的培训都是应付考试的&#xff0c;实用性不强&a…

Java一些基础知识的整合

文章目录1. 数据类型、变量与常量1.1基本数据类型&#xff08;primitive types&#xff09;1.1.1 boolean1.1.2字符型1.1.2.1 转 义 字 符 含 义1.1.3整数类型1.1.4 浮点类型1.2引用类型( reference types )1.3 基本数据类型和引用类型区别1.4 标识符&#xff08; Identifier&a…

空军部队计算机专业有没有用武之地,报名当兵可以选择陆军、海军、空军、武警、火箭军,艰苦地区部队...

如果是本科生&#xff0c;在部队表现优异&#xff0c;年龄不超26周岁是可以被推荐去参加大学生士兵提干考试。考上之后需要到军校培训6个月左右&#xff0c;毕业后下部队就是中尉军衔。二、报名当兵时有陆军、海军、空军、武警、火箭军&#xff0c;艰苦地区部队&#xff0c;选择…

查看本地计算机ip命令,查看你本机的IP信息的命令ipconfig详解【图】

原标题&#xff1a;"查看你本机的IP信息的命令ipconfig详解【图】"关于路由器的知识分享。 - 素材来源网络 编辑:kaka。对于ipconfig命令大家应该不陌生&#xff0c;它主要用于显示本地计算机网络适配器的ip地址、子网掩码以及默认网关等信息。1、IPconfig不带参数不…

什么是传感器? 传感器由哪几部分组成? 传感器分类?

文章目录1.什么是传感器&#xff1f;2.传感器由哪几部分组成&#xff1f;3.传感器分类&#xff1f;1.什么是传感器&#xff1f; 传感器&#xff08;英文名称&#xff1a;transducer/sensor&#xff09;是一种检测装置&#xff0c;能感受到被测量的信息&#xff0c;并能将感受到…

计算机win7关机重启,电脑win7关机后自动重启如何解决_win7一关机就立马自动重启修复方法-win7之家...

我们在使用完win7系统电脑之后&#xff0c;都会顺手对其进行关机操作&#xff0c;以此防止电脑中的硬件过度消耗&#xff0c;可是近日有些用户在将win7电脑关机之后却又出现了重启的情况&#xff0c;最终不得不以切断电源的方式来解决&#xff0c;那么电脑win7关机后自动重启如…

RFID 射频 RFID工作流程 自动识别技术 工作频段 短距离无线通信技术

文章目录1.rfid概念&#xff1a;2.射频概念&#xff1a;3.rfid工作流程&#xff1a;4.几类自动识别技术各有什么特点&#xff1f;他们有何不同。5.RFID系统有哪些工作频段&#xff1f;各频段的特点是什么。6.对比几种短距离无线通信技术1.rfid概念&#xff1a; RFID是一种自动…

链表 队列 基本概念 为什么使用二叉查找树 抽象数据类型

文章目录0.抽象数据类型(ADT)的优点&#xff1f;1.为什么需要链表&#xff1f;2.链表的概念&#xff1f;3.队列的概念&#xff1f;4.为什么需要二叉查找树&#xff1f;0.抽象数据类型(ADT)的优点&#xff1f; ADT版本可读性高&#xff0c;隐藏编程细节&#xff0c;对终端用户隐…

黑盒测试还适用于测试软件,软件测试 黑盒测试中的决策表技术

决策表技术是用于黑盒测试的广泛使用的用例设计技术之一。这是一种系统方法&#xff0c;它以表格形式捕获各种输入组合及其各自的系统行为。它也称为因果表。该技术用于系统地选择测试用例; 它节省了测试时间&#xff0c;并为软件应用程序的测试区域提供了良好的覆盖。决策表技…

统计一行文本的单词个数

统计一行文本的单词个数 习题6-8 统计一行文本的单词个数 (15 分) 本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串&#xff0c;各单词之间用空格分隔&#xff0c;空格数可以是多个。 输入格式: 输入给出一行字符。 输出格式: 在一行中输…

戴尔计算机windows未能启动,戴尔电脑windows7无法启动安装过程怎么办

windows7无法启动安装过程怎么办&#xff1f;暗黄win7系统的时候经常遇见这种问题可能是硬件问题导致的&#xff0c;还有可能是系统设置问题导致的&#xff0c;我们具体原因具体分析&#xff0c;一起来看看解决方法&#xff0c;动手实践起来吧&#xff01;1、方法一&#xff1a…