重新學習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;
}

遞歸算法時效率低下的算法!!

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