c语言学习第二天

复习:
gcc把C代码变量成可执行程序的过程:
1、把程序员所编写的C代码变量成标准的C代码:
gcc -E hello.c 会把预处理的结果显示到屏幕上。
gcc -E hello.c -o hello.i 把预处理的结果输出到文件中,生成.i结尾的预处理文件。
2、把预处理的结果翻译成汇编代码:
gcc -S hello.i 生成以.s结尾的汇编文件。
3、把汇编代码翻译成二进制指令:
gcc -c hello.s 生成以.o结尾的目标文件。
4、把若干个目标文件合并成可执行文件
gcc a.o b.o c.o … 默认会成一个a.out的可执行程序,执行的指令是./a.out
gcc hello.o -o hello 也可以使用-o参数指定可执行文件的名字。
注意:gcc hello.c 包含了以上四个步骤,gcc hello.c && ./a.out 在代码不出错的情况下,编译并执行。
gcc常用的编译参数:
-E 预处理
-S 生成汇编文件
-c 生成目标文件
-o 指定输出结果的文件名
-l 指定链接库的库名,例如:sqrt、pow等数学函数时,需要额外链接数学库 -lm
-L 指定库文件的路径
-I 指定头文件的路径
-D 编译时进行宏定义
-g 编译时添加调试信息,这样编译出来的可执行文件可以使用gdb进行调试
-Wall 显示所有警告
-Werror 把警告当错误处理
-std 指定编译器要遵循的语法标准,常用的有:-std=gnu89 -std=gnu99 -std=gnu11
C语言文件的类型:
.h 头文件
.c 源文件
.i 预处理文件
.s 汇编文件
.o 目标文件
.a 静态库文件
.so 动态库文件(共享库文件)
.gch 头文件的编译结果,为了检查头文件的语句而编译产生的,立即删除
C语言基本的数据类型:
整型:
有符号:最高位的二进制位用于表示正负符号,0表示正数,1表示负数,signed关键字可以省略。
signed char 1 -128~127
signed short 2 -32768~32767
signed int 4 +/-以2开对的10位整数
signed long 4 Linux64为8其他为4
signed long long 8 +/-以9开头的19位整数
无符号:所有的二进制位都用来表示数据,只能表示正数
unsigned char 1 255
unsigned short 2 65535
unsigned int 4 以4开头的10位整数
unsigned long 4|8
unsigned long long 8 以18开对的20位整数
标准库中对无符号整型进行的封装,包含stdint.h头文件就可以使用。
uint8_t uint16_t uint32_t uint64_t size_t time_t
浮点型:
单精度:float 4
双精度:double 8
高精度:long double 12/16
小数点后六位有效,采用科学计算数法存储,在运算时需要进行格式转换,所以它们的运算速度比整型要慢,编程时尽量使用整型数据。
模拟:
布尔:先有的C语言有出现的布尔类型,所以C语言中没有真正的布尔类型,以打补丁的方式增加了bool,但需要包含stdbool.h头文件。
bool true false
字符:就是使用整数模拟的,以ASCII表中的对应关系为准。
‘0’ 48
‘A’ 65
‘a’ 97
占位符:
%hhd %hd %d %ld %lld
%hhu %hu %u %lu %llu
%f %lf %Lf %c

常量:
常量就是在程序运行过程中不能改变的量,C语言中的常量有:字面值常量、宏常量、枚举常量。
‘a’ char 类型的字面值常量
100 int 类型的字面值常量
3.14 double 类型的字面值常量
100u unsigned int 类型的字面值常量
100lu unsigned long 类型的字面值常量
100llu unsigned long long 类型的字面值常量
3.14f float 类型的字面值常量
3.14l long double 类型的字面值常量

格式化输出:
%nd 数据至少显示n个字符宽度,不够则补空格,默认右对齐。
%-nd 数据至少显示n个字符宽度,不够则补空格,左对齐。
%0nd 数据至少显示n个字符宽度,不够则补0,默认右对齐。
%.mf 小数后显示m位,不够则补0,多余的四舍五入。
%n.mf 小数后显示m位,不够则补0,多余的四舍五入,数据至少显示n个字符宽度(不数点占一个字符宽度),不够则补空格,默认右对齐。
%0n.mf 小数后显示m位,不够则补0,多余的四舍五入,数据至少显示n个字符宽度(不数点占一个字符宽度),不够则补0,默认右对齐。
%-n.mf 小数后显示m位,不够则补0,多余的四舍五入,数据至少显示n个字符宽度(不数点占一个字符宽度),不够则补空格,左对齐。
%g 按实际情况显示小数后的数据,不显示多余的0。

