第六章
例:将输入的整数反向输出。
main( )
{ int number,rdigit ;
scanf"%d",&number);
while(number!=0 )
{ rdigit=number%10 ; /* 取余数 */
printf("%d",rdigit); /* 输出余数 */
number/=10 ; /* 只取整数部分 */
}
printf("");
}
例:用“辗转相除法”求出两个正整数的最大公约数。
算法:(1)求 m 对 n 的余数 r ; (2)如余数 r 为 0,输
出最大公约数 n,否则执行下一步;(3)除数 n 作为
新的被除数 m,余数 r 作为新的除数 n;(4)求新的
余数 r;(5)重复步骤(2)到(5)。
main( )
{ int r,m,n ;
printf("Enter m,n:");
scanf("%d%d",&m,&n);
if(m<n){r=m ;m=n ;n=r ;} /* m 为大数 */
r=m%n ; /* 求 m 对 n 的余数 */
while(r!=0)
{ m=n ;n=r ;r=m%n ; }
printf("H.C.F=%d",n);
}
例:利用 while 语句和空语句跳过输入的空格
while((c=getchar())==' ') ;
例:以 1 为循环条件
while(1) { …. }
应在循环体内设置断点以终止循环。
例:从键盘输入一个 2~200 之间的奇数,如不是,
重新输入
main()
{ int n ;
do { printf("Input n:");
scanf("%d",&n);
}while(n<2 || n>200 || n%2==0);
}
例 1:显示 1~100
main()
{ int n ;
for(n=1 ; n<=100 ; n++)
printf("%4d",n);
printf("");
}
例 2:显示 1~10 的阶乘
main()
{ int n ; long result=1 ;
for(n=1 ;n<=10 ;n++)
{ result*=n ;
printf("%d!=%ld" ,n ,result);
}
}
例:用数学定义的方法求解两个正整数的最大公
约数。思路:
(1)输入两个正整数。
(2)找出两数中的小数,并作为除数。
(3)如果除数大于 1 用除数分别去除两个正整数。
(4)如果两个正整数均被除尽,该除数即为最大公
约数,否则执行下一步。
(5)除数减 1。(6)重复步骤(3)~(6)。
(7)输出最大公约数。
重复部分即(3)~(6)应使用循环来实现。
循环条件:除数>1,两数均被除尽则退出循
环。
用 C 语言描述的算法(程序):
int m,n,gys;
scanf("%d%d",&m,&n);
if (m>n) gys=n;
else gys=m;
while(gys>1)
{ if (m%gys==0&&n%gys==0) break; gys--; }
printf("%d",gys);
或用 for 循环:
if(m>n) gys=n;
else gys=m;
for(;gys>1;gys--)
if(m%gys==0&&n%gys==0) break;
printf("%d",gys);
完整程序:
main()
{ int m,n,min,i ;
printf("Enter m,n:");