今日学习,
趁热打铁法。
1.计算n的阶乘;
阶乘的意思就是一个数从1为起始条件不断往后乘;例如3的阶乘就是1*2*3=6;
int main()
{
int n = 0;
int i = 0;
int ret = 1;
scanf("%d", n);
for(i=1;i<=n;i++)
{
ret = ret*i;
}
printf("%d\n", n);
return 0;
}
2.计算1!+2!+3!+......+10!的值
这里是计算1到10的阶乘,例如3!的意思就是3的阶乘
int main()
{
int n =0;
int i = 0;
int ret =1;
int sum = 0;
for(n=1;n<=10;n++) //我们需要算出阶乘相加的话只需要在原本的阶乘外边再嵌套一个循环语句就好;
{
ret=1; //这里要注意ret每次需要重新定义一次数值否则就会将上一次计算出的数值带入这次算出的数值里面;
for(i=1;i<=n;i++)
{
ret = ret*i;
}
sum = sum +ret;
}
return 0;
}
3.在一个有序数组中查找具体的某个数字你。编写int binsearch(int x, int [], int n);功能<=v[1]<=v[2]<=......<=v[n-1]的数组中查找x
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10}
int k = 7;
int i = 0;
int sz = sizeof(arr)/sizeof(arr[0]); //这里只要把整个数组的尺寸除以第一个下标的数组的值即为整个数组的大小;
for(i=0;i<=k;i++)
{
if(k == arr[i])
{
printf("下标:%d\n", i);
break; //这里的break代表的意思是如果上面的条件执行成功则跳出循环;
}
}
if( i == sz) //如果下标已经超过了字符总数那么就说明找到头也没找到我们需要找的数字;
{
printf("没找到下标”)
}
return 0;
}
上边那种方法在我们查找的时候,只能一个一个往后边找最坏的情况即从第一个数值一直找到最后一个数值;
大大影响了我们的效率;因此我们下面介绍另一种找数值的方法;(二分法/折中法);
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
int sz = sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = sz-1; //因为sizeof是从1开始计算的,而下标是从0开始计算地,所以下标这里要减1才是真正地下标值;
while(left<=right) //left下标必须是小于等于right下标地,采用二分法找数值时如果left<right那么就还没找完还在继续找,
//如果left=right那么就说明当前值就是我们要找的值,当此数组里没有我们要寻找的数值时,那么找完所有数值后就会出现left>right;
{
int mid =(left+right)/2;
if(arr[mid] > k)
{
right = mid -1;
}
else if(arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("找到了下标为%d\n", arr[mid]);
break;
}
}
if(left>right)
{
printf("找不到\n“);
}
return 0;
}