一、二維數組
①在一批有序數組中查找某數。
在數組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;
}
遞歸算法時效率低下的算法!!