黑马程序员----C语言入门十重奏之二相知

黑马程序员—-C语言入门十重奏之二相知

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
学习C语言就要先了解它是由什么样的东西构成的,知己知彼百战不殆么,当敌人一样的研究它,最后再向朋友一样的熟悉它,这样了解起来,学懂C语言其实就是分分钟的事情啦。
第一步 分析一下C语言的关键字
C语言由32个关键字组成
所谓关键字就是已被 C语言编辑工具本身使用, 不能作其它用途使用的字。
根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。
1 数据类型关键字
A基本数据类型(5个)
void [vɔɪd]:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
char [tʃɑr]:字符型类型数据,属于整型数据的一种
int [ɪnt]:整型数据,通常为编译器指定的机器字长
float [flot]:单精度浮点型数据,属于浮点数据的一种
double [‘dʌb!]:双精度浮点型数据,属于浮点数据的一种
B 类型修饰关键字(4个)
short [ʃɔrt]:修饰int,短整型数据,可省略被修饰的int。
long [lɔŋ]:修饰int,长整形数据,可省略被修饰的int。
signed [saɪnd]:修饰整型数据,有符号数据类型
unsigned [ʌn’saɪnd]:修饰整型数据,无符号数据类型
C 复杂类型关键字(5个)
struct [strʌkt]:结构体声明
union [‘junjən]:共用体声明
enum [i.nju:mə]:枚举声明
typedef [taɪpdɛf]:声明类型别名
sizeof [saɪzɑv]:得到特定类型或特定类型变量的大小
D 存储级别关键字(6个)
auto [‘ɔto]:指定为自动变量,由编译器自动分配及释放。通常在栈上分配
static [‘stætɪk]:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
register [‘rɛdʒɪstɚ]:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
extern [‘ɛkstɝn]:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的韵蟮囊桓觥耙谩?
const [‘kɔnstənt]:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
volatile [‘vɑlət!]:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值
A 跳转结构(4个)
return [rɪ’tɝn]:用在函数体中,返回特定值(或者是void值,即不返回值)
continue [kən’tɪnju]:结束当前循环,开始下一轮循环
break [brek]:跳出当前循环或switch结构
goto :无条件跳转语句(不稳定,禁止使用)
B 分支结构(5个)
if [ɪf]:条件语句
else [ɛls]:条件语句否定分支(与if连用)
case [kes]:开关语句中的分支标记
default [dɪ’fɔlt]:开关语句中的“其他”分治,可选。
C 循环结构(3个)
for :for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2…循环,其中2为循环条件
do :do循环结构,do 1 while(2); 的执行顺序是 1->2->1…循环,2为循环条件
while [hwaɪl]:while循环结构,while(1) 2; 的执行顺序是1->2->1…循环,1为循环条件 以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。
2.标识符
在程序中使用的变量名、函数名、标号等统称为标识符。 除库函数的函数名由系统定义外,其余都由用户自定义。 通俗的来说就是起名字。
命名规则:
(1)由字母、数字、下划线_或者美元符号$组成
(2)不能以数字开头
(3)不能与关键字重名
(4)区分大小写
命名规范并不是规则,是一般编写代码时命名习惯,可参照博客:

http://www.cnblogs.com/liujiahi/archive/2011/09/16/2196348.html
驼峰式命名规范例如:
1.userName
2.UserName

注意:swift开始xcode最新版的可以以中文命名标识符了,但是底层编译不可以通过。

3.变量
代表一个存储空间
变量类型+变量名
变量名严格遵守标识符的命名规范
变量定义后是有值的,为了防止变量原来的值对我们的程序产生影响,所以我们一般情况下要初始化变量。
    int a;
    float A;
    int $;
    int _;
变量的作用域
全局变量
定义在函数外部的变量
作用范围:从定义的位置开始,到文件末尾结束。

