C语言03数组

 定义和初始化数组

 问题

删除数组中的某个元素,并将后续元素顶上来。

步骤

实现此案例需要按照如下步骤进行。

步骤一:定义和初始化数组

代码如下所示:


    
    
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[10];
  5. for (int i = 0; i < 10; i++)
  6. scanf("%d", &array[i]);
  7. int num;
  8. printf("请输入要删除的元素:");
  9. scanf("%d", &num);
  10. int i;
  11. for (i = 0; i < 10 ; i++)
  12. if (array[i] == num)
  13. break;
  14. for (; i < 9; i++)
  15. array[i] = array[i + 1];
  16. for (i = 0; i < 9; i++)
  17. printf("%d ", array[i]);
  18. printf ("\n");
  19. return 0;
  20. }

上述代码中,以下代码:


    
    
  1. int array[10];
  2. for (int i = 0; i < 10; i++)
  3. scanf("%d", &array[i]);

定义一个整型数组array,包含10个元素。并使用循环对元素赋值的方式完成对数组array的初始化。

上述代码中,以下代码:


    
    
  1. int num;
  2. printf("请输入要删除的元素:");
  3. scanf("%d", &num);

首先,定义一个整型变量num,用于存储输入的一个要删除的元素。

然后,使用函数printf提示输入的一个要删除的元素。

最后,使用函数scanf输入的要删除的元素到变量num中。

上述代码中,以下代码:


    
    
  1. int i;
  2. for (i = 0; i < 10 ; i++)
  3. if (array[i] == num)
  4. break;

设置一个循环,逐个元素array[i]与输入的要删除的元素num对比,找到要删除的元素在数组中的位置后退出循环。

上述代码中,以下代码:


    
    
  1. for (; i < 9; i++)
  2. array[i] = array[i + 1];

将找到的要删除元素的位置的下一个元素赋值到其中,实现删除的功能。设置循环,依次赋值,实现将后续元素顶上来的功能。

上述代码中,以下代码:


    
    
  1. for (i = 0; i < 9; i++)
  2. printf("%d ", array[i]);
  3. printf ("\n");

设置一个循环,逐个打印数组中剩余的元素,验证删除效果。

 完整代码

本案例的完整代码如下所示:


    
    
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[10];
  5. for (int i = 0; i < 10; i++)
  6. scanf("%d", &array[i]);
  7. int num;
  8. printf("请输入要删除的元素:");
  9. scanf("%d", &num);
  10. int i;
  11. for (i = 0; i < 10 ; i++)
  12. if (array[i] == num)
  13. break;
  14. for (; i < 9; i++)
  15. array[i] = array[i + 1];
  16. for (i = 0; i < 9; i++)
  17. printf("%d ", array[i]);
  18. printf ("\n");
  19. return 0;
  20. }

数组的长度

 问题

删除数组中的某个元素,并将后续元素顶上来。

 步骤

实现此案例需要按照如下步骤进行。

步骤一:数组的长度

代码如下所示:


    
    
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[10];
  5. for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
  6. scanf("%d", &array[i]);
  7. for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
  8. printf("%d ", array[i]);
  9. printf("\n");
  10. return 0;
  11. }

上述代码中,以下代码:


    
    
  1. int array[10];

定义一个整型数组array,包含10个元素。

上述代码中,以下代码:


    
    
  1. for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
  2. scanf("%d", &array[i]);

使用循环对元素赋值的方式完成对数组array的初始化。数组的长度是使用数组所占的字节数sizeof(array)除以数组第一个元素所占的字节数sizeof(array[0])得到的。

上述代码中,以下代码:


    
    
  1. for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
  2. printf("%d ", array[i]);
  3. printf("\n");

设置循环逐个输出数组的每一个元素。

完整代码

本案例的完整代码如下所示:


    
    
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[10];
  5. for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
  6. scanf("%d", &array[i]);
  7. for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
  8. printf("%d ", array[i]);
  9. printf("\n");
  10. return 0;
  11. }

1 可变长数组的使用

1.1 问题

定义一个变量n,然后用n定义和使用可变长数组。

1.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:可变长数组的使用

