分别求两个整数的最大公约数和最小公倍数。_控制台输入后排序(只对输入的正整数排序,忽略非正整数)...

c678a994a88aa5462abf4e4a6ed19e27.png

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值