c语言程序设计常考题

下面的习题涉及的知识包括条件语句、循环语句、函数、指针等相关知识,需要有一定的学习基础

第一题:打印“水仙花数”

求出0~100000之间的所有“水仙花数”并输出。

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

--------------------------------------------------------------------------------------------------------------------------

解析

通常情况下,要求某个整数的每一位,就要用到除10模10的思路,得到每一位剩下的就好办了

代码呈现

#include <stdio.h>
#include <math.h>

int main()
{
	int n = 1;
	int sum = 0;
	for (int i = 0; i <= 100000; i++)
	{
		int tmp = i;
		sum = 0;
		n = 1;
		while (tmp / 10)
		{
			n++;
			tmp /= 10;
		}//求出该数有多少位,用n表示
		tmp = i;
		while (tmp)
		{
			int res = pow(tmp % 10, n); //此处求的是每一位的n次方
			sum += res; //然后把他们加起来
			tmp /= 10; //下一位
		}
		if (sum == i)
			printf("%d ", i); //打印水仙花数
	}
	return 0;
}

第二题:打印以下图案

-----------------------------------------------------------------------------------------------------------------------------

解析

主要求每行前面有多少空格,以及每行有多少 * 。

观察可得上半段空格数每行减少一个,而星星数每行增加2个

下半段空格数每行增加一个,星星数同上

代码呈现

#include <stdio.h>

int main()
{
	int line = 0;
	scanf("%d", &line);
	for (int i = 0; i < line;i++)
	{
		for (int j = 0; j < line - 1 - i; j++)
		{
			printf(" ");
		}
		for (int k = 0; k < 1 + 2 * i; k++)
		{
			printf("*");
		}
		printf("\n");
	}

	for (int i = 0; i < line - 1; i++)
	{
		for (int j = 0; j <=  i; j++)
		{
			printf(" ");
		}
		for (int k = 0; k < 2*(line-1-i)-1; k++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

第三题:斐波那契数列

斐波那契数列:1,1,2,3,5,8……

规律:后一项为前两项之和

要求:求斐波那契数列第n项

方法1:函数递归

#include <stdio.h>

int rec(int n)
{
	if (n <= 2)
		return 1;
	else
		return rec(n - 1) + rec(n - 2);
}

int main()
{
	int n = 0;
	
		scanf("%d", &n);
		printf("%d", rec(n));
		return 0;
		
}

方法2:

#include <stdio.h>

int fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (n >= 3)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", fib(n));
	return 0;
}

以上题目对于初学者来说可能有些挑战,但是经过一定的训练之后,回头再看就发现并不难。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值