1. 输入两个数,找出两个数的最大公约数和最小公倍数——
#include <stdio.h>
int GetComDivNum(int x, int y)
{
int i = 0;
int min = 0;
min = x < y ? x : y;
for (i = min; i >= 1; i--)
{
if (0 == x % i && 0 == y % i)
{
break;
}
}
return i;
}
int GetComMulNum(int x, int y)
{
int i = 0;
int max = 0;
max = x > y ? x : y;
for (i = max; i <= x * y; i++)
{
if (0 == i % x && 0 == i % y)
{
break;
}
}
return i;
}
int main(void)
{
int num1 = 0;
int num2 = 0;
int divnum = 0;
int mulnum = 0;
scanf("%d%d", &num1, &num2);
divnum = GetComDivNum(num1, num2);
mulnum = GetComMulNum(num1, num2);
printf("最大公约数:%d\n", divnum);
printf("最小公倍数:%d\n", mulnum);
return 0;
}
2. 输入年、月、日,获得该年剩余多少天——
#include <stdio.h>
int IsLeepYear(int tmpyear)
{
if ((0 == tmpyear % 4 && tmpyear % 100 != 0) || (0 == tmpyear % 400))
{
return 1;
}
return 0;
}
int GetDayOfYear(int tmpyear, int tmpmon, int tmpday)
{
int i = 0;
int sum = 0;
int a1[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int a2[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (IsLeepYear(tmpyear))
{
for (i = 0; i < tmpmon-1; i++)
{
sum += a1[i];
}
}else
{
for (i = 0; i < tmpmon-1; i++)
{
sum += a2[i];
}
}
sum += tmpday;
return sum;
}
int GetLeftDayOfYear(int tmpyear, int tmpmon, int tmpday)
{
int sum = 0;
if (IsLeepYear(tmpyear))
{
sum = 366;
}
else
{
sum = 365;
}
return sum - GetDayOfYear(tmpyear, tmpmon, tmpday);
}
int main(void)
{
int year = 0;
int mon = 0;
int day = 0;
int leftday = 0;
scanf("%d%d%d", &year, &mon, &day);
leftday = GetLeftDayOfYear(year, mon, day);
printf("%d年剩余%d天\n", year, leftday);
return 0;
}
3. 封装函数,以数组传递形式实现strlen、strcpy、strcat、strcmp——
#include <stdio.h>
int Mystrlen(char pstr[])
{
int i = 0;
int cnt = 0;
while (pstr[i] != '\0')
{
cnt++;
i++;
}
return cnt;
}
int Mystrcpy(char pdst[], char psrc[])
{
int i = 0;
while (psrc[i] != '\0')
{
pdst[i] = psrc[i];
i++;
}
pdst[i] = '\0';
return 0;
}
int Mystrcat(char pstr1[], char pstr2[])
{
int i = 0;
int j = 0;
while (pstr1[i] != '\0')
{
i++;
}
while (pstr2[j] != '\0')
{
pstr1[i] = pstr2[j];
i++;
j++;
}
pstr1[i] = '\0';
return 0;
}
int Mystrcmp(char pstr1[], char pstr2[])
{
int i = 0;
while (pstr1[i] == pstr2[i] && pstr1[i] != '\0')
{
i++;
}
return pstr1[i] - pstr2[i];
}
int main(void)
{
char str[32] = {0};
char dst[32] = {0};
int len = 0;
int ret = 0;
gets(str);
len = Mystrlen(str);
printf("len = %d\n", len);
Mystrcpy(dst, str);
printf("dst = %s\n", dst);
Mystrcat(dst, str);
printf("dst = %s\n", dst);
ret = Mystrcmp(dst, str);
printf("ret = %d\n", ret);
return 0;
}
4. 封装函数,以指针传递形式实现strlen、strcpy、strcat、strcmp
4.1 strlen
#include <stdio.h>
int MyStrlen(char *pstr)
{
int cnt = 0;
while (*pstr != '\0')
{
cnt++;
pstr++;
}
return cnt;
}
int main(void)
{
char str[32] = {0};
int len = 0;
gets(str);
len = MyStrlen(str);
printf("len = %d\n", len);
return 0;
}
4.2 strcpy
#include <stdio.h>
#include <string.h>
int MyStrcpy(char *pdst, char *psrc)
{
while (*psrc != '\0')
{
*pdst = *psrc;
psrc++;
pdst++;
}
*pdst = '\0';
return 0;
}
int main(void)
{
char src[32] = {0};
char dst[32] = {0};
gets(src);
MyStrcpy(dst, src);
printf("dst = %s\n", dst);
return 0;
}
4.3 strcat
#include <stdio.h>
#include <string.h>
int MyStrcat(char *pstr1, char *pstr2)
{
while (*pstr1 != '\0')
{
pstr1++;
}
while (*pstr2 != '\0')
{
*pstr1 = *pstr2;
pstr1++;
pstr2++;
}
*pstr1 = '\0';
return 0;
}
int main(void)
{
char str1[32] = {0};
char str2[32] = {0};
gets(str1);
gets(str2);
MyStrcat(str1, str2);
printf("str1 = %s, str2 = %s\n", str1, str2);
return 0;
}
4.4 strcmp
#include <stdio.h>
int MyStrcmp(char *pstr1, char *pstr2)
{
while (*pstr1 == *pstr2 && *pstr1 != '\0')
{
pstr1++;
pstr2++;
}
return *pstr1 - *pstr2;
}
int main(void)
{
char str1[32] = {0};
char str2[32] = {0};
int ret = 0;
gets(str1);
gets(str2);
ret = MyStrcmp(str1, str2);
printf("ret = %d\n", ret);
return 0;
}
5. 判断素数——
#include <stdio.h>
int IsPrimayNum(int n)
{
int i = 0;
for (i = 2; i < n; i++)
{
if (0 == n % i)
{
return 0;
}
}
return 1;
}
int main(void)
{
int num = 0;
scanf("%d", &num);
if (IsPrimayNum(num))
{
printf("Yes!\n");
}
else
{
printf("No!\n");
}
return 0;
}
6. 封装函数实现斐波那切数列 1 1 2 3 5 8 13 21 34 55 ——
#include <stdio.h>
int Fibo(int num)
{
if (1 == num || 2 == num)
{
return 1;
}else
{
return Fibo(num-1) + Fibo(num-2);
}
}
int main(void)
{
int num = 0;
int fibo = 0;
scanf("%d", &num);
fibo = Fibo(num);
printf("fibo = %d\n", fibo);
return 0;
}
7. 递归实现汉诺塔——
#include <stdio.h>
int HanNuoTa(int n, char src, char tmp, char dst)
{
if (1 == n)
{
printf("%c -> %c\n", src, dst);
}
else
{
HanNuoTa(n-1, src, dst, tmp);
HanNuoTa(1, src, tmp, dst);
HanNuoTa(n-1, tmp, src, dst);
}
return 0;
}
int main(void)
{
int n = 0;
scanf("%d", &n);
HanNuoTa(n, 'A', 'B', 'C');
return 0;
}
8. 拆分数字各个位数,并将各个位数求和(除10(/10),再对10求余(%10))——
#include <stdio.h>
int fun(int tmp)
{
int sum = 0;
while (tmp != 0)
{
sum += tmp % 10;
tmp /= 10;
}
return sum;
}
int main(void)
{
int num = 0;
int sum = 0;
scanf("%d", &num);
sum = fun(num);
printf("sum = %d\n", sum);
return 0;
}
9. 封装一个函数传入数组和n,根据n的值将数组完成转换——
int a[5] = {1, 2, 3, 4, 5}
n=3 n=2
3 4 5 1 2 4 5 1 2 3
#include <stdio.h>
int OutputArray(int arrayp[], int tmplen)
{
int i = 0;
for (i = 0; i < tmplen; i++)
{
printf("%d ", arrayp[i]);
}
putchar('\n');
return 0;
}
int Fun(int arrayp[], int len, int n)
{
int i = 0;
int j = 0;
int tmp = 0;
for (i = 0; i < n; i++)
{
tmp = arrayp[len-1];
for (j = len-1; j > 0; j--)
{
arrayp[j] = arrayp[j-1];
}
arrayp[0] = tmp;
}
}
int main(void)
{
int str[5] = {1, 2, 3, 4, 5};
int len = 5;
int n = 0;
scanf("%d", &n);
OutputArray(str, len);
Fun(str, len, n);
OutputArray(str, len);
return 0;
}