3.7-day07-C语言基础-循环结构程序设计
循环嵌套可以解决复杂问题,外层循环通常用来把大问题分解成几个小问题,内层循环负责解决每个小问题。
当编写不确定次数的循环时可以采用while语句。while语句有两种写法,区别在于执行顺序不同。
空语句循环和死循环
数组是由多个同类型的变量构成的,数组的声明方式如下
int arr[10];
其中10表示数组中一共有10个变量,int表示数组中所有变量的类型都是int。
数组中的变量用如下方法表示
arr[3]
其中arr是数组名称,3叫做数组的下标。下标从0开始到个数减一为止,超过范围的下标不可以使用。
数组的多种初始化方法
编译时数组名称被直接替换成数组中第一个变量的地址,数组名称取地址的结果也是直接替换成数组中第一个变量的地址
通过数组得到的地址数据可以进行简单的加减计算。如果进行加一计算则这个一的单位和地址的获得方式有关。
如果有数组arr,则arr + 3可以获得数组中下标为3变量的地址
对数组名称使用sizeof关键字计算得到整个数组大小
多个一维数组可以合并成为一个二维数组,二维数组声明如下
int arr[3][4];
3表示由三个一维数组构成,4表示每个一维数组中包含4个整数变量
01tri.c
1 /* 2 循环嵌套练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int xun_huan = 0, xun_huan1 = 4; 7 for (xun_huan1 = 0;xun_huan1 <= 4;xun_huan1++) { 8 for (xun_huan = 0;xun_huan <= (3 - xun_huan1);xun_huan++) { 9 printf(" "); 10 } 11 for (xun_huan = (4 - xun_huan1);xun_huan <= (4 + xun_huan1);xun_huan++) { 12 printf("*"); 13 } 14 printf("\n"); 15 } 16 return 0; 17 }


行编号:从0开始:xun_huan1
4-xun_huan1 计算空格的个数;
4-xun_huan1 - 1=3-xun_huan1 计算得到最后一个空格编号;
所以, 3 - xun_huan1 + 1=4 -xun_huan1,计算得到第一个*编号;
02tri.c
/* 循环嵌套练习 */ #include <stdio.h> int main() { int xun_huan = 0, xun_huan1 = 0; for (xun_huan = 0;xun_huan <= 5;xun_huan++) { for (xun_huan1 = 0;xun_huan1 <= xun_huan;xun_huan1++) { printf("%d", xun_huan1); } printf("\n"); } return 0; }

行编号:0, 1, 2, 3, 4, 5
即,最后一个数字 <= 行编号;

03money.c
1 /* 2 循环嵌套练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int xun_huan = 0, ge_shu = 0, xun_huan1 = 0; 7 for (xun_huan = 0;xun_huan <= 2;xun_huan++) { 8 ge_shu = (10 - 5 * xun_huan) / 2; 9 for (xun_huan1 = 0; xun_huan1 <= ge_shu; xun_huan1++) { 10 printf("5块钱一共%d张,2块钱一共%d张,1块钱一共%d张\n", xun_huan, xun_huan1, 10 - 5 * xun_huan - 2 * xun_huan1); 11 } 12 } 13 return 0; 14 }
1, 2,5凑出10块钱;

5:(0-1-2) - 2:(0-1-2-3-4-5)
04for.c
1 /* 2 for练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int xun_huan = 0; 7 /*for (xun_huan = 0; xun_huan <= 3; xun_huan++) 8 printf("%d\n", xun_huan);*/ 9 /*for (xun_huan = 0; xun_huan <= 3; xun_huan++, xun_huan++) 10 printf("%d\n", xun_huan);*/ 11 for (int xun_huan1 = 0; xun_huan1 <= 3; xun_huan1++) { 12 printf("%d\n", xun_huan1); 13 } 14 return 0; 15 }


此时,输出的结果为0, 2

05while.c
1 /* 2 while练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int shu_zi = 0, ge_shu = 0; 7 printf("请输入一个数字:"); 8 scanf("%d", &shu_zi); 9 /*while (0 != shu_zi) { 10 shu_zi /= 10; 11 ge_shu++; 12 }*/ 13 do { 14 shu_zi /= 10; 15 ge_shu++; 16 } while (0 != shu_zi); 17 printf("数位是%d\n", ge_shu); 18 return 0; 19 }

这种情况下可以对0判断:

这种情况下,用while语句,就不可以对0的数位进行判断;



