一、几个疑惑
1、疑惑(一)——for()语句中使用”++i“和”i++“对程序运行有影响吗?
- (1)理论上,++i少一次对象构建,故效率比i++高一点;实际上经过编译器优化后就都一样了。因此,在实际for()语句使用中,二者没有区别。
- (2)作为表达式时,i++的取值是i,而++i的取值是i+1,如——int j=++i;和int j=i++; 二者是有区别的。
2、疑惑(二)——for()语句中”++i“与”循环体“谁先执行谁后执行?
源代码
/*
*Copyright (c)2016,刘兵马俑
*All rights reserved.
*文件名称:main.c
*作 者:刘兵马俑
*完成日期:2016/03/25
*版 本 号:v1.0
*问题描述:for()语句中”++i“与”循环体“谁先执行谁后执行?
*程序输出:
*/
#include <stdio.h>
int main()
{
int i=0;
for(i=1;i<=10;++i)
{
printf("*");
}
printf("\n");
return 0;
}
单步执行验证
通过单步执行,我可以十分确定地相信,程序是按照如下的流程图顺序执行的。
流程图
结论:
程序首次执行到for()语句时,先判断当前i的值是否符合循环的执行条件,如果符合,程序在执行第一遍循环体后,才第一次执行++i。
二、循环结构练习——输出各种小星星
1、输出
源代码:
#include <stdio.h>
#define N 6 //N表示一共要打印多少行
int main()
{
int i=0,j=0;
for(i=N;i>=1;--i)
{
for(j=1;j<=2*i-1;++j)
{
printf("*");
}
printf("\n");
}
printf("\n");
return 0;
}
2、输出
源代码:
#include <stdio.h>
#define N 6 //N表示一共要打印多少行
int main()
{
int i=0,j=0;
for(i=1;i<=N;++i)
{
for(j=1;j<=N-i;++j)
{
printf(" ");
}
for(j=1;j<=i;++j)
{
printf("*");
}
printf("\n");
}
printf("\n");
return 0;
}
3、输出
源代码:
#include <stdio.h>
#define N 6 //N表示一共要打印多少行
int main()
{
int i=0,j=0;
for(i=1;i<=N;++i)
{
for(j=1;j<=i-1;++j)
{
printf(" ");
}
for(j=1;j<=11-2*(i-1);++j)
{
printf("*");
}
printf("\n");
}
return 0;
}
4、输出
源代码
#include <stdio.h>
#define N 6 //N表示一共要打印多少行
int main()
{
int i=0,j=0;
for(i=1;i<=N;++i)
{
for(j=1;j<=6-i;++j)
{
printf(" ");
}
for(j=1;j<=11-2*(6-i);++j)
{
printf("*");
}
printf("\n");
}
return 0;
}
5、输出
源代码
#include <stdio.h>
#define N 6 //N表示一共要打印多少行
int main()
{
int i=0,j=0;
printf(" * \n");
for(i=2;i<=5;++i)
{
for(j=1;j<=6-i;++j)
{
printf(" ");
}
printf("*");
for(j=1;j<=9-2*(6-i);++j)
{
printf(" ");
}
printf("*\n");
}
printf("***********\n");
return 0;
}
6、输出
源代码
#include <stdio.h>
int main( )
{
int i,j,n=6; //n代表上三角行数
//先输出上三角
for(i=1;i<=n;++i) //输出n行
{
//输出第i行
for(j=1; j<=n-i; ++j) //输出n-i个空格
printf(" ");
for(j=1; j<=2*i-1; ++j) //输出2*i-1个星号
printf("*");
printf("\n");
}
//下面输出下三角
for(i=1;i<=n-1;++i) //输出n-1行
{
//输出第i行
for(j=1; j<=i; ++j) //输出i个空格
printf(" ");
for(j=1; j<=2*(n-i)-1; ++j) //输出2*i-1个星号
printf("*");
printf("\n");
}
return 0;
}
版权声明:本文为qq_30866297原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。