代码如下所示:

        
        
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n;
  5. printf("请输入数组长度:");
  6. scanf("%d", &n);
  7. int array[n];
  8. for (int i = 0; i < n; i++)
  9. array[i] = i + 1;
  10. for (int i = 0; i < n; i++)
  11. printf("%d ", array[i]);
  12. printf("\n");
  13. return 0;
  14. }

上述代码中,以下代码:


         
         
  1. int n;
  2. printf("请输入数组长度:");
  3. scanf("%d", &n);

首先,定义一个整型变量n,用于存储输入的数组长度。

然后,使用函数printf提示输入数组长度。

最后,使用函数scanf输入一个数组长度到变量n中。

上述代码中,以下代码:


         
         
  1. int array[n];

定义一个整型数组,数组的长度由整型变量n通过函数scanf动态输入决定。

上述代码中,以下代码:


         
         
  1. for (int i = 0; i < n; i++)
  2. array[i] = i + 1;

将数组array中的元素逐个赋初值。

上述代码中,以下代码:


         
         
  1. for (int i = 0; i < n; i++)
  2. printf("%d ", array[i]);
  3. printf("\n");

逐个输出数组array中的元素。

1.3 完整代码

本案例的完整代码如下所示:


         
         
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n;
  5. printf("请输入数组长度:");
  6. scanf("%d", &n);
  7. int array[n];
  8. for (int i = 0; i < n; i++)
  9. array[i] = i + 1;
  10. for (int i = 0; i < n; i++)
  11. printf("%d ", array[i]);
  12. printf("\n");
  13. return 0;
  14. }

2 可变长数组的使用(续1)

2.1 问题

输入某班同学的考试成绩,并保存在数组中,然后计算总分、平均分、最高分和最低分。注意: 需要先输入学生人数,使用可变长数组。

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:可变长数组的使用(续1)

代码如下所示:


         
         
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n;
  5. printf("请输入班级学生人数:");
  6. scanf("%d", &n);
  7. int score[n];
  8. for (int i = 0; i < n; i++)
  9. {
  10. printf("第%d个成绩:", i + 1);
  11. scanf("%d", &score[i]);
  12. }
  13. int sum = 0;
  14. for (int i = 0; i < n; i++)
  15. sum += score[i];
  16. printf ("总分:%d\n", sum);
  17. printf ("平均分:%f\n", (float)sum / n);
  18. return 0;
  19. }

上述代码中,以下代码:


         
         
  1. int n;
  2. printf("请输入班级学生人数:");
  3. scanf("%d", &n);

首先,定义一个整型变量n,用于存储输入的学生人数。

然后,使用函数printf提示输入学生人数。

最后,使用函数scanf输入一个学生人数到变量n中。

上述代码中,以下代码:


         
         
  1. int score[n];

定义一个整型数组,数组的长度由整型变量n通过函数scanf动态输入决定。

上述代码中,以下代码:


         
         
  1. for (int i = 0; i < n; i++)
  2. {
  3. printf("第%d个成绩:", i + 1);
  4. scanf("%d", &score[i]);
  5. }

设置循环,逐个输入每个学生的成绩。

上述代码中,以下代码:


         
         
  1. int sum = 0;

定义整型变量sum,并初始化为0,用于存储班级学生总成绩。

上述代码中,以下代码:


         
         
  1. for (int i = 0; i < n; i++)
  2. sum += score[i];

设置循环,对每个学生的成绩进行累加,计算总成绩。

上述代码中,以下代码:


         
         
  1. printf ("总分:%d\n", sum);
  2. printf ("平均分:%f\n", (float)sum / n);

使用函数printf输出班级学生总成绩和平均分。

2.3 完整代码

本案例的完整代码如下所示:


         
         
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n;
  5. printf("请输入班级学生人数:");
  6. scanf("%d", &n);
  7. int score[n];
  8. for (int i = 0; i < n; i++)
  9. {
  10. printf("第%d个成绩:", i + 1);
  11. scanf("%d", &score[i]);
  12. }
  13. int sum = 0;
  14. for (int i = 0; i < n; i++)
  15. sum += score[i];
  16. printf ("总分:%d\n", sum);
  17. printf ("平均分:%f\n", (float)sum / n);
  18. return 0;
  19. }

3 二维数组的使用

3.1 问题

声明和初始化一个二维数组,并打印所有元素的值。

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:二维数组的使用

