1.循环结构:
1.while
2.do..while
3.for
1.基本形式
2.嵌套形式
for (A; B; C)
{
D;
for (E; F; G)
{
H;
}
}
外层循环执行一次,里层循环执行一遍
下列是以for循环实现解决鸡兔同笼问题
鸡兔个数为50有140只脚分别求鸡和兔的个数
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int x = 0;
6
7 for(x = 0;x <= 50;x++)
8 {
9 if(140 == x * 2 + (50 - x) * 4)
10
11 {
12 printf("鸡的个数为:%d\n 兔的个数为:%d\n",x,50 - x);
13 }
14
15 }
16
17 return 0;
18 }
练习:利用双层for循环实现打印99乘法表
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int i = 1;
6 int a = 1;
7 int c = 0;
8
9 for(i = 1;i <= 9;i++)
10 {
11 for(a = 1;a <= i;a++)
12 {
13 c = a * i;
14 printf("%d*%d=%d\t",a,i,c);
15 }
16 printf("\n");
17 }
18
19
20 return 0;
21 }
4.goto
出错处理
例子:
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int i = 0;
6 int sum = 0;
7
8 loop:
9 sum += i;
10 i++;
11
12 if(i < 101)
13 {
14 goto loop;
15 }
16
17 printf("sum=%d 循环次数i=%d\n",sum,i);
18
19 return 0;
20 }
2.辅助控制语句:
1.break
跳出循环或者switch结构
循环不再执行,用break
2.continue
结束本次循环
一个循环中屏蔽某几次循环可以使用continue
3.return
结束当前函数
练习:
1.从终端接收若干个成绩,以-1结尾,计算所有输入有效成绩的平均分
97
34
71
43
-1
==========================================================================================================================
数组:
1.数组:一组类型相同的有限个元素的集合
2.分类:一维数组、二维数组、多维数组
3.一维整形数组:
1.定义形式:
数据类型 数组名[元素个数];
int a[5];
注意:
元素个数必须为常量或常量表达式,不能是变量或变量表达式
int n = 5;
int a[n]; //错
int a[n+2]; //错
int a[5]; //对
int a[2+3]; //对
2.元素访问:
数组名[元素下标];
元素下标: 0 - 元素个数-1
元素下标:可以用变量、常量或者表达式访问
a[n]; //对
a[0]; //对
a[0+1]; //对
a[n+1]; //对
注意:
1.不能越界访问
3.数组的初始化:
定义数组时对数组元素赋初值
初始化 != 赋值
1.全部初始化:
所有数组元素都可以得到初值
int a[5] = {1, 2, 3, 4, 5};
2.局部初始化:
给定一部分元素的值,没有给定初值的元素,默认初始化为0
int a[5] = {1, 2, 3};
int a[5] = {0};
3.默认初始化:
不给定数组元素个数,通过初值元素个数决定数组元素个数
int a[] = {1, 2, 3, 4, 5};
int a[5] = {0};
a[5] = {1, 2, 3, 4, 5}; //错
a = {1, 2, 3, 4, 5}; //错
4.内存空间:
int a[5];
数组所占空间大小 = 数据类型所占空间大小 * 元素个数
1.连续性:
数组所占空间连续
2.有序性:
数组空间存放顺序有序,先存下标为0的元素,再存下标为1的元素, ...
获得数组元素个数: sizeof(a) / sizeof(a[0])
练习:从终端接收5个数放入数组中,打印出所有数据的平均值
5.获得数组中最大值或者最小值
练习:获得5个数中最小值
以下程序为实现最小值并获得下标: 6.数组中元素实现倒置
作业:
1.从终端接收10个成绩,去掉最高分,去掉最低分,计算选手的最终平均分成绩
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int a[10] = {0};
6 int i = 0;
7 int min = 0;
8 int max = 0;
9 int sum = 0;
10 int cunt =0;
11
12 for (i = 0;i < 10;i++)
13 {
14 scanf("%d",&a[i]);
15 }
16 min = a[0];
17 max = a[0];
18 for(i = 1;i < 10;i++)
19 {
20 if(max < a[i])
21 {
22 max = a[i];
23 }
24 }
25 for(i = 1;i < 10;i++)
26 {
27 if(min > a[i])
28 {
29 min = a[i];
30 }
31
32 }
33 for(i = 0;i <10;i++)
34 {
35 sum += a[i];
36 cunt++;
37 }
38 printf("平均分:%f\n",(double)sum / ((double)cunt - 2));
39
40 return 0;
41 }
2.打印出所有的水仙花数:
1.是一个三位数
2.每位数上的立方和值为该数本身
153 == 1*1*1 + 5*5*5 + 3*3*3
== 1 + 125 + 27
== 153
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int i = 0;
6 int a = 0;
7 int b = 0;
8 int c = 0;
9
10 for(i = 100;i < 1000;i++)
11 {
12 a = i % 10;
13 b = i / 10 % 10;
14 c = i / 100 % 10;
15 if(i == a*a*a + b*b*b + c*c*c)
16 {
17 printf("%d ",i);
18 }
19 }
20
21 printf("\n");
22
23 return 0;
24 }