C语言简介:
C语言诞生于1970~1973年,丹尼斯.里奇和肯.汤普逊编写完成的,归属于美国的贝尔实验室
C语言专门为了编写操作系统而诞生的,因此天生适合对硬件编程,也非常适合数据结构和算法的实现,以速度快而著称
由于C语言出现时间早,有很多缺陷,也没想到普通人也能用C语言,因此虽然存在陷阱,但是一些前辈帮你总结好了经验<C语言的陷阱与缺陷>
虽然C语言自由度很高,但是也意味着危险,自由源于自律

C89 语法标准,gcc默认的语法标准
C99           是对C语言的扩展和增强 gcc code.c -std=gnu99
C11           全新升级

C语言的第一个程序
#include <stdio.h>
程序员所写的代码并不是标准C代码,需要一段程序把它翻译成标准C代码,负责翻译程序叫做预处理器,翻译的过程叫做预处理,被翻译的语句叫做预处理指令,以#开头的都是预处理指令
#include 把头文件导入到当前文件
#include <> 从系统指定目录下查找头文件并导入
#include “” 先从当前目录下查找,如果找不到再从系统指定目录下查找并导入
stdio.h 负责对输入输出的函数进行说明

    .c  源文件  记录的都是功能性代码.h  头文件  绝大多数记录的是函数的说明stdlib.h    string.h    int main()
{printf("Hello World!\n");return 0;
}main函数:函数是C语言管理代码的基本单位,一个函数就是一个功能的实现,就是一个代码段main函数是程序的入口,也是唯一出口,有且只有一个int 是一种数据类型,表示函数的返回值类型,是一个整数return 作用:1、返回一个返回值给调用者2、结束函数的执行main函数的调用者是操作系统,它的返回值返回给操作系统,反映了程序的是怎么样结束的:正数    出现异常0       正常结束负数    出现错误printf/scanf 属于C标准库中的函数,输入、输出数据转义字符:键盘上一些没有的符号,通过一些特殊的字符来表示\n  换行符\b  退一个字符 \r  回到行首\a  铃响\t  制表符%%  一个%\\  一个\C语言以分号作为一行代码的结束,使用大括号来划分代码

C语言代码变成可执行程序的过程:
预处理: 把源文件翻译成预处理文件
gcc -E code.c 把源文件预处理后的结果显示屏幕上
gcc -E code.c -o code.i ->code.i 生成以.i结尾的预处理文件
编译: 把预处理文件翻译成汇编文件
gcc -S code.i ->code.s 生成以.s结尾的汇编文件
汇编: 把汇编文件翻译成目标文件 (二进制)
gcc -c code.s ->code.o 生成以.o结尾的目标文件
链接: 把若干个目标文件合并成一个可执行文件 a.out
gcc a.o b.o c.o… ->a.out 生成a.out可执行文件

C文件类型:
.c 源文件
.h 头文件
.h.gch 头文件的编译结果
.i 预处理文件
.s 汇编文件
.o 目标文件
.a 静态库文件
.so 共享库文件

存储空间的单位:
Bit 比特 存储一个二进制位,只能存0或1,计算机存储数据的最小单位
Byte 字节 八个二进制位,计算机存储数据的基本单位
Kb 1Kb=1024Byte
Mb 1Mb=1024Kb
Gb =1024Mb
Tb =1024Gb
Pb =1024Tb

数据类型
为什么要对数据进行分类?
1、在自然界中数据本来就是分类的
2、对数据进行分类可以节约空间,提高运行效率

C语言中把数据分为自建(程序员自己设计的类型,例如结构、联合、类)、内建(C语言自带的)整型:signed 有符号signed char         1       -128~127        signed short        2       -32768~32767signed int          4       正负20亿signed long        4/8      正负20亿/以9开头正负19位数signed long long    8       以9开头19位数注意:signed 不加代表了加unsigned 无符号unsigned char         1        0~255unsigned short        2        0~65535unsigned int          4        0~40亿unsigned long        4/8unsigned long long    8        0~以1开头的20位整数注意:由于定义无符号的数据比较麻烦,标准库中有头文件<stdint.h>把无符号的类型进行了重定义uint8_t uint16_t uint32_t uint64_tint8_t  int16_t  int32_t  int64_t浮点型:float       4double      8long double 12/16小数点后6位有效模拟型char 字符型:%c %hhd所谓的字符就是符号或图案,在内存中是以整数形式存储的,需要显示字符时,会根据ASCII码表中的对应关系来显示出对应的符号或图案0   '\0'    特殊字符48  '0'65  'A'97  'a'bool 布尔型:先有的C语言才发明的bool类型,所以C语言没有真正的布尔类型,必须加上头文件<stdbool.h>才能使用bool   true 1     false 0sizeof(unsigned int) 计算类型、变量所占的字节数