运算符:
算术运算符:+ - * / %
整型数据使用/运算的时候,结果会省略小数点后面的数据。
/ % 都是进行除法运算,/运算结果是商,%运算结果是余数,它们除数都不能为0,编译器可能会产生警告但不会报错,程序运行是会出现"浮点数例外,核心已转储"的错误,程序会异常退出。
关系运算符:> < >= <= == !=
运算结果是布尔值,但C语言中没有真正的布尔类型,所以用0(假)和1(真)代替。
10 < num < 100 在数学中表示的是num的取值范围,但在C语言中它是一个表达式,运算结果永远为真,与数学中的运算规则不同。
使用 == 运算符时,要把变量放在右边,常量放在左边,防止少写一个=的情况:
num == 100;
100 == num; // 建议这样写
逻辑运算符: && || !
会先把运算对象转换成布尔值,0值转换成假,非0值转换成真,再进行计算。
A && B 一假即假
A || B 一真即真
!A 求反,它是单目运算符,比&&、||的运算级别高
短路特性:当表达式的左边已经可以确定表达式的结果时,右边的不再计算,合理使用的短路特性可以实现精简的if语句。
if(num < 100)
{
num = 123;
}
num < 100 && (num=123) 此代码的功能与上面的if语句相同。
自变运算符:++/–
它们的运算对象只有一个,所以也叫单目运算符,它们的运算对象必须是变量,它们可以上变量值自动加1或减1,整型和浮点型变量都可以使用。
前自变:++/–i 变量i的值会立即加1或减1
后自变:i++/-- 变量的值不会立即改变,会在执行下一行代码前加1或减1。
三目运算符:[1] ? [2] : [3]
由于运算对象有三个,所以叫三目运算符,也是唯一的三目运算符。
首先判断[1]部分值转换成布尔值,为真则运算[2]部分,为假则运算[3]部分,相当于精简的 if else 结构。
注意:三目运算符中不能使用 break continue return goto 等流程控制语句,因为三目运算符形成的是表达式,必须有运算结果,所以不能中途跳转。
赋值运算符:= += -= *= /= …
num += 10 <=> num = num + 100;
num -= 10 <=> num = num - 100;
字节运算符:sizeof
它不是函数,如果运算对象变量而不是表达式,可以不使用小括号,它是C语言32个关键字之一,用于计算出类型在内存中所占用的字节数。
注意:它不计算小括号中的表达式,只是推算运算结果的类型,然后计算出该类型在内存中所占用的字节数。
位运算符:& | ~ ^ << >>
该类型运算符需要进制转换、原码、反码、补码等相关知识,后期再讲。

类型转换:
前提:只有相同类型的数据才能在一起运算符,不同类型组成的表达式必须先转换成同一种类型再进行计算。
自运算类型转换(隐式类型转换):
1、以不丢失数据为基础
2、字节少的向字节多的转换
3、有符号向无符号转换
4、整型向浮点型转换
5、char 和 short 会优先转换成int类型
强制类型转换:
(目标类型)数据 会把数据强制转换成目标类型,但这种转换出的结果可能出现数据丢失,慎重使用。

if分支:
if(条件) // 单分支
{
// 条件为真执行此处代码
}

if(条件) // 双分支
{
    // 条件为真执行此处代码
}
else
{
    // 条件为假执行此处代码
}

if(条件1) // 多分支
{
    // 条件1为真执行此处代码
}
else if(条件2) // 可以有多个
{
    // 条件2为真执行此处代码
}
else 
{
    // 条件1和条件2都为假执行此处代码
}

练习1:输入一个整数,判断是奇数还是偶数。
练习2:输入一个年份,判断是否是闰年。
    能被4整除,但不能被100整除,或者能被400整除
练习3:输入一个整数,判断是否是水仙花数。
    abc == a*a*a + b*b*b + c*c*c
    153,370,371,407
练习4:输入三个整数,从小到大显示,注重效率。

开关语句:
switch(整型数据)
{
case v1: 语句1;
case v2: 语句2;
case v3: 语句3;

default: 语句;
}
case 后的数据必须是整型常量,它会与小括号中的数据进行比较,如果相等则打开执行开关,如果开关没有关闭接下的语句都会执行。
break 语句可以关闭执行开,如果每个case后都跟一个break就形成了多分支结构
如果所有的case都没有匹配成功(都不相等),则default会打开执行开关,相当于多分支 if else 最后的 else。
练习5:输入一个月份,判断季节。
1 2 3 春季
4 5 6 夏季
7 8 9 秋季
10 11 12 冬季
other 输入的月份有误
练习6:输入一个月份,判断该月有多少天,忽略闰年问题。
练习7:输入一个字符,如果是大写字母则转换成小写,如果是小写字母则转换成大写字母,如果是数字则*3显示,如果是其它字符则正常输出。
练习8:输入一个成绩,判断等级:
[100,90] A级
(90,80] B级
(80,70] C级
(70,60] D级
(60,0] E级
other 输入的成绩有误

gcc编译器特殊的switch用法:
    switch(整型数据)
    {
        case start1 ... end1: 语句1; break;
        case start2 ... end2: 语句2; break;
        case start3 ... end3: 语句3; break;
        default: 语句;
    }

