打赏

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
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 }

 

posted on 2018-11-29 22:14  XuCodeX  阅读(227)  评论(0)    收藏  举报

导航