举例说明:
比如打印一个倒三角形。
* * * *
* * *
* *
*
第一层循环为行数,第二层循环为每行打印的*数,且随着行数的变化,打印的*数也随着改变。
这就是关联变量的双层循环。我的做法是,先设计第一层变量i=4;i>=1;i--,这样就保证了4行的行数正确打印。
然后,设计第二层变量j=i,j>=1,j--,这样j就能随行数的变化,而打印不同的星星数。和第二层并列的第三层用于输出空格。
比如:第一行i=4,j=4,所以打印4个*号,第二行i=3,则j=4,则打印3个*号,等等依次类推,最后打印除倒立的星星图。
完整程序如下:
#include <stdio.h>
int main(void)
{
for(int i=4;i>=1;i--){
for(int j=i;j>=1;j--){
printf("* ");
}
printf("
");
for(int k=i-1;k<4;k++){
printf(" ");
}
}
printf("
");
return 0;
}
注意条件里面的大于和小于号的判断。另外:如果k<=4,那么就会在第二行输出2个空格,导致不对称。
另外一个例子:十转八进制
/*十进制化为八进制普通版。
* 注意这种关联变量的双层for循环的用法
*
*/
#include <stdio.h>
int main(void)
{
int number;
int jinzhi=8;
int weishu=5;
printf("Enter a number(5wei):");
scanf("%d",&number);
printf("%o
",number);
for(int i=weishu;i>=1;i--){
int temp=number;
for(int j=i-1;j>=1;j--){
temp/=jinzhi;
}
temp%=jinzhi;
printf("%d",temp);
}
printf("
");
return 0;
}