C语言基础-数组,排序,函数

一、一维数组

1、一维数组定义

数据类型 变量名 = [元素个数]

int a[10];

//数组
	int a[10];
	int data;
	for(data = 0;data<10;data++)
	{
		a[data] = data * 10;
	}
	puts("数组初始化完成");
	for(data = 0;data<10;data++)
	{
		printf("%d ",a[data]);
	}

2、数组的初始化赋值keyi

int a[10] = {0,1,2,3,4,5,6,7,8,9};

可以只给前部分赋值,后面数据系统自动赋值为0

int a[10] = {1,2,3}

 在对全部数据赋值时,中括号内的元素个数可以省略不写(如下代码,5即可不写)

int a[] = {1,2,3,4,5}

3、sizeof关键字(不是函数!!!

计算数组内元素的个数,利用sizeof求出整个数组的内存空间大小和一个元素的内存空间大小,两数相除即可得出数组内元素的个数。

int size;
size = sizeof(array)/sizeof(array[0]);

4、练习

//数组初始化练习
//赋值并逆序输出
	int a[] = {0,1,2,3,4,5,6,7,8,9};
	int i;
	for(i = 9;i>=0;i--)
	{
		printf("%d ",a[i]);
	}

斐波那契数列

//斐波那契数列
//F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)
//1、1、2、3、5、8、13、21、34、……
//计算斐波那契数列前30个值
	int arr[30];
	int i;
	int arraySize;
	arraySize = sizeof(arr[30])/sizeof(arr[0]);
	arr[0] = 0;
	arr[1] = 1;
	
	for(i = 2;i<30;i++)
	{
		arr[i] = arr[i-1] + arr[i-2];
	}
	puts("计算完成!");
	for(i = 0;i<30;i++)
	{
		printf("%d ",arr[i]);
	}

冒泡排序

C语言基础-数组,排序,函数_第1张图片

//冒泡排序
	int array[] = {23,4,5,2,99,29};
	int i;
	int j;
	int tmp;
	int size;
	size = sizeof(array)/sizeof(array[0]);
	
	for(i = 0;iarray[j+1])     //从大到小为array[j]

简单排序法

C语言基础-数组,排序,函数_第2张图片

    int array[] = {23,4,5,2,99,29};
	int i;
	int j;
	int tmp;
	int size;
	size = sizeof(array)/sizeof(array[0]);
	
	for(i = 0;i

二、二维数组

1、定义

类型说明符 数组名[ 常量表达式][ 常量表达式];

int a[3][4];

2、初始化

① 分行给二维数组赋初值

int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

②将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值

int a[3][4] = {1, 2, 3, 4,5, 6, 7, 8, 9, 10, 11, 12};

③只对部分元素赋初值。其余元素自动为 0。

int a[3][4] = {{1, 2}, {5}, {9}};
//对第一行的前两个元素赋值、第二行和第三行的第一个元素赋值

④可以省略行号,但是不可以省略列号

int[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}   //正确
int[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}   //正确
int[3][] = {1,2,3,4,5,6,7,8,9,10,11,12}   //错误

3、二维数组的练习

//求二维数组中的最大值,并显示其行列
	int i;
	int j;
	int a;
	int b;
	int arr[3][4] = {23,43,1,23,45,56,44,88,78,56,12,65};
	int max;
	max = arr[0][0];
	
	//遍历一下
	for(i =0;i<3;i++)
	{
		for(j = 0;j<4;j++)
		{
			printf("%d ",arr[i][j]);
		}
		printf("\n");
	}
	//找最大
	for(i =0;i<3;i++)
	{
		for(j = 0;j<4;j++)
		{
			if(max

三、函数

先定义后使用

三要素:函数名(体现功能)、参数列表、返回值

函数体:执行的功能

—定义无参数函数

void printWelcome()
{
    printf("欢迎");
}

—定义有参数函数

#include 

int getDate(int a)  //形式参数,需要包含变量类型,变量名
{
    int b;
    b = a - 1;
    return b;
}

int main()
{	
	int x;
	int y;
	printf("请输入一个数:");
	scanf("%d",&x);
	y = getDate(x);
	printf("%d",y);
}

—形式参数与实际参数

        数值一样,但是地址不一样

—局部变量

        生命周期,被调用时才为形式参数申请内存,调用结束,内存被系统释放

练习

求两数中最大数

#include 

int getMax(int a,int b)  //形式参数,需要包含变量类型,变量名
{
    if(a>b)
	{
		return a;
	}
	else if(ab)?a:b;
	else
	{
		printf("两数相等!");
	}
}

int main()
{	
	int x;
	int y;
	int z;
	printf("请输入第一个数:\n");
	scanf("%d",&x);
	printf("请输入第二个数:\n");
	scanf("%d",&y);
	z = getMax(x,y);
	printf("最大的数为:%d",z);
}

 函数的递归与嵌套

求n!

#include 
int getJieCheng(int a)  
{	

	int jieCheng;
	
	if(a>=17)
	{
		printf("越界!");
		exit(-1);
	}
	
	if(a == 1)
	{
		jieCheng = 1;
	}
	else
	{
		jieCheng = a*getJieCheng(a-1);
	}
	return jieCheng;
}

int main()
{	
	int x;
	int y;
	printf("请输入一个数:\n");
	scanf("%d",&x);
	y = getJieCheng(x);
	printf("它的阶乘为:%d",y);
}

三、一维数组作为函数的参数,数组值传递的问题(难点)

通过例题总结容易犯错的点:

求每个班的平均值

1、首先定义三个方法函数,输入成绩,打印成绩,计算平均值

      需要注意的地方有:

       -参数列表中数组传递的是地址,并非具体数据

       -函数返回值是什么类型,并不是所有的都是void

       -由整数赋值给小数时,需要强转,强转类型写在括号内

2、主函数

      先创两个数组代表班级,并指明人数;

      定义两个浮点数变量用于后续接收平均值;

      求每个数组的元素个数;

      调用【输入成绩】函数;

      调用【打印成绩】函数;

      调用【计算平均值】函数;赋值给两个浮点型变量;

      打印输出每个班级的平均数;

#include 

void inarr(int arry[],int len)
{
	int i;
	for(i = 0;i

 四、二维数组作为函数的参数

注意:

函数参数列表中二维数组必须要写列数,行数可以不写

#include 

void printArray(int arr[][3],int hang,int lie)
{
	int i;
	int j;
	for(i = 0;i

五、全局变量(外部)与局部变量

全局变量:放在所有函数之前;(编程便捷,但是有风险,所有函数都可以操作,多线程)

六、练习

1、输入10个数,求最大值及其下标

#include 

void in(int arr[],int l)
{
	int i;
	printf("请输入10个数:\n");
	for(i =0;i

2、封装冒泡排序的函数

#include 

void in(int arr[],int l)
{
	int i;
	printf("请输入列表:\n");
	for(i =0;iarr[j+1])
			{
				tmp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;
			}
		}
	}
	
	for(i =0;i

3、封装选择排序的函数

#include 

void in(int arr[],int l)
{
	int i;
	printf("请输入列表:\n");
	for(i =0;iarr[j])
			{
				tmp = arr[i];
				arr[i] = arr[j];
				arr[j] = tmp;
			}
		}
	}
	
	for(i =0;i

你可能感兴趣的:(C语言,c语言,算法,数据结构)