学习c语言中的几道习题(小有难度)!

有兴趣的朋友可以看着题目自己做做,最后在和答案对比!相信能力会有所提升的。我现在只是刚刚开始学习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道题,主要是为了自己不忘记,或是忘记的时候看自己的代码熟悉的速度会更快,特此记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚久龙

你的鼓励是我最大的动力!谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值