代码如下所示:


         
         
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[3][4] = {{10, 11, 12, 13}, {20, 21, 22, 23}, {30, 31, 32, 33}};
  5. for (int i = 0; i < 3; i++)
  6. {
  7. for(int j = 0; j < 4; j++)
  8. printf("%d ", array[i][j]);
  9. printf("\n");
  10. }
  11. return 0;
  12. }

上述代码中,以下代码:


         
         
  1. int array[3][4] = {{10, 11, 12, 13}, {20, 21, 22, 23}, {30, 31, 32, 33}};

定义了一个二维数组array,该数组的第一维长度为3,第二位长度为4,共有12个数组元素。定义完成之后,对数组array进行了初始化。

上述代码中,以下代码:


         
         
  1. for (int i = 0; i < 3; i++)
  2. {
  3. for(int j = 0; j < 4; j++)
  4. printf("%d ", array[i][j]);
  5. printf("\n");
  6. }

设置双重循环,打印输出二维数组内容,外循环用于控制数组的第一维,内层循环用于控制数组的第二维。

3.3 完整代码

本案例的完整代码如下所示:


         
         
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[3][4] = {{10, 11, 12, 13}, {20, 21, 22, 23}, {30, 31, 32, 33}};
  5. for (int i = 0; i < 3; i++)
  6. {
  7. for(int j = 0; j < 4; j++)
  8. printf("%d ", array[i][j]);
  9. printf("\n");
  10. }
  11. return 0;
  12. }

4 二维数组的使用(续1)

4.1 问题

定义两个3*3的二维数组,用第一个的行乘以第二个的列,得到新的二维数组并打印。

4.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:二维数组的使用(续1)

代码如下所示:


         
         
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  5. int array1[3][3] = {{10, 11, 12}, {13, 14, 15}, {16, 17, 18}};
  6. for (int i = 0; i < 3; i++)
  7. for (int j = 0; j < 3; j++)
  8. array[i][j] *= array1[j][i];
  9. for (int i = 0; i < 3; i++)
  10. {
  11. for (int j = 0; j < 3; j++)
  12. printf ("%d ", array[i][j]);
  13. printf("\n");
  14. }
  15. return 0;
  16. }

上述代码中,以下代码:


         
         
  1. int array[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  2. int array1[3][3] = {{10, 11, 12}, {13, 14, 15}, {16, 17, 18}};

定义了两个二维数组array和array1,数组的第一维长度为3,第二位长度也为3,共有9个数组元素。定义完成之后,对数组array和array1进行了初始化。

上述代码中,以下代码:


         
         
  1. for (int i = 0; i < 3; i++)
  2. for (int j = 0; j < 3; j++)
  3. array[i][j] *= array1[j][i];

设置双重循环,用数组array的行乘以数组array1的列,外循环分别用于控制数组array的第一维和数组array1的第二维,内层循环分别用于控制数组array的第二维和数组array1的第一维。

上述代码中,以下代码:


         
         
  1. for (int i = 0; i < 3; i++)
  2. {
  3. for (int j = 0; j < 3; j++)
  4. printf ("%d ", array[i][j]);
  5. printf("\n");
  6. }

设置双重循环,打印输出二维数组array的内容,外循环用于控制数组的第一维,内层循环用于控制数组的第二维。

4.3 完整代码

本案例的完整代码如下所示:


         
         
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  5. int array1[3][3] = {{10, 11, 12}, {13, 14, 15}, {16, 17, 18}};
  6. for (int i = 0; i < 3; i++)
  7. for (int j = 0; j < 3; j++)
  8. array[i][j] *= array1[j][i];
  9. for (int i = 0; i < 3; i++)
  10. {
  11. for (int j = 0; j < 3; j++)
  12. printf ("%d ", array[i][j]);
  13. printf("\n");
  14. }
  15. return 0;
  16. }

5 二维数组的使用(续2)

5.1 问题

实现随机发牌(不带大王和小王)。

程序负责发一副标准纸牌,每张标准纸牌都在一个花色(梅花C、方块D、红桃H或黑桃S)和一个等级(2、3、4、5、6、7、8、9、T、J、Q、K、A) 。程序需要用户输入手里应该握有几张牌。

5.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义数组。

数组suit,用于保存扑克牌的花色S、H、D、C。

数组rank,用于保存扑克牌的13张牌A、2、3、4、5、6、7、8、9、T、J、Q、K。

