1.输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩。
#include <stdio.h> #define N 100 int main() { int i,sum=0,max,min,fen,score[N],m,n,b=0; float average; printf("请输入学生的数量 "); scanf("%d",&n); sum=0; for(i=0;i<n;i++) { printf("请输入第%d个学生成绩 ",i); scanf("%d",&score[i]); sum=sum+score[i]; } average=(float)sum/n; printf("平均分为%.2f ",average); max=score[0]; for(i=0;i<n;i++) { if(max<=score[i]) { max=score[i]; m=i; } } for(i=0;i<n;i++) { if(max==score[i]) { printf("最大值为%d且%d学生成绩最高 ",max,m); } } min=score[0]; for(i=0;i<n;i++) { if(min>=score[i]) { min=score[i]; m=i; } } for(i=0;i<n;i++) { if(max==score[i]) { printf("最小值为%d且%d学生成绩最低 ",min,m); } } printf("请输入一个学生成绩 "); scanf("%d",&fen); for(i=0;i<n;i++) { if(fen==score[i]) { b++; printf("这是第%d个的学生成绩 ",i); } } printf("一共有%d个学生 ",b); return 0; }
总结:当输出数组下标的时候应该将下标赋值给一个定义的常量否则输出的最高成绩和最低成绩的下标会一样 还要注意代码的完善
2.现有一个有序正整数数组(从小到大排序),输入一个数,插入到数组中,要求插入后的数组仍然有序。对插入到最前、最后、中间位置三种情况进行验证。
#include <stdio.h> #define N 11 int main() { int arr[N]={1,3,5,7,9,11,13,15,17,19},num,i,m=10; printf("请输入一个数字 "); scanf("%d",&num); for(i=0;i<=N-1;i++) { if(num<arr[i]) { m=i; break; } } for(i=N-1;i>m;i--) { arr[i]=arr[i-1]; } arr[i]=num; for(i=0;i<N;i++) { printf("%d ",arr[i]); } printf(" "); return 0; }
总结:1.要注意数组的越界问题
2. 插入一个数字找到大于该数字的数字下标将该下标赋给一个常量,让大于该数字的所有数字都下移一位,空出一个位置将数字插入,要注意输出的时候也要用到循环
3.用数组实现火柴棍等式
#include <stdio.h> int main() { int huochai[10]={6,2,5,5,4,5,6,3,7,6}; int a,b,sum; for(a=0;a<=9;a++) for(b=0;b<9;b++) { sum=a+b; if(sum>9) { break; } if(huochai[a]+huochai[b]+huochai[sum]==12) { printf("%d+%d=%d ",a,b,sum); } } return 0; }
知识点总结:
1.数组定义时可以不初始化
2.访问数组元素时中括号中的下标是从0开始的,下标可以是非负的整型常量或非负整形数据表达式
3.数组长度不能是常量
4.一个数组元素实际上就是一个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算
5.数组不能作为一个整体参加数据运算,只能对单个数据进行运算
6.数组中存放的是一个地址常量,它代表整个数组的首地址
7.数组的使用离不开循环 不能直接输出数组名
8.写代码的时候可以使用#define N来定义常量