变量和常量:
什么是变量:
相当于存储数据的盒子,在程序运行期间数值可以发生改变
定义:
类型 变量名;
int num;
变量名的取名规则:
1、由字母、数字、下划线组成
2、不能以数字开头
3、不能与32个关键字重名 printf scanf sizeof bool
4、见名知意(功能、类型、范围)
注意:变量的值是随机的,为了安全起见,一般初始化为0
int num = 0;

使用:赋值:  num = 10;参与运算 num*10变量的输入输出:int printf(const char *format, ...);功能:输出数据format:"双引号包含的提示信息+占位符"...:    变量列表返回值: 输出字符的个数int scanf(const char *format, ...);功能:输入数据format:"双引号包含的占位符"...: 变量地址列表   变量的地址 = &变量名返回值:成功输入的数据的个数练习2:通过scanf接受各种类型数据的值,并printf显示类型占位符:%hhd %hd %d %ld %lld%hhu %hu %u %lu %llu%f %lf %LF%c什么是常量:程序运行期间数值不能发生改变的叫常量100 默认int100l long100ll long long100u unsigned int100lu   unsigned long100llu3.14 默认double3.14f  float

格式化的输出:
%nd 显示n个字符宽度,不足则补空格,右对齐
%-nd 显示n个字符宽度,不足则补空格,左对齐
%0nd 显示n个字符宽度,不足则补0,右对齐
%n.mf 显示n个字符宽度,不足补空格,m表示小数点后的位数
%g 不显示小数点后多余的0

运算符:
自变运算符 ++/-- 使变量的值自动加1或减1
前自变:立即有效
后自变:下一句语句才有效
注意:不要在一行代码内多次使用自变运算符

算术运算符: + - * / %整除/整数 结果不能有小数点 10/3 3/ % 除数不能为0,否则产生 浮点数例外,核心已转储的报错信息一旦除零,程序直接死掉关系运算符: > < >= <= == !=运行后,得到的是比较的结果 1或者0,比较的结果是可以继续参与运算int n=-100;10<n<100; C语言中永远为真,规则跟数学中的不一样if(100 == n){}逻辑运算符: && || !会把运算对象转换为逻辑值,0转换为假,非0转换真A && B   一假即假A || B   一真即真!A       求反&& || 具有短路特性 当左边值可以确定整个表达式的结果时,右边的不再进行运算三目运算符:运算对象有三个部分A ? B : C;  判断A的值如果为真则执行B,如果为假则执行C该语句不能使用流程控制语句,因为它必须要有运算的结果赋值运算符 = += -= *= /= ...
a += b;     a = a + b;
a -= b;     a = a - b;位运算符:& | ~ ^ << >>

类型转换
自动类型转换:
只有相同的类型的数据才能进行运算,不同类型的数据需要转换成相同类型才能运算
转换规则:以不丢失数据为基础,适当地牺牲一些空间
1、字节少向字节多的转
2、有符号向无符号转
3、整型向浮点型转

强制类型转换:(新类型)数据 有丢失数据的风险,谨慎使用

分支语句:
if(表达式) //单分支
{
表达式为真,则执行此处代码
}

if(表达式)  //双分支
{表达式为真,则执行此处代码
}
else
{表达式为真,则执行此处代码
}if(表达式1)  //多分支
{表达式1为真,则执行此处代码
}
else if(表达式2)
{否则,表达式2为真,则执行此处代码
}
else
{表达式1和2都为假时,则执行此处代码
}switch开关语句:
switch(n)   //n可以是数值、变量、表达式,运算结果必须是整数
{case val://val必须是整常量,如果val等于n,则打开开关,执行后面语句...break;// break 可以关闭开关,如果每个语句后面都加上break// switch语句不能与continue配合使用default:    // 当所有case都没有匹配成功时则打开此处开关,无论放在哪里,都会最后执行
}

for循环语句:
循环就是让一段代码反复执行,达到你想要的效果
for是一种比较灵活且比较危险(与其他循环相比)的循环
一般使用一个变量来引导for循环的运行,这个变量叫做循环变量 i