for语句:
循环语句可以让一段代码反复执行多次,达到解决问题的目的。
for([1]; [2]; [3])
{
[4];
}
执行流程:
1、为for循环做好准备工作,只执行一次。
2、判断条件,当条件为真时执行[4],否则结束for语句。
4、被反复执行的代码,也叫循环体。
3、改变循环条件,防止变成死循环。
1 2 4 3 2 4 3 2 4 3 … 2
一般使用一个循环变量(index->i)引用for的运行:
1、给循环变量赋初值,在C89说语法标准中,此位置不能定义循环变量,而在C99语法标准中可以。
2、检查循环变量的边界。
4、执行循环体。
3、循环变量自加或自减1。
for(int i=0; i<10; i++)
{
printf(“%d\n”,i);
}
练习9:输入一个整数,判断是否是素数(除1和它本身不能被其它数整除,也叫质数),例如:2 3 5 7 11。
练习10:输入一个整数,判断是否是完美数,例如:6==1+2+3。
练习11:计算出所有的水仙花数。

for循环的特殊格式:
    for(;;) // 死循环
    {

    }

    int i = 0;
    for(; i<10; i++)
    {

    }

    int i = 0; 
    for(; i<10; )
    {
        
    }

while语句:
while(条件)
{
// 循环体
}
while的执行流程:当条件为真时,执行循环体,条件为假时结束while语句。
它与省略[1][3]部分的for语句功能一样,可以看是精简版的for语句,for适合解决循环次确定的问题,while适合解决只知道循环条件但不确定具体的循环次数的问题。

练习11:输入一个整数,倒序显示,例如:1234 显示:1 2 3 4
    
练习12:假如小明买了10万元股票,股市大跌还剩2万元,接下来股市好转,假如每天上涨1个百分点,多少天以后才能回本。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言学习计划(60天) 第一周(7天) - Day 1:学习C语言基本概念和语法规则 - Day 2:学习C语言数据类型和变量 - Day 3:学习C语言运算符和表达式 - Day 4:学习C语言控制结构之if语句 - Day 5:学习C语言控制结构之switch语句 - Day 6:学习C语言循环结构之while语句 - Day 7:学习C语言循环结构之for语句 第二周(7天) - Day 8:学习C语言函数 - Day 9:学习C语言指针 - Day 10:学习C语言数组 - Day 11:学习C语言字符串 - Day 12:学习C语言结构体 - Day 13:学习C语言文件操作 - Day 14:练习使用C语言开发简单的控制台程序 第三周(7天) - Day 15:学习C语言内存管理 - Day 16:学习C语言动态内存分配 - Day 17:学习C语言预处理器 - Day 18:学习C语言宏定义 - Day 19:学习C语言枚举 - Day 20:学习C语言位运算 - Day 21:练习使用C语言开发简单的应用程序 第四周(7天) - Day 22:学习C语言递归 - Day 23:学习C语言排序算法 - Day 24:学习C语言查找算法 - Day 25:学习C语言数据结构之链表 - Day 26:学习C语言数据结构之栈和队列 - Day 27:学习C语言数据结构之树 - Day 28:练习使用C语言开发简单的数据结构应用程序 第五周(7天) - Day 29:学习C语言多线程编程 - Day 30:学习C语言网络编程 - Day 31:学习C语言图像处理 - Day 32:学习C语言音频处理 - Day 33:学习C语言视频处理 - Day 34:学习C语言游戏开发 - Day 35:练习使用C语言开发简单的图像、音频、视频处理程序和游戏 第六周(7天) - Day 36:学习C语言算法优化 - Day 37:学习C语言代码调试与测试 - Day 38:学习C语言代码规范和文档 - Day 39:学习C语言代码版本管理 - Day 40:学习C语言代码安全和防护 - Day 41:学习C语言代码性能优化 - Day 42:练习使用C语言开发高质量、高效率、高安全性、高可维护性、高可读性的程序 第七周(7天) - Day 43:学习C语言面向对象编程 - Day 44:学习C语言泛型编程 - Day 45:学习C语言函数式编程 - Day 46:学习C语言元编程 - Day 47:学习C语言并发编程 - Day 48:学习C语言反射编程 - Day 49:练习使用C语言开发高级编程范式的程序 第八周(7天) - Day 50:学习C语言扩展库和框架 - Day 51:学习C语言开源项目和社区 - Day 52:学习C语言开发环境和工具 - Day 53:学习C语言代码优化和性能测试工具 - Day 54:学习C语言代码检查和版本管理工具 - Day 55:学习C语言图形界面开发工具和框架 - Day 56:练习使用C语言开发高质量、高性能、高可维护性、高可读性、高效率、高安全性、高可扩展性、高易用性的程序 第九周(7天) - Day 57:学习C语言嵌入式开发 - Day 58:学习C语言物联网开发 - Day 59:学习C语言人工智能开发 - Day 60:练习使用C语言开发嵌入式系统、物联网系统、人工智能系统 总结: 通过60天的学习和练习,我们可以掌握C语言的基本语法和常用技巧,熟悉C语言的开发环境和工具,了解C语言程序设计的主要思想和方法,掌握C语言高级编程范式和开发技术,达到C语言程序设计的高水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值