C语言学习目的及基础入门

东哥开发实战第一周 2019-11-15

目录概述

  • 一、C语言学习目的
  • 二、C和C++的区别
  • 三、程序开发过程
  • 四、C语言基础知识入门
    |(一)注释的使用
    |(二)include导入头文件与#define的使用
    |(三)基本数据类型
    |(四)main函数的使用
    |(五)printf函数格式化输出
    |(六)scanf函数格式化输入
    |(七)变量
    |(八)运算符
  • 五、C语言基础语句
  • 六、C语言控制结构
    |(一)

一、C语言学习目的

  • 两个面试
  • 后期服务JNI (C语言) C JAVA 编程能力 编程思想

二、C语言和C++的区别

  • C:面向过程:小王 走进教室 拿出电脑 开始听东哥的课
  • C++:面向对象:
    谁上课 Teacher (姓名 身高 年龄 授课) ->东哥
    谁来听 Student (姓名 身高 年龄 学号 选修课) ->小王
    什么课 Sbuject (课程编号 课程名称) ->Android开发
    哪里上 Classroom (编号 座位数) -> 5405
    怎么上 Computer (。。。。。)-> Hasee

三、程序开发过程

  • 1.选择开发工具IDE: DevC++ Android Studio
    2.创建项目 写代码
    3.运行
    4.结果

编译器 - 将高级语言转化为机器语言

  • 1.写代码 例
   #include<stdio.h>
   int main()
  {
      printf("Hello world");
      return 0;
  }
  • 2.预编译 ->编译器(制定规则)
    gcc -E test.c -o test.i
    a.展开
  • 3.编译 -> 高级语言转化为 汇编代码
    gcc -S test.i -o test.s
    a.检查语法错误
    b.转化为汇编代码
  • 4.汇编 -> 把汇编代码转化为二进制数据
    gcc -c test.s -o test.o
    a.转化为目标文件——二进制数据 0101010011001001
  • 5.链接 -> 将所有目标文件链接为可执行文件(所有 xx-o —— .exe)
    gcc -o test.o test
    cios

四、C语言基础知识

(一)注释的使用

  • 1.//单行注释
  • 2./* 多行注释 */

(二)include导入头文件与#define的使用

1、include

  • 即“宏” 导入头文件,如果系统已经提供某些功能的实现,只需要使用include将这些功能所在的头文件导入进来就可以了。头文件类型有两种,以下为他们的写法和不同点:
#include <iostream> 
编译器首先从 系统的类库 里面去查找这个头文件,如果没有,再到自己的文件中查找
#include "iostream"  
编译器首先从 自己的文件 里面去查找这个头文件,如果没有,再到系统的文件中查找

2、define

  • "#define可以为类型定义别名
#define INT int
  • "#define可以为数值定义别名。这时达到了定义一个常量的效果
#define KILLED -1
  • 使用#define的好处在于一方面加强了代码的可读性,另一方面是增强可操作性便于代码修改。(当多出使用#define定义的别名时,别名对应的数值需要修改时,可以直接再#define处快速修改)

(三)基本数据类型

short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。在不同的系统上这些类型占据的字节长度是不同的:

- int     整数 64位系统里面占4个字节  (以下同64位系统)  最多  
    输出格式:%d  %02d 不足的补齐 01 

-short    短整型 占2个字节内存空间
    输出格式:%hd

- long    长整型 占8个字节内存空间   
    输出格式:%ld

- float   浮点型 占4个字节内存空间
    输出格式:%f  %.1f 保留1位有效数字

- double  双精度浮点型 占8个字节内存空间
    输出格式:%f  或 %lf

- char    字符型 占1个字节内存空间
    输出格式:%c 输出字符  %d输出ASCII码值

- char*   字符串型 占8个字节内存空间    C++中 string同为字符串
    输出格式:%s 输出字符串

- bool    布尔类型 true/false 1/0 非零即真 零即假



定义变量和声明变量的区别
定义一个整形变量 立刻为我们分配内存空间 如:int a = 1;
    特点:运行时占空间,使用时效率高
声明一个整型变量 没有分配内存空间 如:int b; b = 20;使用的时候才会分配内存空间 
    特点:运行时不占空间 使用时速度慢一点
  • 下面是32位系统与64位系统各数据类型对比:


    转自CSDN C语言入门经典——基础知识(数据类型)(32位与64位系统基本数据类型的字节数).png

(四)main函数的使用

  • main(int argc, char** argv)函数
    main函数=代码块=完成特定任务,所有程序的入口点都是main函数;

  • int返回值: 记录当前程序的运行状态 ; 0:正常结束 资源自由分配 ; 非0:1 异常结束 没收资源

  • int argc:参数个数
    char*argv[]: 每个参数组成的字符串数组

(五)printf函数格式化输出

  • printf输出语句,用来让终端输出数据,数据类型不同,输出方式不同,常见方式请见(三)
  • 打印常量字符串
  • 转义字符:\a 警告 \b 退格 \f 换页 \n 换行 \r 回车 \t 跳格 \v 垂直跳格
int main(int argc, char*argv[]) 
{
    printf("%d\n",argc);
    printf("%s\n",argv[0]);
    printf("Hello World\n");
    return 0;
}
上式运算结果.png

printf.png

(六)scanf函数格式化输出

  • scanf() 函数用来格式化输入数据,即按用户指定的格式从键盘上把数据读入到指定的变量中。其原型为:int scanf ( char * format [ ,argument, … ]);
    【参数】format为格式化控制字符串,可以由三类字符构成。
  • 一般变量都需要进行 & 取地址
  • 当用户在终端输入数据时,数据会被存放到 缓存流,scanf用于在缓冲流中找到数据将其放到给定的位置
  • 放到给定位置就是保存输入的数据,保存数据需要用到的变量,我们只需要把数据送到对应的地址,就存储好了该数据,就可以通过该变量使用该数据。所以进行 & 去地址。
