C语言从“hello word”到深入【第一节·C语言入门基础】

本文介绍了C语言的基础知识,包括编程入门示例、变量声明、类型定义、运算符优先级、常量使用、格式化输出以及存储类和类型转换等内容,帮助读者掌握C语言的核心概念。
摘要由CSDN通过智能技术生成

目录

认识C语言

简单的C语言编程 " hello world"

C语言的结构说明

程序的注释

变量

声明变量的类型

  定义变量

变量的赋值

printf使用格式

常量

字符常量

字符串常量

整型常量

标识常量

C语言中的运算符

运算符的优先级

c语言中的强制类型转换

c语言中的隐式强转


认识C语言

  C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C语言是一门面向过程的编译型语言,它的运行速度极快。C语言是计算机编程的核心语言,操作系统、硬件驱动、关键组件、数据库等都离不开C语言;不学习C语言,就不能了解计算机底层。

  当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。

简单的C语言编程 " hello world"

#include <stdio.h>

int main()
{
    printf("hello world"); //在终端标准输出"hello world"
    return 0;
}  

C 程序主要包括以下部分:

  • 预处理器指令
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释

C语言的结构说明

简单来说,一个C语言程序就是由若干头文件和多个函数组成,但一个C程序中有且只有一个主函数(main函数);

#include <stdio.h>  :包含输出头文件,因为代码中使用printf等函数,所以要加上包含输出函数的头文件; #include 是一个预处理命令,用来引入头文件。 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。

int main(){}:为主函数,函数的类型为int 类型。c程序代码的入口就是从main()开始执行的,也是c语言执行代码唯一的入口,是c程序中必不可少的
printf:在终端显示内容;
main函数中的return 0; 用来终止 main() 函数,并返回值 0;

分号 ;

在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑语句的结束。

程序的注释

为方便代码的阅读,合适的添加注释也是良好的代码习惯;

单行注释:    // 这是注释

多行注释:    /* 这是注释

                               多行注释*/

变量

声明变量的类型

在C语言中使用变量都必须遵循先声明再使用的原则,以下是声明变量常用的类型
变量其实是程序可操作的存储区的名称。C语言中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中;
局部变量存放在栈区;全局变量存放在静态区;关于什么是栈区,什么是静态区我们后面讲解,当前只需要了解即可;

常见的基本类型:

 字符类型

char                      字符数据类型               有符号     1字节

unsigned char       无符号字符数据类型    1字节

整型

short                      短整型               有符号      2字节

unsigned short      无符号短整型     2字节

int                          整形                   4字节

long                       长整型                8字节

long long               长长整型             8字节

实型

float                       单精度浮点数      4字节

double                   双精度浮点数      8字节

枚举类型

enum                    4字节

构造类型:

数组

char [20]; 20字节

int [3]; 12字节

结构体

struct 

联合体(共用体)

union 

  定义变量

定义格式(单个定义): 变量类型   变量名;

(多个相同类型定义): 变量类型   变量名,变量名,变量名;

变量名的命名规则:

  1. 只能包含数字,字母,下划线,不能以数字作为开头;

  2. 不能和c中的关键字重复

  3. 变量名命名的时候尽量做到见名知意

定义变量实例

#include <stdio.h>

int main()
{
  int a;        //定义一个整型a
  int b=10;    //定义一个整型b 并赋值为10;
  
  a = 20;    //将定义好的整型赋值为20;

  printf("a = %d,b = %d\n",a,b);  //打印a,b的值;


}

变量的赋值

1.先声明再赋值

     int  a;

     a = 10;

2.声明的同时赋值

    int  a = 10;

⚠注意:在赋值时不允许连续赋值如:int  a = b = c = 10;

变量的使用实例
字符类型的变量

#include <stdio.h>

int main(int argc, const char *argv[])
{
    char a;     //定义了a变量,占用1个字节,a的值是随机值
    char b = '0'; //定义b变量,占用1字节,b的值是48 
    char c = 97;  //定义c变量,占用1字节,c的值是97
                                                                                
    printf("a = %c\n",a); //%c打印的是字符
    printf("b = %c\n",b); 
    printf("c = %c\n",c);

    return 0;
}

注意防止字符变量越界问题

#include <stdio.h>

int main(int argc, const char *argv[])
{
	char a = 128;   // -128,127

	printf("a = %d\n",a); //a的范围最大是127,当赋值128越界之后,结果是-128
                          //所以在使用变量时一定要防止越界问题
    					  
	return 0;
}

整型的变量

整型变量实例

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int	a = 123456;
	int b = 0b10110;
	int c = 0101;
	int d = 0xaacc;
	
	printf("a = %d\n",a);  //123
	printf("b = %#x\n",b); //0x16
	printf("c = %#o\n",c); //0101
	printf("d = %#x\n",d); //0xaacc
	return 0;
}

浮点数类型使用实例

#include <stdio.h>

int main(int argc, const char *argv[])
{
    float a=2.165;

    printf("a = %f\n",a);   //保留小数点后6位 2.165000
    printf("a = %.2f\n",a); //2.16  进行四舍五入
    printf("a = %g\n",a);   //保留有效位2.165                                      
    return 0;
}

printf使用格式

格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。

格式为:

printf(“字符串\n”); //用法1,其中\n表示换行;

printf(“输出控制符”, 输出参数); //用法2

printf(“输出控制符1, 输出控制符2 …”, 输出参数1, 输出参数1); //用法3

⚠注意:格式符的个数要与变量、常量或者表达式的个数一一对应;

类型

控制格式

实例

char

%c

printf("%c\n",a);

