学习内容:
5、数组
学习时间:
2020年10月6日18:30-19:10学习产出:
/*
数组
数组的概念
一维数组
一维数组的定义与初始化
定义方式
类型说明符 数组名[常量表达式]
一维数组的引用
引用方式
数组名[下标]
一维数组的常见操作
数组的遍历
数值的最值
数组的排序
选择排序法
选择排序在每一趟过程中从待排序记录中选择出最大(小)的元素,依次放在数组的最前或最后端,来实现数组的排序
冒泡排序法
在冒泡排序的过程中,不断地比较数组中相邻的两个元素,较小者向上浮,较大者向下沉,整个过程和水中汽水上升的原理相似
插入排序法
每一步将一个待排序元素插入到已经排序的元素中的适当位置,知道全部插入完毕
二分查找法
对于一个有序排列的数组,如果查找某一个元素,我们通常用二分法查找法,又称为折半查找
二维数组
二维数组的定义与初始化
语法格式
类型说明符 数组名[常量表达式1][常量表达式2]
初始化二维数组的方式
按行给二维数组赋值
将所有的数组元素按行顺序写在一个大括号内
对部分数组元素赋初值
对全部数组元素赋初值
二维数组的引用
语法格式
数组名[下标][下标]
二维数组的应用
扩展内容:多维数组
语法格式
数组类型修饰符 数组名[n1][n2][n3]....
数组作为函数参数
在程序中,为了方便对数组的操作,经常会定义一些操作数组的功能函数,这些函数往往会将数组作为函数参数
进阶案例-斐波那契数列
进阶案例-打印杨辉三角形
*/
//相关练习
/*
1、给你一个数组int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
请你(1)正序输出(2)逆序输出。
*/
int main()
{
int a[]={1,2,3,4,5,6,7,8,9};
int i=0;
printf("正序输出为");
for (i=0;i<=8;i++)
{
printf(" %d",a[i]);
}
printf("\n逆序输出为");
for (i=8;i>=0;i--)
{
printf(" %d",a[i]);
}
return 0;
}
/*
2、从键盘上读入10个整数,存入整型数组a中,然后逆序输出这10个整数。
*/
{
int i=0;
int a[10];
printf("请输入10个整数\n");
for (i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n逆序输出为");
for (i=9;i>0;i--)
{
printf(" x[%d]:%d",i,a[i]);
}
return 0;
}
/*
3、定义一个整型数组int a[]={11,12,53,65,88,91,32};,编写程序找出数组中的最大和最小的数。
*/
#include<stdio.h>
int main()
{
int a[]={11,12,53,65,88,91,32};
int i,max=a[0],min=a[0];
for(i=1;i<7;i++)
{
if(a[i]>max)max=a[i];
if(a[i]<min)min=a[i];
}
printf("最大值是%d,最小值为%d\n",max,min);
return 0;
}
/*
4、编写程序,检查输入的数中是否有重复出现的数字。
*/
#include<stdio.h>
int main()
{
int a[10]={0};
int i,m,flag=0;
printf("请输入一个整数:");
scanf("%d",&m);
do{
a[m%10]++;
m=m/10;
}while(m);
for(i=0;i<=9;i++){
if(a[i]>1){
flag=1;break;
}
}
if(flag==1)printf("有重复的数字");
else printf("没有重复的数字");
return 0;
}
/*
进阶案例-斐波那契数列
*/
#include<stdio.h>
int main()
{
int a[20];
int i,n,k=0;
for(i=2;i<20;i++){
a[0]=1;
a[1]=1;
a[i]=a[i-1]+a[i-2];
}
for(i=0;i<20;i++,k++){
if(i<10)printf("a[%d]=%-9d",i,a[i]);
else printf("a[%d]=%-8d",i,a[i]);
if((i+1)%5==0)printf("\n");
}
return 0;
}