嵌套循环(nested loop):在一个循环内使用另一个循环
一、循环嵌套
示例代码:
#include <stdio.h>
int main(void)
{
int i;
int j;
for(i = 0; i < 10; i++)
{
for(j = 0; j < 9; j++)
{
printf("%5d", j); // 里面的循环负责累加并显示数字,j的值决定了显示的列数
}
printf("\n"); // 外面的循环负责换行,i的值决定了显示的行数
}
return 0;
}
运行结果:
在嵌套循环中,内部循环在外部循环的每次单独循环中都完全执行其所有循环(示例中,外部循环执行1次,内部循环执行9次)
示例代码:
#include <stdio.h>
int main(void)
{
int i;
int j;
for(i = 0; i < 10; i++)
{
for(j = 0; j < 9; j++)
{
printf("%5d", i + j); // 外不循环的值影响内部循环的值
}
printf("\n");
}
return 0;
}
运行结果:
二、循环与数组
一个数组就是线性存储的一系列相同类型的值
int a[10]; // 定义一个整形数组
float b[6]; // 定义一个浮点型数组
char c[20]; // 定义一个字符型数组
用于表示数组元素的数字称为下标(subscript)、索引(index)或偏移量(offset),下标必须是整数,且从0开始
数组中的元素在内存中是顺序存储的
尤其需要明确数组的边界,否则会造成不可预知的问题;如上面的数组a包含20个元素,因此其元素值是从a[0]到a[19],对a[20]进行操作是错误的
示例代码:用for循环对数组进行处理
#include <stdio.h>
int main(void)
{
int i;
int num[10];
int sum;
int ave;
printf("please enter 10 numbers: \n");
for(i = 0; i < 10; i++) // 第一个for循环,用于读入数据
{
printf("number %d:", i + 1);
scanf("%d", &num[i]); // 键盘输入整数
}
for(i = 0; i < 10; i++) // 第二个for循环,用于计算和
{
sum += num[i];
}
ave = sum / 10; // 计算平均值
printf("sum of the numbers is %d \n", sum); // 显示求和结果
printf("ave of the numbers is %d \n", ave); // 显示求平均结果
return 0;
}
运行结果:
使用一个函数需要完成的3个步骤:
1)使用函数原型声明该函数(如果该函数在main函数中会被调用,则声明需要在main函数之前)
2)在程序中(如main函数中)调用该函数
3)定义函数(应为之前有函数声明,函数定义可以在调用点之后)
C本身包含的库函数已经在.h文件中进行了声明
现代编程习惯:将程序元素分为接口和实现部分,接口部分描述如何使用一个特性(原型部分的功能),实现部分说明采取的具体动作(定义部分的功能)
关于循环的重点:
1)明确定义循环结束的条件
2)确保在循环判断中使用的值在第一次使用之前已经初始化
3)确保在每个循环周期中更新判断值
以上3点只仅针对一般性的循环功能,显示中有个别例外,例如嵌入式平台中使用的while(1)循环,一般没有结束条件