cmultiple+=x; }
cout<<\最小公倍数:\}
输入:24 7 (2)
#include
int x,y,var1;
cout<<\输入两个整数:\ cin>>x>>y;
if(x x=y;y=var1;var1=x%y; } cout<<\最大公约数:\} 输入:24 7 解答: 本题考查理解程序的能力。(1)中求解两个数x,y的最小公倍数思路为若x能够被y整除则x就是这两个数的最小公倍数,否则判断x的整数倍是否能被y整除,直到x的某个倍数可以被y整除,则该数即为这两个数的最小公倍数。(2)中求解两个数x,y的最大公约数思路为用两个数中较大的数作为被除数,较小的数作为除数,如果能够整除则较小的数就是这两个数的最大公约数,否则,将较小的数作为新的被除数,将两个数的模作为除数,重复以上工作直到模为0,则这个除数就是x和y的最大公约数。 答案为:(1) 最小公倍数:168 (2) 最大公约数:1 例题7:以下程序的功能是输出1到100之间每位数的乘积大于每位数的和的数,如对数字12有1*2<1+2,所以不输出这个数;对数字23有2*3>2+3所以输出这个数。请填空。 #include int num,product=1,sum=0,n; for(num=1;num<=100;num++) { product=1;sum=0; ________①__n=num ______; while(_____②__n___) { product*=n;sum+=n; _______③__n/=10____; } if (product>sum) cout< 解答: 本题中变量num用于表示1到100的整数,变量product用于存放每位数的乘积,变量sum用于存放每位数的和,变量n用于存放求解每位数的中间结果。外层for循环用于控制判断1到100的数,内层while循环用于计算每位数的积与每位数的和,if语句用于判断该数的每位数的乘积是否大于每位数的和,若满足此条件,则输出这个数。在①处要对n赋值,最初它是num的副本而后用于存放计算每位数的中间结果;②处为退出while循环的条件,当当前这个数的每位数都被取出,则内层循环结束;③改变循环变量的语句,使得循环在某种情况下可以结束,这里取n除10的商,直到商为0时结束内层循环。 答案为:① ② ③ 例题8:以下程序的功能是判断一个数是否为素数。请填空。 #include int num; cout<<\输入一个正整数:\ _________①________; int isprime=1; for(int i=2;i<=num-1;i++) if(________②________) { isprime=0; ______③______; } if(isprime) cout< cout< 解答: 本题中变量num存放要判断的数,变量isprime用于记录该数是否为素数,当isprime为1时即该数为素数,否则为合数。判断思路为如果num能被2到num-1的任意一个数整除则该数不是素数。①处需要输入待判断的数,②处为判断条件,当检测到2到num-1中第一个能整除num的数时则可判断出该数不是素数,此时退出循环,故③为退出语句。 答案为: ①cin>>num ②num%i==0 ③break 例题9:编写一个程序,输入一个正整数,判断它是否能被3,5,7同时整除。 解答: 参考程序如下 #include int num; cout<<\请输入一个正整数:\ cin>>num; if(num<0) cout<<\输入有误!\ else if(num%3==0&&num%5==0&&num%7==0) cout< cout< 例题10:编写一个程序,让用户输入年和月,然后判断该月有多少天。 解答: 算法思想:判断某年某月有多少天,每个月的天数有四种可能:1、3、5、7、8、10、12月为31天,4、6、9、11月为30天,闰年的2月有29天,不是闰年则2月为28天。因为每月的天数有多种可能,我们选择用switch语句解决本题。程序流程是首先输入要判断的年月,然后判断该年月应有多少天,最后输出结果。 参考程序如下: #include int year,month,days,leap; cout<<\请输入年月:\ cin>>year>>month; switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:days=31;break; case 4: case 6: case 9: case 11:days=30;break; case 2:if(year@0==0) leap=1; else if(year%4==0&&year0!=0) leap=1; else leap=0; if(leap) days=29; else days=28; } cout< 例题11:编写一个程序。计算若一头母牛,它每年年初生一头小母牛,每头小母牛从出生起第四个年头开始每年也生一头小母牛,按此规律,第10年时有多少头母牛? 解答: 算法思想: 假设f(n)表示第n年的母牛数,已知f(0)=0,f(1)=2,f(2)=3,f(3)=4,推得在第n年时应有f(n-3)头母牛生育出f(n-3)头母牛,所以第n年共有f(n-1)+f(n-3)头母牛。据此得出数学表达式:f(n)=f(n-1)+f(n-3)。在下边的参考程序中分别用变量sum、sum1、sum2、sum3表示f(n),f(n-1),f(n-2),f(n-3)其中n从4变化到10。 参考程序如下: #include int sum1=2,sum2=3,sum3=4,sum=0,n=10; for(int i=4;i<=n;i++) { sum=sum1+sum3; sum1=sum2; sum2=sum3; sum3=sum; } cout<<\第十年有\头牛!\ } 例题12:计算当通项时停止计算。 解答: 算法思想: 本题主要考查学生对循环结构的运用以及对数学问题编程技巧的掌握。本题为有规律的若干项相加,所以采用循环结构处理。循环的条件是当时继续运算直到这个条件不满足时就达到了题目要求的精度,则停止运算。循环体中完成三件事,首先是求出本次(第i次)循环中的的值,然后计算当前的e,最后完成循环变量增1的操作。在求解本题时主要注意计算中所采用的变量的数据类型以及如何完成运算精度的控制。 参考程序如下: #include double e=1.0; double x=1.0; int i=1; while(x>=1.0e-7) { x=x/i; e=e+x; i=i+1; } cout << \ return 0; } 【习题】 一、 选择题 1. 在循环语句中使用break语句的作用是( )。 (a)结束本次循环 (b)结束该层循环 (c)结束所有循环 (d)结束程序执行 2. 对if后的括号中的表达式,要求i不为0的时候表达式为真,该表达式表示正确的为 ( )。 (a)i (b)!i (c)i<>0 (d)i=0 3. 下列循环语句的执行次数是( )。 while(!1) cout<<”ok!”; (a)0次 (b)1次 (c)2次 (d) 无数次 4. 运行下列程序结果为( )。 #include int i; for (i=0;i<=10;i++){ if (i%2) cout< (a)246810 (b)12345 (c)678910 (d)13579 二、 填空题 1. 结构化程序设计的三种基本结构是__________、__________、__________。 2. continue语句实现的作用是________________________________________。 3.若输入”china 2008!”,运行下列程序的输出结果为___________________________。 #include char c; int letters=0,digits=0,others=0; cout<<\ while ((c=getchar( ))!='\\n') { if (c>='a' && c<='z' || c>='A' && c<='Z' ) letters++; else if (c>='0' && c<='9') digits++; else others++; } cout<<\ <<\