for([1];[2];[3])
{[4];
}
1、给循环变量赋值,C99标准才可以在for内定义循环变量  -std=gnu99for内定义的循环变量,只能在for循环内使用
2、判断循环变量是否到达边界,判断为真时执行4,为假结束循环
4、被反复执行的代码,也叫做循环体
3、改变循环变量,防止出现死循环,一般是对循环变量自加或自减
1 2 4 3 2 4 3 2....大括号:1、建议上下对齐2、循环体如果只有一行代码,大括号可以省略但是不利于代码的扩展,一般的商业代码要求大括号不能省略for的多种写法:
for(;;)
{//死循环
}int i=0;
for(; i<10; i++)
{}for(int i=0; i<10;)
{printf("---\n");i++;
}

while语句:
while(条件) //当条件为真时,执行循环体,否则结束循环
{
//循环体
}

while相当于for循环的精简版本    for(;条件;)
for循环负责明确知道循环次数的问题
while负责解决只知道结束条件而不确定循环次数的问题

do while
do{
//循环体
}while(条件); 注意:分号不能少

先执行循环体,在判断循环条件,该循环至少执行一次
适合先干活,再判断的特殊情况

循环嵌套:
循环语句中包含循环语句
外层循环执行一次,内存循环执行n次

跳转语句:
goto 可以在函数内任意跳转
标签名:
goto 标签名;

goto可能会破坏已经设计好的分支或循环语句,因此绝大多数公司禁止使用在驱动编程时特别适合处理异常break1、在switch语句中,可以关闭执行开关2、在循环语句中,可以跳出一层循环continue结束本次循环,直接进入下一次循环return1、返回一个数据给函数的调用者2、结束函数的执行,跳转到调用该函数的位置

课后作业

1、计算所有的三位水仙花数

#include<stdio.h>
int main(){int a,b,c;for(a=1;a<=9;a++){for(b=0;b<=9;b++){for(c=0;c<=9;c++){if(a*100+b*10+c==a*a*a+b*b*b+c*c*c){printf("%d  ",a*100+b*10+c);} }}  }return 0;}

2、输入一个正整数,判断是否为素数
``

#include<stdio.h>
int main()
{int m=0,n=1;int i;scanf("%d",&m);for(i=2;i<m;i++){if(m%i==0) { n=0;break; }}if(n==1)printf("是素数");else printf("不是");}
#include<stdio.h>
int main()
{int m=0,n=1;int i;scanf("%d",&m);for(i=2;i<m;i++){if(m%i==0) { n=0;break; }}if(n==1)printf("是素数");else printf("不是");}

``
3、输入一个正整数,判断是否为回文数

#include<stdio.h>
#include<stdlib.h>
int main()
{int num,k,n=0;scanf("%d",&num);k=num;while(k>0){n=n*10+k%10;k=k/10;}if(n==num)printf("是回文数");elseprintf("不是");}

4、不使用循环来计算n的阶乘

#include<stdio.h>
#include<stdlib.h>
int main(){int  n;int i=1;int sum=1;scanf("%d",&n);START:if(i<=n){sum*=i;  i++;goto START;}printf("%d",sum);return 0;  }

5、输入一个日期(yyyy-mm-dd)计算出该日期距离1年1月1日过了多少天

#include<stdio.h>
int main()
{int y,m,d;int i,allday,month,day;scanf("%d%d%d",&y,&m,&d);allday=(y-1)*365;for(i=1;i<m;i++){switch(i){case 1:case 3:case 5:case 7:case 8:case 10:case 12:allday+=31;break;case 4:case 6:case 9:case 11:allday+=30;break;case 2:allday+=28;break;}}day=d-1;allday=allday+day;
printf("共有%d天",allday);}

6、打印9*9乘法表