代码如下:


         
         
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. char suit[4] = {'S', 'H', 'F', 'C'};
  7. char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
  8. return 0;
  9. }

步骤二:从控制台输入你要的张数。

需要定义一个变量count,用于保存输入的张数。

代码如下:


         
         
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. char suit[4] = {'S', 'H', 'F', 'C'};
  7. char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
  8. int count;
  9. printf("请输入你要的张数:");
  10. scanf("%d", &count);
  11. return 0;
  12. }

步骤三:随机生成一张牌。

需要定义一个变量s,用于保存随机生成的一种花色。

需要定义一个变量r,用于保存随机生成的一种牌型。

代码如下:


         
         
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. char suit[4] = {'S', 'H', 'F', 'C'};
  7. char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
  8. int count;
  9. printf("请输入你要的张数:");
  10. scanf("%d", &count);
  11. srand((unsigned)time(0));
  12. int s = rand() % 4;
  13. int r = rand() % 13;
  14. printf("%c%c ", suit[s], rank[r]);
  15. return 0;
  16. }

步骤四:构建循环,生成你要的张数。

代码如下:


         
         
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. char suit[4] = {'S', 'H', 'F', 'C'};
  7. char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
  8. int count;
  9. printf("请输入你要的张数:");
  10. scanf("%d", &count);
  11. srand((unsigned)time(0));
  12. for (int i = 0; i < count; i++)
  13. {
  14. int s = rand() % 4;
  15. int r = rand() % 13;
  16. printf("%c%c ", suit[s], rank[r]);
  17. }
  18. printf("\n");
  19. return 0;
  20. }

步骤五:滤掉重复的牌。

代码如下:


         
         
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. char suit[4] = {'S', 'H', 'F', 'C'};
  7. char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
  8. int count;
  9. printf("请输入你要的张数:");
  10. scanf("%d", &count);
  11. char oldS[count];
  12. char oldR[count];
  13. srand((unsigned)time(0));
  14. for (int i = 0; i < count; i++)
  15. {
  16. int s = rand() % 4;
  17. int r = rand() % 13;
  18. int j = 0, k = i;
  19. for (; j < i; j++)
  20. if (oldS[j] == suit[s] && oldR[j] == rank[r])
  21. {
  22. i--;
  23. break;
  24. }
  25. if (j == k)
  26. {
  27. printf("%c%c ", suit[s], rank[r]);
  28. oldS[i] = suit[s];
  29. oldR[i] = rank[r];
  30. }
  31. }
  32. printf("\n");
  33. return 0;
  34. }

上述代码中,以下代码:


         
         
  1. char oldS[count];
  2. char oldR[count];

定义两个数组用于保存已生成的花色和牌型。

上述代码中,以下代码:


         
         
  1. for (; j < i; j++)
  2. if (oldS[j] == suit[s] && oldR[j] == rank[r])
  3. {
  4. i--;
  5. break;
  6. }

在循环体内,嵌入一个内层循环,用于逐张与已经生成的牌进行对比,如果相同,则重新生成一张牌,如果不相同,则使用如下代码:


         
         
  1. if (j == k)
  2. {
  3. printf("%c%c ", suit[s], rank[r]);
  4. oldS[i] = suit[s];
  5. oldR[i] = rank[r];
  6. }

则将新生成的牌保存到数组中。

5.3 完整代码

本案例的完整代码如下所示:


         
         
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. char suit[4] = {'S', 'H', 'F', 'C'};
  7. char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
  8. int count;
  9. printf("请输入你要的张数:");
  10. scanf("%d", &count);
  11. char oldS[count];
  12. char oldR[count];
  13. srand((unsigned)time(0));
  14. for (int i = 0; i < count; i++)
  15. {
  16. int s = rand() % 4;
  17. int r = rand() % 13;
  18. int j = 0, k = i;
  19. for (; j < i; j++)
  20. if (oldS[j] == suit[s] && oldR[j] == rank[r])
  21. {
  22. i--;
  23. break;
  24. }
  25. if (j == k)
  26. {
  27. printf("%c%c ", suit[s], rank[r]);
  28. oldS[i] = suit[s];
  29. oldR[i] = rank[r];
  30. }
  31. }
  32. printf("\n");
  33. return 0;
  34. }






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值