int

%d

printf("%d\n",a);

int

%#o

printf("%#o\n",a);

int

%#x

printf("%#x\n",a);

short

%d

printf("%d\n",a);

unsigned int

%u

printf("%u\n",a);

long

%ld

printf("%ld\n",a);

long long

%lld

printf("%lld\n",a);

float

%f

printf("%f\n",a);

double

%lf

printf("%f\n",a);

常量

常量可以理解为是常规的变量,常量的值在定义后不能进行修改。

常量可以直接在代码中使用,也可以通过定义常量来使用。
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。

字符常量

字符常量是通过单引号表示的,字符常量赋值给字符类型的变量。
'a' ==>97                                                                                                                                             '\n' ==>10                                                                                                                                       '\0' ==>0


字符串常量

在c语言中没有字符串类型,如果想要存储字符串就使用字符数组,字符串通过双引号表示
"hello world"
"ni hao beijing"

整型常量

在c语言中将整型常量赋值给整型的变量
0b10101 :二进制整型常量
50 :十进制整型常量
0775 :八进制整型常量
0xfac; :十六进制整型常量

标识常量

#define N 5     //宏定义;

#include <stdio.h>

#define N 10    //定义一个N为10的宏

int main(int argc, const char *argv[])
{
    int a = N; //将N的值赋值给a
            
    printf("a = %d\n",a);  //打印a的值,查看是否赋值成功
                                                                                
    return 0;
}

C 语言存储类

存储类定义 C 程序中变量/函数的存储位置、生命周期和作用域。

这些说明符放置在它们所修饰的类型之前。

C 程序中可用的存储类:

  • auto
  • register
  • static
  • extern

auto 存储类

auto 存储类是局部变量默认的存储类。

定义在函数中的变量默认为 auto 存储类,意味着它们在函数开始时被创建,在函数结束时被销毁。

register 存储类

register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个字),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)。

register 存储类定义存储在寄存器,不能直接取地址,所以变量的访问速度更快,在需要频繁访问的变量上使用 register 存储类可以提高程序的运行速度。

static 存储类

static 意为静态的;存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。静态变量在程序中只被初始化一次,即使函数被调用多次,该变量的值也不会重置。

static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在当前的文件内。

全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。

extern 存储类

extern 存储类用于定义在其他文件中声明的全局变量或函数。当使用 extern 关键字时,不会为变量分配任何存储空间,只是指示编译器该变量在其他文件中定义。

C语言中的运算符

  • 单目运算符:+(正) -(负) & (取地址) *(取地址中内容) ++ (自加1) --(自减1)
    !(取反) ~(按位取反)
    + - & * ++ -- ! ~ 
     

  • 算术运算符:+(加) - (减) *(乘) /(除) %(取余)

    + - * / %
     

  • 移位运算符

    << >>
     

  • 关系运算符:
    >(大于) <(小于) ==(等于) !=(不等于)=(大于等于) <=(小于等于)
    > < == != >= <=
     

  • 与运算符

    &

    & :按照位进行与运算
    0 & 0 结果是0
    0 & 1结果是0
    1 & 1结果是1
    0和任何数相与都为0,1和任何数相与都为任何数
     

  • 异或运算符

    ^
    ^ :按照位进行异或
    0 ^ 0 = 0
    0 ^ 1 = 1
    1 ^ 1 = 0
    相同为假,相异为真
     

  • 或运算符

    |
    | :按照位进行或运算
    0 | 0 = 0
    0 | 1 = 1
    1 | 1 = 1
    0和任何数相或都为任何数,1和任何数相或都为1
     

  • 逻辑运算符

    &&(逻辑与)
    ||(逻辑或)
     

  • 条件运算符

    ?:
    表达式1?表达式2:表达式3;
    表达式1如果为真,整个表达式的结果就是表达式2
    表达式1如果为假,整个表达式的结果就是表达式3
     

  • 赋值运算符

    = += -= *= /= %= <<= >>= &= |= ^=

    a+=b; ===> a = a+b;
    a=b 将b的结果赋值给a
    a+=b; 等价于 a = a+b;
    a |= (1<<3);等价于 a = a | (1<<3);
    a <<= 1; 等价于 a = a<<1;
     

  • 逗号运算符

    (表达式,表达式)

运算符的优先级

口诀:单算移关与,异或逻条赋;

c语言中的强制类型转换

强制类型转换,在c语言中如果使用赋值运算符等号两边不是相同的类型,就可以使用强制类型转换
    将等号右侧强制类型转换为左侧的类型
    语法格式:(类型)表达式;
    错误的写法:类型(表达式);

强转类型转换实例

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int c=12345;  //定义一个int类型的c;
    char a;     // 定义一个char类型的a;
    a = (char)c;  //要将c赋值给a,由于c和a类型不一,需要将int类型的的c强转为char类型

    printf("a = %#x\n",a); // 打印a的值,查看是否赋值成功;
    return 0;
}


 

c语言中的隐式强转

隐式类型转换的规则:

char 和 unsigned char ===>unsigned char

char 和short ===>short

short和int ===>int

int 和unsigned int ===> unsigned int

int 和long ===>long

int 和long long ===> long long

int 和float ===>float

float 和double ===>double

整型提升问题:

  1. 如果一个char类型和short类型参与运算,都会提升为int类型

  2. 如果float类型参与运算,默认会提升为double类型

第一节完!
第二节为(c语言输入输出,控制语句等)icon-default.png?t=N7T8http://t.csdnimg.cn/8Gvfz有错误或意见反馈请联系邮箱z1600306511@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值