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

一维数组练习题

1.键盘录入一组数列,利用冒泡排序将数据由大到小排序

代码:

cs 复制代码
  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.从键盘输入年、月、日,计算并输出该日是该年第几天

代码:

cs 复制代码
  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.键盘录入一组数列,求最大数、最小数、均值

代码:

cs 复制代码
  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

代码:

cs 复制代码
  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个整型数,通过键盘输入一个数,找出该数在数组中的下标值

代码:

cs 复制代码
  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.求总成绩及平均成绩'

代码:

cs 复制代码
  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 }

结果:

相关推荐
Theodore_102237 分钟前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou1 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
----云烟----3 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024063 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic3 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it3 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康3 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神4 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
搬砖的小码农_Sky4 小时前
C语言:数组
c语言·数据结构
宅小海4 小时前
scala String
大数据·开发语言·scala