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语言入门,有手就行老铁 常见题目训练的主要内容,如果未能解决你的问题,请参考以下文章