黑马程序员技术交流社区

标题: ios就业班面试的准备之c语言复习篇(一) [打印本页]

作者: y977975092    时间: 2016-4-21 11:16
标题: ios就业班面试的准备之c语言复习篇(一)
自学已经有一个多月了,以前草草的复习了一遍,不符合理想,今天决定第二轮复习,心得发到论坛,希望和同学们交流。
今天主要复习的是c语言篇,前面都是一些基础,由于第二次复习,基本看了一眼就过掉。一直复习到循环结构,做了几个编程题,大部分都是围绕for循环、while循环,特意在xcode中用断点分析for循环的每一步流程,感觉这样对for循环的理解更深刻了,如果有觉得自己for循环没有学好的同学,我建议你试试我的方法,不要烦躁,多看几次就好。
下边我分享一下今天上午做的一个编程题,虽然很简单,但是想写这个程序一定要有清晰的思路,第一遍我就有点卡壳,我想面试是绝对不能出现这种问题的,我就练习了很多遍,用xocd断点分析,逐渐思路就越来越清晰了,话费的时间有点长,但是这样能锻炼你思考的能力。
十一点了,该去吃饭啦,下次再来和各位分享心得。

程序题是: 求S(n) = a+aa+aaa+aaaa+...+aa..a之值,其中a是一个数字,n表示a的位数例如:2+22+222+2222+22222(此时n=5),n和a都从键盘输入。
  1. #include <stdio.h>
  2. int main(int argc, const char * argv[]) {
  3. //定义变量
  4.     int n;//用户输入的位数
  5.     int a;//要用来操作计数的数
  6.     int k;//每一位的数
  7.     int sum=0;//每一位数加起来的总和
  8.    
  9.     //提示用户输入位数和要操作的数
  10.     printf("请输入位数和操作的数\n");
  11.     //接受从键盘输入的数
  12.     scanf("%d,%d",&n,&a);
  13.     for (int i=0; i<n; i++) {
  14.         //在第一次外层循环的时候,就要把a的值赋给k,这样每一次计算 k的值都是a
  15.         k=a;
  16.         for (int j=0; j<i; j++) {
  17.             //开始计算
  18.             int temp=10;
  19.             k=(k*temp)+a;//假如操作数a是2 那么这一步的操作就是 k=(2*10)+2  这样第二位的数就是22  符合题意
  20.         }
  21.         sum=sum+k;//这里的sum处于外层循环,每一次循环都会把sum+k的值重新赋给sum
  22.         //如果n=2  第一次循环sum=2,第二次循sum=2(第一次的循环结果)+k
  23.     }
  24.     printf("sum=%d\n",sum);//打印结果
  25.    
  26.     return 0;
  27. }
复制代码

作者: 毛小猪    时间: 2016-4-21 22:49
来学习学习,正需要呢
作者: y977975092    时间: 2016-4-21 23:25
毛小猪 发表于 2016-4-21 22:49
来学习学习,正需要呢

谢谢支持{:3_57:}
作者: hmjavaqinchi    时间: 2016-4-22 00:31
haodongxiwo汇
我刚发现这么好的东西
作者: y977975092    时间: 2016-4-22 14:44
hmjavaqinchi 发表于 2016-4-22 00:31
haodongxiwo汇
我刚发现这么好的东西

一起学习~
作者: 烛风小糊涂    时间: 2016-4-24 03:45
本帖最后由 烛风小糊涂 于 2016-4-24 03:46 编辑

看了楼主的题目,我也写了一个,比较粗糙和繁琐啊~凑合看吧~
楼主那个嵌套循环挺不错的,赞一个~

我的思路比较直,就是想办法先把每次循环得到的数往上累加得到总和,因此还自定义了个幂函数把每次循环要加的数字的值给表示出来。。。如果有可以优化的地方,还请不吝赐教!

#include<stdio.h>

int power(int x, int y) {
        int result = 0;
        if (y == 0) {
                result = 1;
        }
        else result = x*power(x, y - 1);
        return result;
}

int main() {
        
        int sum = 0, num = 0;
        int n = 0, a = 0;
        printf("请输入n和a的值,以逗号隔开,并以回车结束。\n");
        scanf_s("%d,%d",&n,&a);
        for (int i = 0; i < n; i++) {
                if (i == 0) {
                        num = a;
                        sum = num;
                }
                else if (i>0)
                {
                        num = num + a * power(10, i);
                        sum = sum + num;
                }
        }
        printf("%d\n", sum);
        return 0;
}

最后,谢谢楼主的分享!

作者: 毛小猪    时间: 2016-4-25 13:38
看看,学习下,正在学习OC基础,复习下C的东西
作者: 胡健cc    时间: 2016-4-25 21:14
借鉴借鉴,哈哈哈
作者: TGII    时间: 2016-5-4 00:00
已收藏,很不错的资料
作者: Chenjunfeng    时间: 2016-7-30 09:24
草草第一遍让我学完了,正马不停蹄的复习呢。
作者: 行路难    时间: 2016-7-30 12:17
多谢分享!
作者: 徐荘    时间: 2016-7-31 23:49
感谢分享
作者: a946608523    时间: 2016-8-19 16:23
本帖最后由 a946608523 于 2016-8-19 16:25 编辑

[Objective-C] 纯文本查看 复制代码
#import <Foundation/Foundation.h>
#import <math.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int a=0,n=0,sum=0,num=0;
        printf("请输入a的值\n");
        scanf("%d",&a);
        printf("请输入n的值\n");
        scanf("%d",&n);
        for (int i=0; i<n; i++) {
            num+=a*pow(10, i);
            sum+=num;
        }
        printf("此函数的和是%d\n",sum);
    }
    return 0;
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2