#include <stdio.h>
int numbers[] = { 0, 2, 5, 8, 12, 15, 23, 35, 60, 65 };
int count = 10;
int binary_search(int data, int begin, int end)
{
if (end <= begin)
return -1;
int middle = (end + begin) / 2;
if (numbers[middle] == data)
{
return middle;
}
else if (numbers[middle] > data)
{
return binary_search(data, begin, middle);
}
else
{
return binary_search(data, middle + 1, end);
}
}
int main(void)
{
int data;
int index;
printf("Please enter an integer to search: ");
scanf("%d", &data);
index = binary_search(data, 0, count);
if (index > -1)
{
printf("Found it at index: %d\n", index);
}
else
{
printf("Sorry, did not find it.\n");
}
return 0;
}
// Output
Please enter an integer to search: 0
Found it at index: 0
Please enter an integer to search: 12
Found it at index: 4
Please enter an integer to search: 60
Found it at index: 8
Please enter an integer to search: 100
Sorry, did not find it.
代码分别如下,如有帮助,请采纳一下,谢谢。
//第四题代码
#include <stdio.h>
#include <string>
int main()
{
int nmb = 0;
printf("请输入学生人数:");
scanf("%d",&nmb);
float* bufYw = new float[nmb];
float* bufSx = new float[nmb];
float* bufYy = new float[nmb];
float* bufAvg = new float[nmb]; //每个学生的平均成绩
float* bufSum = new float[nmb]; //每个学生的总成绩
printf("请输入语文、数学、英语成绩:\n");
for (int i = 0; i < nmb; i++)
{
printf("请输入学生%d的成绩:",i+1);
scanf("%f,%f,%f",&bufYw[i],&bufSx[i],&bufYy[i]);
}
//计算各科成绩:
float sumYw = 0.0;float sumSx = 0.0;float sumYy = 0.0;
for (int i = 0; i < nmb;i++)
{
//统计全班总成绩
sumYw += bufYw[i];
sumSx += bufSx[i];
sumYy += bufYy[i];
//统计个人总成绩
bufSum[i] = bufYw[i] + bufSx[i] + bufYy[i];
bufAvg[i] = bufSum[i] / 3.0;
}
printf("全班语文总成绩:%.2f,平均成绩:%.2f\n",sumYw,sumYw/nmb);
printf("全班数学总成绩:%.2f,平均成绩:%.2f\n",sumSx,sumSx/nmb);
printf("全班英语总成绩:%.2f,平均成绩:%.2f\n",sumYy,sumYy/nmb);
for (int i = 0; i < nmb; i++)
{
printf("学生%d的语文成绩:%.2f,数学成绩:%.2f,英语成绩:%.2f,总成绩:%.2f,平均成绩:%.2f \n",i+1,bufYw[i],bufSx[i],bufYy[i],bufSum[i],bufAvg[i]);
}
getchar();
getchar();
return 0;
}
第六题代码如下:
#include <stdio.h>
#include <string>
//v是需要查找的数,buf是有序数组,start是0,end是数组大小
int findnmb(int v,int* buf,int start,int end)
{
if (end - start < 0)
return -1;
if (end - start == 1)
{
if(buf[start] != v)
return -1;
else
return start;
}else if (end - start == 2)
{
if (buf[start] == v )
{
return start;
}else if (buf[start + 1] == v)
{
return start+1;
}else
return -1;
}
int mid = start + (end-start) /2 ;
if (buf[mid] == v)
{
return mid;
}else if (buf[mid] > v)
{
return findnmb(v,buf,start,mid);
}else
return findnmb(v,buf,mid,end);
}
int main()
{
//2分法查找
int da[] = {0, 2, 5, 8, 12, 15, 23, 35, 60, 65,78};
printf("数组:");
for (int i = 0; i < 11; i++)
{
if(i < 10)
printf("%d,",da[i]);
else
printf("%d",da[i]);
}
printf("\n");
while(1)
{
printf("请输入需要查找的数:");
int nnf = 0;
scanf("%d",&nnf);
int ind = findnmb(nnf,da,0,11);
printf("find index:%d\n",ind);
}
getchar();
getchar();
return 0;
}
你这图绝了