C程序设计:百钱百鸡问题
PYTHON中百钱买百鸡问题
PYTHON中百钱买百鸡问题问题:中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,问翁、母、雏各几何?在PYTHON中编程实现将所有可能的方案输出。
问题分析:根据题意设公鸡、母鸡和雏鸡分别为cock,hen和biddy,如果100钱全买公鸡,那么最多能买20只,所以cock的范围是大小等于0小于等于20;如果全买母鸡那么最多能买33只,所以hen的范围是大于等于0小于等于33;如果100钱全买小鸡,那么根据题意最多能买99只(小鸡的数量应小于100且是3的倍数)。
在确定了各种鸡的范围后进行穷举并判断,判断的条件有以下3种:(1)、所买的三种鸡的钱数总和为100;(2)、所买的三种鸡的数量之和为100;(3)、所买的小鸡的数量必须是3的倍数。
程序代码:for cock in range(0,20+1): #鸡翁范围在0到20之间for hen in range(0,33+1): #鸡母范围在0到33之间for biddy in range(3,99+1): #鸡雏范围在3到99之间if (5*cock+3*hen+biddy/3)==100:#判断钱数是否等于100if (cock+hen+biddy)==100: #判断购买的鸡数是否等于100if biddy%3==0: #判断鸡雏数是否能被3整除print ("鸡翁:",cock,"鸡母:",hen,"鸡雏:",biddy) #输出程序运行结果:鸡翁: 0 鸡母: 25 鸡雏: 75鸡翁: 4 鸡母: 18 鸡雏: 78鸡翁: 8 鸡母: 11 鸡雏: 81鸡翁: 12 鸡母: 4 鸡雏: 84。
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__个元素。
算法设计与分析课程的“百钱买百鸡问题”趣用
143计算机教育Computer Education第 3 期2016 年 3 月 10 日中图分类号:G6420 引 言算法设计与分析课程是高等学校计算机科学与技术及其相关专业的核心课程,如计算机科学与技术专业、软件工程专业、信息安全专业、信息与计算科学专业、管理信息系统专业、通信工程专业等。
该课程旨在培养学生使用计算机分析问题、解决问题的能力,并掌握算法设计的基本方法。
由于算法分析与设计涉及的专业广、学生的层次多,因此,探索算法分析与设计的教学模式与方法正日益引起广大教育者的重视[1]。
当前算法设计与分析课程的教学,普遍存在以下问题:①学生缺乏学习算法的自觉性和积极性;②学生比较厌烦算法的教学内容,对课程的重视程度不够;③教学方法过于简单陈旧;④传统的教学侧重于知识的传授,对学生的学习兴趣等因素重视不够[2]。
这些问题严重影响了算法设计与分析课程教学的效果与质量。
笔者多年从事算法设计与分析课程的教学,不但在教学方法、教学手段上进行了多次有效的改革,同时特别重视第一堂课的引导教学,通过设计“百钱买百鸡问题”教学案例,充分培养学生的学习兴趣,为该课程的学习打下较好的兴趣基础。
“百钱买百鸡问题”教学案例的具体设计方法首先要求学生根据自己所学的知识完成程序设计,然后在分析时间复杂度的基础上,结合初中数学问题引导学生不断进行算法优化,最终从1 000 000次运算优化到4次运算。
在教学过程中,教师加强引导,注重交流,给合数学问题进行算法设计与分析。
学生不但理解了算法优化的重要性,而且认识到在解决问题的过程中结合数学问题进行算法设计的必要性,进一步激发了其学习兴趣,为该课程的学习打下了较好的基础。
1 百钱买百鸡问题描述“百钱买百鸡问题”记载于中国古代约5~6世纪成书的《张邱建算经》中,是原书卷下第38题,也是全书的最后一题。
该问题的描述为:今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
凡百钱买鸡百只,问鸡翁、母、雏各几何[3]?翻译与现代汉语的意思是:公鸡每只值5文钱,母鸡每只值3文钱,而3只小鸡值1文钱。
【C语言程序设计】百钱买百鸡(百钱百鸡,百鸡问题)!
【C语⾔程序设计】百钱买百鸡(百钱百鸡,百鸡问题)!中国古代数学家张丘建在他的《算经》中提出了⼀个著名的“百钱买百鸡问题”,鸡翁⼀,值钱五,鸡母⼀,值钱三,鸡雏三,值钱⼀,百钱买百鸡,问翁、母、雏各⼏何?实现过程:使⽤ for 语句对 3 种鸡的数嫌在事先确定好的范围内进⾏穷举并判断,对满⾜条件的 3 种鸡的数量按指定格式输出,否则进⾏下次循环。
程序代码如下:#include <stdio.h>int main(){int cock,hen,chick; /*定义变童为基本整型*/for(cock=0;cock<=20;cock++) /*公鸡范围在 0~20 之间*/for(hen=0;hen<=33;hen++) /*母鸡范围在 0~33 之间*/for(chick=3;chick<=99;chick++) /*⼩鸡范围在 3~99 之间*/if(5*cock+3*hen+chick/3==100) /*判断钱数是否等于 100*/if(cock+hen+chick==100) /*判断购买的鸡数是否等于 100*/if(chick%3==0) /*判断⼩鸡数是否能被 3 整除*/printf("公鸡:%d,母鸡:%d,⼩鸡:%d\n",cock,hen,chick);return0;}运⾏结果:公鸡:0,母鸡:25,⼩鸡:75公鸡:4,母鸡:18,⼩鸡:78公鸡:8,母鸡:11,⼩鸡:81公鸡:12,母鸡:4,⼩鸡:84技术要点:根据题意设公鸡、母鸡和雏鸡分别为 cock、hen 和 chick。
✪如果 100 元全买公鸡,那么最多能买 20 只,所以 cock 的范围是⼤于等于 0 且⼩于等于 20;✪如果全买母鸡,那么最多能买 33 只,所以 hen 的范围是⼤于等于 0 且⼩于等于 33;✪如果 100 元钱全买⼩鸡,那么最多能买 99 只(根据题意⼩鸡的数量应⼩于 100 且是 3 的倍数)。
百鸡问题答案
百鸡问题答案【篇一:百鸡问题】,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。
凡百钱买鸡百只,问鸡翁、母、鶵各几何?答曰:鸡翁四,值钱二十;鸡母十八,值钱五十四;鸡鶵七十八,值钱二十六。
又答:鸡翁八,值钱四十;鸡母十一,值钱三十三,鸡鶵八十一,值钱二十七。
又答:鸡翁十二,值钱六十;鸡母四、值钱十二;鸡鶵八十四,值钱二十八。
”原书说明这个问题流传很广,解法很多,但从现代数学观点来看,实际上是一个求不定方程整数解的问题。
解法如下:设公鸡、母鸡、小鸡分别为x、y、z 只,由题意得:①……x+y+z =100②……5x+3y+(1/3)z =100x =12;y =4;z =84c语言解法#include stdio.hvoid main(){int cocks=0,hens,chicks;while(cocks=20){: k s; q# s1 m4 nhens=0;while(hens=33){( e2 n/ \) `9 t% e* f( r6 xchicks=100-cocks-hens;if(5.0*cocks+3.0*hens+chicks/3.0==100.0)1 t0 g4 {+ e c: h9 n/a8 y printf(公鸡%d只,母鸡%d只,小鸡%d只\n\n,cocks,hens,chicks); hens++;}cocks++;}}输出结果为:公鸡0只,母鸡25只,小鸡75只公鸡4只,母鸡18只,小鸡78只公鸡8只,母鸡11只,小鸡81只公鸡12只,母鸡4只,小鸡84只java语言解法public class baijiwenti4 c. m0 i k! }/ m/ n z{0 t4 j8 f0 q n: j: z4 b; ipublic static void main (string [] args)+ b6 t s2 i/ e c: c{for (int x = 0; x = 19; x++){2 z) l8 q% x% @( s$ sfor (int y = 0; y = 33; y++)7 h6 r5 ^ w# t9 l{, b7 d4 q7 `) z2 k i% n7 [int z = 100 - x - y;if((x * 5 + y * 3 + z / 3 == 100 ) z % 3 == 0){# h1 q. t( j/ s y/ r, ssystem.out.println(可买鸡翁只数: + x);system.out.println(可买鸡母只数: + y);system.out.println(可买鸡雏只数: + z);/ r8 f+ ? b4 ? q4 | r}/ c$ u/ w7 k8 {+ h7 d}}}}【篇二:著名数学难题赏析-百钱百鸡】p class=txt>数学教研组(共两课时120分钟)我国古代数学书《张邱建算经》中有如下问题,也就是著名的百鸡百钱问题。
“百钱买百鸡”问题的C语言算法分析
“百钱买百鸡”问题的C语言算法分析Abstract:As a process-oriented programming language,C programming language is one of the most classic and popular computer programming languages with the characteristics of the assembly language and the high-level language.It is not only the first choice for the people who begin to learn computer programming,but also the basis for other computer courses and software development.As a difficult point in C Programming Language learning,the loop statement can be used to solve many practical problems of regularly repetitive operation.Taking the case of "spending 100 dollars on 100 chickens",the paper implements design,analysis and optimization,and finally proposes the optimal algorithm.Keywords:C programming language;loop statement;spending 100 dollars on 100 chickens1 引言(Introduction)计算机算法设计是计算机专业学习的核心专业内容,算法设计对于培养一个人的逻辑思维能力具有重要的作用,能进行有效的算法设计是对一个计算机学者的基本要求。
c++、python、vb求解百钱百鸡问题
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱三;鸡母一,值钱二;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?翻译过来,意思是公鸡一个三块钱,母鸡一个二块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?题目分析如果用数学的方法解决百钱买百鸡问题,可将该问题抽象成方程式组。
设公鸡x 只,母鸡y 只,小鸡z 只,得到以下方程式组:A:3x+2y+1/3z = 100B:x+y+z = 100C:0 <= x <= 100D:0 <= y <= 100E:0 <= z <= 100如果用解方程的方式解这道题需要进行多次猜解,因此我们用穷举法的方式来解题。
1.C++语言#include<iostream>using namespace std;int main(){int i,j,k,x,y,z;for (i=0;i<=33;i++)for(j=0;j<=50;j++)for(k=0;k<=100;k++)if((3*i+2*j+k/3==100)&&(i+j+k==100)&&k%3==0)cout<<i<<" "<<j<<" "<<k<<endl;return 0;}2.Python语言for i in range(33):for j in range(50):for k in range(100):if (3*i+2*j+k/3==100) and (i+j+k==100) and (k%3==0):print(i,j,k)3.VB语言Dim a As Integer, b As Integer, c As IntegerFor a = 0 To 33For b = 0 To 50For c = 0 To 100If 3 * a + 2 * b + 1 / 3 * c = 100 And a + b + c = 100 ThenPrint "公鸡" & a, "母鸡" & b, "小鸡" & cEnd IfNext cNext bNext a。
C语言程序设计(第2-3章)习题答案(魏为民)
习题2参考答案一、基础题1.若二维数组a有m列,则在a[i][j]前的元素个数为:A)j*m+i B)i*m+jC)i*m+j-1 D)i*m+j+1B2.在C语言中(以16位PC机为例),五种基本数据类型存储空间长度的排列顺序是:A) char<int<long int<=float<doubleB) char=int<long int<=float<doubleC) char<int<long int=float=doubleD) char=int=long int<=float<doubleA3.在C语言的变量类型说明中,int,char,float等类型的长度是:A) 固定的B) 由用户自己定义的C) 任意的D) 与机器字长有关的D4. 设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f的数据类型是:A) int型B)float型C) double型D)不确定C5.C语言中的变量名只能由字母,数字和下划线三种字符组成,且第一个字符:A) 必须为字母B) 必须为下划线C) 必须为字母或下划线D) 可以是字母,数字或下划线中的任意一种C6.设a=1,b=2,c=3,d=4,则表达式a<b?a:c<d?a:d的值是:A) 4 B) 3 C) 2 D) 1D7.以下程序的输出结果是:main(){ int a=12, b=12;printf("%d,%d\n",--a,++b);}A) 10,10 B) 12,12 C) 11,10 D) 11,13D8.若有代数式(3ae)/(bc),则下面不正确的C语言表达式是:A) a/b/c*e*3 B) 3*a*e/b/c C) 3*a*e/b*c D) a*e/c/b*3C9.已知x=43,ch='A',y=0,则表达式(x>=y&&ch<'B'&&!y)的值是:A) 0 B) 语法错C) 1 D) "假"C10.下面程序的输出结果是:main(){ int a=-1, b=4, k;k=(a++<=0)&&(!(b--<=0));printf("%d,%d,%d\n",k,a,b);}A) 1,1,2 B) 1,0,3 C) 0,1,2 D) 0,0,3B11.已知字母A的ASCII码为十进制的65,下面程序的输出是:main(){ char ch1,ch2;ch1='A'+'5'-'3';ch2='A'+'6'-'3';printf("%d,%c\n",ch1,ch2);}A) 67,D B) B,C C) C,D D) 不确定的值A12.下面程序的输出的是main(){ int x=10,y=3;printf("%d\n",y=x/y);}A) 0 B) 1 C) 3 D) 不确定的值C二、程序设计题1.从键盘上输入一个小写字母,编程输出其对应的大写字母以及它们的十进制ASCII码。
《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、百钱百鸡问题(穷举算法)我国古代数学家张丘建在《算经》中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”注:穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特性。
使用穷举法的关键是确定正确的穷举范围,即不能过分扩大,也不能过分缩小穷举的范围。
程序设计基础——基于C语言(第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):正确性是指一个计算机程序的正确程度,即程序在预定的运行环境下能正确完成预期功能的程度。
C语言程序设计基础知识 习题一及参考答案
第一章:程序设计基础知识一、单项选择题1、以下( )是面向过程的程序设计语言。
A)机器语言B)汇编语言C)高级语言D)第四代语言2、程序设计一般包含以下四个步骤,其中其中首先应该完成的是( )。
A)设计数据结构和算法B)建立数学模型C)编写程序D)调试和运行程序3、以下常用算法中适合计算等差级数的算法是( )。
A)枚举法B)递推法C)分治法D)排序法4、以下不属于算法基本特征的是( )。
A)有穷性B)有效性C)可靠性D)有一个或多各输出5、以下描述中不正确的是( )。
A)程序就是软件,但软件不紧紧是程序。
B)程序是指令的集合,计算机语言是编写程序的工具。
C)计算机语言都是形式化的语言,它有一个语法规则和定义。
D)计算机语言只能编写程序而不能表示算法。
6、下面描述中,正确的是( )A)结构化程序设计方法是面向过程程序设计的主流。
B)算法就是计算方法。
C)一个正确的程序就是指程序书写正确。
D)计算机语言就是编写程序的工具而不是表示算法的工具。
7、下面描述中,不正确的是( )。
A)递归法的关键是必须有一个递归终止的条件。
B)递归算法要求语言具有反复自我调用子程序的能力。
C)对于同一个问题,递推算法比递归算法的执行时间要长。
D)递推算法总可以转换为一个递归算法。
8、N-S图与传统流程图比较,主要优点是( )。
A)杜绝了程序的无条件转移。
B)具有顺序、选择和循环三种基本结构。
C)简单、只管。
D)有利于编写程序。
A)B)C)D)二、填空题1、在流程图符号中,判断框中应该填写的的是________。
(判断条件)2、结构化程序设计是__________应遵循的方法和原则。
(面向过程编程)3、结构化程序必须用__________程序设计语言来编写。
(具有结构化控制语句)4、可以被连续执行的一条条指令的集合称为计算机的________。
(程序)5、只描述程序应该“做什么”,而不必描述“怎样做”的语言被称为________。
C语言程序设计实验(5-7)
C语⾔程序设计实验(5-7)实验41. 以下⼏段源程序有错,请调试修改正确。
①/*源程序实现的功能:输⼊两个实数,按从⼩到⼤的顺序输出*/ main(){ float a,b,t;scanf(“%f,%f”,&a,&b);if (a>b)t=a;a=b;b=tprintf(“%5.2f,%5.2f”,a,b);}#includeint main(){float a,b,t;scanf("%f,%f",&a,&b);if (a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);}②该源程序实现的功能是:有如下函数关系:x (x>0)y= ? 2 (x=0)3x (x<0)根据输⼊的x值,求出y的值。
main( ){ int x,y;printf(“Enter x:”);scanf(“%d”,&x);if x>0 y=x;else if(x=0) y=2;else y=3*x;printf(“x=%d y=%d\n”,x,y);}#includeprintf("Enter x:");scanf("%d",&x);if(x>0)y=x;else if(x==0)y=2;else y=3*x;printf("x=%d y=%d\n",x,y);}#includeint main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x<10)y=2*x-1;elsey=3*x-11;printf("y=%d",y);}某物品原有价值为p, 由于使⽤使其价值降低,价值的折扣率根据时间t(⽉数)确定如下:t<3,⽆折扣3<=t<6,2%折扣6<=t<12,5%折扣12=t>=21,10%折扣编程实现:根据输⼊的时间和原有价值计算物品的现有价值。
算法经典问题系列1百钱买百鸡问题
算法经典问题系列1 百钱买百鸡问题一说起唐朝,人们就会情不自禁地想起诗歌,绝对没有人会提到数学在数学上,虽说唐代并没有产生与其前的魏晋南北朝或其后的宋元相媲美的大师,却在数学教育制度的确立和数学典籍的整理方面有所建树.长达近三百年的唐代在数学方面最有意义的事情莫过于《算经十书》的整理和出版,这是高宗李治下令编撰的。
除了《周牌算经》《九章算术》《海岛算经》和《缀术》以外,《算经十书》中至少还有三部值得一提,分别是《孙子算经》《张丘建算经》和《缉古算经》'这三部书的共同特点是,每一部都提出了一个非常有价值的问题,并以此传世。
《张丘建算经》成书于公元5世纪,作者是北魏人.书中最后一道题堪称亮点,通常也被称为"百钱买百鸡"问题,民间则流传着县令考问神童的佳话书中原文如下:今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买鸡百只,问鸡翁、母、雏各几何?题目的意思是,公鸡5文钱1只,母鸡3文钱1只,小鸡1文钱买3只,现在用100文钱共买了100只鸡,问:在这100只鸡中,公鸡、母鸡和小鸡各是多少只?(设每种至少一只)算法分析:此题很显然是用枚举法,我们以三种鸡的个数为枚举对象(分别设为x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件,穷举各种鸡的个数。
枚举法,常常称之为穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。
能使命题成立者,即为问题的解。
1.采用枚举算法解题的基本思路:2.确定枚举对象、枚举范围和判定条件;3.一一枚举可能的解,验证是否是问题的解下面是解这个百鸡问题的程序var x,y,z:integer;begin for x:=1 to 100 do for y:=1 to 100 do for z:=1 to 100 do if(x+y+z=100)and(x*5+y*3+z/3=100)then writeln('x=',x,'y=',y,'z=',z);{验证可能的解,并输出符合题目要求的解}end.这个算法学生容易想到,而重复是计算机的拿手好戏,算法可读性好。
大学C语言程序设计(编程题)
2 / 36
C 语言程序设计习题(编程题)
习题 6(编程题)[知识点:选择结构] 将以下程序段改用嵌套的 if 语句实现。 int s,t,m; t=(int)(s/10); switch(t) {case:m=5;break; case 9:m=4;break; case 8:m=3;break; case 7:m=2;break; case 6:m=1;break; default: m=0; } 习题 6-参考答案 if(s>=110&&s<60) m=0 else if(s<110) m=5; else if(s<100) m=4; else if(s<90) m=3; else if(s<80) m=2; else m=1; 习题 7(编程题)[知识点:选择结构] 编程实现以下功能:读入两个运算数(data1 和 data2)及一个运算符(op),计算表达式 data1 op data2 的值,其中 op 可为 +,-,*,/(用 switch 语句实现)。 习题 7-参考答案 #include<stdio.h> #include<stdlib.h> main() {float data1,data2,result; char op; printf("Type in your expression:"); scanf("%f %c %f",&data1,&op,&data2); switch(op) {case '+':result=data1+data2;break; case '-':result=data1-data2;break; case '*':result=data1*data2;break; case '/':if(data2==0){printf("\nDivision by zero!");exit(1);} result=data1/data2;break; } printf("This is %6.2f %c %6.2f=%6.2f\n",data1,op,data2,result); } 习题 8(编程题)[知识点:选择结构] 编一程序, 对于给定的一个百分制成绩, 输出相应的五分值成绩。 设 90 分以上为'A',80-89 分为'B',70-79 分为'C',60-69 分为'D',60 分以下为'E'(用 switch 语句实现)。 习题 8-参考答案 main() {int score=-1,temp; 3 / 36
程序设计基础(C)第6--8章复习题答案
第6--8章复习题一、判断题(√)1.数组元素在内存中是按顺序、连续存放的。
(×)2.组成数组的数据可以是若干个不同的类型。
(√)3.字符数组可以存放字符串,也可以存放若干字符。
(×)4.多维数组中各维的大小必须相同。
(×)5.数组定义后没有被初始化也有一个确定的默认值。
(×)6.字符串的结束标志是‘\n’。
(√)7.定义数组时必须有数据类型说明,而不必有存储类型说明。
(×)8.数组在赋初值时允许越界。
(×)9.一维字符数组中可以存放多个字符串。
(√)10.定义函数时必须指出该函数的类型。
(×)11.函数说明必须放在函数体内,不可放在函数体外。
(√)12.定义函数时给出的参数是形参,调用函数时给出的参数是实参。
(√)13.函数调用时要求形参与实参个数相等、对应类型相同。
(√)14.函数的调用方式既可以传值也可以传地址。
(×)15.函数可以嵌套调用,也可以嵌套定义。
(√)16.函数的函数体可以是空的,也可以有若干条语句。
(√)17.预处理命令的前面必须加一个“#”。
(√)18.一条文件包含命令只能包含一个文件,若要包含多个文件时,可使用多条文件包含命令。
(×)19.带参数宏定义的参数个数不得超过2个。
(×)20.预处理命令的处理是在程序运行前进行的。
二、单选题1.数组赋初值的初始值表中的数据项个数与数组元素个数的关系,错误的是( D )。
A.大于B.小于C.等于D.小于等于2.设int a[2][3]; 下列数组元素的表示中错误的是( C )。
A.a[0][0] B.a[1][1] C.a[2][2] D.a[1][2]3.下列数组带初始化的定义中,错误的是(B )。
A.int m[5]={3}; B.char s[5]= “ab123”;C.int n[]={6,6,4,3,2,1}; D.int p[3]={1,3,5};4.已知一个一维数组,有10个int元素,其中后面3个元素的值分别为3、2、1,其余元素为默认值。
C语言题库填空题部分+部分程序设计
1. 完成程序填空,实现输入两个数字,若两数相等,则直接输出两个数字,若不相等,则这两个数中的较大者等于这个较大者减去较小者,再作比较,若不相等则重复上述操作,直到两个数字相等为止。
输出相等的两个数字。
while(a 【a!=b】){ if (【a>b】)a=a-b;if (【b>a】)b=b-a; }2. "百鸡问题":鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?完成程序填空,实现求"百鸡问题" 公鸡一只5块钱,母鸡一只三块钱,小鸡三只一块钱,一百块钱买一百只鸡应该怎么买?也就是问一百只鸡中公鸡、母鸡、小鸡各多少?for(x=1;x<=20;【x++】)for(z=3;z<=99;【z+=3】)if((【5*x+3*y+z/3==100】)&&(x+y+z==100))3.完成程序填空,实现输出下图*************************【printf(“*”)】【printf(“\n”)】【j<=7+i】4.完成程序填空,将字符数组a的全部字符复制到字符数组b中(要求不用strcpy函数)。
printf("str1:【%s】\n",str1);for(i=0;str1[i]【!=’\0’】;i++)str2[i]=【str1[i]】;5. 将a++ 或++a 或a-- 或--a 填入程序填空中,实现如图所示的输出。
(填入其他无效)【a++】【a--】【--a】6.完成程序填空,实现输入4个整数,要求按由小到大的顺序输出。
{ t=a;【a=c】;c=t;}{ t=b;b=c;【c=t】;}{【t=c】;c=d;d=t;}7. 完成程序填空,输出所有的水仙花数。
水仙花数是一个三位数,其个、十、百位数字三次方之和为这个数。
例如: 371=3*3*3+7*7*7+1*1*1for(num=100; 【num<=999】; num++)shi=【num/10%10】if (【num==bai*bai*bai+shi*shi*shi+ge*ge*ge】)8. 完成程序填空,实现的功能是输出如下形式的方阵:13 14 15 169 10 11 125 6 7 81 2 3 4for(j=4; j>=1 ; j--){for(i=1; i<=4; i++){ x=(j-1)*4+i ;printf("%4d",x); } }9. 【a=’B’】;b='O';c='Y';putchar(a);putchar(b);putchar(c);putchar(‘\n’);10. 完成程序填空实现输入两个数a、b,判断如果a<b,则交换两数,否则保持两数值不变,这样可以使得a始终大于b的值。
习题三-参考答案
十进编码\n");
printf(" %c\t %o\t %x\t
%d\n", ch, ch, ch, ch);
printf("\n\n 字符 八进编码\t 十六进编码 十进编码\n");
for(ch = 'a'; ch <= 'z'; ch++) printf(" %c\t %o\t %x\t
%d\n", ch, ch, ch, ch);
******* ****** ***** *******
答:
#include <stdio.h> int main(){
int n, k; printf("输入一个正整数(<20)!\n"); scanf("%d", &n); for(int i = 1;i <= n; i++){
for(k = 1; k <= 20 + n -i; k++) if((k >= 20-n+i) && (i == 1 || k == 20-n+i || k == 20+n-i)) printf(" *"); else printf(" ");
y = x; for(i = 0; i < 10; i++)//数组元素置初值为 0
count[i] = 0;
do{ count[y%10]++;//截取 y 的个位,对应计数器增 1 y /= 10;//去掉 y 的个位
}while(y); for(i = 0; i < 10; i++)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
百钱百鸡问题
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
*题目分析与算法设计
设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
由程序设计实现不定方程的求解与手工计算不同。
在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
*程序说明与注释
#include
void main()
{
int x,y,z,j=0;
printf("Folleing are possible plans to buy 100 fowls with 100 Yuan.\n"); for(x=0;x<=20;x++) /*外层循环控制鸡翁数*/
for(y=0;y<=33;y++) /*内层循环控制鸡母数y在0~33变化*/
{
z=100-x-y; /*内外层循环控制下,鸡雏数z的值受x,y的值的制约*/
if(z%3==0&&5*x+3*y+z/3==100)
/*验证取z值的合理性及得到一组解的合理性*/
printf("%2d:cock=%2d hen=%2d chicken=%2d\n",++j,x,y,z);
}
}
*运行结果
Follwing are possible plans to buy 100 fowls with 100 Yuan.
1:cock=0 hen=25 chicken=75
2:cock=4 hen=18 chicken=78
3:cock=8 hen=11 chicken=81
4:cock=12 hen=4 chicken=84
*总是的进一步讨论
这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。
能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑。
百钱买百鸡中国古代数学家著有一本古典数学问题的《算经》,其中记载的问题在当时都是一些有趣的难题。
其中最著名的“百钱百鸡”问题叙述如下:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,问翁、母、雏各几何?”这个问题翻译成白话文就是:“一只公鸡值五文钱;一只母鸡值三文钱;三只小鸡值一文钱;请问用一百文钱买一百只鸡,公鸡、母鸡和小鸡各有多少只?”
我们假设公鸡、母鸡和小鸡的个数分别为x,y,z,那么买公鸡的钱数为5x,买母鸡的钱数为3y,买小鸡的钱数为z/3;再由题意,x,y和z的和为100,因此我们可以得到该问题的数学模型如下:5x+3y+z/3=100x+y+z=100因为鸡的个数只能是整数,所以问题可以归结为求这个不定方程的整数解。
不定方程的求解途径一般是打出各变量的数值汇聚围,再用穷举法找到所有可能的解,在本题中,如果100文钱全部买公鸡,最多买20只,因此x的取值在0~20之间;同理y的取值在0~33之间。
得到了变量x和y的取值汇聚围后,昝用C语言的二重for循环,让x和y 分别作为外层和内层循环的循环变量,我们可以让计算机穷举所有可能的情况,从而找到正确的解。
代码如下:
#include
main()
{ int x,y,z,j=0;
printf("Possible solutions to buy 100 fowls whith 100 yuan\n"); for(x=0;x<=20;x++) /*公鸡的数目作为外层循环的循环变量*/ for(y=0;y<=33;y++) /*母鸡的数目作为内层循环的循环变量*/
{ z=100-x-y; /*用总鸡数方程计算小鸡的数目*/ if(z%3==0&&5*x+3*y+z/3==100) /*如果满足总钱数,找到合理的解*/ printf("2d:cock=%-2d hen=%-2d chicken=%-2d\n",++j,x,y,z);
}
}
运行结果:
1:cock=0 hen=25 chicken=75
2:cock=4 hen=18 chicken=78
3:cock=8 hen=11 chicken=81
4:cock=12 hen=4 chicken=84。