C语言入门,有手就行老铁 常见题目训练

Posted Ps_Q

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言入门,有手就行老铁 常见题目训练相关的知识,希望对你有一定的参考价值。

**

准备在这一篇继续写一些常见的题型

**
我们经常会碰到一些题,要求计算0-10或者0-n的和。我们来写一些这种类型的题目。
计算1+2+3+4+5+6+7+8+9+10的值

#include<stdio.h>
void main()
	int i,sum=0;
	for(i=1;i<=10;i++)
		sum+=i;
	
	printf("0-10相加的和是%d\\n",sum);
	/*运行结果
	0-10相加的和是55
	*/

其实很简单,定义sum初始值是0,用来表示所有数字的和,sum+=i即sum = sum + i,我列一个表,让大家更清晰的了解这个过程
sum = sum + i
0 = 0 +1 结果sum被赋值为1。
1 = 1 +2 结果sum被赋值为3 ,而i是因为循环自增,所有增加了1 ,往后就是这个逻辑。
来看另一段代码

#include<stdio.h>
int fun(int i)
	int sum = 0;
	for(i=1;i<=i;i++)
		sum+=i;
	
	return sum;

void main()
	int i,sum;
	scanf("%d",&i);
	sum = fun(i);
	printf("0-%d相加的和是%d\\n",i,sum);

/*运行结果
10                输入值
0-10相加的和是55
*/

诶,是不是感觉这次的代码不太一样,main()函数在下面,之前 我们说过,main()函数就是C语言的入口,那肯定是从main()函数开始执行,那么我们看看main()干了什么。
这里突然冒出一个sum=fun(i),你们肯定也是一头雾水
我们来看一段与它等价的代码

#include<stdio.h>
void main()
	int i,n,sum=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		sum+=i;
	
	printf("0-%d相加的和是%d\\n",n,sum);

/*运行结果
10                输入值
0-10相加的和是55
*/

其实就是把for循环的过程给fun()了,而我们就去调用fun(i),所有就会有上面那种写法,这里需要思考一下,其实这两段代码效果是一样的,但是我们在开发过程中,通常会把一个功能写进一个函数,这样就可以快速找到错误的地方。
当然我们也需要详细说一下这个int fun(int i )的过程

int fun(int i)
	int sum = 0;
	for(i=1;i<=i;i++)
		sum+=i;
	
	return sum;

首先,前面定义的是int fun(int i) 第一个int就是表示返回一个整型值,也就是对应的return sum;此时的sum就是一个整型。而return的意思就是返回值。就是说,我在其他地方写个调用,fun(10),那么
int fun (int i) i = 10,而经过一系列计算,得出一个sum, 写的fun(10)就等于这个返回值sum。

好知道这种函数流程之后,我们再来看看常见题型

计算水仙花数,其含义就是一个数字的个位,十位,百位的立方的和是它本身。就比如
153 = 1×1×1+5×5×5+3×3×3
这里我们就要运用到C语言整型的特性, 比如 153÷100 = 1.53,但是如果两个数字都是int型,那么1.53的小数部分就会被省略,比如int i = 153,j =100 那么表达式 i/j 的结果是1。理解这一点我们的代码就知道怎么做了
而这里使用到的运算符有%,这是取余数,小学数学里面是有学习过的,比如
15÷10 = 1 ······5 而这里的余5就是15%10的结果

#include<stdio.h>
bool fun(int i)
	int ge,shi,bai;
	bai = i/100;	//获取百位
	shi = i/10%10;	//获取十位
	ge = i%10;		//获取个位
	if (i == bai*bai*bai+shi*shi*shi+ge*ge*ge) 
	return true;  //如果成立结果为true
	else return false;//如果不成立结果为false

void main()
	int i;
	printf("请输入一个数字,判断是不是水仙花数:\\n");
	scanf("%d",&i);
	if(fun(i) == true)
		printf("%d是水仙花数\\n",i);
	
	else
		printf("%d不是水仙花数\\n",i);
	

/*运行结果
请输入一个数字,判断是不是水仙花数:
153
153是水仙花数

请输入一个数字,判断是不是水仙花数:
188
188不是水仙花数
*/

获取十位数的时候,153 / 10 %10 我们来计算一下 153/10=15.3,而小数部分省略了,结果就是15%10结果是5所有就取到了。其实整个逻辑也不复杂,就是需要掌握计算方法。

由于篇幅原因,还有些题目就留在下一篇了,这里最后再写一个阶乘和计算的题目

常见的有计算1-n的 阶乘和
1!+2!+3!+4!~n!的和,首先我们要理解阶乘是什么
1!是指1的阶乘,1!=1;
2!是指2的阶乘,2!=1×2=2;
3!是指3的阶乘,3!=1×2×3=6;
ok,我们来看代码

#include<stdio.h>
double fun(int x)
	double sum = 0,product=1 ;//和从0开始 乘积从1开始
	int i,j;
	for (i=1;i<=x;i++)
		sum+=product;	//计算乘积的和
		product=1;		//又初始化从1开始
		for(j=1;j<i;j++)
		product*=i;		//计算乘积
	
	return product;

void main()
	int i;
	printf("请输入一个数字:\\n");
	scanf("%d",&i);
	printf("1到%d的阶乘和是%lf\\n",i,fun(i));

/*运行结果
请输入一个数字:
3
1到3的阶乘和是9.000000
*/

至于整个过程,其实也并不是复杂,第一层for循环去计算和,第二次循环去计算乘积,但是需要注意的是每一层乘积计算都需要初始化一下。
**

好就到这里,还是老样子,有情况评论见溜了

**

以上是关于C语言入门,有手就行老铁 常见题目训练的主要内容,如果未能解决你的问题,请参考以下文章

C语言入门,有手就行老铁 常见题目训练

C语言入门,有手就行老铁 常见题目训练

C语言入门,有手就行老铁 常见题目训练题目讲解最后一篇

C语言入门,有手就行老铁 常见题目训练题目讲解最后一篇

C语言入门,有手就行老铁 常见题目训练题目讲解最后一篇

C语言入门,有手就行老铁 循环选择训练