定义和初始化数组
问题
删除数组中的某个元素,并将后续元素顶上来。
步骤
实现此案例需要按照如下步骤进行。
步骤一:定义和初始化数组
代码如下所示:
- #include <stdio.h>
- int main()
- {
- int array[10];
- for (int i = 0; i < 10; i++)
- scanf("%d", &array[i]);
- int num;
- printf("请输入要删除的元素:");
- scanf("%d", &num);
- int i;
- for (i = 0; i < 10 ; i++)
- if (array[i] == num)
- break;
- for (; i < 9; i++)
- array[i] = array[i + 1];
- for (i = 0; i < 9; i++)
- printf("%d ", array[i]);
- printf ("\n");
- return 0;
- }
上述代码中,以下代码:
- int array[10];
- for (int i = 0; i < 10; i++)
- scanf("%d", &array[i]);
定义一个整型数组array,包含10个元素。并使用循环对元素赋值的方式完成对数组array的初始化。
上述代码中,以下代码:
- int num;
- printf("请输入要删除的元素:");
- scanf("%d", &num);
首先,定义一个整型变量num,用于存储输入的一个要删除的元素。
然后,使用函数printf提示输入的一个要删除的元素。
最后,使用函数scanf输入的要删除的元素到变量num中。
上述代码中,以下代码:
- int i;
- for (i = 0; i < 10 ; i++)
- if (array[i] == num)
- break;
设置一个循环,逐个元素array[i]与输入的要删除的元素num对比,找到要删除的元素在数组中的位置后退出循环。
上述代码中,以下代码:
- for (; i < 9; i++)
- array[i] = array[i + 1];
将找到的要删除元素的位置的下一个元素赋值到其中,实现删除的功能。设置循环,依次赋值,实现将后续元素顶上来的功能。
上述代码中,以下代码:
- for (i = 0; i < 9; i++)
- printf("%d ", array[i]);
- printf ("\n");
设置一个循环,逐个打印数组中剩余的元素,验证删除效果。
完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main()
- {
- int array[10];
- for (int i = 0; i < 10; i++)
- scanf("%d", &array[i]);
- int num;
- printf("请输入要删除的元素:");
- scanf("%d", &num);
- int i;
- for (i = 0; i < 10 ; i++)
- if (array[i] == num)
- break;
- for (; i < 9; i++)
- array[i] = array[i + 1];
- for (i = 0; i < 9; i++)
- printf("%d ", array[i]);
- printf ("\n");
- return 0;
- }
数组的长度
问题
删除数组中的某个元素,并将后续元素顶上来。
步骤
实现此案例需要按照如下步骤进行。
步骤一:数组的长度
代码如下所示:
- #include <stdio.h>
- int main()
- {
- int array[10];
- for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
- scanf("%d", &array[i]);
- for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
- printf("%d ", array[i]);
- printf("\n");
- return 0;
- }
上述代码中,以下代码:
- int array[10];
定义一个整型数组array,包含10个元素。
上述代码中,以下代码:
- for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
- scanf("%d", &array[i]);
使用循环对元素赋值的方式完成对数组array的初始化。数组的长度是使用数组所占的字节数sizeof(array)除以数组第一个元素所占的字节数sizeof(array[0])得到的。
上述代码中,以下代码:
- for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
- printf("%d ", array[i]);
- printf("\n");
设置循环逐个输出数组的每一个元素。
完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main()
- {
- int array[10];
- for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
- scanf("%d", &array[i]);
- for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
- printf("%d ", array[i]);
- printf("\n");
- return 0;
- }
1 可变长数组的使用
1.1 问题
定义一个变量n,然后用n定义和使用可变长数组。
1.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:可变长数组的使用
代码如下所示:
- #include <stdio.h>
- int main()
- {
- int n;
- printf("请输入数组长度:");
- scanf("%d", &n);
- int array[n];
- for (int i = 0; i < n; i++)
- array[i] = i + 1;
- for (int i = 0; i < n; i++)
- printf("%d ", array[i]);
- printf("\n");
- return 0;
- }
上述代码中,以下代码:
- int n;
- printf("请输入数组长度:");
- scanf("%d", &n);
首先,定义一个整型变量n,用于存储输入的数组长度。
然后,使用函数printf提示输入数组长度。
最后,使用函数scanf输入一个数组长度到变量n中。
上述代码中,以下代码:
- int array[n];
定义一个整型数组,数组的长度由整型变量n通过函数scanf动态输入决定。
上述代码中,以下代码:
- for (int i = 0; i < n; i++)
- array[i] = i + 1;
将数组array中的元素逐个赋初值。
上述代码中,以下代码:
- for (int i = 0; i < n; i++)
- printf("%d ", array[i]);
- printf("\n");
逐个输出数组array中的元素。
1.3 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main()
- {
- int n;
- printf("请输入数组长度:");
- scanf("%d", &n);
- int array[n];
- for (int i = 0; i < n; i++)
- array[i] = i + 1;
- for (int i = 0; i < n; i++)
- printf("%d ", array[i]);
- printf("\n");
- return 0;
- }
2 可变长数组的使用(续1)
2.1 问题
输入某班同学的考试成绩,并保存在数组中,然后计算总分、平均分、最高分和最低分。注意: 需要先输入学生人数,使用可变长数组。
2.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:可变长数组的使用(续1)
代码如下所示:
- #include <stdio.h>
- int main()
- {
- int n;
- printf("请输入班级学生人数:");
- scanf("%d", &n);
- int score[n];
- for (int i = 0; i < n; i++)
- {
- printf("第%d个成绩:", i + 1);
- scanf("%d", &score[i]);
- }
- int sum = 0;
- for (int i = 0; i < n; i++)
- sum += score[i];
- printf ("总分:%d\n", sum);
- printf ("平均分:%f\n", (float)sum / n);
- return 0;
- }
上述代码中,以下代码:
- int n;
- printf("请输入班级学生人数:");
- scanf("%d", &n);
首先,定义一个整型变量n,用于存储输入的学生人数。
然后,使用函数printf提示输入学生人数。
最后,使用函数scanf输入一个学生人数到变量n中。
上述代码中,以下代码:
- int score[n];
定义一个整型数组,数组的长度由整型变量n通过函数scanf动态输入决定。
上述代码中,以下代码:
- for (int i = 0; i < n; i++)
- {
- printf("第%d个成绩:", i + 1);
- scanf("%d", &score[i]);
- }
设置循环,逐个输入每个学生的成绩。
上述代码中,以下代码:
- int sum = 0;
定义整型变量sum,并初始化为0,用于存储班级学生总成绩。
上述代码中,以下代码:
- for (int i = 0; i < n; i++)
- sum += score[i];
设置循环,对每个学生的成绩进行累加,计算总成绩。
上述代码中,以下代码:
- printf ("总分:%d\n", sum);
- printf ("平均分:%f\n", (float)sum / n);
使用函数printf输出班级学生总成绩和平均分。
2.3 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main()
- {
- int n;
- printf("请输入班级学生人数:");
- scanf("%d", &n);
- int score[n];
- for (int i = 0; i < n; i++)
- {
- printf("第%d个成绩:", i + 1);
- scanf("%d", &score[i]);
- }
- int sum = 0;
- for (int i = 0; i < n; i++)
- sum += score[i];
- printf ("总分:%d\n", sum);
- printf ("平均分:%f\n", (float)sum / n);
- return 0;
- }
3 二维数组的使用
3.1 问题
声明和初始化一个二维数组,并打印所有元素的值。
3.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:二维数组的使用
代码如下所示:
- #include <stdio.h>
- int main()
- {
- int array[3][4] = {{10, 11, 12, 13}, {20, 21, 22, 23}, {30, 31, 32, 33}};
- for (int i = 0; i < 3; i++)
- {
- for(int j = 0; j < 4; j++)
- printf("%d ", array[i][j]);
- printf("\n");
- }
- return 0;
- }
上述代码中,以下代码:
- int array[3][4] = {{10, 11, 12, 13}, {20, 21, 22, 23}, {30, 31, 32, 33}};
定义了一个二维数组array,该数组的第一维长度为3,第二位长度为4,共有12个数组元素。定义完成之后,对数组array进行了初始化。
上述代码中,以下代码:
- for (int i = 0; i < 3; i++)
- {
- for(int j = 0; j < 4; j++)
- printf("%d ", array[i][j]);
- printf("\n");
- }
设置双重循环,打印输出二维数组内容,外循环用于控制数组的第一维,内层循环用于控制数组的第二维。
3.3 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main()
- {
- int array[3][4] = {{10, 11, 12, 13}, {20, 21, 22, 23}, {30, 31, 32, 33}};
- for (int i = 0; i < 3; i++)
- {
- for(int j = 0; j < 4; j++)
- printf("%d ", array[i][j]);
- printf("\n");
- }
- return 0;
- }
4 二维数组的使用(续1)
4.1 问题
定义两个3*3的二维数组,用第一个的行乘以第二个的列,得到新的二维数组并打印。
4.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:二维数组的使用(续1)
代码如下所示:
- #include <stdio.h>
- int main()
- {
- int array[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
- int array1[3][3] = {{10, 11, 12}, {13, 14, 15}, {16, 17, 18}};
- for (int i = 0; i < 3; i++)
- for (int j = 0; j < 3; j++)
- array[i][j] *= array1[j][i];
- for (int i = 0; i < 3; i++)
- {
- for (int j = 0; j < 3; j++)
- printf ("%d ", array[i][j]);
- printf("\n");
- }
- return 0;
- }
上述代码中,以下代码:
- int array[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
- int array1[3][3] = {{10, 11, 12}, {13, 14, 15}, {16, 17, 18}};
定义了两个二维数组array和array1,数组的第一维长度为3,第二位长度也为3,共有9个数组元素。定义完成之后,对数组array和array1进行了初始化。
上述代码中,以下代码:
- for (int i = 0; i < 3; i++)
- for (int j = 0; j < 3; j++)
- array[i][j] *= array1[j][i];
设置双重循环,用数组array的行乘以数组array1的列,外循环分别用于控制数组array的第一维和数组array1的第二维,内层循环分别用于控制数组array的第二维和数组array1的第一维。
上述代码中,以下代码:
- for (int i = 0; i < 3; i++)
- {
- for (int j = 0; j < 3; j++)
- printf ("%d ", array[i][j]);
- printf("\n");
- }
设置双重循环,打印输出二维数组array的内容,外循环用于控制数组的第一维,内层循环用于控制数组的第二维。
4.3 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main()
- {
- int array[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
- int array1[3][3] = {{10, 11, 12}, {13, 14, 15}, {16, 17, 18}};
- for (int i = 0; i < 3; i++)
- for (int j = 0; j < 3; j++)
- array[i][j] *= array1[j][i];
- for (int i = 0; i < 3; i++)
- {
- for (int j = 0; j < 3; j++)
- printf ("%d ", array[i][j]);
- printf("\n");
- }
- return 0;
- }
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。
代码如下:
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- int main()
- {
- char suit[4] = {'S', 'H', 'F', 'C'};
- char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
- return 0;
- }
步骤二:从控制台输入你要的张数。
需要定义一个变量count,用于保存输入的张数。
代码如下:
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- int main()
- {
- char suit[4] = {'S', 'H', 'F', 'C'};
- char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
- int count;
- printf("请输入你要的张数:");
- scanf("%d", &count);
- return 0;
- }
步骤三:随机生成一张牌。
需要定义一个变量s,用于保存随机生成的一种花色。
需要定义一个变量r,用于保存随机生成的一种牌型。
代码如下:
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- int main()
- {
- char suit[4] = {'S', 'H', 'F', 'C'};
- char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
- int count;
- printf("请输入你要的张数:");
- scanf("%d", &count);
- srand((unsigned)time(0));
- int s = rand() % 4;
- int r = rand() % 13;
- printf("%c%c ", suit[s], rank[r]);
- return 0;
- }
步骤四:构建循环,生成你要的张数。
代码如下:
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- int main()
- {
- char suit[4] = {'S', 'H', 'F', 'C'};
- char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
- int count;
- printf("请输入你要的张数:");
- scanf("%d", &count);
- srand((unsigned)time(0));
- for (int i = 0; i < count; i++)
- {
- int s = rand() % 4;
- int r = rand() % 13;
- printf("%c%c ", suit[s], rank[r]);
- }
- printf("\n");
- return 0;
- }
步骤五:滤掉重复的牌。
代码如下:
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- int main()
- {
- char suit[4] = {'S', 'H', 'F', 'C'};
- char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
- int count;
- printf("请输入你要的张数:");
- scanf("%d", &count);
- char oldS[count];
- char oldR[count];
- srand((unsigned)time(0));
- for (int i = 0; i < count; i++)
- {
- int s = rand() % 4;
- int r = rand() % 13;
- int j = 0, k = i;
- for (; j < i; j++)
- if (oldS[j] == suit[s] && oldR[j] == rank[r])
- {
- i--;
- break;
- }
- if (j == k)
- {
- printf("%c%c ", suit[s], rank[r]);
- oldS[i] = suit[s];
- oldR[i] = rank[r];
- }
- }
- printf("\n");
- return 0;
- }
上述代码中,以下代码:
- char oldS[count];
- char oldR[count];
定义两个数组用于保存已生成的花色和牌型。
上述代码中,以下代码:
- for (; j < i; j++)
- if (oldS[j] == suit[s] && oldR[j] == rank[r])
- {
- i--;
- break;
- }
在循环体内,嵌入一个内层循环,用于逐张与已经生成的牌进行对比,如果相同,则重新生成一张牌,如果不相同,则使用如下代码:
- if (j == k)
- {
- printf("%c%c ", suit[s], rank[r]);
- oldS[i] = suit[s];
- oldR[i] = rank[r];
- }
则将新生成的牌保存到数组中。
5.3 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- int main()
- {
- char suit[4] = {'S', 'H', 'F', 'C'};
- char rank[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
- int count;
- printf("请输入你要的张数:");
- scanf("%d", &count);
- char oldS[count];
- char oldR[count];
- srand((unsigned)time(0));
- for (int i = 0; i < count; i++)
- {
- int s = rand() % 4;
- int r = rand() % 13;
- int j = 0, k = i;
- for (; j < i; j++)
- if (oldS[j] == suit[s] && oldR[j] == rank[r])
- {
- i--;
- break;
- }
- if (j == k)
- {
- printf("%c%c ", suit[s], rank[r]);
- oldS[i] = suit[s];
- oldR[i] = rank[r];
- }
- }
- printf("\n");
- return 0;
- }