Day 10

1.动态生存周期: 局部变量。
2.静态生存周期: 全局变量, 和带 Static的静态局部变量。如(Static int i;)
3.全局变量和局部变量如果都只是定义,而没有赋初值,则系统会自动把全局变量初始化为0. 但不会初始化局部变量为0,局部变量在没有初始化的情况下是一个随机数。

4.全局及局部变量定义的一般规则:
(1)标识符必须先定义再使用。
(2)在同一作用域内不包含同名标识符。
(3)在没有包含关系的不同作用域内声明的同名标识符互不影响。
(4)在两个或两个以上具有包含关系的作用域内声明了同名标识符,则外层标识符在内层不可见。(就近原则)

5.auto int sum; 前面的 auto 是储存类别说明,一般都会省略这个自动储存类别标识,在新版的 C标准中将此问题都删掉了,
此处可以只是了解知道一下。

6.register int i = 10; //此处的意思是建议,编译器将变量放入到寄存器中。 如果此种写法则是不能对 i取地址的(&i),
此种定义无法取址,一般在试题中会出现。

7.extern 声明外部变量。

8.关于函数无非就是封装了,将平时完成某一功能的过程封装起来,以后想要使用时同一功能时只需要调用,以前写过的函数来完成即可。封装一个函数时要注意的是,此函数是否需要返回某种类型的值,即使不需要返回值也要声明函数为 void 类型。第二点要注意的就是函数的形参,形参的类型与以后调用时要赋予的实参类型要相同,形参与实参的个数也要相同。如果写的函数是操作数组的无论是操作一维数组还是二维数组,都要注意,函数的参数要有数组名和数组的长度。数组名其实也就是 数组首个元素的地址。



写一个数组的二分查找。

#include <stdio.h>
#include <string.h>

void bubbleSort(int a[], int len)  //一维数组的冒泡排序法
{
	int i, j;
	for(j = len - 1;j > 0;--j)
	{
		for(i = 0;i < j;++i)
		{
			if(a[i] > a[i + 1])
			{
				int t;
				t = a[i];
				a[i] = a[i + 1];
				a[i + 1] = t;
			}
		}
	}
}

void printArray(int a[], int len)   //打印一维数组
{
	int i;
	for(i = 0;i < len;++i)
	{
		printf("%d ,", a[i]);
	}
	puts("\b ");  //退格加一个空格覆盖掉逗号。
}

int find(int a[], int len, int n)
{
	bubbleSort(a, len);    //注意二分查找的条件是先要排序。
	int begin = 0;
	int end = len - 1;
	int mid;
	
	while(begin <= end)
	{
		mid = (begin + end) / 2;
		if(a[mid] > n)
		{
			end = mid - 1;
		}
		else if(a[mid] < n)
		{
			begin = mid + 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}

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

	if((index = find(a, sizeof(a) / sizeof(a[0]), 8)) >= 0)
	{
		printf("found! %d\n", a[index]);
	}
	else
	{
		printf("not found\n");
	}
//	bubbleSort(a, sizeof(a) / sizeof(a[0]));
//	printArray(a, sizeof(a) / sizeof(a[0]));
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值