#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void sort(int* p, int n); //数组的指针bai,数组的长度
int halfSearch(int key, int* a, int n); //自定义函数binary_search()
int main()
{
int sortdata[1000]; // 定义数组的维度1000
int number ; //统计控制台输入的整数个数
char c; //存储字符
int key = 0; // 查询数值
int position = 0; // 查询数值的位置
LOOP:
printf("n************************************************************************n");
printf("----------------------------------排序----------------------------------n");
printf("************************************************************************n");
printf("请输入正整数进行排序(回车结束输入):n");
number = 0; // 初始化控制台输入的数值个数
while ((c = getchar()) != 'n') // 判断是否回车换行,结束该次输入
{
if (c > -1 && c < 255) // 排除非整数的字符
{
if (isdigit(c)) // 判断字符是否为整数
{
ungetc(c, stdin); // 将c送回输入流
scanf_s("%d", &sortdata[number++]);// 存储正整数
}
}
}
sort(sortdata, number); // 排序
printf("n排序后输出的结果为:n");
for (int i = 0; i < number; i++)
printf("%d ", sortdata[i]);
//printf("n----------------------------------------nnn");
printf("n************************************************************************n");
printf("----------------------------------查询----------------------------------n");
printf("************************************************************************n");
printf("n请输入查询数值(在排序的输出结果中进行搜索):n");
scanf_s("%d",&key);
position = halfSearch( key, sortdata, number);
if (position==-1)
{
printf("n在输入的数据中,没有 %dn",key );
}
else
{
printf("n在输入的数据中, %d位于第%d个数值n", key, position+1);
}
printf("n************************************************************************n");
printf("----------------------------------求素数----------------------------------n");
printf("************************************************************************n");
int i;
double k;
printf("n请输入需进行素数判断的数值:n");
scanf_s("%d", &key);
k = sqrt(key);
for ( i = 2; i <= k; i++)
if (key % i == 0) break;
if (i <= k)
printf("%d不是素数.n",key);
else
printf("%d是素数.n", key);
printf("n************************************************************************n");
printf("----------------------------------最大公约数------------------------------n");
printf("************************************************************************n");
int m, n,temp;
printf("请输入求最大公约数的两个数(用空格分隔) :n");
scanf_s("%d%d", &m, &n);
if (m < n) /*比较大小,使得m中存储大数,n中存储小数*/
{ /*交换m和n的值*/
temp = m;
m = n;
n = temp;
}
for (i = n; i > 0; i--) /*按照从大到小的顺序寻找满足条件的自然数*/
if (m % i == 0 && n % i == 0)
{/*输出满足条件的自然数并结束循环*/
printf("%d 和 %d 最大公约数是: %dn", m, n, i);
break;
}
printf("n************************************************************************n");
printf("----------------------------------最小公倍数------------------------------n");
printf("************************************************************************n");
int m, n, temp, i;
printf("请输入求最小公倍数的两个数(用空格分隔) :n");
scanf("%d%d", &m, &n);
if (m < n) /*比较大小,使得m中存储大数,n中存储小数*/
{
temp = m;
m = n;
n = temp;
}
for (i = m; i > 0; i++) /*从大数开始寻找满足条件的自然数*/
if (i % m == 0 && i % n == 0)
{/*输出满足条件的自然数并结束循环*/
printf("%d 和 %d 最小公倍数是: %dn", m, n, i);
break;
}
// goto LOOP;
return 0;
}
//数组的指针bai,数组的长度
void sort(int* p, int n)
{
for (int i = 0; i < n; i++) //冒泡排序法每次找一个最大的值放到后面
{
for (int j = 0; j < n - i - 1; j++) // 每次排序后,会把最大值排在最后,循环的次数相应减少
{
if (*(p + j) > * (p + j + 1)) // 相邻两个数比较,如果数组位置靠前的数大于数组位置靠后的数,则两个数对调,否则不变
{
int temp;
temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
}
}
}
//二分查找
int halfSearch(int key, int* a, int n) //自定义函数binary_search()
{
int start = 0;
int end = n - 1;
while (start <= end)
{
int middle = (start + end) / 2;
if (key < a[middle]) {
end = middle - 1;
}
else if (key > a[middle]) {
start = middle + 1;
}
else {
return middle;
}
}
return -1;
}