判断素数
#include <stdio.h>
#include <math.h>
#include <assert.h>
int is_primer(int x)
{
assert(x > 0);
int i = 0;
for (i = 2; i <= sqrt(x); i++)
{
if (x % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int a = 0;
do {
scanf("%d", &a);
int ret = is_primer(a);
if (ret == 1)
printf("%d是素数\n", a);
else if (ret == 0)
printf("%d不是素数\n", a);
else
continue;
} while (a != -1);
return 0;
}
输出1000~2000之间的闰年
两个条件:
1.能被4整除且不能被100整除
2.能被400整除
int is_year(int i)
{
if ((i % 4 == 0 && i % 100 != 0) || (i % 100 == 0))
{
return 1;
}
return 0;
}
int main()
{
int a = 0;
int i = 0;
int ret = 0;
for (i = 1000; i <= 2000; i++)
{
ret = is_year(i);
if (ret == 1)
{
printf("%d ", i);
a++;
}
if (a == 20)
{
printf("\n");
a = 0;
}
}
return 0;
}
二分查找有序数组
用左右两边下标相加求出中间值为关键
int binary_search(int arr[], int sz, int key)
{
int left = 0;
int right = sz - 1;
int mid = 0;
while(left<=right)
{
mid = left + (right + left) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
return mid;
}
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int k = 0;
printf("请输入你想查找的数字:>\n");
scanf("%d", &k);
int ret = binary_search(arr, sz, k);
printf("你要查找的数字为%d,在下标为%d的位置.", k, ret);
return 0;
}
打印整形数值
运用循环和迭代将会更轻松解决此问题
void print(int x)
{
if (x > 9)
{
print(x/10);
}
printf("%d ", x%10);
}
int main()
{
int a = 0;
scanf("%d", &a);
print(a);
return 0;
}
求字符串长度(模仿strlen)
不可以创建临时变量,可以利用指针检查对应位置是否为\0,到\0时停止
最好的方法就是递归
int my_strlen(char* arr)
{
if (*arr!= '\0')
return 1 + my_strlen(arr + 1);
else
{
return 0;
}
}
int main()
{
char arr1[] = "abcdef";
int ret = my_strlen(arr1);
printf("arr1的长度为:%d", ret);
return 0;
}