图片 2

C语言的基本概念,大数问题

小蜜蜂–大数问题,小蜜蜂–大数

图片 1

解题源代码:

 1 #include <stdio.h> 
 2 
 3 unsigned long long RoadWay(int n) {    //定义了unsigned long long类型
 4     unsigned long long num1=1lu, num2=2lu;
 5     unsigned long long temp;
 6     int i;
 7     if(n == 2) {
 8         return 1lu;
 9     } else if(n==3){
10         return 2lu;
11     } else {
12         for (i=4; i<=n; ++i) {
13             temp = num1 + num2;
14             num1 = num2;
15             num2 = temp;
16         }
17         return num2;
18     }
19 }
20 
21 int main(int argc, const char * argv[]) {
22     // insert code here...
23     int n;
24     int a, b;
25     int len;
26     
27     scanf("%d", &n);
28     
29     while (n>0) {
30         scanf("%d%d", &a, &b);
31         if(a>0 && a< b && b<50) {
32             len = b-a;
33             printf("%I64d\n", RoadWay(1+len));
34         } else {
35             break;
36         }
37         --n;
38     }
39 
40     return 0;
41 }

问题总结:

  • 尽量不要使用递归算法,可以使用循环或者尾递归实现
  • int -> unsigned int==unsigned long -> unsigned long long

解题源代码: 1
#include stdio.h 2 3 unsigned long long RoadWay( int n) {
//定义了unsigned long long类型 4 unsigned long long…

图片 2

1、经典入门:hello world

解题源代码:

1 #include <stdio.h>
2 
3 int main(void)
4 {
5     printf("hello world.\n");
6 
7     return 0;
8 }
 1 #include <stdio.h>  2  3 unsigned long long RoadWay(int n) {    //定义了unsigned long long类型 4     unsigned long long num1=1lu, num2=2lu; 5     unsigned long long temp; 6     int i; 7     if(n == 2) { 8         return 1lu; 9     } else if(n==3){10         return 2lu;11     } else {12         for (i=4; i<=n; ++i) {13             temp = num1 + num2;14             num1 = num2;15             num2 = temp;16         }17         return num2;18     }19 }20 21 int main(int argc, const char * argv[]) {22     // insert code here...23     int n;24     int a, b;25     int len;26     27     scanf("%d", &n);28     29     while (n>0) {30         scanf("%d%d", &a, &b);31         if(a>0 && a< b && b<50) {32             len = b-a;33             printf("%I64d\n", RoadWay(1+len));34         } else {35             break;36         }37         --n;38     }39 40     return 0;41 }

注:上面所使用的关键字:include    头文件包含

问题总结:

            int      整型,用来表示整数的类型

  • 尽量不要使用递归算法,可以使用循环或者尾递归实现
  • int -> unsigned int==unsigned long -> unsigned long long

            void      空类型

            return     函数返回

2、基本概念:

  源文件:源文件即源程序代码文件,C语言源文件后缀名是.c;

  头文件:头文件的后缀名为.h,C语言代码由源文件和头文件构成;

  关键字:关键字是C语言已经定义好的一些字,这些字在C语言中代表着一些特殊含义,我们必须搞懂每个关键字的所有含义和用法,否则就看不懂C语言程序;

  注释:C语言中的注释一般以//开头,或者/*
*/,注释是给程序员看的,编译器编译程序的时候是忽略注释内容的,所以机器根本看不见注释,也不理注释;

  符号:C语言中包含很多符号,如; : , +  – * / () [] {}
等等,每个符号都有自己的含义,必须理解它们的含义才能看懂C语言程序;

  变量:可以发生变化的量。C语言程序中用变量来进行计算;

  函数:函数是C语言的一个基本组成单位,一个C语言程序其实就是由一个或多个函数组成的,每个函数用来完成某项功能,函数也可以调用别的函数来完成其功能。函数的标志是()。C语言中有一个特殊的函数叫

     main(),这个函数是整个程序内定的入口,也就是说整个C语言程序是从main()函数开始执行的,其他的函数都是直接或者间接被main()调用的。

3、写代码的步骤:

  (1) 使用编辑器(如vi)编辑源代码;

  (2)
使用编译器把源程序转化成可执行程序,我们在Linux中使用的编译器一般是gcc;

    如:gcc hello.c  对hello.c进行编译后生成可执行文件a.out

      gcc hello.c -o
hello  对hello.c进行编译生成指定名字的可执行文件hello

  (3) 执行编译生成的可执行程序,即./hello;

  (4)
执行程序后若发现程序结果不对,这时候就要返回来看源代码哪里不对,然后对其进行修改,再编译执行,再看结果,如此反复直到程序执行结果正确为止;

4、VMWare共享文件夹的使用:

  当我们是使用虚拟机VMWare中安装的Ubuntu时,我们一般会在Windows中编辑源代码,而在Linux中来编译和执行源代码,这时就需要在Windows与Linux间进行交互;

  在Windows与Linux间进行交互有两种方法:smb服务器(需要自己搭建,较复杂,可以自己在网上寻找相关教程)、VMWare的共享文件夹(仅需简单设置即可使用,下面简单介绍);

  建立Windows的共享文件夹:

  (1) 先在Windows中创建一个文件夹,切记要使用英文名称;

  (2) VMWare中的菜单栏里的VM -> Settings -> Options -> Shared
Folders选项卡,右边上侧选择Always Enabled,下面点击Add,next,在打开的选项卡中HostPath项目中浏览选择刚才第一步中创建

    的文件夹,下面Name中会自动弹出一个相同的名字,这个名字就是将来Windows中的文件夹在linux虚拟机中的映射文件夹,名字可以改也可以不改。然后一直OK,完成即可。

  (3) 在linux中,直接到
