C语言百钱买百鸡问题
- 格式:docx
- 大小:16.08 KB
- 文档页数:2
第⼀部分:趣味算法⼊门第⼀题:百钱买百鸡100个不同类型的python语⾔趣味编程题在求解的过程中培养编程兴趣,拓展编程思维,提⾼编程能⼒。
第⼀部分:趣味算法⼊门;第⼀题'''1.百钱买百鸡:中国古代数学家张丘建在他的《算经》中提出了⼀个著名的 “ 百钱百鸡问题 “:⼀只公鸡值五钱,⼀只母鸡值三钱,三只⼩鸡值⼀钱,现在要⽤百钱买百鸡,请问公鸡、母鸡、⼩鸡各多少只?'''#答案⽰例如下;import time #导⼊time模块,以⽤来计算程序运⾏的时间,可忽视time.perf_counter() #与time模块中计算时间有关,可忽视#主体代码块如下:for cock in range(0,20):for hen in range(0,33-cock):chicken=100-cock-henif chicken%3==0:if 5 * cock + 3 * hen + chicken / 3 == 100:print('公鸡{}只,母鸡{}只,⼩鸡{}只'.format(cock,hen,chicken))print(time.perf_counter()) #打印出程序运⾏的时间,可忽视#解本问题有多种⽅法,我只写了⼀种⽅法,读者可以⾃⼰尝试各种⽅法,再⽤time模块计算每种⽅法的运⾏时间。
补充:算法是解决特定问题的⽅法,是程序设计的基础,是程序设计的灵魂。
作为⼀个算法,应具备5个特性,即有穷性、确定性、可⾏性、输⼊和输出。
计算机算法可分为两⼤类,分别是数值计算算法和⾮数值计算算法,数值计算的⽬的是求解数值,例如求⽅程的根;⾮数值计算算法主要⽤于处理事务领域的问题,如排序、查找等。
问题分析:⽤百钱如果只买公鸡,最多可以买20只,但题⽬要求买⼀百只,由此可知,所买公鸡的数量肯定在0-20之间,同理,母鸡的数量在0~33之间在。
此把公鸡、母鸡和⼩鸡的数量分别设为cock、hen、chicken, 则cock+hen+chicken=100,因此百钱买百鸡问题就转化成解不定⽅程组cock + hen + chicken == 100和5 x cock + 3 x hen +chicken/3=100的问题了。
《C语言程序设计》专升本练习题(学习资料仅供练习)目录专升本《C语言》练习题一 (1)专升本《C语言》练习题二 (9)专升本《C语言》练习题三 (17)专升本《C语言》练习题四 (24)专升本《C语言》练习题五 (31)专升本《C语言》练习题六 (42)专升本《C语言》练习题七 (48)专升本《C语言》练习题八 (58)专升本《C语言》练习题九 (65)专升本《C语言》练习题十 (72)专升本《C语言》练习题一6 10专升本《C语言》练习题二专升本《C语言》练习题三一、单项选择题1. C语言源程序文件经过编译连接之后生成一个后缀为__C__的文件。
A.”.c”B.“.obj”C.“.exe”D.“.bas”2. 以下选项中不正确的整型常量是_C____。
A. 12LB. -10C. 1,900D. 123U3. 表达式___C___的值是0。
A.3%5B.3/5.0C.3/5D.3<54. 表达式!(x>0||y>0) 等价于__D___。
A.!x>0||!y>0B.!(x>0)||!(y>0)C.!x>0&&!y>0D.!(x>0)&&!(y>0)5. 若变量已正确定义并赋值,表达式__D____不符合C语言语法。
A.4&&3B.+aC.a=b=5D.int(3.14)6. 若变量已正确定义,执行语句scanf("%d%d%d ",&k1,&k2,&k3);时,___B___是正确的输入。
A.2030,40B.20 30 40C.20, 30 40D.20, 30,407. 执行语句printf(”__D____”, 2); 将得到出错信息。
A.%dB.%oC.%xD.%f8. 设变量定义为“int s[ ]="hello\nworld\n";”,则数组s中有__B__个元素。
上机操作十四-----------------------------------------------------------------------------------------------------利用C语言编程完成以下题目,把源程序及运行结果截图上传1、输入两个正整数,求这两个数的最小公倍数和最大公约数。
#include "stdio.h"main(){int m,n,i,t,min,max;printf("\n请输入两个正整数:");scanf("%d%d",&m,&n);if(m>n) {t=m;m=n;n=t;}for(i=m;i>=1;i--)if (m%i==0 && n%i==0){min=i;break;}for(i=n;i<=m*n;i++)if (i%m==0 && i%n==0){max=i;break;}printf("%d,%d两数的最大公约数为:%d,最小公倍数为:%d",m,n,min,max);}2、“百钱百鸡”问题。
我国古代数学家张丘建在《算经》中出了一道题:公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱3只,用100元钱买100只鸡,请问公鸡、母鸡和小鸡各买多少只?提示:可以假设x、y、z分别为公鸡、母鸡和小鸡的只数。
可以得出两个公式x+y+z=100,15x+9y+z=300,另外x的值不会超过19,因为若用100元买了20只公鸡以后就不能买其他的鸡,鸡的总数不对;同理y值不可能超过33,所以可以用二重循环来组合他们。
#include "stdio.h"main(){int x,y,z;for(x=1;x<=20;x++)for(y=1;y<=33;y++)for(z=1;z<=300;z++)if (x+y+z==100 && x*5+y*3+z/3==100 && z%3==0)printf("公鸡有%d只.母鸡有%d只.小鸡有%d只.\n",x,y,z);}3、一个数如果恰好等于它的因子之和,这个数就称为“完数”。
百钱买百鸡这个题目是一个著名的数学难题,它要求用一百个钱币购买一百只鸡,其中公鸡x只,母鸡y只,小鸡z只,且x+y+z=100,且5x+3y+z/3=100。
使用现代计算机技术的优势,可以通过暴力穷举来解决这个问题。
小朋友也可以在Scratch编程中,通过引入变量和穷举法来实现这一过程。
首先,设置三个变量x、y和z,它们分别代表公鸡、母鸡和小鸡的数量。
设置一个计数器,用于显示穷举的执行时间。
然后,开始穷举。
从x的最小值开始,即0,依次增加到最大值,即100/5,检查是否满足x+y+z=100。
如果满足,继续检查是否满足5x+3y+z/3=100。
如果都满足,则表示找到了一个解。
在穷举过程中,可以使用计时器显示穷举的执行时间,以便学生了解求解过程的耗时情况。
最后,输出找到的所有解,包括公鸡、母鸡和小鸡的数量。
这些解可能有四种情况:公鸡0只,母鸡25只,小鸡75只;公鸡4只,母鸡18只,小鸡78只;公鸡8只,母鸡11只,小鸡81只;公鸡12只,母鸡4只,小鸡84只。
通过这种方式,可以使用Scratch编程解决这个数学难题,并且通过计时器显示执行时间,了解求解过程的耗时情况。
《C语言程序设计》模拟试卷一一、单项选择题(每题2分,共30分)1、下列有关C语言的叙述中错误的是(D)。
A) C语句必须以分号结束B) 任何一个C程序中有且只有一个主函数C) 复合语句在语法上可被看作一条语句D) C程序中对数据的任何操作都可由运算符实现2、以下不能定义为用户标识符的是(C)。
A) MAIN B) _HJ C)2ong D) LINE13、下列符号中用来表示C语言中的回车换行的是(B)。
A) \r B) \n C)\b D) \t4、如有如下定义:int a=1,则语句printf(“%d,%d”, a, ++a);的运行结果为(B)。
A) 1, 1 B) 1, 2 C) 2, 2 D)2, 15、已知ch为字符型变量,下面表达式中正确的是(A)。
A) ch=’\xff ’B) ch=’\ff ’C) ch=’ ff ’D) ch=” ff ”6、以下能正确定义一维数组的是(C)。
A) int a[5]={0,1,2,3,4,5}; B) int a[5]=”012345”;C) char a[ ]=”012345”;D) char a[5]={0,1,2,3,4,5};7、以下语句中能正确定义变量并赋初值的是(A)。
A) char c=65; B) float f=f+1.1;C) double x=12.3e3.6; D) int m=n=2.0;8、在执行下列程序时输入:1357924,则程序的运行结果为(D)。
main( ){ int x, y;scanf(“%2d%2d”,&x,&y);printf(“%2d”,x*y); }A) 13 B) 1357 C) 74 D) 7419、执行下列程序段后输出的结果是(C)。
x = 9;while (x > 7){ printf(“*”); x- -; }A) **** B) *** C) ** D) *10、设char str1[10] = “ABCDE”, str2[10] = “xyz”;则执行语句printf(“%d”, strlen(strcpy(str1, str2))); 后的输出结果是(D)A) 9 B) 8 C) 5 D) 311、若用数组名作为函数调用的实参,则传递给形参的是(A)A) 数组的首地址B) 数组第一个元素的值C) 数组中全部元素的值 D) 数组元素的个数12、在C程序中,若未在函数定义时说明函数类型,则函数默认的类型为( A ) A)void B)double C)int D)char13、下面不能正确进行字符串赋值操作的语句是(A)A) char s[5]={"ABCD"};B) char s[5]; s="ABCD";C) char *s;s="ABCDEF"; D) char *s="ABCD";14、设有说明int s[5]={1,3,5,7,9}; int *p=s; 则下列表达式中值为3的是(B )A)++p B)++(*p) C) *(++p) D) *(p+=2)15、下面程序的输出结果是(B)int m=13;int fun( int x, int y){ int m=3;return( x*y-m); }main( ){ int a=7,b=5;printf(“%d\n”, fun(a,b)/m); }A) 1 B) 2 C) 3 D) 10二、判断(每空1分,共10分)1、C语言有三种结构化程序设计方法,分别为顺序结构、选择结构和循环结构。
第一章C语言概述课后题一、选择题1、一个C语言程序总是从( )。
A、主过程开始执行B、主函数开始执行C、子程序开始执行D、主程序开始执行2、C语言能直接执行的程序是()。
A、源程序B、汇编程序C、目标程序D、可执行程序3、以下叙述中正确的是( )。
A、C语言程序中的注释部分可以出现在程序中任意合适的地方B、花括号“{”和“”只能作为函数体的定界符C、构成C语言程序的基本组成单位是函数,所有函数名都可以由用户命名D、分号是C语言语句之间的分隔符,不是语句的一部分4、以下选项中,不合法的C语言程序函数体是()。
A、{;}B、{ }C、{printf(“computer”); }D、{int a=1;}5、要把高级语言编写的源程序转换为目标程序,需要使用()。
A、编辑程序B、驱动程序C、编译程序D、诊断程序二、填空题1、C语言程序的基本单位是()。
2、C语言源程序文件名的后缀是( ),经过编译后生成的目标文件名的后缀是(),经过链接之后生成的可执行文件名的后缀是( )。
3、计算机语言包括()、()和()。
其中计算机能够直接识别的语言是( ),()很接近人们习惯使用的自然语言和数学语言。
4、按照结构化程序设计原则,常见的程序基本结构有()、()和().5、循环结构包含()循环和()循环。
三、简单题1、什么是程序?什么是程序设计?2、解释源程序、目标程序和可执行程序的含义。
3、写出C语言的特点.四、编程题1、参照本章例题,编写一个C语言程序,输出以下信息:happy new year!2、参照本章例题,编写程序求两个数中的较小值。
第二章C语言程序设计基础课后题一、选择题1、以下选项中,正确的整型数据是().A、1.2B、—123C、723 456D、567 8902、下面字符常量的表达形式中正确的是()。
A、“Z”B、“\’C、‘1’D、‘\378'3、ch为字符型变量,执行语句“ch=’C’+‘5’-‘4’;”,将ch按字符类型输出的结果是()。
教学争鸣新课程NEW CURRICULUM“百鸡问题”的两种解法常煜(河北唐山市第12中学)很多人在理解数学时遇到了困难,便为自己找借口说:“数学太抽象了。
”其实,数学再抽象也是来源于我们的生活,只要用一种正确的态度和思想来对待它,它就会变得很容易。
在全面推进素质教育的今天,如何寓教于乐,有效地激发学生的学习兴趣和主动学习的能力尤为重要,本文试图通过利用计算机Visual FoxPro编程来解决数学中的一个传统的题目,给学生介绍一种用计算机快速求解数学问题的方法,以提高数学教学的生动性、趣味性。
我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?首先我们用普通数学方法解答如下:解:根据题目知道公鸡五文一只,而现在百钱买百鸡(100文钱买鸡),所以公鸡数量要最多为20。
设:母鸡M只,公鸡N只,小鸡100-M-N只,所以5N+3M+(100-M-N)/3=100且M,N为整数,所以可以得出正确答案:有三种情况:公鸡4只,母鸡18只,小鸡78只;公鸡8只,母鸡11只,小鸡81只;公鸡12只,母鸡4只,小鸡84只。
这道题其逻辑性正好与计算机程序性非常吻合,如果利用计算机Visual FoxPro编程来解这个问题,我们只要编写好程序,计算机就会很快计算出来,而且在变换其他数据组时也会很容易得到答案。
用Visual FoxPro编程如下:Cleagj=1xh=1do while gj<=20&&买公鸡的最大数mj=1do while mj<=33&&买母鸡的最大数xj=1do while xj<=100&&买小鸡的最大数if(5*gj+3*mj+xj/3)=100.and.(gj+mj+xj)=100?space(10)+str(xh)+'公鸡=',gj??space(10)+str(xh)+'母鸡=',mj??space(10)+str(xh)+'小鸡=',xj?xh=xh+1endifxj=xj+1enddomj=mj+1enddogj=gj+1enddo结果有三组:A:(4,18,78)B:(8,11,81)C:(12,4,84)数学是一种科学、一种语言、一种艺术、一种思维方法,是学校教育中永恒并且最重要的部分之一,要让学生学好数学,首先必须让学生发现数学中的美之所在,对数学感兴趣。
完成下列训练题的基本步骤是:1、问题分析及解决方案框架确定充分地分析和理解问题本身,明确问题到底要做什么。
(what to do?)在确定解决问题框架过程中(how to do?),考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。
2、详细设计和编码确定算法的主要流程,在此基础上进行代码设计(coding),一般来讲,每个明确的功能模块程序不超过60行代码,否则,功能要继续分解。
3、上机前编写程序与检查上机前检查程序可有效提高调试效率,减少上机调试程序时的无谓错误。
程序检查主要有两种途径:用一组测试数据手工执行程序;或者通过阅读或给别人讲解自己的程序而深入、全面地理解程序逻辑,把程序中的明显错误事前排除。
4、上机调试程序提供的结果应当包括:算法、数据结构的设计、程序清单1、猜数游戏游戏的开始由机器产生一个随机数(1~100之间,用库函数random()取值),然后游戏者在程序的提示下猜数,若输入的数比这个数大,程序提示“your answer is HIGH,try again!”否则,程序提示“your answer is LOW,try again!”直到猜对为止。
程序可以实现连续猜数,直到游戏者退出。
程序输出要求:累计游戏者猜对这个数所需的次数n,当n<=7时,给出“congratulation!”,当7<n<15时,给出“I believe you can do it better!”;当n>15时,用exit(0)库函数退出程序。
2、百钱百鸡问题(穷举算法)我国古代数学家张丘建在《算经》中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”注:穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特性。
使用穷举法的关键是确定正确的穷举范围,即不能过分扩大,也不能过分缩小穷举的范围。
习题1参考答案1.1解释以下术语(1)计算机软件:计算机软件是一系列按照特定结构组织的程序、数据(Data)和文档(Document)的集合。
(2)计算机程序:用计算机语言所编写的一系列指令的集合。
(3)数据:数据是程序加工和处理的对象。
(4)算法:算法是一组有穷的规则,它们规定了为解决某一特定问题而采取的一系列运算步骤。
(5)数据结构:数据结构是存在一种或多种特定关系的数据元素的集合,其外在表现为数据的组织形式。
(6)数据类型:数据类型是一个值的集合和定义在这个值集上的操作的总称。
(7)程序设计:程序设计是给出解决特定问题程序的方法和过程,是软件构造活动中的重要组成部分。
1.2 简答题(1)简述内存的组织结构形式?计算机系统把内存看作是由若干个连续的存储单元(Storage Location)组成的,每个存储单元的大小为一个字节(Byte)。
为了能唯一标志每个存储单元,在计算机系统中给每个存储单元指定一个唯一的编号,该编号被称为存储单元的地址(Address),计算机在读写内存时就是按照存储单元的地址进行的。
(2)为什么计算机系统是一个通用的计算系统?在计算机硬件相对固定不变的前提下,计算机的通用性主要表现在通过运行不同的程序来完成不同的计算任务。
(3)简述结构化程序设计的基本思想?在程序设计过程中,如果仅仅使用顺序、选择和循环这三种基本控制结构,并且使每个代码块只有一个入口和一个出口,则这样的程序设计方法被称为结构化程序设计(Structured Programming)。
(4)简述计算机语言的发展史?程序设计语言经历了从机器语言、汇编语言、高级语言到超高级语言的发展历程。
(5)简述利用计算机进行问题求解的过程?1、理解问题特征2、设想解决方案3、优化解决方案4、描述解决方案5、执行并分析解决方案(6)简述各个程序质量要素的含义?1、正确性(Correctness):正确性是指一个计算机程序的正确程度,即程序在预定的运行环境下能正确完成预期功能的程度。
六种常用算法一、有条不紊——递推法破解难题问:“我对数据结构有了一定了解,但还是不太懂程序。
从经典公式“程序=算法+数据结构”得知,是因为不了解算法。
能不能介绍几种简单的算法,当然从最容易懂的那种开始了?”答:“算法就是能够证明正确的解题步骤,算法有许多种,最简单的无非下面的六种:递推法、贪心法、列举法、递归法、分治法和模拟法。
刚听名字挺吓人的,其实有好多程序我们平常都见过。
这些算法当中,最最简单的莫过于递推算法了。
下面举例说明。
”1、什么是递推法递推法这种解题方法其实在我们编程的过程中用的很多,只不过没有将其上升到理论的高度罢了。
所谓递推法,就是找出和时间先后相联系或和数的大小相联系的步骤,上一步和下一步和数字的增大或减小有一定的联系。
我们要么从前向后(或从小到大)推导,也可从后向前(或从大到小)推导。
由此得出两种推导方法:顺推法和倒推法。
请看下面的示例。
示例:猴子分食桃子:五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。
不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后,发现还多一个,它吃掉这桃子,并拿走了其中一堆。
第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。
第三只,第四只,第五只猴子都依次如此分食桃子。
那么桃子数最少应该有几个呢?编程简析:怎样编程呢?先要找一下第N只猴子和其面前桃子数的关系。
如果从第1只开始往第5只找,不好找,但如果思路一变,从第N到第1去,可得出下面的推导式:第N只猴第N只猴前桃子数目5 s5=x4 s4=s5*5/4+13 s3=s4*5/4+12 s2=s3*5/4+11 s1=s2*5/4+1s1即为所求。
上面的规律中只要将s1-s5的下标去掉:s=xs=s*5/4+1s=s*5/4+1s=s*5/4+1s=s*5/4+1所以可以用循环语句加以解决。
综观程序的整体结构,最外是一个循环,因为循环次数不定,可以使用While循环,其结束条件则是找到第一个符合条件的数。
一基础部分:1、输入1~10之间的一个数字,输出它对应的英文单词。
2、用自然语言描述程序逻辑如下,试写程序。
①设置环境;②定义变量i、j、s,以及用于放置结果的变量sum,并令sum初值为0;③i=1;④如果i≤100,则转⑤,否则转⑧;⑤令s=0,求前i个自然数之和,并放于变量s 之中;⑥sum=sum+s;⑦i增加1,转④;⑧输出和sum,结束。
3、用自然语言描述的程序逻辑为:(假设正确口令为123456)①设置环境;②定义变量i、flag和password,并令flag=0,i=0;③用户回答口令,将其赋于password变量;④口令正确?如果是,则flag=1,转⑥。
否则转⑤;⑤回答三次口令了吗?如果没有,计数器加1后(i++),转③,否则转⑥;⑥根据flag之值输出相应信息。
4、用自然语言描述的程序逻辑如下:①设置环境;②定义变量digit、x、y分别表示原始数、原始数的个位数和逆数;③输入原始正整数x;④从x中分解出个位数字digit;⑤合并个位digit至逆数y中;⑥原始数x缩小10倍:x=x/10;⑦如果x非零,则转④;⑧输出逆数y,结束5、输入某三角形的三个边的长度,判断出这是个什么三角形(等腰、等边、任意,或不能构成)。
6、输入10个数,分别统计其中正数、负数、零的个数。
7、先随机产生N个三位自然数输出,然后再输出其中同时是3、5、7倍数的数。
(设N为100)8、已知x和y存在下列对应关系,要求对输入的每个x值,计算出y值,请编程。
y=0,x=a||x=-a; y=sqrt(a*a-x*x), -a<x<a; y=x, x<-a||x>a.9、计算:1/2-2/3+3/4-4/5……,前100项。
10、从终端输入3个数a、b、c,按从大到小的顺序输出。
11、打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。
12、求下列式子的值:1-1/2+1/3-1/4+……+1/99-1/100,将结果输出。
C语言百钱买百鸡问题(
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
题目分析
如果用数学的方法解决百钱买百鸡问题,可将该问题抽象成方程式组。
设公鸡x 只,母鸡y 只,小鸡z 只,得到以下方程式组:
A:5x+3y+1/3z = 100
B:x+y+z = 100
C:0 <= x <= 100
D:0 <= y <= 100
E:0 <= z <= 100
如果用解方程的方式解这道题需要进行多次猜解,计算机的一个优势就是计算速度特别暴力并且无怨无悔,所以我们可以欺负她、蹂躏她!因此我们用穷举法的方式来解题,需要101^3 次猜解,但对于计算机来说,小CASE!
代码清单:
1.#include<stdio.h>
2.
3.int main()
4.{
5.int i, j, k;
6.
7.printf("百元买百鸡的问题所有可能的解如下:\n");
8.
9.for( i=0; i <=100; i++)
10.for( j=0; j <=100; j++)
11.for( k=0; k <=100; k++)
12.{
13.if(5*i+3*j+k/3==100&& k%3==0&& i+j+k==100)
14.{
15.printf("公鸡 %2d 只,母鸡 %2d 只,小鸡 %2d 只\n", i, j, k);
16.}
17.}
18.
19.return0;
20.}
运行结果:。