有兴趣的朋友可以看着题目自己做做,最后在和答案对比!相信能力会有所提升的。我现在只是刚刚开始学习c语言,如果有什么说的不对的地方,网路过的大佬,及时予以指正。多谢!
1、函数判断闰年
实现函数判断year是不是闰年。
函数判断闰年
实现函数判断year是不是闰年。
#include"stdio.h"
int panduan(int x) {
if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0) {
return 1;
}
else
return 0;
}
int main() {
int year = 2000;
if (panduan(year)) {
printf("%d年是闰年", year);
}
return 0;
}
2、交换两个整数
实现一个函数来交换两个整数的内容。
/*
交换两个整数
实现一个函数来交换两个整数的内容。
*/
#include"stdio.h"
void jiaohuan(int *x, int *y) {
int z = 0;
z = *x;
*x = *y;
*y = z;
}
int main() {
int a = 9, b = 5;
printf("交换前 a=%d b=%d\n", a, b);
jiaohuan(&a, &b);
printf("交换后 a=%d b=%d\n", a, b);
return 0;
}
3、乘法口诀表
实现一个函数,打印乘法口诀表,口诀表的函数和列数自己制定
如:输入9,输出9*9口诀表,输入12,输出12*12乘法口诀表
/*
乘法口诀表
实现一个函数,打印乘法口诀表,口诀表的函数和列数自己制定
如:输入9,输出9*9口诀表,输入12,输出12*12乘法口诀表
*/
#include"stdio.h"
void print(int); // 声明函数
int main() {
int input = 0;
printf("请输入你要打印的乘法口诀表的行数?\n");
scanf("%d", &input);
print(input);
return 0;
}
void print(int x) { // 此函数在主函数的调用之后,所以在前面要有声明。
int i = 0, j = 0;
for (i = 1; i <= x; i++) {
for (j = 1; j <= i; j++) {
printf("%2dX%2d = %3d ", j, i, j * i);
}
printf("\n");
}
}
4、调用fun(2)返回值是多少?
int fun(int n) {
if (n == 5) {
return 2;
}
else
return 2 * fun(n + 1);
}
int fun(int n) {
if (n == 5) {
return 2;
}
else
return 2 * fun(n + 1);
}
5、打印一个数的每一位
递归的方式实现?
/*
打印一个数的每一位
递归的方式实现?
*/
#include"stdio.h"
void print(int a) {
if (a > 9) {
print(a / 10);
}
printf("%d ", a%10);
}
int main() {
int a = 122456;
print(a);
return 0;
}
6、求阶乘
递归和非递归分别实现求n的阶乘
/*
求阶乘
递归和非递归分别实现求n的阶乘
*/
#include"stdio.h"
int jiecheng(int n) {
int a = 1;
int i = 1;
for (i = 1; i <= n; i++) {
a *= i;
}
return a;
}
int main() {
int n = 0;
scanf("%d", &n);
int ret = jiecheng(n);
printf("%d", ret);
return 0;
}
下面是递归的方式实现阶乘:
#include"stdio.h"
int jiecheng(int n) {
if (n <= 1)
return 1;
return n * jiecheng(n - 1);
}
int main() {
int n = 0;
scanf("%d", &n);
int ret = jiecheng(n);
printf("%d", ret);
return 0;
}
7、字符串逆序(递归实现)
编写一个函数reverse_string(char * string)(递归实现)
实现:
将参数字符串中的字符反向排列,不是逆序打印。
要求:
不能使用c函数库中的字符串操作函数。
比如:
char arr[]="abcdef";
逆序之后的数组内容变成fedcba。
#include"stdio.h"
// 下面是循环的方式实现功能
int my_strled(char* str) { // 计算传入的字符串中的字符个数
int count = 0;
while (*str != '\0') {
count++;
str++;
}
return count;
}
//void reverse_string(char *pa){
// int left = 0;
// int right = my_strled(pa) - 1; // 字符个数减1也就是最右边的下标
// while(left<right){
// char tmp = pa[left];
// pa[left] = pa[right];
// pa[right] = tmp;
// left++;
// right--;
// }
// }
void reverse_string(char* pa) {
int left = 0;
int right = my_strled(pa) - 1; // 字符个数减1也就是最右边的下标
while (left < right) {
char tmp = *(pa+left);
*(pa+left) = *(pa+right);
*(pa+right) = tmp;
left++;
right--;
}
}
int main() {
char arr[] = "abcdefg";
printf("调整之前的数组是:%s\n", arr);
reverse_string(arr); // 数组名arr是数组首元素的地址
printf("调整之后的数组是:%s\n", arr);
return 0;
}
下面是递归的方式实现:
#include"stdio.h"
int my_strlen(char* arr) {
int count = 0;
while (*arr != '\0') {
count++;
arr++;
}
return count;
}
void diandao(char* arr) {
int tem = *arr; // 第一步
int len = my_strlen(arr);
*arr = *(arr + len - 1); // 第二步
*(arr + len - 1) = '\0'; // 第三步
if (my_strlen(arr+1) >= 2) {
diandao(arr + 1); // 第四步
}
*(arr + len - 1) = tem; // 第五步
}
int main() {
char arr[] = "abcdef";
diandao(arr);
printf("%s\n", arr);
return 0;
}
8、计算一个数的每位之和(递归实现)
写一个递归函数DigitSum(n),输入一个非负整数,返回组成他的数字之和。
例如,调用Digit(1729),则应该返回1+7+2+9,他的和是19
输入:1729,输出:19
///*
//计算一个数的每位之和(递归实现)
//写一个递归函数DigitSum(n),输入一个非负整数,返回组成他的数字之和。
//例如,调用Digit(1729),则应该返回1+7+2+9,他的和是19
//输入:1729,输出:19
//*/
#include"stdio.h"
int DigitSum(int n) {
if (n > 9) {
return n%10 + DigitSum(n / 10);
}
else
return n;
}
int main() {
int n = 1729;
int ret = DigitSum(n);
printf("%d", ret);
return 0;
}
9、 递归实现n的k次方
题目内容:
编写一个函数实现n的k次方,使用递归实现
#include"stdio.h"
double Fang(int n, int k) {
if (k > 0) {
return n * Fang(n, k - 1);
}
else if (k == 0)
return 1;
else
return 1.0 / Fang(n, -k);
}
int main() {
int n = 0;
int k = 0;
scanf("%d%d", &n,&k);
double ret = Fang(n, k);
printf("%lf", ret);
return 0;
}
以上就是今天早晨起来做的 9道题,主要是为了自己不忘记,或是忘记的时候看自己的代码熟悉的速度会更快,特此记录。