题目内容:
实现一个函数,判断一个数是不是素数。
利用上面实现的函数打印100到200之间的素数。
#include
#include
int is_prime(int x)
{
int j = 2;
for (j = 2;j < sqrt(x);j++)
{
if (x % j ==0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
for (i = 100;i <= 200;i++)
{
if (is_prime(i))
printf("%d ", i);
}
return 0;
}
题目内容:
实现函数判断year是不是润年。
判断闰年:
第一种情况:能被4整除但不能被100整除的是闰年。
第二种情况:能够被400整除的是闰年。
这两种结合起来就能全面判断是不是闰年
#include
int is_leap_year(int x)
{
if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))
return 1;
return 0;
}
int main()
{
int year = 0;
printf("请输入:");
scanf("%d", &year);
if (is_leap_year(year))
printf("%d年是闰年", year);
else
printf("%d年不是闰年", year);
return 0;
}
递归方式实现打印一个整数的每一位
如:
输入1234
打印:1 2 3 4
#include
void print(unsigned int x)
{
if (x > 9)
{
print(x / 10);
}
printf("%d ", x % 10);
}
int main()
{
unsigned int a = 0;
scanf("%u", &a);
print(a); //接收一个无符号整数,按照顺序打印它的每一位
return 0;
}
递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
#include
int ert(int x)
{
int i = 0;
int ret = 1;
for (i = 1;i <= x;i++)
{
ret *= i;
}
return ret;
}
int main()
{
int a = 0;
scanf("%d", &a);
printf("%d", ert(a));
return 0;
}
#include
int ert(x)
{
if (x <= 1)
return 1;
else
return x * ert(x - 1);
}
int main()
{
int a = 0;
scanf("%d", &a);
printf("%d",ert(a));
return 0;
}
递归和非递归分别实现strlen
#include
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++; //找下个字符
}
return count;
}
int main()
{
char arr[100];
scanf("%s", &arr);
int len = my_strlen(arr);
printf("%d", len);
}
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char arr[100];
scanf("%s", &arr);
int len = my_strlen(arr);
printf("%d", len);
}
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = “abcdef”;
逆序之后数组的内容变成:fedcba
#include
int main()
{
char arr[] = "abcdefg"; //[a b c d e f g \0]
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 2;
//int right=strlen(arr)
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
printf("%s\n", arr);
return 0;
}
void reverse(char* str)
{
char tmp = *str;
int len = strlen(str);
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if(strlen(str+1)>=2)
reverse(str + 1);
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdefg";
reverse(arr);
printf("%s\n",arr);
return 0;
}
void reverse(char arr[], int left, int right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
if (left < right)
reverse(arr, left + 1, right - 1);
}
int main()
{
char arr[] = "abcdefg";
int left = 0;
int right = strlen(arr) - 1;
reverse(arr,left,right);
printf("%s\n",arr);
return 0;
}
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
#include
int DigitSum(unsigned int n)
{
if (n > 9)
return DigitSum(n / 10) + n % 10;
else
return n;
}
int main()
{
unsigned int n = 0;
scanf("%u", &n);
int sum = DigitSum(n);
printf("%d\n",sum);
return 0;
}
编写一个函数实现n的k次方,使用递归实现。
#include
double Pow(int n, int k)
{
if (k > 0)
return n * Pow(n, k - 1);
else if (k == 0)
return 1;
else
return 1.0 / Pow(n, -k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d%d", &n, &k);
double ret = Pow(n, k);
printf("%lf\n", ret);
return 0;
}
例如:
输入:5 输出:5
输入:10, 输出:55
输入:2, 输出:1
#include
int Fun(int x)
{
if (x <= 2)
return 1;
else
return Fun(x - 1) + Fun(x - 2);
}
int main()
{
int a = 0;
scanf("%d", &a);
int ret = Fun(a);
printf("%d", ret);
return 0;
}
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 0;
while (n >= 3)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d", ret);
return 0;
}