\\输入输出两条数据
Int a = 0 ,  b = 0;
scanf(“%d %d”,&a , &b);
printf(“%d %d”,&a , &b);
scanf.png
  • getchar():从缓冲区读取一个字符

(七)变量

  • C语言中,变量分为全局变量和局部变量;也可以这样分:自动变量,静态变量.前者是按变量作用范围来分的,而后者是按变量存储方式来分的。
局部变量:{}里的代码从开始到结束,局部变量的优先级最大 
    int a = 20;  //全局变量
    int main()
    {   
    int a;   //局部变量
    printf("a",a);  //输出第二个 int a 即局部变量 
    if()
    {
        int a=10;    //(更小的)局部变量
    }                       
  • 在C语言中,如果按存储占用空间来分,包括:
    整型变量(代码为int),整型变量包括长整型变量(代码为long int)以及短整型变量(代码为short int),字符型变量(代码为char),浮点型变量(代码float)等。当然还有数组,结构体变量等.但新手需要注意的是,每一种变量类型最终都对应的格式字符.如:%d。
  • C语言还有一个重要变量:指针变量.它存放的值是一个内存地址。
  • C语言中变量名是有大小写之分的,如SUN与sun就是两个不同的变量名。
    另一点,声明变量时,可以不用声明就直接赋值来决定变量类型的语言,这类语言变量的声明通常被称为弱类型,而如(c++等)必须先声明,后使用,而且声明时必须确定变量类型,这种就是严格的数据类型。
    变量有两种类型:属性变量和用户自己建立的变量。

(八)运算符

  • C的运算符有以下几类:
    1.算术运算符:* - + / % ++ (a++先赋值后运算 ++a先运算后赋值)
    2.关系运算符: > < == != >= <=
    3.逻辑运算符:! && ||
    4.位运算符:<< >> ~ | ^ &
    5.赋值运算符:=及扩展赋值运算符
    6.条件运算符:?
**问号表达式**   c = 3 >1 ?  'y':'n';
    char c;  
    if(3>1){c='y';}  else{c='n';} 
运行结果  输出 y

7.逗号运算符:,

**逗号表达式**  int result = (表达式1,表达式2,表达式3)
    int temp = 20;
    int t2 = (temp--,temp--,temp--);
    if(t2)
        {
            printf("temp = %d\n",temp);
            printf("t2 = %d\n,t2);
        }
运行结果  输出 temp=17 ; t2=18

8.指针运算符:*和&
9.求字节数运算符:sizeof
10.强制类型转换运算符:(类型)
11.分量运算符:. ->
12.下标运算符:[ ]
13.其他:如函数调用运算符:()
注意:条件运算符是C语言中惟一一个三目(三元)运算符

  • 运算符优先级

优先级与求值顺序无关。如a+b && bc,虽然优先级最高,但这个表达式求值顺序是从左到右。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符条件运算符赋值运算符

基本的优先级需要记住:

指针最优,单目运算优于双目运算。如正负号。

先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.

逻辑运算最后结合。


五、C语言基础语句

C语句分类

  • 控制结构(详见下文)- 顺序 循环 分支(选择)
  • 函数调用语句
  • 表达式语句
  • 空语句
  • 复合语句

六、C语言控制结构

if语句

******************************************  
if(表达式)
{
  语句1; 
  语句2;
}                    //  if下的各独立语句用分号分隔。
******************************************  
if(表达式) 语句1; else 语句2;
******************************************  
if(表达式1)
   语句1;
else if(表达式2)
  语句2;
···
else if(表达式n)
  语句n;
else
  语句n+1;

switch语句

switch 可读性
switch(已经确定值的变量-int-char)
{
case 10 'a' ; break ;
case 10 'b' ; break ;
default ; break ;
}

    int a = 0;
    cout << "请输入一个数字1-3:";
    cin>>a;
    switch(a)
    {
        case 1:
            cout<<"你输入的是1"<<endl; 
            break;
        case 2:
            cout<<"你输入的是2"<<endl; 
            break;
        default:
            cout<<"你输入的是3"<<endl; 
            break;
     } 

for循环语句

for(循环控制变量;运行的条件;控制变量的变化)
for循环中间条件是必要的,其他部分可以省略,分号“;”不能省略
for(;1<2;)
for(int i=0 ; i<10 ; i++)
循环控制变量的定义和初始化只执行一次

//输出1-10之间的整数    
    for(int i=0;i<=10;i++)
    printf("i ",i); 
//不断输出1-10之间的整数
    for(int i=0;1<2;i++)
    {
        i = i%10;
        if(i == 0)
            printf("i = %d ",i);
        else
            printf("i =%d ",i);
    }

while循环语句

while(表达式){
    语句块
}
//表达式 : 循环条件
//语句块:循环体

1.先计算“表达式”的值,当值为真时,执行”语句块“
2.执行完“语句块”,再次计算表达式额值,如果为真,继续执行“语句块”
3.重复执行这个过程,指导表达式的值为假


break

跳出“if,switch”循环

输出1-10之间的整数 ,在5处暂停
    for(int i=0;i<=10;i++)
    {  
        printf("%d ",i); 
        if( i == 5)
        break;  //当i=5时跳出本次for循环
    }

continue

停止运行下列代码,回到本次循环开头继续运行

输出1-10之间的整数 ,除了5
    for(int i=0;i<=10;i++)
    {  
        printf("%d ",i); 
        if( i == 5)
        continue;  //当i=5时回到本次循环开头
    }

感谢观看,求赞求赞

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342