C语言回顾(一、C简介及基础知识)——iOS开发基础

说明:
在学习UI高级知识之前,将利用最近十来天的时间回顾一下C语言,主要按照《C程序设计(谭浩强版)》来回顾。
整理一些知识点(不是细节,知识个人觉得较重要或易忘的)以及挑一些课后题目编写代码练习。

第1章,第2章

  1. C注释不能嵌套,编译系统在发现第一个/*后,会开始找注释结束符,把二者间的内容作为注释

  2. 函数首部:一个函数名后面必须跟一对圆括号,括号里写函数的参数名及类型,如果没参数,可以写void,也可以空括号

  3. 闰年:能被4整除单不能被100整除的年份或能被400整除的年份

  4. 素数:除了1和本身之外,不能被其他任何整数整除的数。
    判断时:2~sqrt(n)就可以了

  5. 算法特性:有穷性(步骤有限); 确定性;有零个或多个输入;有一个或多个输出;有效性(每个步骤都能得到确定的结果)

  6. 流程图!还有N-S流程图:不带箭头,基本框图

  7. 课后练习:
    求两个数的最大公约数:一般常用的辗转相除法和更相减损法

辗转相除法

#include <stdio.h>
//求m,n的最小公倍数
int gcd(int m,int n) {
    int temp = 0;
    if (m < n) {
        temp = m;
        m = n;
        n = temp;
    }//将较大值赋值给m
    while (n != 0) {
        temp = m%n;
        m = n;
        n = temp;
    }//辗转相除直到n==0
    return m;
}

int main(int argc, const char * argv[]) {
    printf("result = %d\n",gcd(2, 18));
    return 0;
}

更相减损法

#include <stdio.h>
#include <math.h>
//求m,n的最小公倍数
//第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;不是则执行第二步。
//第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
//则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
//其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。所以更相减损法也叫等值算法。
void changeNumber(int* a,int* b) {
    if (*a < *b) {
        *a = *a+*b;
        *b = *a-*b;
        *a = *a-*b; //交换
    }   //将较大值给a,较小值给b
}

double gcd2(int m,int n) {
    int temp = 0;
    int k = 0;
    while (m%2 == 0 && n%2 == 0) {
        m = m/2;
        n = n/2;
        k ++;
    }   //第一步判断
    changeNumber(&m, &n);
    temp = m-n;
    if (temp == 0) {
        return m;
    }   //如果m,n相等,那么直接返回m
    while (n != temp) {
        m = temp;
        changeNumber(&m, &n);
        temp = m - n;
    }   //第二步判断
    return n*pow(2,k);
}

int main(int argc, const char * argv[]) {
    printf("result = %.0f\n",gcd2(18, 18));
    printf("result = %.0f\n",gcd2(49, 21));
    return 0;
}

补充:最小公倍数
由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。
即(a,b)×[a,b]=a×b。
因此求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。

你可能感兴趣的:(开发,C语言,编译,最大公约数,ios开发基础)