#include<stdio.h>
int main()
{int x,y;for(x=1;x<10;x++){for(y=1;y<10;y++){printf("%dx%d=%d  ",x,y,x*y);}printf("\n");}}```

从0开始学习C语言————C语言简介,数据类型及分支语句相关推荐

  1. c语言判断闰年_C语言入门教程(五)分支语句

    最近几天有点小事情给耽误了,不过有时间我一定会坚持把C语言的教程写完!!!加油~~ 1.if else 分支语句可以从几组语句中选择一组执行 if关键字可以用来编写分支语句 if分支使用一个布尔值决定 ...

  2. else应输入一个语句是什么意思_Python学习基础篇 -4: Python中的转弯---分支语句

    前言:本专栏以Python为主题,并尽可能保持每星期两到三更,直到将Python的基础知识浅析和讲解完毕,同时,有一定基础的同学可以移步 Python实战专栏 . 背景:对于该系列文章的前三篇,自己读 ...

  3. 《ANSYS 14.0超级学习手册》一第2章 高级应用的基石——APDL

    本节书摘来自异步社区<ANSYS 14.0超级学习手册>一书中的第2章,作者 张建伟 , 白海波 , 李昕, 更多章节内容可以访问云栖社区"异步社区"公众号查看 第2章 ...

  4. 《FLUENT 14.0超级学习手册》——第1章 流体力学与计算流体力学基础1.1 流体力学基础...

    本节书摘来自异步社区<FLUENT 14.0超级学习手册>一书中的第1章,第1.1节,作者: 唐家鹏 更多章节内容可以访问云栖社区"异步社区"公众号查看. 第1章 流体 ...

  5. c语言入门自学手机版,C语言入门学习app下载-C语言入门学习app最新版下载 V1.0.2-友情手机站...

    C语言入门学习app是一款0基础自学软件,这里有着丰富C语音相关课程学习,大家在这里是可以便捷搜索查找,随时都是可以找到适合感兴趣课程学习,都是一些优质课程知识提供大家,学员在这里是可以高效学习,海恩 ...

  6. c语言入门自学手机版,C语言入门学习软件下载-C语言入门学习手机版v1.0.2 - 起点软件园...

    C语言入门学习是一款最新推出上线于安卓手机平台的专业编程学习软件,C语言入门学习app收录了海量入门视频课程,清晰易懂的详细讲解专为刚入门学习C语言的小白量身打造,不同章节都有相应的习题,根据习题成绩 ...

  7. 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter

    23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter 2016-07-22 (www.cnblogs.com/icmzn) 模式理解 1. Adapter 定义 ...

  8. 选择学习“下一个”程序语言

    今天这篇文章筛选出一些主流编程语言,对语言特性与环境稍作介绍,希望可以帮助到一些编程初学 者与有兴趣学习编程的朋友,供大家了解与选择,少走弯路.Java.C++.C#.Python.PHP当然,这些仅 ...

  9. 《Go语言圣经》学习笔记 第四章 复合数据类型

    <Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...

最新文章

  1. 3、mybatis主配置文件之settings
  2. VTK:Utilities之Box
  3. 安卓SQLiteOpenHelper使用说明
  4. 玩够了没,开始奋斗吧?
  5. Shell编程入门(第二版)(上)
  6. open() 函数以 w+ 模式打开文件
  7. MongoDB 核心将支持全文搜索功能 (2.3.2)
  8. 面试官: Flink双流JOIN了解吗? 简单说说其实现原理
  9. 计算机视觉——全卷积网络(FCN)的学习笔记
  10. php strpbrk,PHP 字符串
  11. Ubuntu18.04下解决Qt出现qt.qpa.plugin:Could not load the Qt platform plugin “xcb“问题
  12. MyEclipse中VSS的使用详解
  13. Error information: “Error: SignerSign() failed.“ (-2147012889/0x80072ee7)
  14. 菜鸟html代码在线,html菜鸟教程,HTML新手如何快速入门
  15. 关于java基础知识的代码引用
  16. dms档案资料管理系统(源码)
  17. 一个商品SKU是怎么生成的 1
  18. 智慧工厂是什么 智慧工厂方案举例 智慧工厂案例
  19. MySQL的启动、停止、重启
  20. 【雷达基础知识】-------德雅村支书第三更(雷达距离方程的讲解,原创内容,转载请标注德雅村支书)

热门文章

  1. c++正则表达式 日期格式匹配
  2. 圆周率中包含你的生日吗
  3. 【总结】10.26.2017 考试总结与解题报告
  4. LAN技术 -- ARP、iStack、CSS
  5. 6 笔记搭建一个个人网站——邮箱配置
  6. ITsMine在中国互联网安全大会(ISC)上被评为十大最具创新性的网络安全创业公司之一
  7. 阿里旺旺 v10.00.08C 官方版
  8. C语言项目实战:《国际象棋》零基础项目,200 行源代码示例
  9. 计算机二级excel考点大全,【计算机二级之Excel】考点汇总
  10. 工业用THOMAS 776 SEK197,776 SEL202,776 SEK203脱水机的特征和用途