06loop.c
1 /* 2 循环练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int xun_huan = 0; 7 //for (xun_huan = 0; xun_huan <= 3; xun_huan++); 8 /*for (;;) { //死循环 9 printf("1\n"); 10 }*/ 11 while (1) { //死循环 12 } 13 return 0; 14 }

程序陷入死循环;


07loop.c
1 /* 2 循环练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int shu_zi = 0; 7 do { 8 printf("请输入数字:"); 9 scanf("%d", &shu_zi); 10 printf("%d\n", shu_zi); 11 } while (0 != shu_zi); 12 return 0; 13 }

程序会一直处于循环状态;
8arr.c
1 /* 2 数组练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int arr[1000], xun_huan = 0; 7 arr[3] = 4; 8 &arr[5]; 9 arr[6]++; 10 arr[7]++; 11 arr[8]++; 12 for (xun_huan = 6;xun_huan <= 30; xun_huan++) { 13 arr[xun_huan]++; 14 } 15 return 0; 16 }
09arr.c
1 /* 2 数组练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int arr[5], loop = 0; 7 for (loop = 0; loop <= 4; loop++) { 8 arr[loop] = loop + 1; 9 } 10 for (loop = 4; loop >= 0; loop--) { 11 printf("%d ", arr[loop]); 12 } 13 printf("\n"); 14 return 0; 15 }
修改程序中的\n


10arr.c
1 /* 2 数组练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int value = 0, arr[5], loop = 0; 7 for (loop = 0; loop <= 4; loop++) { 8 arr[loop] = -1; 9 } 10 printf("请输入一个整数:"); 11 scanf("%d", &value); 12 for (loop = 4; loop >= 0; loop--) { 13 arr[loop] = value % 10; 14 value /= 10; 15 if (0 == value) { 16 break; 17 } 18 } 19 for (loop = 0; loop <= 4; loop++) { 20 if (-1 != arr[loop]) { 21 printf("%d ", arr[loop]); 22 } 23 } 24 printf("\n"); 25 return 0; 26 }




这个程序需要细细品味,很巧妙的:
比如186
比如186
arr[4] 通过取余数,输出最低位6;
arr[3] 是通过18/10,余数得到8;
arr[2]是通过1/10,余数得到1;
最后,通过 printf("%d", arr[loop]);这样的格式进行无缝的衔接;
在1和8和6之间加入一个^-^

11arr.c
1 /* 2 数组初始化练习 3 */ 4 #include <stdio.h> 5 int main() { 6 //int arr[3] = {1, 2, 3}; 7 //int arr[3] = {1, 2, 3, 4, 5}; 8 //int arr[] = {1, 2, 3, 4, 5}; 9 int arr[3] = {1}; 10 int loop = 0; 11 for (loop = 0; loop <= 2; loop++) { 12 printf("%d ", arr[loop]); 13 } 14 printf("\n"); 15 return 0; 16 }


==================================================================================================================================


-----------------------------------------------------------------------------------------------------------------------------------------------------------


12arr.c
1 /* 2 数组名称的使用 3 */ 4 #include <stdio.h> 5 int main() { 6 int arr[5] = {1, 2, 3, 4, 5}; 7 int loop = 0; 8 printf("arr是%p,&arr[0]是%p\n", arr, &arr[0]); 9 //arr = 1; 错误 10 printf("&arr是%p\n", &arr); 11 printf("arr + 1是%p,&arr + 1是%p\n", arr + 1, &arr + 1); 12 *(arr + 3) = 13; 13 printf("arr[3]是%d\n", arr[3]); 14 for (loop = 0; loop <= 4; loop++) { 15 printf("%d ", *(arr + loop)); 16 }vi 17 printf("\n"); 18 return 0; 19 }

%p是以十六进制的地址数据输出;

此时a[0]=1, a[1]=2, a[2]=3, a[3]=13, a[4]=5
13size.c
1 /* 2 sizeof练习 3 */ 4 #include <stdio.h> 5 int main() { 6 int arr[] = {1, 2, 3, 4, 5}; 7 printf("sizeof(arr)是%d\n", sizeof(arr)); 8 printf("个数是%d\n", sizeof(arr) / sizeof(arr[0])); 9 return 0; 10 }

arr[] = {1, 2, 3, 4, 5} 一个整数是4个字节,一共20个字节;
14arr.c
1 /* 2 二维数组练习 3 */ 4 #include <stdio.h> 5 int main() { 6 /*int arr[3][4] = {{1, 2}, 7 {5, 6, 7, 8}, 8 {6, 7, 8, 9}};*/ 9 //int arr[3][4] = {1, 2, 3}; 10 int arr[][4] = {{1}, {1, 2}, {1, 2, 3}}; 11 //int arr[3, 4]; 错误 12 int row = 0, col = 0; 13 for (row = 0; row <= 2; row++) { 14 for (col = 0; col <= 3; col++) { 15 printf("%d ", arr[row][col]); 16 } 17 printf("\n"); 18 } 19 return 0; 20 }

在数组中,行数可以不明确,但列数需要明确;
int arr[][4] , 空的在列数中以0代替;
其他运行结果:



此时把arr[3][4] = {1, 2, 3}看成了一维数组;
1230
0000
0000

15matrix.c
1 /* 2 二维数组练习 3 */ 4 #include <stdio.h> 5 int main() { 6 /*int arr[][4] = {{1}, 7 {0, 1}, 8 {0, 0, 1}, 9 {0, 0, 0, 1}};*/ 10 int arr[4][4] = {0}; 11 arr[0][0] = 1; 12 arr[1][1] = 1; 13 arr[2][2] = 1; 14 arr[3][3] = 1; 15 int row = 0, col = 0; 16 for (row = 0; row <= 3; row++) { 17 for (col = 0; col <= 3; col++) { 18 printf("%d ", arr[row][col]); 19 } 20 printf("\n"); 21 } 22 return 0; 23 }

浙公网安备 33010602011771号