解题思路: 1.按照题目的意思此题肯定要用循环,然后我们要在题目所给的公式找一种方法求解,(可能比较考验你的数学能力)
2.求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。这是题目,我们来想是先求完所有的数来相加,还是一次加一个,显然前者是行不通的,因为要是n太大你是不行的这种方法,我们来用后者的方法,此公式式也可写成 Sn = Sn-1 +aa...aaa(有n个a),Sn是前面(n-1)个数的和,for循环或while循环都能用此法,就是循环一次加前面(n - 1)个数的数之和加上现在的第n个数的值,现在我们要求的是第n个数的值为多少。
3.求第n个数的值为多少。这肯定也是要用到循环的,我们现在就是要找第n个数的值的规律,我们发现第二个数是前面第一个数的10倍再加上a的,第三个数是第二个数的10倍加上a......因此我们这么想第n个数是第n-1个数的10倍加上a,接着就是用代码解决这个问题 An = An * 10 +a,其中左边An 是第n个数的值,右边An是第n - 1个数的值,在代码for循环里就是这个意思。
4.理清完这个题目的数学问题,接着我们再想步骤解题。
i :声明变量这就不用说吧,我们要想清声明几个变量,不管是做那种题都一样,我们要声明的变量是来干什么的,要声明几个变量。
这里我们声明四个变量,分别为Sn(前n数的和),An(用于存储用户的输入),n(获取用户的输入),(i用于for循环),声明的过程并初始化。
#include <stdio.h> int main(void) { int Sn = 0, n, i , An = 0; scanf("%d", &n) //获取用户输入 return 0; }
ii. 构造for循环 ,利用上面理清的数学关系
for (i = 0; i < n; i++) { An = An * 10 + a; Sn = Sn + An; }
iii.利用printf()输出即可
printf("%d", Sn);
注意事项: 1)不可在for循环声明并初始化Sn,这样生成的Sn具有块作用域,也就是在for循环里有用,在套嵌for循环的那个块无用,也就是说在大块里没有这个变量。这是我做题原本想在for循环里初始化发现行不同。
2)for循环别初始化,要不变量就一直是你初始化的那个值,因为循环一次,这个变量初始化为那个值
参考代码:
#include <stdio.h> int main(void) { int a = 2, Sn = 0, n; scanf("%d", &n); for (int i = 0, An = 0; i < n; i++) //这里也可以用自减,不能声明初始化Sn,能声明初始化An { An = 10*An + a; Sn = Sn + An; } printf("%d", Sn); return 0; }
0.0分
1 人评分
A+B for Input-Output Practice (IV) (C++代码)浏览:713 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:504 |
1011题解浏览:819 |
数字游戏 (C++代码)浏览:1240 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:742 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:636 |
Tom数 (C语言代码)浏览:598 |
杨辉三角 (C语言代码)浏览:734 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:501 |
C二级辅导-温度转换 (C语言代码)浏览:575 |