局部变量—内部变量,在函数()内或代码块(大括号括起来的就是一个代码块)内部作定义说明的,仅限于函数内部
`int f1(int a){int b,c。。。}`这里abc都是局部变量
相对来说的在代码块内部可以再定义和代码块外部同名的变量。是在代码块内部又申请了个存储空间,不影响外部的同名变量了
代码块结束—大括号结束后代码块里所有的东西都释放了。
`int main(int argc, const char * argv[])`{//xcode里,main里的参数现在影响未初始化变量
#include<stdio.h>
float score=89.9f;//全局变量
int main(int argc, const char * argv[]){
    int age;//局部变量
    printf("%d\n",age);
    {
        int age1=10;//局部变量
        printf("%d\n",age1);
        int age=100;//局部变量
        printf("%d\n",age);
    }
    printf("%d\n",age);
    //调用test()方法
    void test();
    test();
    return 0;
}
void test(){
    printf("test:score=%f",score);
}
注意:在Xcode离int main()里面的参数影响了未初始化局部变量的值—0,

变量为什么要区分类型
不同数据在内存中占用空间不同,运算方式也不同,计算机通过变量类型区分数据,调用时采用适合的方式,从而使数据的存储与运算都采用最佳的方式,避免空间浪费和提高效率

4.常量
  10;这样编译也没问题
  3.14;
固定不变的值叫常量
整型常量:二进制,十进制,八进制,十六进制
实型常量:单精度、双精度
字符型常量:普通字符、转移自负
字符串常量:与字符型常量不一样 
#include <stdio.h>
//不同类型的常量表示方法
int main(int argc, const char * argv[]) {
    //1整型常量
    //1)十进制常量,默认采用的
    10;
    18;
    //2)8进制常量以0开头,不可有8、9———045;076;
    045;
    076;
    //3)二进制整型常量以0b开头只有0和1-——0b11111111111111111111111111;
    0b11111111;
    0b100001;
    //4)十六进制常量以0x开头—0x———abf;
    0x456abcdef;
    //2.实型常量表示方法
    //单精度以f结尾
    2.3f;
    //双精度(默认)
    2.3; 
    //3.字符型常量表示(单个字符,不可写多了,编译不了)
    //用单引号('')括起来的字符
    'ewd';
    //转义字符常量
    '\n';
    '\t';
    '\\';  
    //字符串常量
    "fvdsaf";  
    return 0;
}
5.printf函数介绍
(“格式控制字符串”,输出项列表);
%d/%s/%c/%f…
%f默认输出六位小数,多出来的四舍五入了。有效数字是7位,第八位是无效数字
%.nf—n空值输出小数位数,多出来的是无效数字
double类型默认六位小数,有效数字是15位,多出来的就都是无效数字;
#include<stdio.h>
int main(){
/*域宽%mdm可以为正也可以为负,如果要输出位数大于域宽 按照数据实际位数输出。不足用空格补*/
    printf("%d\n",10);
    printf("%10d\n",10);
    printf("%-20d",10);
    //%0md不足用0printf("%0d\n",10);
    printf("%010d\n",10);
    printf("%0-2d\n",10);
    //转义字符前面都加个\,%%打印出一个%
    printf("a\tb\n");
    printf("a\\\n");
    printf("\'\n");
    //%m.n 一共m位,小数点后保留n位
     printf("%3.2f\n",3.2222);
    return 0;
}
6.scanf(阻塞式函数)
scanf(“格式控制字符串”,输入项的地址列表);将从键盘上接收到的字符存入地址列表里

注意事项:
1.接收单个变量值的时候,在输入值之前,如果空格,回车tab,都会被忽略
2.要求用空格隔开,若用逗号隔开第二个值就赋不上

int a=-1,b=-1;
    char ch;
    //混合输入有问题加上逗号就可以
    scanf("%d,%c,%d",&a,&ch,&b);
    printf("%d,%c,%d",a,ch,b);
    return 0;
    //关于*的使用,忽略*d赋值的数
    int a,b;
    a=b=-1;
    scanf("%d%*d%d",&a,&b);
    printf("%d,%d",a,b);

结果:1 2 3
1,3

 int age;
    scanf("%d\n",&age);//如果一不小心使用了\n,输入值后,随便输入个内容或者将\n原样输入
    printf("age=%d\n",age);
scanf函数运行原理
当用户输入内容后,用户输入的内容会被存放到scanf的输入缓冲区中
然后,scanf函数会根据格式控制字符串的要求从输入缓冲区依次取内容
如果取到的内容和我们格式要求一致,则把值存到变量中
如果格式不一致,则无法修改变量的值
    int a=-1,b=-1;
    char ch;
    scanf("%d%c%d",&a,&ch,&b);//存入scanf缓冲区的格式是:12 e 3空格也是字符,所以被ch取了,b取得是e与格式不符,所以值不变
    printf("%d,%c,%d",a,ch,b);

结果:12 e 3
12, ,-1
解决:建议如果整型和字符型混合的时候要加逗号输入

注意:scanf如果缓冲区有内容,则不会提示我们再输入值,如下,回车也赋值给了ch

    int a=-1,b=-1;
    char ch;
    scanf("%d",&a);
    scanf("%c",&ch);
    scanf("%d",&b);
    printf("%d,%c,%d",a,ch,b);
    return 0;

输入:
1
2
结果:
1,(换行)
,2
解决:第一个scanf后再加一个scanf(“%c”,&ch);或者加个getchar();

    int a=-1,b=-1;
    char ch;
    scanf("%d",&a);
//    scanf("%c",&ch);
    getchar();
    scanf("%c",&ch);
    scanf("%d",&b);
    printf("%d,%c,%d",a,ch,b);

变量易犯错总结:
如果不给变量初始化,数据是随机的,不确定

以上,就是今天为大家准备的C语言必须掌握的基础知识,相信大家掌握这些细枝末节后,相角一下学习英语的过程,也是从26个字母开始的,组词造句写文章,基础打好,比什么都重要。输入输出流是stdio.h,只要用到输入或者输出就必须引用这个库函数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值