重新学习C语言的第二天

一、二维数组
①在一批有序数组中查找某数。
在数组a中的数组是按由小到大排序的:-12,1,2,10,40,80,90,91,98,99,
从键盘上输入一个数,判定该数是否在数组中,若在,输出所在序号。

#define M 10
#include<stdio.h>
int main()
{
	int a[M]={-12,1,2,10,40,80,90,91,98,99};
	int n,low,mid,high,found;
	low=0;
	high=M-1;
	found=0;
	printf("please input a number:\n");
	scanf("%d",&n);
#if(0)
	do
	{
		scanf("%d",&n);
	} while(n<a[0]||n>a[M-1]);
#endif
	while(scanf("%d",&n)!=1)
	{
		printf("Illegal input!!\nPlease input again!!\n");
		getchar();	
	}

	while(low<=high)
	{
		mid=(low+high)/2;
		if(n==a[mid])
		{
			found=1;
			break;
		}
		else if(n>a[mid])
		{
			low=mid+1;
		}
		else
		{
			high=mid-1;
		}
	}
	if(1==found)
	{
		printf("The index of %d is %d",n,mid+1);
	}
	else
	{
		printf("There is not %d",n);
	}
} 

二、初识函数

#include<stdio.h>
int main()
{
	int max(int x,int y);//形参
	int a,b,c;
	
	scanf("%d %d",&a,&b);
	c=max(a,b);//实参
	printf("Max is %d",c); 
}
int max(int x,int y)
{
	int z;
	z=x>y?x:y;
	return z;
} 

单向传递,只能由实参传给形参,不能由形参传给实参。
①实参列表包括多个实参,对实参求值的顺序并不是确定的,有的系统按自左至右顺序求实参的值,有的系统则按自有至左顺序,所以要测试一下你所用编译器的求值顺序。

#include<stdio.h>
int main()
{
	int f(int a,int b);
	int i=3,p;
	p=f(i,i++);
	printf("%d\n",p);
}
int f(int a,int b)
{
	int c;
	if(b>a)
	{
		c=1;
	}
	else if(a==b)
	{
		c=0;
	}
	else{
		c=-1;
	}
	return c;
}

②用递归的方式求n!。

#include<stdio.h>

long recursion(int n);        //定义递归函数

int main()
{
	int n;
	long result;
	printf("input a integer number:\n");
	scanf("%d",&n);
	result=recursion(n);
	printf("%d!= %ld\n",n,result); 
}
long recursion(int n)
{
	long temp_result;
	if(n<0)
	{
		printf("输入错误\n"); 
	}
	else if(n==0||n==1)
	{
		temp_result=1;
	} 
	else
	{
		temp_result=recursion(n-1)*n;
	}
	return temp_result;
}

递归算法时效率低下的算法!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章