一、二维数组
①在一批有序数组中查找某数。
在数组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;
}
递归算法时效率低下的算法!!