嵌入式之路,贵在日常点滴
---阿杰在线送代码
目录
什么是程序?
什么是计算机语言?
一、C程序的基础框架
二、变量与常量
2.1 变量
2.1.1 变量使用
2.1.2 变量命名规范(标识符)
2.2 常量
三、数据类型
四、关键字
五、关于输入输出
printf/打印
scanf/扫描键盘
getchar、 putchar、puts、gets
什么是程序?
沃思(Nikiklaus Wirth)提出一个公式:算法+数据结构=程序
数据结构:对数据的描述。
程序中用到哪些数据,是什么类型:整型、浮点型、字符型、复合型(结构体、数组)。
用哪种方式组织数据(数据结构):链表、树、图
算法:对 *** 作的描述,要求计算机的 *** 作步骤对数据产生作用。
对于一名嵌入式工程师,大部分只涉及到简单数据型(如1到100的和)、逻辑型(如逻辑条件分支判断等)。
进程/任务: 跑起来的程序叫做进程,动态概念
什么是计算机语言?机器语言-》汇编语言-》高级语言
机器语言是计算机能直接运行的语言,是二进制语言,属于低级语言;
汇编语言是面向机器的低级语言,不能被机器直接识别,需要编译;
高级语言是从人类的逻辑思维角度出发的计算机语言,不能被机器直接识别,需要编译。
机器语言
机器语言是用二进制代码表示的语言,是计算机唯一可以直接识别和执行的语言,它具有计算机可以直接执行、简洁、运算速度快等优点,但它的直观性差,非常容易出错,程序的检查和调试都比较困难,此外对机器的依赖型也很强。
汇编语言
汇编语言是面向机器的程序设计语言,它是为了解决机器语言难以理解和记忆的缺点,用易于理解和记忆的名称和符号表示机器指令中的 *** 作码,这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序把汇编语言翻译成机器语言的过程称为汇编。
高级语言
高级语言高级语言为用户提供了一种既接近与自然语言,又可以使用数学表达式,还相对独立于机器的工作方式。与汇编语言一样,机器也不能直接执行用高级语言编写的程序。高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如目前流行的c,c++,C#,python,java等等。
涉及到CMD指令请到此篇文章查看cmd常用指令
二、变量与常量 2.1 变量变量:在程序运行过程中,其值可以改变。
2.1.1 变量使用变量先声明(定义)后使用
(注:声明必须含有要素a,b)
int a = 3;
int b ;
b=a+1;
变量三要素:
- 变量类型
- 变量名
- 变量值
类型 变量名 变量值
int a = 1;
变量四规则:
- 变量类型
- 变量名
- 变量值
- 存储单元
(一个内存空间就像一个蜂巢快递柜一样,里面的快件会变,就像内存的数据会变一样,所以叫做变量)
2.1.2 变量命名规范(标识符)什么是标识符
- 从字面上理解,就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来
- 其实标识符的作用就跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字
- C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称, 这个名称就是标识符
- 综上所述: 程序员在程序中给函数、变量等起名字就是标识符
标识符命名规则
- 以字母,数字,下划线组成,第一个字符不能是数字。
- 不能与关键字一样。
- 不能包含空格,标点符号。
- 标识符严格区分大小写, test和Test是两个不同的标识符
标识符命名规范
- 见名知意,能够提高代码的可读性
- 驼峰命名,能够提高代码的可读性
- 驼峰命名法就是当变量名或函数名是由多个单词连接在一起,构成标识符时,第一个单词以小写字母开始;第二个单词的首字母大写.
- 例如: myFirstName、myLastName这样的变量名称看上去就像驼峰一样此起彼伏
常量:在程序运行过程中,其值不能改变。
符号常量
#define PI 3.14
转义字符
三、数据类型C语言中有4大类数据类型:基本类型、构造类型、指针类型、空类型
强制转换
四、关键字什么是关键字?
- 关键字,也叫作保留字。是指一些被C语言赋予了特殊含义的单词
- 关键字特征:
- 全部都是小写
- 在开发工具中会显示特殊颜色
- 关键字注意点:
- 因为关键字在C语言中有特殊的含义, 所以不能用作变量名、函数名等
- C语言中一共有32个关键字(在编译器里都是有特殊颜色的。)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
char | short | int | long | float | double | if | else |
return | do | while | for | switch | case | break | continue |
default | goto | sizeof | auto | register | static | extern | unsigned |
signed | typedef | struct | enum | union | void | const | volatile |
#include
int main()
{
int a_data = 3; //c c++ java 一个分号代表一个语句结束
float f_data = 2.3;
char c_data = '#';
int data = 10;
int chushu = 3;
float result;
result = (float)data/chushu; //强制转换,把整数给小数
//占位符,是以%开头,注释是程序员看到,编译预处理的时候,会被清除
printf("a=%d\n",a_data);
a_data = 100; //0000 0000 0000 0000 0000 0000 0110 0100
printf("修改后:a=%d\n",a_data);
printf("16进制输出a=0x%x\n",a_data);
printf("有一个小数f=%f\n",f_data);
printf("有一个字符c = %c\n",c_data);
printf("a_data的地址是%p\n",&a_data);
printf("result = %f\n",result);
printf("result2 = %f\n",(float)data/chushu);
return 0;
}
scanf/扫描键盘运行结果:
a=3
修改后:a=100
16进制输出a=0x64
有一个小数f=2.300000
有一个字符c = #
a_data的地址是000000000061FE08
result = 3.333333
result2 = 3.333333
如果有多少变量需要输入,最好给分开,有3个变量,就3个scanf,不容易出错。
地址符号&
scanf格式中有什么字符,输入的时候也要输入(原样输入)
注意字符
题
分析
getchar、 putchar、puts、gets- getchar: 从键盘获得一个字符
- putchar: 向屏幕输出一个字符
- puts:向标准输出设备屏幕输出字符串并换行
- gets:从标准输入中读取一行文本,并存储于作为参数传递给它的数组中。一行文本由一串字符组成,以一个换行符('\n')结尾。在返回之前,gets函数丢弃换行符('\n'),取而代之的是以'\0'结尾。(涉及到数组,后面)
返回值:读取成功,函数返回与buffer相同的指针。读入过程中遇到EOF或发生错误,函数返回NULL指针。当返回值为NULL指针时可以用feof()和ferror()来判断函数是遇到EOF还是发生错误。
#include
/*
puts跟printf的区别
1. 自动加入换行符
2. printf支持多种花样输出,而puts就是输出字符串
*/
int main()
{
char c;
puts("请输入一个字符");
c = getchar();
puts("你输入的字符是");
putchar(c);
return 0;
}
运行结果:
请输入一个字符
a
你输入的字符是
a
#include
int main()
{
char a;
char b;
puts("请输入一个大写字母:");
scanf("%c",&a);
b = a + 32;
printf("你输入的字母对应的小写字母是:%c\n",a+32);
printf("你输入的字母对应的小写字母是:%c\n",b);
printf("测试使用getchar 和 putchar");
//getchar();//吸收回车符
putchar(getchar()+32);
return 0;
}
运行结果:请输入一个大写字母:
A
你输入的字母对应的小写字母是:a
你输入的字母对应的小写字母是:a
测试使用getchar 和 putchar*
思考:为什么后面的getchar 和 putchar函数不能正常输出呢。
我发现了,在上面的scanf获得字符时候,多了个回车符,需要给吸收掉
#include
int main()
{
char a;
char b;
puts("请输入一个大写字母:");
scanf("%c",&a);
b = a + 32;
printf("你输入的字母对应的小写字母是:%c\n",a+32);
printf("你输入的字母对应的小写字母是:%c\n",b);
printf("printf("测试使用getchar 和 putchar:\n"); ");
getchar();
//吸收回车符,来源于第9行。当你分多次连续scanf获得字符的时候,要注意回车符
putchar(getchar()+32);
return 0;
}
运行结果:
请输入一个大写字母:
A
你输入的字母对应的小写字母是:a
你输入的字母对应的小写字母是:a
测试使用getchar 和 putchar:
B
b
#include "stdio.h"
int main()
{
char c1 = 'C';
char c2 = 'h';
char c3 = 'i';
char c4 = 'n';
char c5 = 'a';
printf("经过运算后,得到的c1 = %c,c2 = %c,c3 = %c,c4 = %c,c5 = %c\n",c1+4,c2+4,c3+4,c4+4,c5+4);
putchar(c1+4);
putchar(c2+4);
putchar(c3+4);
putchar(c4+4);
putchar(c5+4);
return 0;
}
运行结果:
经过运算后,得到的c1 = G,c2 = l,c3 = m,c4 = r,c5 = e
Glmre
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)