C语言——基础编程题11道(递归,非递归,循环,链式调用,斐波那契数,static关键字)

C语言——基础编程题11道(递归,非递归,循环,链式调用,斐波那契数,static关键字)

1.利用上面实现的函数打印100到200之间的素数。(要用到math.h中的sqrt函数(开方))
(一个数的因数总有一个小于等于这个数的开方!例如:16=44=28=1*16)

#include<stdio.h>
#include<math.h>
void SuShu(){
	int i, j;
	for (i = 100; i <= 200;++i){
		for (j = 2; j <= sqrt(i)&&i%j!=0;++j){}
		if (j>sqrt(i)){
			printf("%d ",i);
		}
	}
	printf("\n");
}
int main(){
	SuShu();
	return 0;
}

2.实现函数判断year是不是润年。(闰年:能被400整出或者能被4整出不能被100整除)

#include<stdio.h>
void Year(int year){
	if (year%400==0||year%4==0&&year%100!=0){
		printf("%d是闰年\n",year);
	}
	else{
		printf("%d不是闰年\n", year);
	}
}
int main(){
	int year;
	scanf("%d",&year);
	Year(year);
	return 0;
}

3.实现一个函数来交换两个整数的内容.(要点:传值与传址的区别)

#include<stdio.h>
void Change(int*x,int*y){
	(*x) = (*x) ^ (*y);
	(*y) = (*x) ^ (*y);
	(*x) = (*x) ^ (*y);
}
int main(){
	int x, y;
	scanf("%d%d",&x,&y);
	Change(&x,&y);
	printf("x=%d,y=%d\n",x,y);
	return 0;
}

4.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

#include<stdio.h>
void MUL(int n){
	for (int i = 1; i <= n;++i){
		for (int j = i; j <= n;++j){
			printf("%dx%d=%d ",i,j,i*j);
		}
		printf("\n");
	}
}
int main(){
	int n;
	scanf("%d",&n);
	MUL(n);
	return 0;
}

5.递归方式实现打印一个整数的每一位(所谓递归就是函数自己调用自己,有递有归)

#include<stdio.h>
void Print(int n){
	if (n!=0){
		printf("%d ",n % 10);
		n /= 10;
		Print(n);
	}
}
int main(){
	int n;
	scanf("%d",&n);
	Print(n);
	return 0;
}

6.递归和非递归分别实现求n的阶乘(不考虑溢出的问题)

#include<stdio.h>
int Fac(int n){
	if (n == 1){
		return 1;
	}
	else {
		return n*Fac(n-1);
	}
}
int main(){
	int n;
	scanf("%d", &n);
	printf("%d\n",Fac(n));
	return 0;
}

7.递归和非递归分别实现strlen(仔细体会)
(非递归)

#include<stdio.h>
int Strlen(char *p){
	int len ;
	for (len = 0; *(p + len) != '\0';++len){}
	return len;
}
int main(){
	char n[5000];
	scanf("%s", n);
	printf("%d\n",Strlen(n));
	return 0;
}

(递归)

#include<stdio.h>
int NoStrlen(char *p){
	if ((*p) == '\0'){
		return 0;
	}
	else{
		return 1 + NoStrlen(p+1);
	}
}
int main(){
	char n[5000];
	scanf("%s", n);
	printf("%d\n", NoStrlen(n));
	return 0;
}

8.编写一个函数 reverse_string(char * string)(递归实现)

#include<stdio.h>
void reverse_string(char * string){
	if (*string!='\0'){
		reverse_string(string+1);
		printf("%c",*string);
	}
}
int main(){
	char n[5000];
	scanf("%s", n);
	reverse_string(n);
	return 0;
}

9.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19。
输入:1729,输出:19

#include<stdio.h>
int DigitSum(int n){
	if (n == 0){
		return 0;
	}
	else{
		return (n % 10) + DigitSum(n/10);
	}
}
int main(){
	int n;
	scanf("%d", &n);
	printf("%d\n", DigitSum(n));
	return 0;
}

10.编写一个函数实现n的k次方,使用递归实现。(注意math.h里的pow函数是小写,而我重新定义的乘方函数是Pow,不一样,别看错了,飞哥就是看好取名字,哈哈哈)

#include<stdio.h>
long Pow(int n,int k){
	static int m = 0;
	if (m == k){
		return 1;
	}
	else{
		m++;
		return n*Pow(n,k);
	}
}
int main(){
	int n,k;
	scanf("%d%d", &n,&k);
	printf("%ld\n", Pow(n,k));
	return 0;
}

11.递归和非递归分别实现求第n个斐波那契数
(斐波那契数:第一项,第二项为1,其他项为前两项的和)
输入:5 输出:5
输入:10, 输出:55
输入:2, 输出:1
{非递归}
!!!!!!第n项等于第n-1项和第n-2项的和!!!!!!

#include<stdio.h>
int FB(int n){
	int i,num[1000];
	num[0] = num[1] = 1;
	for (i = 2; i < n;++i){
		num[i] = num[i - 1] + num[i-2];
	}
	return num[i - 1];
}
int main(){
	int n;
	scanf("%d", &n);
	printf("%d\n", FB(n));
	return 0;
}

(递归)
!!!!!!第n项等于第n-1项和第n-2项的和!!!!!!

#include<stdio.h>
int NFB(int n){
	if (n == 1 || n == 2){
		return 1;
	}
	else{
		return NFB(n - 1) + NFB(n-2);//第n项等于第n-1项和第n-2项的和
	}
}
int main(){
	int n;
	scanf("%d", &n);
	printf("%d\n", NFB(n));
	return 0;
}

以上就是基础编程题11道,喜欢的关注点赞一波欧。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值