百钱买百鸡的三种做法 C语言
第8章综合实训
break;
} }while(Times>0); if(0==Times) { printf("对不起,尝试失败,请重新启动程序.\n"); return; }
8.2.7 万年历程序编写
2.year闰年判断模块
判断year为闰年还是平年,为后续程序设计作判断。仿照算法 设计中的公式,写出闰年判断函数leapFunc(),代码如下:
5 x 3 y z / 2 100 x y z 100
其中,x,y和z都是正整数,对于这样一个不定方程,只能使用试 凑法解决,过程繁琐且容易产生错误。
8.1.2印度国王的奖励
相传古代印度国王要褒奖他的聪明能干的宰相 达依尔(国际象棋发明者),问他要什么?达依尔回 答:“陛下只要在国际象棋棋盘的第一个格子上放 一粒麦子,第二格子放二粒麦子,以后每个格子的 麦子数都按前一格的两倍计算。如果陛下按此法给 我64格的麦子,就感激不尽了。”国王想,“这还 不容易!”让人杠了一袋麦子,但很快用光了,再 扛一袋还不够,请你为国王算一下共要给达依尔多 少小麦?(设1立方米小麦约1.4×108颗)
01 02 03 04 05 06 07 08 09 10 11 int leapFunc(int year) { if(year%4==0&&year%100!=0||year%400==0) { return 1; } else { return 0; } }
函数判断结束后将返回值,若返回1,表示year为闰年,否则为平年。
7.函数入口设计
8.2.10 万年历程序编写
子模块设计完成后,添加主函数并进行代码调试,代码如下:
void main() { int month=0,year=0; int Times=3; printf("请输入要查询的年和月,格式为:xxxx-xx\n"); do { scanf("%d-%d", &year,&month); Times--; if((0!=Times) &&(year<0 || (month<0 || month>12))) { printf("对不起,输入错误,请重新输入,您还有 %d 次尝试机会.\n",Times-1); } else { break; } }while(Times>0); if(0==Times) { printf("对不起,尝试失败,请重新启动程序.\n"); return; } print(month,year); printf("\n");
百元买鸡问题 穷举法 c++
穷举法“穷举法”也称“枚举法”,即将可能出现的各种情况一一测试,判断是否满足条件,采用循环语句可方便实现。
百元买鸡问题。
假定小鸡每只5角,公鸡每只2元,母鸡每只5元。
现在有100块钱,要求买100只鸡,编程列出所有可能的购鸡方案。
分析:设母鸡、公鸡、小鸡分别为x、y、z只,根据题目要求列出方程为:其中包括3个未知数,2个方程,此题有若干个解。
可用如下两种方法实现。
方法一:用三重循环来解决。
#include”iostream.h”#include”iomanip.h”void main(){Int x,y,z;Long k(0);Cout <<”x y z”<<endl;For(x=0;x<100;x++)For(y=0;y<100;y++)For(z=0;z<100;z++){K++;If(((3*x+2*y+0.5z)==100)&&((x+y+z==100)))Cout<<setw(9)<<x<<setw(9)<<y<<setw(9)<<z<<endl;}Cout<<”方法一内执行了”<<k<<”次”<<endl;}方法二:用两重循环来解决,相应程序段如下:Cout <<”x y z”<<endl;For(x=0;x<=33;x++)For(y=0;y<=50;y++){K++;z=100-x-y;if((3*x+2*y+0.5z)==100)cout<<setw(9)<<x<<setw(9)<<y<<setw(9)<<z<<endl;}Cout<<”方法二内循环执行了”<<k<<”次”<<endl;方法一利用三重循环表示三种鸡的只数,考虑了所有购鸡的情况,故共执行了1000000次循环;方法二进行了循环的优化,根据三种鸡共100只的关系,用二重循环实现;同时没种鸡的循环次数不必到100,因为还要满足价格100元得问题,故共执行了1734次循环。
c语言程序设计中常用计算方法
c语⾔程序设计中常⽤计算⽅法上完课过来整理⼀下笔记5551、穷举法1//百钱买百鸡问题(简化后)23 #include <stdio.h>4 #include <stdlib.h>56int main()7 {8int i,j,k;9for(i=0; i<20; i++)10 {11for(j=0; j<34; j++)12 {13 k=100-i-j;14if(i*15+j*9+k==300)15 {16 printf("%d %d %d\n",i,j,k);17 }18 }19 }20return0;21 }2、迭代法1//求解⼀元三次⽅程指定范围的根2 #include <stdio.h>3 #include <stdlib.h>4 #include <math.h>56double biroot(double,double);7double foo(double);89int main()10 {11double x1,x2;12do13 {14 scanf("%lf%lf",&x1,&x2);15 }while(foo(x1)*foo(x2)>0);1617 printf("%.2f\n",biroot(x1,x2));18return0;19 }20double biroot(double x1,double x2)21 {22double ret;23do24 {25 ret=(x1+x2)/2;26if(foo(ret)*foo(x1)>0)27 {28 x1=ret;29 }30else31 {32 x2=ret;33 }34 }while(fabs(x1-x2)>=1e-7);35 ret=(x1+x2)/2;36return ret;37 }38double foo(double x)39 {40return(x*x*x-7.7*x*x+19.2*x-15.3);41 }3、⽜顿迭代(⽜顿切线法)//求解⼀元三次⽅程在1.0附近的根#include <stdio.h>#include <stdlib.h>#include <math.h>double ntroot(double);double foo(double);double dfoo(double);int main(){double x0;scanf("%lf",&x0);printf("%.2f\n",ntroot(x0));return0;}double ntroot(double x){double x0;double f,df;do{x0=x;f=foo(x0);df=dfoo(x0);x=x0-f/df;}while(fabs(x-x0)>=1e-7);return x;}double foo(double x){return (x*x*x-7.7*x*x+19.2*x-15.3); }double dfoo(double x){return(3.0*x*x-15.4*x+19.2);}4、递推法(归纳法)//累加和累乘#include <stdio.h>#include <stdlib.h>#include <math.h>double getSum(int);int main(){int n;scanf("%d",&n);printf("%f\n",getSum(n));return0;}double getSum(int n){int i;double s=0.0;for(i=1;i<=n;i++){s+=pow(-1,i+1)/i;}return s;}//筛选法求素数#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 1000void getPrimeTab(int *,int);void initSieve(int*,int);int getNext(int*,int,int);int outPrimeTab(int *,int);int main(){int n;int cnt;int sieve[MAX_SIZE]={0};initSieve(sieve,MAX_SIZE);scanf("%d",&n);getPrimeTab(sieve,n);cnt=outPrimeTab(sieve,n);printf("total primes = %d\n",cnt); return0;}void initSieve(int*ps,int n){int i;for(i=2;i<n;i++){ps[i]=1;}}int outPrimeTab(int *ps,int n){int i,count=0;for(i=2;i<n;i++){if(ps[i]==1){if(count++%6==0){printf("\n");}printf("%8d",i);}}printf("\n");return count;}int getNext(int*ps,int p,int n){int q=p+1;while(q<n && ps[q]==0){q++;}return q;}void getPrimeTab(int *ps,int n){int p,q,i;for(p=2;p*p<n;p=getNext(ps,p,n)){for(q=p;p*q<n;q=getNext(ps,q,n)){for(i=p*q;i<n;i*=p){ps[i]=0;}}}}//梯形法求定积分#include <stdio.h>#include <stdlib.h>#include <math.h>double integrate(double(*pf)(double),double a,double b,int n); double my_fun(double x);int main(){double a,b;int n;printf(" 积分上限: a= ");scanf("%lf",&a);printf(" 积分下限:b= ");scanf("%lf",&b);printf(" 分割段数: n= ");scanf("%d",&n);printf("sin 函数积分值: %f\n",integrate(sin,a,b,n));printf("x^2 函数积分值: %f\n",integrate(my_fun,a,b,n)); return0;}double integrate(double(*pf)(double),double a,double b,int n) {int i;double h=(b-a)/n;double s=(pf(a)+pf(b))/2;for(i=1;i<=n-1;i++){s+=pf(a+i*h);}s=h*s;return s;}double my_fun(double x){return x*x; }。
大学计算机思维课题3-4.编程解决百钱买百鸡
自动换零钱程序
• 人民币面值:100、50、20、10、5、(2)、1 • 提出问题:100元换成零钱有几种换法?
解决问题
• 设50元a张,20元b张,10元c张,5元d张,(2元)e张,1元f张 • 列方程:50a + 20b + 10c + 5d + 2e + f = 100 • 设置循环程序解该不定方程
鸡翁一值钱五,鸡母一值 钱三,鸡雏三值钱一。百 钱买百鸡,问鸡翁、鸡母、 鸡雏各几何?
解决问题
• 设cock为i只,hen为j只,chicken为k只 • 列方程:i + j +k = 100
5i + 3j + (1/3)k = 100
显然,方程无唯一解,此方程为不定方程
如何解不定方程?
逐个尝试求解 在程序中设置循环
思考???
此程序还有什么地方需要修改?全部改为9谢谢
thanks for watching
此处省略几百行
自动换零钱程序
• 优化问题: 100元换成零钱,且最多换8 张零钱,有几种换法?
解决问题
• 设50元a张,20元b张,10元c张,5元d张,(2元)e张,1元f张 • 列方程:50a + 20b + 10c + 5d + 2e + f = 100
a+b+c+d+e+f≤8 • 设置循环程序解不定方程与不等式
c语言穷举法傻瓜教程
穷举法1.密码箱问题#include<stdio.h>main(){int i,key;printf("请设定旅行箱的密码(000-999):"); scanf("%d",&key);printf("\n你的旅行箱密码是:");for(i=0;i<=999;i++)if(i==key)if(i<10)printf("%d\n",i);else if(i<100)printf("%d\n",i);else printf("%d\n",i);}2.百钱买百鸡问题#include<stdio.h>main(){int i , j , k;/*准备输出格式*/printf("\t公鸡\t母鸡\t小鸡\n");for(i=0;i<=20;i++)for(j=0;j<=33;j++){k=100-i-j;if(k%3==0 && i*5+j*3+k/3==100) printf("\t%d\t%d\t%d\n",i ,j ,k); }}例 2 :36 块砖,36 人搬。
男搬 4 ,女搬 3 ,两个小儿抬一砖。
要求一次全搬完。
问需男、女、小儿各若干(必须都有)?请同学们先分析第一步:问题所涉及的情况;analysis:都男的搬,需9人;都女的搬,需12人,都小孩搬,需72人;小孩书需要是2的整数倍;解:#include<stdio.h>main(){int i,j,k;for(i=0;i<=9;i++)for(j=0;j<=12;j++){k=36-i-j;//消去参数需放在最后一个for循环里面if(k%2==0&&i*4+j*3+k*0.5==36)printf("%d\t%d\t%d\n",i,j,k);}作业:换零钞问题:一张100元,换成20,10,5,1面值的零钞,每种至少一张,共有哪些换法,总计多少种换法?都换20:5张;----i都换10:10张;----j都换5:20张;----k都换1:100张----tt=100-i-j-k;解:#include<stdio.h>main()int i,j,k,t;for(i=1;i<=5;i++)for(j=1;j<=10;j++)for(k=1;k<=20;k++){t=100-i*20-j*10-k*5;if(i*20+j*10+k*5+t==100&&t>0)printf("%d\t%d\t%d\t%d\n",i,j,k,t);}}2.从1到100的自然数中,每次取出两个数,要使它们的和大于100,共有哪些取法,总计多少种取法?#include<stdio.h>main(){static int count=0;int i,j;for(i=1;i<=100;i++)for(j=1;j<=100;j++){if((i+j)>100&&j!=i){count++;printf("i=%d\tj=%d\n",i,j);}}printf("循环次数为%d\n",count);}。
“百钱买百鸡”问题的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。
python百钱百鸡的编程代码
python百钱百鸡的编程代码Python百钱百鸡的编程代码引言“百钱买百鸡”是一道经典的数学问题,也是编程入门的常见题目。
在这个问题中,我们需要用100元人民币去买100只鸡,其中公鸡5元一只,母鸡3元一只,小鸡1元三只。
问如何买到100只鸡?解析我们可以通过枚举法来解决这个问题。
假设公鸡有x只,母鸡有y只,小鸡有z只,则必须满足以下条件:1. x + y + z = 1002. 5x + 3y + z/3 = 100其中第一个条件是总数为100只,第二个条件则是花费不超过100元。
根据第二个条件可得:z = 300 - 15x - 9y将其代入第一个条件中可得:x + y + (300 - 15x - 9y)/3 = 100化简后得到:4x + 2y = 100显然这是一个线性方程组,在满足整数解的前提下可以用枚举法来求解。
代码实现下面是Python程序实现:```pythonfor x in range(0,21):for y in range(0,34):z = 300 - 15*x -9*yif x + y + z/3 == 100:print("公鸡数量:{},母鸡数量:{},小鸡数量:{}".format(x,y,z))```程序中使用了两个嵌套的for循环来枚举x和y的值,然后根据上述公式计算出z的值,并判断是否满足条件。
如果满足条件,则输出结果。
运行结果程序运行结果如下所示:```公鸡数量:0,母鸡数量:25,小鸡数量:75.0公鸡数量:3,母鸡数量:18,小鸡数量:79.0公鸡数量:6,母鸡数量:11,小鸡数量:83.0公鸡数量:9,母鸡数量:4,小鸡数量:87.0```结论根据上述程序运行结果可得到以下结论:1. 公鸡、母鸡、小鸡的总数为100只。
2. 公鸡、母鸡、小鸡的花费不超过100元。
3. 公鸡、母鸡、小鸡的组合方式有四种。
参考文献[1] 陈天奇, 李沐, 张亮等. 深度学习框架[M]. 北京: 清华大学出版社, 2017.。
C语言程序设计模拟试题1(附答案)
C语言程序设计模拟试题1(附答案)《C语言程序设计》模拟试卷一一、单项选择题(每题2分,共30分)1、下列有关C语言的叙述中错误的是()。
A) C语句必须以分号结束B) 任何一个C程序中有且只有一个主函数C) 复合语句在语法上可被看作一条语句D) C程序中对数据的任何操作都可由运算符实现2、以下不能定义为用户标识符的是()。
A) MAIN B) _HJ C) 2ong D) LINE13、下列符号中用来表示C语言中的回车换行的是()。
A) \r B) \n C) \b D) \t4、如有如下定义:int a=1,则语句printf(“%d,%d”, a, ++a);的运行结果为()。
A) 1, 1 B) 1, 2 C) 2, 2 D) 2, 15、已知ch为字符型变量,下面表达式中正确的是()。
A) ch=’\xff ’B) ch=’\ff ’C) ch=’ ff ’D) ch=” ff ”6、以下能正确定义一维数组的是()。
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) char c=65; B) float f=f+1.1;C) double x=12.3e3.6; D) int m=n=2.0;8、在执行下列程序时输入:1357924,则程序的运行结果为()。
main( ){ int x, y;scanf(“%2d%2d”,&x,&y);printf(“%2d”,x*y); }A) 13 B) 1357 C) 74 D) 7419、执行下列程序段后输出的结果是()。
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))); 后的输出结果是()A) 9 B) 8 C) 5 D) 311、若用数组名作为函数调用的实参,则传递给形参的是()A) 数组的首地址 B) 数组第一个元素的值C) 数组中全部元素的值 D) 数组元素的个数12、在C程序中,若未在函数定义时说明函数类型,则函数默认的类型为()A)void B)double C)int D)char13、下面不能正确进行字符串赋值操作的语句是( )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的是 ( )A)++p B)++(*p) C) *(++p) D) *(p+=2)15、下面程序的输出结果是()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语言程序设计
三 值钱 一 。百钱买百鸡, 问鸡翁、 雏 各几何 ? 母、
2 穷 举 法
oit(\cc = ,e= , ik %d, c , ncik . r f ” ok %dhn %dc c = " okh ,h ) ) n n h c e c
必须注 意:①上 述 i条 件 中 c i /. 不是 ci /, f hc 30而 k hc 3 k
性 的工作 。在循环程序设计 中就可 以充分发挥计算机 的这
一
为 了提高效率 , 少循环 次数 , 减 利用 百鸡条件 , 上述算
法 可优化 , 变三重循环为二重循环 , 改进 后的 C语 言程序如
下:
# n ld < ti.> icu e sdoh
优势 , 把复杂 问题 的求解过程转换为操作 的多 次重复 。 通过分析可 知, 它们 可能的取值范 围是:ok为 0 1 , c c ~ 9
因 为 C语言 中 ci / 整除, c c = 、 hc 3是 k 当 h k 34或 5时 ,hc/ i ci 3 k
设 分别用变量 c k h n ci c o 、e 、hc k来代表 鸡翁、 鸡母、 鸡雏
的 只数 , 上述 问 题 从 数 学 上 看 是 求 包 含 三个 未 知 数 的 两 个
Li ixa g u Jn in Xi i a Tawu
Ab t a t T e p p r d s u s s te a ta p l ain o n me ai e meh d a k n f me h d o o p p o r mmi g i sr c : h a e ic se h cu l a p i t f E u r t to - i d o t o f lo rg a c o v n n C
C#百钱买百鸡
using System;using System.Collections.Generic;using System.Linq;using System.Text;/*百钱买百鸡有100元要买100只鸡,公鸡5元/只,母鸡3元/只,小鸡1元3只,要求每种鸡都购买?*/ class Program{static void Main(string[] args){int Cock, Hen, Chick;//For循环版本百钱百鸡for (Cock = 1; Cock <= 20; Cock++) //因为公鸡最大不会超过19只,所以最多循环19次.{for (Hen = 1; Hen <= 33; Hen++) //母鸡最大也不会超过33只,所以最多循环33次{Chick = 100 - Cock - Hen; //小鸡等于100 - 公鸡个数- 母鸡个数/*是否满足百钱和百鸡的条件*/if ((Cock + Hen + Chick == 100) && (Cock * 5 + Hen * 3 + 1.0 * Chick / 3 == 100))//注意:必须乘以1.0{Console.WriteLine("公鸡有:{0}只, 母鸡有:{1}, 小鸡有:{2}", Cock, Hen, Chick);}}}Console.ReadKey();}}/*百钱买百鸡有100元要买100只鸡,公鸡5元/只,母鸡3元/只,小鸡1元3只,要求每种鸡都购买?*/ class Program{static void Main(string[] args){int Cock, Hen, Chick;for (Cock = 1; Cock <= 20; Cock++) //因为公鸡最多不会超过20只,所以最多循环20次.{for (Hen = 1; Hen <= 33; Hen++) //母鸡最多也不会超过33只,所以最多循环33次{for (Chick = 3; Chick <= 99; Chick += 3) //小鸡最多也不会超过99只{/*是否满足百钱和百鸡的条件*/if ((Cock + Hen + Chick == 100) && (Cock * 5 + Hen * 3 + Chick / 3 == 100)){Console.WriteLine("公鸡有:{0}只, 母鸡有:{1}, 小鸡有:{2}", Cock, Hen, Chick);}}}}Console.ReadKey();}}/*百钱买百鸡问题——一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少? */class Program{static void Main(string[] args){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))/*是否满足百钱和百鸡的条件*/Console.WriteLine("cock={0},hen={1},chicken={2}", x, y, z);}Console.ReadKey();}}class Program{static void Main(string[] args){for (int x = 1; x <= 19; x++){for (int y = 1; y <= 33; y++){int z = 100 - x - y;if ((x * 5 + y * 3 + z / 3 == 100) && z % 3 == 0){Console.WriteLine("公鸡有:{0}只, 母鸡有:{1}, 小鸡有:{2}", x, y, z);}}}Console.ReadKey();}}。
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、只描述程序应该“做什么”,而不必描述“怎样做”的语言被称为________。
百鸡百钱——程序设计
深圳大学实验报告课程名称:高级程序语言设计实验项目名称:“百钱买鸡问题”学院:信息工程学院专业:指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务处制实验目的与要求:“百钱买鸡问题”:设1个公鸡值5钱,1个母鸡值3钱,3个小鸡值1钱,现用100钱来买鸡,问有多少种方法买鸡?(每种方法需包含公鸡、母鸡、小鸡的个数)。
编写一个程序,输出每一种方法的公鸡、母鸡、小鸡个数,并且统计出有多少种方法。
要求:流程图、代码、结果、分析。
程序代码:#include <stdio.h>void main (){int i,j,k,n=0;for(i=0;i<=20;i++)for(j=0;j<=33;j++)for(k=0;k<=300;k+=3)if(k==300-15*i-9*j){printf("i=%d,j=%d,k=%d\n",i,j,k);n++;}printf("总方法数:%d\n",n);}流程图:数据处理分析:设一百只鸡中公鸡、母鸡、小鸡分别为 i,j,k 问题化为三元一次方程组:这里 i,j,k 为正整数,且k是3的倍数;由于鸡和钱的总数都是100,可以确定i,j,k 的取值范围:1)i的取值范围为0~202)j的取值范围为0~333)k的取值范围为0~300,步长为3对于这个问题我们可以用列举的方法得出i,j,k的所有可能组合,最后得到问题的解。
(int i,j,k ,n=0; /*公鸡、母鸡、小鸡的只数、方法数*/)初始算法1.初始化为1;2.计算i循环,找到公鸡的只数;3.计算j循环,找到母鸡的只数;4.计算k循环,找到小鸡的只数;5.结束,程序输出结果后退出。
算法细化算法的步骤1实际上是分散在程序之中的,由于用的是for循环,很方便的初始条件放到了表达式之中了。
步骤2和3是按照步长1去寻找公鸡和母鸡的个数。
c语言程序设计教程(第2版)课后题及模拟题参考答案
c语⾔程序设计教程(第2版)课后题及模拟题参考答案c语⾔程序设计教程(第2版)课后题及模拟题参考答案习题1 (4)1-1 填空题 (4)1-2 思考题 (4)1-3 编程题 (5)习题2 (6)2-1 单选题 (6)2-2 思考题 (6)习题3 (7)3-1 选择题 (7)3-2 填空题 (7)3-3 编程题 (8)习题4 (11)4-1单选题 (11)4-2填空题 (11)4-3 编程题 (11)习题5 (16)5-1单选题 (16)5-2填空题 (16)5-3 编程题 (16)习题6 (22)6-1单选题 (22)6-2填空题 (22)习题7 (25)7-1单选题 (25)7-2填空题 (25)7-3 编程题 (25)习题8 (26)8-1单选题 (26)8-2填空题 (26)8-3 编程题 (26)习题9 (30)9-1单选题 (30)9-2填空题 (30)9-3 编程题 (30)习题10 (38)10-1单选题 (38)10-2填空题 (38)10-3 编程题 (38)习题11 (41)11-1单选题 (41)11-2填空题 (41)习题12 (42)12-1单选题 (42)12-2 填空题 (42)实验1 熟悉Visual C++6.0可视化集成开发环境 (43)实验2 顺序结构程序设计 (43)实验3 选择结构程序设计 (43)实验4 循环结构程序设计 (44)实验5 函数 (47)实验6 数组 (54)实验7 指针 (58)实验8 结构体和共⽤体 (61)实验9 ⽂件 (63)实验10 综合编程 (64)模拟试卷(⼀)参考答案 (65)模拟试卷(⼆)参考答案 (67)习题11-1 填空题1. 函数2. 主函数main(),主函数main()3. 主函数main()4. 函数⾸部,函数体5. {, }6. /*, */7. 顺序结构,选择结构,循环结构8. .c, .obj, .exe1-2 思考题1. 结构化程序设计是指:为使程序具有⼀个合理的结构以保证程序正确性⽽规定的⼀套如何进⾏程序设计的原则。
C语言简答题(疑似题库)[1]
1. 从键盘上输入一个字符,用if结构编程判断该字符是英文字符、数字字符、空格符还是其他字符。
2. 从键盘输入三角形的三条边,判断能否构成三角形。
若能,则输出该三角形的面积及其类型(等腰、等边、直角、一般),否则输出“不能构成三角形”。
1、从键盘上输入一个学生的成绩,用switch结构编程输出该同学成绩的档次。
(成绩>=90 为“优秀”,成绩>=80并且成绩<90 为“良好”,成绩>=70并且成绩<80 为“中等”,成绩>=60并且成绩<70 为“及格”,其余为“不及格”)提示:显示成绩档次用printf("%s","优秀");的方式。
或者用字符串专用输出函数puts("优秀");的方式。
2、用s witch语句编写求一元二次方程ax2+bx+c=0的解。
提示:参见《习题与实验》P93的部分代码。
3、编写一个简单的计算器,使其能计算从键盘输入的一个算术表达式。
如输入“3*9”,则输出对应的结果为“3*9=27”。
要求:可计算的算术表达式类型为加、减、乘、除和取余。
1、用f or语句编程实现:歌星大奖赛在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。
选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
请编写一个程序实现。
2、用while语句实现:从键盘上输入若干个字符,直到输入“!”为止,统计其中的字母字符、数字字符、空格字符和其他字符的个数。
3、用do...while语句实现:求100~1000之间有多少个整数,其各位数字之和为5。
1、从键盘上任意输入一个奇数行,请编程控制输出具有以下特征的图形。
* * * * ** * *** * ** * * * *2、抓交通肇事犯一辆卡车违反交通规则,撞人后逃跑。
现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。
甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。
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的值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题概述
一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)。
这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:
这里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,y,z /*公鸡、母鸡、小鸡的只数*/
三重循环做法(穷举法)
#include <stdio.h>
#include <stdlib.h>
//由于笔者用的devc++编程,所以需要加system("pause");语句暂停程序
int main()
{
int a,b,c;
//a,b,c分别为公鸡母鸡还有小鸡的数量(均得到大致范围)
printf("本程序用来解决百钱买百鸡的问题。
\n");
system("pause");
for(a=0;a<=15;a++)
for(b=0;b<=25;b++)
for(c=66;c<=100;c+=3)
if(a+b+c==100&&5*a+3*b+c/3==100) //判断条件
printf("分配:公鸡%d只,母鸡%d只,雏鸡%d只,为百钱买百鸡的答案。
\n",a,b,c);
system("pause");
return 0;
}
//程序中的算法自己已经通过不买公鸡or母鸡的方法求得大约界限,缩小了循环的范围。
//程序错误:原来通过二元二次方程得到 for(c=66;c<=75;c+=3),但那个是为了检测a和b的最大值,而不能用来恒定c。
应该用c和最小的b去恒定- -
//范围能缩小就缩小,但是要准确和肯定。
- -
二重循环做法(简化法)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;
//a,b,c分别为公鸡母鸡还有小鸡的数量(均得到大致范围)
printf("本程序用来解决百钱买百鸡的问题。
\n");
system("pause");
for(a=0;a<=15;a++)
for(c=0;c<=100;c+=3)
{
b=100-a-c;
if(5*a+3*b+c/3==100) //判断条件
printf("分配:公鸡%d只,母鸡%d只,雏鸡%d只,为
百钱买百鸡的答案。
\n",a,b,c);
}
system("pause");
return 0;
}
//将c作为二次循环条件而不是b,这样可以避免很多次c不是3的倍数的情况
//b=100-a-c,从而判断条件中也不需要这一个条件了,只需要判定它们的价格是否为100即可
一重循环做法(好方法--)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c,num,mon,i;
//a,b分别为公鸡母鸡数量,c为雏鸡数量除以3
printf("本程序用来解决百钱买百鸡的问题。
\n");
system("pause");
for(c=0;c<=33;c++)
{
num=100-3*c;mon=100-c;
if((mon-3*num)%2==0)
{
a=(mon-3*num)/2;
if(a<0||a>15) continue;
b=num-a;
if(b<0||b>25) continue;
//通过两个条件分别判断a和b的值是否在指定区间(否则会产生负值和很大的值)
printf("分配:公鸡%d只,母鸡%d只,雏鸡%d
只,为百钱买百鸡的答案。
\n",a,b,3*c);
}
}
system("PAUSE");
return 0;
}
其中一些数值为简要的缩减范围。
至于mon-3*num)%2==0则是通过一元二次方程得出,还是提前做了一些计算的。
就相当于优化算法了。
当然,这个问题还有很多种做法,希望一样热爱C语言的加油~
由于本人只是初学两个月,多有浅薄的认识和不足,望见谅。