c语言百钱买百鸡问题
百钱买百鸡问题--优化的力量

cout<<"x= "<<x<<" y= "<<y<<" z= "<<100-x-y<<endl; }
方法三: 将原三元一次方程组中的变量 x 看着常数,则 y,z 可以用 x 表示: y = 25-7*x/4 z = 75+3*x/4
void hectoMC_3() {
size_t x,y,z; for(x=4;x<=16;x+=4) {
百钱买百鸡问题 -- 优建在他的《算经》中提出了著名的"百钱买百鸡问题":
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问翁、母、 雏各几何? 基本思想
利用计算机来解决"百钱买百鸡问题"是程序设计语言中的一个经典的例子, "百钱买百鸡问题"的解决,基本思想是采用穷举法,即列举各种可能的买鸡情况 从中选出鸡的总数为 100 只且买鸡的钱也刚好是 100 元的公鸡、母鸡和小鸡数, 但是采用不同的思路,可以得到不同的算法,其效率也不尽相同。
方法二: 利用两重循环 将 x+y+z = 100 带入到第二个方程中化简可得: 7*x+4*y=100
void hectoMC_2() {
size_t x,y; for(x=1;x<=19;++x) //要习惯 for 循环中的前置++
for(y=1;y<=32;来自+y) if(7*x+4*y==100)
size_t x,y,z; for(x=1;x<=19;++x)
2014《C语言程序设计》专升本练习题

《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语言 第五章-循环结构程序设计

执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
C语言多重循环上机操作(参考答案)

上机操作十四-----------------------------------------------------------------------------------------------------利用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语言程序设计模拟试题1(附答案)

《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-2章课后题
第一章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按字符类型输出的结果是()。
高级语言程序设计实验-答案
要求前后两项求出的x的差的绝对值小于10-5。
退出
实验四
7、舍罕王是古印度的国王,据说他十分好玩。宰相达依尔
为讨好国王,发明了现今的国际象棋献给国王。舍罕王非常 喜欢这项游戏,于是决定嘉奖达依尔,许诺可以满足达依尔
提出的任何要求。达依尔指着舍罕王前面的棋盘提出了要求:
“陛下,请您按棋盘的格子赏赐我一点麦子吧,第1个小格
float x = 12.3, y = 2.6;
printf("%f\n", (float)(a * b) / 2); printf("%d,%d\n", (int)x % (int)y, a-1); }
退出
实验2
2、所谓反序数,就是将整数的数字倒过来后所形成的整 数。例如:1234的反序数是4321。已知a为4位整数,
(3)掌握switch语句基本语法,理解其适用场合。能够利 用其进行多分支程序设计
退出
实验4
实验目的:
(4)理解循环程序的执行过程,能够分析循环程序并给出 其运行结果
(5)熟练掌握while、for、do while语句的基本语法 (6)理解计数循环,条件循环的实现方法,并能正确应用 三种循环控制语句加以实现
且m不等于n,则称n和m是一对“幻影素数”。例如,107
与701是一对“幻影素数”。编程找出三位数中所有的幻影
素数,并统计共有多少对。
退出
实验四
10、歌德巴赫猜想是说任何一个大于2的偶数都能表示成两 个素数之和。歌德巴赫猜想的证明是一个世界性的数学难题, 至今未能完全解决。我国著名数学家陈景润先生为歌德巴赫 猜想的证明作出过杰出的贡献。
应用计算机可以很快地在一定范围内验证歌德巴赫猜想的正 确性。请编写一个C程序,验证指定范围内歌德巴赫猜想的 正确性,区间的范围要从键盘输入。
《C语言》程序算法练习题
完成下列训练题的基本步骤是: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、百钱百鸡问题(穷举算法)我国古代数学家张丘建在《算经》中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”注:穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特性。
使用穷举法的关键是确定正确的穷举范围,即不能过分扩大,也不能过分缩小穷举的范围。
百钱买百鸡实验报告
一、题目描述我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?二、解题思路对n=100的情况,因为有三个变量,则有三重循环和二重循环两种算法1、算法一:三重循环(1)变量变化范围的确定:由于公鸡5钱一只,则100钱最多可购买100/5=20只公鸡,此即为第一个变量的变化上限;由于母鸡3钱一只,则100钱最多可购买100/3≈33只母鸡,此即为第二个变量的变化上限;由于小鸡三只一钱,而所有鸡的总数不得超过100只,则100即为第三个变量的变化上限;(2)条件的控制:由百钱买百鸡可知,鸡的数量为100只,买鸡所用的钱数为100钱,即控制条件为a+b+c=100且a*5+b*3+c/3=100;2、二重循环:(1)变量变化范围的确定:由于整题共有3个变量,所以当前两个变量确定后,第三个变量自然被确定下来,故可采用二重循环解题。
前两个变量的确定同三重循环,第三个变量则用c=n-a-b来确定;(2)条件的控制:由百钱买百鸡可知,鸡的数量为100只,买鸡所用的钱数为100钱,即控制条件为a+b+c=100且a*5+b*3+c/3=100;由于需要讨论算法的时间性能,在程序中加入时间函数计算程序运行所需的时间进行比较。
用控制变量的方法,对两种算法中的n进行同样的变化处理,来讨论两种算法的时间性能,e.g.分别令n=100,n=200,n=500,n=1000,n=2000,n=5000三、自我评估、反思由于较长时间未使用C语言编程,所以在使用语法上略显生疏了些,通过这次作业的实践过程,对C语言的编程语法规则熟悉了许多,虽然在运行过程中出现了一些错误,但也都能够较快地解决,第一次的数据结构实验作业总体完成的还算比较顺利。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
百钱买百鸡问题一一一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少〕 .
这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x, y, z,问题化为三
元一次方程组:
5x 3y - z/3 =100〔百钱〕
'x +y +z =100〔百鸡〕
这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z
的取值范围:
1)x的取值范围为1〜20
2)y的取值范围为1〜33
3)z的取值范围为3〜99,步长为3
对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解. 数据要求
问题中的常量:
无
问题的输入:
无
问题的输出:
int x , v, z /*公鸡、母鸡、小鸡的只数*/
初始算法
1.初始化为1;
2.计算x循环,找到公鸡的只数;
3.计算y循环,找到母鸡的只数;
4.计算z循环,找到小鸡的只数;
5.结束,程序输出结果后退出.
算法细化
算法的步骤1实际上是分散在程序之中的,由于用的是for循环,很方便的初始条件放到了表达式之中了.
步骤2和3是根据步长1去寻找公鸡和母鸡的个数.
步骤4的细化
4 . 1 z = 1
4 . 2是否满足百钱,百鸡
4. 2. 1满足,输出最终百钱买到的百鸡的结果
4. 2. 2不满足,不做处理
4 . 3变量增加,这里注意步长为3
流程图
开始
:结束
图5-8程序执行流程图
程序代码如下
#include "stdio.h"
main()
(
int x,y,z;
for(x=1;x<=20;x++)
for(y=1;y<=33;y++)
for(z=3;z<=99;z+=3)
(
if((5*x+3*y+z/3==100)&&(x+y+z==100))/* 是否满足百钱和百鸡的条件*/
printf("cock=%d,hen=%d,chicken=%d\n",x,y,z);
}
}
分析
程序运行结果如下:
cock=4,hen=8,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84
对于这个问题实际上可以不用三重循环,而是用二重循环,由于公鸡和母鸡数确定后, 小鸡数就定了,即z=100-x-y.请同学们自己分析二重循环和三重循环的运行次数,做为练习自己调试这一方法.。