猶綵結拘链典真域
1、编程输出1至100之间能被17整除的自然数(要求使用continue语句)
算法分析:
予以输出,否则不输出如果自然数i被17整除
予以输出,否则不输出
源程序1:
#include void main()
{
int i;
for(i=l; i<=100; i++){
if(i%17==0) printf(M%4dn,i);
}
printf(”\n");
}
源程序 2: (with Continue)
#include void main()
{
int i;
for(i=l; i<=100; i++){
if (i%17!=0) continue;
}
printf(”\nn);
2、求100之内能被17整除的最大自然数(要求使用break语句)
算法分析1:
如果自然数i (i=l,2,...,100)被17整除且大于其他能被17整除的自然数,保存下来
循环结束时予以输出 源程序1:
#include void main()
{
int i,max=0 ;
for(i=l; i<=100; i++)
if (i%17==0 && i>max) max=i;
printf(”%d\n",max);
}
算法分析2:
如果自然数i (i=100,99,...,l)被17整除,提前结束循环,输出i即可 源程序 2: (with break)
#include void main()
int i,max=O ;
for(i=100; i>=l; i—)
if (i%17==0) break;
printf(" %d\n",max);
3、编程打印出下列图案:
氺
<2^
氺氺氺
氺
算法分析:
该图案共9行,每行由空格’’、星号’*’、换行’\if组成
第1至第5行的空格呈递减趋势(4,3,2,1,0),即每行的数量等于5-i;而’*’呈增加趋 势(1,3,5,7,9),即每行的数量等于2i-l;
第6至第9行的空格呈增加趋势(1,2,3,4),即每行的数量等于i-5;而’*’呈减少趋势 (7,5,3,1),即每行的数量等于2(9-i)+l;
(4)每行末尾都是1个换行符
源程序:
#include void main()
{
int i J ;
for(i=l; i<=5; i++) {//先输出 1?5 行
for(j=l;j<=5-i; j++) putchar(’ ’); //先输出 5-i 个空格 for(j=l;j<=2*i-l; j++) putchar(’*’); //再输出 2i-l 个*
//行尾换行putchar(’\n’)
//行尾换行
for(; i<=9; i++) {for(j=l;j<=i-5; j++)//再输出
for(; i<=9; i++) {
for(j=l;j<=i-5; j++)
//再输出6?9行
putchar(’ ’);
for(j=l;j<=2*(9-i)+l; j++) putcharf*’); putchar(An’);
//先输出i-5个空格
//再输出2(9-i)+l个*
//行尾换行
思考:
本程序中使用函数putcharO实现字符输出,如果使用printfO,括号内的参数使用 单引号还是双引号?
第二个for循环的表达式1是空的,为什么?
如果把第二个for循环改成如下形式,循环体应该怎样更改?
for( i=4; i>=l; i—){
/*请在此处填写循环体语句
*/
4、分析下列程序的输出结果:
#include
void main()
{
int i=-l,j=3,c ;
do{
c= (++i<0)&&!(-j==0);
}while(c);//当C非0时循环
printf("o/od,%d\n,\ ij);
}
结果:
1, 3
分析:
循环次数
未知
首先执行++i,令i由-1增为0,表达式++i的值亦为0 关系运算++i<0的值为0,故运算&&的结果为0, c的值为0
!(--j==0)是&&的第二操作数,在己经明确&&结果为0时不再计算,因此j的值没有减t 由于do-whik语句的循环条件是c,即c!=0,而当第一次循环结束时c为0,故结束循环
5、输入两个正整数m和n,求最大公约数p和最小公倍数q。
算法分析:
假如m〈=0或n<=0,提示输入有误,结束程序。
假如两者均为正数,取小者赋予m,大者赋予n.
先求最大公约数p:可知p必