/mnt/hgfs目录下,即可找到刚才第二步中Name相同的名字的文件夹,这个目录即是第一步中Windows中目录在linux下的映射。

5、数据类型:

  (1) 整型:C语言中的整型对应数学中的整数,整型变量是用来描述一个整数值的,整型变量经过计算后也只能是整数(整型),不可能出现小数(浮点型);

    C语言中整形有三种:int      整型

               short int   短整型,可简写为short

               long int    长整型,可简写为long

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int a,b,c;        // 定义三个了整形变量a、b、c
 6     a = 12;            // 赋值语句,将=右边的12赋值给左边的变量a
 7     b = 23;
 8     c = a + b;        // 运算式,把a+b的结果赋值给c
 9     printf("c = %d.\n",c);
10     
11     return 0;
12 }

  (2) 浮点型:C语言中的浮点型对应数学中的小数。浮点型有float和double两种,使用方式相同,而表示的范围和精度不同。float表示的范围小,精度低(小数点后6位),

        而double表示范围大,精度高。(小数点后16位);

    注:printf中打印float或double类型,是用%f,而不是%d;

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5 /*
 6     float f1 = 3.14;
 7     
 8     printf("f1 = %f.\n",f1);    // float精度够,正确输出我们需要的值
 9 
10     f1 = 3.141592653;
11     
12     printf("f1 = %f.\n",f1);    // float精度不够,所以按照精度取舍了
13 */
14     double f1 = 3.14;
15     
16     printf("f1 = %f.\n",f1);
17     
18     f1 = 3.14159265312345678912;
19     
20     printf("f1 = %2.20f.\n",f1);
21     
22     return 0;
23 }

 

  (3) 字符型:字符型对应ASCII字符。ASCII字符是一种编码,就是用数字编码来表示一个符号的一种方法,本质上说,字符型其实也是整型,只是这些整型数被用来表示一些字符的ASCII码值,所以叫做

        字符型。字符型一般用8位二进制表示,无符号字符型范围是0~255;

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     char c1 = 'K';
 6     
 7     // 使用%d来打印是打印出字符所对应的ASCII码值,使用%c来打印是打印出字符本身
 8     printf("c1 = %d, c1 = %c\n", c1, c1);
 9     
10     c1 = c1 + 5;
11     
12     printf("c1 = %d, c1 = %c\n", c1, c1);
13     
14     return 0;
15 }

 

   (4) 有符号数和无符号数:数学中的数都是有符号的,即有正数和负数之分。所以计算机中的数据类型也有符号,分为有符号数和无符号数;

     有符号数:整型:  signed int      可简写为int

               signed long int     可简写为long

               signed short int    可简写为short

               signed        表示signed int

          浮点型: signed float      可简写为float

               signed double     可简写为double

          字符型: signed char       可简写为char

      无符号数:整型:   unsigned int      无简写

               unsigned long int   可简写为unsigned
long

               unsigned short int   可简写为unsigned
short

           浮点型:没有无符号浮点数

           字符型:  unsigned char      无简写

     注:对于整形和字符型来说,有符号数和无符号数表示的范围是不同的;

6、常用运算符:

  (1) 数学运算符:与数学中意义相同:   +     加号

                    -    减号

                    *    乘号

                    /     除号

                    %     取余符号

                    ()    括号里的表达式优先级最高

          与数学中的意义不同:=    
 赋值运算符,不同于数学中的等号。赋值运算符的作用是经过运算后符号左边(左值,一般是一个变量)的值等于右边(右值,一般是常数或变量)的值了

                    +=    x = x +
y;    等价于    x += y

                    -=     x = x –
y;     等价于    x -= y

                    *=     x = x *
y;    等价于    x *= y

                    /=      x = x /
y;     等价于    x /= y

                    %=    x = x % y;   
 等价于    x %= y

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     /*
 6     int a, b, c, d, e;
 7     
 8     a = 13;
 9     b = 4;
10     c = 7;
11     
12     d = a + b / c;        // 除的优先级高,先除再加
13     e = (a + b) / c;    // 括号里的表达式优先级最高,先算括号里的表达式再算括号外的表达式
14     
15     printf("d = %d, e = %d.\n", d, e);
16     */
17     int a, b, c, d;
18     
19     a = 17;
20     b = 4;
21     c = a / b;        // 除
22     d = a % b;        // 取余
23     
24     printf("a = %d, b = %d, c = %d, d = %d.\n", a, b, c, d);
25     
26     return 0;
27 }

 

  (2) 判断运算符:==    等于

          !=     不等于

          >      大于

          <      小于

          >=    大于等于

          <=    小于等于

  (3) 逗号运算符:,      主要是用来分割

  (4) ++与–:++      a++;  等价于  ++a;  等价于  a = a

  • 1;  等价于  a += 1;

          –        a–;   等价于  –a;  
等价于  a = a – 1;   等价于  a -= 1;

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int a, b, c, d;
 6     
 7     a = 4;
 8     a++;
 9     printf("a = %d.\n", a);
10     
11     //a = 4;
12     ++a;
13     printf("a = %d.\n", a);
14     
15     //a = 4;
16     a += 1;
17     printf("a = %d.\n", a);
18     
19     //a = 4;
20     a = a + 1;
21     printf("a = %d.\n", a);
22     
23     return 0;
24 }

(以上所述内容为学习朱老师的嵌入式课程后复习笔记所得,目的是自己复习巩固知识,同时把自己学到的知识分享出来。能力有限,水平一般,如有错误,欢迎指正,谢谢!)

2017-02-25 19:15:48