一维数组练习题
1.键盘录入一组数列,利用冒泡排序将数据由大到小排序
代码:
1 /*
2 需求:一维数组案例-冒泡排序
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 //创建一个数组,用来存储排序的数列
9 int arr[10];
10 int i,j,t; //i:比较轮数,j:每一轮比较的次数,t:临时变量,用来比较时交换数据
11
12 printf("请输入10个测试整数:\n");
13
14 //计算数组大小
15 int length = sizeof(arr) / sizeof(int); //等价于sizeof[0]
16
17 //通过循环录入数据
18 for(i = 0;i < length;i++)
19 {
20 scanf("%d,",&arr[i]);
21 }
22
23 printf("\n");
24
25 //对数组arr使用冒泡排序法进行排序(使用的标准冒泡排序法)
26
27 //外层循环:控制比较的轮数,因为有10个数,所以需要比较length-1轮
28 for(i = 0;i < length-1;i++)
29 {
30 //内层循环:每一轮中比较的次数,每一轮比较的次数为length - 1 - i
31 for(j = 0;j < length - 1 - i;j++)
32 {
33 //相邻的两个数进行比较,满足条件交换位置
34 if(arr[j] < arr[j + 1])
35 {
36 t = arr[j];
37 arr[j] = arr[j + 1];
38 arr[j + 1] = t;
39 }
40 }
41 }
42
43 printf("冒泡排序后遍历数组:\n");
44
45 for(i = 0;i < length;i++)
46 {
47 printf("%4d",arr[i]);
48 }
49
50 printf("\n");
51
52 return 0;
53 }
54
结果:
2.从键盘输入年、月、日,计算并输出该日是该年第几天
代码:
1 /*
2 需求:一维数组案例-从键盘输入年/月/日,计算并输出该日是该年的第几天
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 //定义变量:年,月,日,统计天数,循环变量,用来遍历当前月前面的月份
9 int year,month,day,sum,k;
10 //定义一个数组,用来存放1~12月每月的天数
11 int t[] = {31,0,31,30,31,30,31,31,30,31,30,31}; //柔性数组
12
13 printf("请输入年份月份和哪天:\n");
14
15 scanf("%d%d%d",&year,&month,&day);
16
17 //因为二月比较特殊存在29和28天,所以需要进行平年润年判断
18 if(year % 4 == 0 && year % 100 != 0 || year % 400 ==0)
19 {
20 t[1] = 29; //润年2月29天
21 }
22 else
23 {
24 t[1] = 28; //平年2月28天
25 }
26
27 sum = day; //默认记录最后一个月的天数
28
29 //这是该年的第几天
30 for(k = 0;k < month - 1;k++)
31 {
32 sum += t[k]; //叠加前几个月的天数
33 }
34
35 printf("%d月%d日是%d年的第%d天\n",month,day,year,sum);
36
37 return 0;
38 }
39
结果:
3.键盘录入一组数列,求最大数、最小数、均值
代码:
1 /*
2 需求:键盘录入一组数列,求最大数、最小数、均值
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 int arr[5];
9 int i,j;
10 int max = 0,min = 0;
11 double sum = 0.0;
12
13 printf("请输入5个数列:\n");
14
15 int length = sizeof(arr) / sizeof(int); //计算数组大小
16
17 for(i = 0;i < length;i++) //通过循环录入数据
18 {
19 scanf("%d",&arr[i]);
20 }
21
22 min = arr[0];
23
24 for(j = 0;j < length;j++)
25 {
26 sum += arr[j];
27
28 if(arr[j] > max)
29 {
30 max = arr[j];
31 }
32 else if(arr[j] < min)
33 {
34 min = arr[j];
35 }
36
37 }
38
39 sum = sum / j;
40
41 printf("最大数为:%d\n",max);
42 printf("最小值为:%d\n",min);
43 printf("平均值为:%.3f\n",sum);
44
45 return 0;
46 }
结果:
4.从键盘录入一组数列,判断是否是回文,举例:12321,abba,121
代码:
1 /*
2 需求:判断一组数列是不是回文数
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 int i,j;
9 int num;
10 int arr[5];
11
12 printf("请输入五组整数: \n");
13
14 int length = sizeof(arr) / sizeof(int);
15
16 for(i = 0;i < length;i++)
17 {
18 scanf("%d", &arr[i]);
19 }
20
21 for(i = 0;i < length;i++)
22 {
23 num = 0;
24 j = arr[i];
25 while (j != 0)
26 {
27 num = num * 10 + j % 10; //实现反转
28 j /= 10;
29 }
30
31 if (arr[i] == num)
32 {
33 printf("%d 是回文数\n", arr[i]); //如果输出的和输入的数相同
34 }
35 else
36 {
37 printf("%d 不是回文数\n", arr[i]);
38 }
39 }
40
41 return 0;
42 }
结果:
5.用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值
代码:
1 /*
2 需求:用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 int a;
9 int arr[10] = {1,2,3,4,5,6,7,8,9,0};
10
11 int length = sizeof(arr) / sizeof(int);
12
13 printf("请输入一个数组中存在的数:");
14 scanf("%d",&a);
15
16 for(int i = 0;i < length;i++)
17 {
18 if(a == arr[i])
19 {
20 printf("您输入的数是下标为%d的数组元素",i);
21 }
22 }
23 printf("\n");
24
25
26 return 0;
27 }
结果:
6.通过键盘输入 10 个学员成绩
'1.输出不及格学员的成绩和下标2.求最高分的下标值 3.求最低成绩的下标值 4.求总成绩及平均成绩'
代码:
1 /**
2 * 需求:通过键盘输入 10 个学员成绩
3 * 输出不及格学员的成绩和下标
4 * 求最高分的下标值
5 * 求最低成绩的下标值
6 * 求总成绩及平均成绩
7 */
8 #include <stdio.h>
9
10 int main()
11 {
12 int fail,max = 0,min = 0,sum,a,b,i,j;
13 int arr[10];
14
15 printf("请输入十组整数: \n");
16
17 int length = sizeof(arr) / sizeof(int);
18
19 for(i = 0;i < length;i++)
20 {
21 scanf("%d", &arr[i]);
22 }
23
24 sum = 0;
25
26 for(j = 0;j < length;j++)
27 {
28 if(arr[j] < 60)
29 {
30 printf("不及格学生成绩为:%d,数组中下标为%d\n",arr[j],j);
31 }
32 if(arr[j] > max)
33 {
34 max = arr[j];
35 }
36 if(arr[j] < min)
37 {
38 min = arr[j];
39 }
40
41 sum += arr[j];
42 }
43
44 for(j = 0;j < length;j++)
45 {
46 if(max == arr[j])
47 {
48 a = j;
49 }
50 if(min == arr[j])
51 {
52 b = j;
53 }
54 }
55
56 double c = sum / 10.0;
57
58 printf("最高分为%d,数组中下标为%d\n",max,a);
59 printf("最低分为%d,数组中下标为%d\n",min,b);
60 printf("平均值为:%.3f\n",c);
61
62 return 0;
63 }
结果: