嵌入式初学-C语言-练习四

一维数组练习题

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 }

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值