文转码 C语言学习记录day 0

本文是C语言学习的第一天记录,介绍了C语言的基本概念、第一个C语言程序的编写、数据类型、变量与常量、字符串和注释,以及简单的选择语句。通过实例展示了如何在Visual Studio中创建和运行C程序,还探讨了数据类型如int、char的大小,以及变量的作用域和生命周期。此外,还解释了字符串中的转义字符和注释的使用。
摘要由CSDN通过智能技术生成

·初识C语言

本章重点:

  1. 什么是C语言
  2. 第一个C语言程序
  3. 数据类型
  4. 变量、常量
  5. 字符串+转义字符+注释
  6. 选择语句
  7. 循环语句
  8. 函数
  9. 数组
  10. 操作符
  11. 常见关键字
  12. define定义常量和宏
  13. 指针
  14. 结构体

什么是C语言

C语言是一门计算机语言,计算机语言是人和计算机交流的语言,常见的有C/C++/JAVA/Python

语言的发展:(由低级语言到高级语言不断发展)

二进制语言 —— 硬件-电-正电/负电(即1和0) —— 10100001 – ADD – 助记符 – 汇编语言 —— B语言 —— C语言、C++(高级语言)

第一个C语言程序

  1. 新建文件
  1. 新建项目
  2. C++ Windows控制台
  3. 空项目
  4. (方案资源管理器)——源文件——右键 添加新建项
  5. C++文件
  6. 名称 xxx.c(.c源文件 .h头文件)

  1. 基本框架

int main()//主函数-程序的入口,必须有且只有一个

{

     return 0;//

}

  1. Ctrl+F5 运行,如果不起作用则Fn+Ctrl+F5

例:

#include <stdio.h>

int main()/

{

    printf("Hello World\n");

    printf( "你好,世界\n" );

    return 0;

}

代码分析:

  1. int:整型的意思,main前的int表示main函数调用返回一个整型值(整型的意思是不含小数的数值,例如12、15、33)
  2. void main() 已经是过时的写法
  3. 打印函数:printf,由print(打印) + f(format,格式)组成,本身是库函数(C语言本身提供的函数)

用法:printf(“xxxx\n”) “\n”是换行

  1. 使用库函数:#include <xxxx.x>

std – 标准 standard input output

  1. 调试运行程序一闪而过,解决方法:

管理器里项目名称右键 —— 属性 —— 配置属性 —— 连接器 —— 系统 —— 子系统 —— 更改为控制台

  1. 运行到光标处:快捷键Ctrl+F10;逐行运行:F11

数据类型

char

字符数据类型

short

短整型

int

整型

long

长整型

long long

更长的整型

float

单精度浮点数

double

双精度浮点数

  1. 为什么出现这么多类型?(大小不同,节省空间,类似于瓶、碗和桶的区别)
  2. 每种类型的大小是多少?

  1. 申请内存储存字符

例:

int main()

{

    char ch = 'A';//向内存申请一个名为ch的空间用来储存A

    //单引号引起字符,双引号字符串;输出字符%c,字符串用%s

    printf("%c\n",ch);// %c——打印字符格式的数据

    return 0;

}

%d

打印整型十进制数据(如12、3、5)

%c

打印字符(如A、汉字、符号等等)

%f

打印浮点数字(如0.8、12.6)

%p

以地址形式打印

%lf

打印浮点数字(一般与double对应使用)

  1. 计算机能够申请的空间

int main()

{

     printf("%d\n", sizeof(char));//1字节

     printf("%d\n", sizeof(short));//2字节

     printf("%d\n", sizeof(int));//4字节

     printf("%d\n", sizeof(long));//4或8字节

     printf("%d\n", sizeof(long long));//8字节

     printf("%d\n", sizeof(float));//4字节

     printf("%d\n", sizeof(double));//8字节

     return 0;

}

char(1) < short(2) < int = long = float(4) < long long=double(8) 单位:字节

其中long可以为4或8,C语言标准规定sizeof(long)≥sizeof(int),在不同的语言中long为4或8都满足这个条件

计算机中的单位:bit < byte < kb < mb < gb < tb < pb……

正电:1  负电:0  其单位是bit,是计算机中最小的单位,正负电的储存空间都是1bit(即二进制位的储存空间都是1bit)

8bit = 1byte   1024byte = 1kb   1024kb = 1mb   1024mb = 1gb……

分析:010转换为二进制是多少

将010拆分为 0*2^2 + 1*2^1 +0*2^0 = 0 + 2+ 0 =2

所有010转换为二进制是2

常量、变量

在生活中,有些值是不变的(如圆周率、身份证号码和血型等);有些值是可变的(如年龄、体重和薪资等)。

不变的值,C语言中用常量的概念来表示,变的值C语言中用变量来表示。

定义变量的方法

类型 + 变量名,赋予一个值(如 short age = 20;)

例:

int main()

{

     short age = 20;//向内存申请2个字节=16bit位,用来存放20

     float weight = 132.6f;//这里插入f的原因是系统会认为将双精点数放在了单精点中,会产生警告,这时候加入f可以解决这个问题

     printf("年龄:%d\n 体重:%f\n", age,weight);

     return 0;

}

变量的分类

  1. 局部变量
  2. 全局变量

例:

int global = 2019;//全局变量-定义在代码块“{}”之外的变量

int main()

{

     int local = 2018;//局部变量-定义在代码块“{}”内部的变量

     //下面定义的global会不会有问题?

     int global = 2020;//局部变量

     printf("global=%d\n", global);

     return 0;

}

输出结果为2020,由此可见,当全局变量和局部变量名字相同时,优先局部变量。因此,全局变量和局部变量最好不要相同命名。

输入数据——使用输入函数:scanf

取地址符号:& (类似于门牌号,是找出数据所在位置用)

例:

//计算两个数的和

int main()

{

     int num1 = 0;

     int num2 = 0;

     int sum = 0; //C语言语法规定,变量要定义在当前代码块的最前面

     scanf("%d%d", &num1, &num2);//这里可能会出现“返回值被忽略:‘scanf’,在开头设置#pragma warning(once:4996)即可,或搜索C6031查找其它解决办法”

     sum = num1 + num2;

     printf("sum=%d\n", sum);

     return 0;

}

tips:视图——解决方案管理器

变量的作用域和生命周期

作用域

作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的。

而限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域是变量所在的局部范围;
  2. 全局变量的作用域是整个工程。

声明标识符(同一工程下另一源文件数据引用)

例:extern int xxxx;

extern 声明外部符号,引用的必须是全局变量作用域

生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期是:整个程序的生命周期。

常量

C语言中的常量和变量的定义的形式有所差异。

C语言中的常量分为以下几种:

  1. 字面常量(比如说3、4、5直接写出来的值而不是以赋值的形式写出来)
  2. const修饰的常变量(当定义的赋值前加上关键词const如“const int num = 4;”则意味着这个num不能变化)

注意:变量(如a、n、b等等)不能用于数组申请的空间,即使是有const修饰也不行,修饰后的n是有常属性的变量,所以是常变量。例:int arr[n]={0};×不成立

  1. #define定义的标识符常量

注意:const定义的是将一个变量赋予常属性,只能当做常量表示,不能当常量用,而define是直接定义一个常量,能当常量用

  1. 枚举常量(如性别女、男、其它,星期一到星期日,三原色红黄蓝)

直接定义了多个常量,用#define只能一个一个定义,相对来说更简便

关键词:enum。枚举常量有值且默认顺序为0,1,2,3……

例:

enum SEX

{

  feamle,

  male,

  another

};

//female、male、another是枚举常量,其默认值分别是0、1、2

int main()

{

  enum SEX s = feamle;

  return 0;

}

字符串+转义字符+注释

字符串

“Hello World\n”

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

注:字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算做字符串内容

如”xxxx”,其包含的不仅仅只有xxxx,还有一个\0,也就是’a’ ’b’ ’c’ ’\0’(这里的’\0’的数值是0)。

‘\0’:字符串的结束标志(转义字符)

0:数字0

‘0’:字符0,属于一个字符,ASCII码值为48

例:

int main()

{

     char arr1[] = "abc";//数组

     char arr2[] = { 'a','b','c',\0 };//这里的0就相当于音乐中的休止符,不加上的话意味着打印继续,故会出现乱码

     printf("%s\n", arr1);

     printf("%s\n", arr2);

     return 0;

}

计算字符串长度——strlen(string length)

例:

int main()

{

     char arr1[] = "abc";

     char arr2[] = { 'a','b','c'};

     printf("%d\n", strlen(arr1));//strlen——计算字符串长度

     printf("%d\n", strlen(arr2));//由于这里arr2末尾没有0所以持续往后计算,导致结果是随机值

     return 0;

}

转义字符

转变原来的意思。比如“n”加上斜杠后变为“\n”,意思是换行。

转义字符

释义

\?

在书写连续多个问号时使用,防止他们被解析成三字母词(vs编译器用不到)

\’

用于表示字符常量’

\”

用于表示一个字符串内部的双引号

\\

用于表示一个反斜杠,防止它被解释为一个转义序列符

\a

警告字符,蜂鸣

\b

退格符

\f

进纸符

\n

换行

\r

回车

\t

水平制表符

\v

垂直制表符

\ddd

ddd表示1~3个八进制的数字。如:\130 X

\xdd

dd表示2个十六进制的数字。如:\x30 0

例:

int main()

{

     printf("%d\n", strlen("c:\test\32\test.c"));

     //这里的\32是2个八进制的数字

     //32作为八进制代表的那个十进制数字,作为ASCII码值,对应的字符

     //32 ——>转换为十进制是26 ——>作为ASCII码值代表的字符

     return 0;

}

注释

注释有两种风格:

  1. C语言风格的注释:/*xxxx*/

缺陷:不能嵌套注释,正常不太用

  1. C++风格的注释://xxxx

可以注释一行也可以注释多行

注释快捷键:ctrl + k + c  注释;ctrl + k + u  取消注释。

选择语句

int main()

{

     int input = 0;

     printf("你要学习英语还是德语?(1/0)>:");

     scanf("%d", &input);

     if(input==1)

     printf("你选择了英语\n");

     else

     printf("你选择了德语\n");

     return 0;

}

循环语句

C语言中如何实现循环呢?

  1. while语句-讲解
  2. for语句
  3. do…while语句

例:

int main()

{

     int line = 0;

     printf("内容1\n");

     while(line<200)

     {

         printf("内容2:%d\n", line);

         line++;

     }

     if (line >= 200)

         printf("内容3\n");

     return 0;

}

函数

int main()

{

     int num1 = 0;

     int num2 = 0;

     int sum = 0;

     printf("输入两个操作数:>");

     scanf("%d %d", & num1, &num2);

     sum = num1 + num2;

     printf("sum=%d\n", sum);

     return 0;

}

上述代码,写成函数如下:

int add(int x, int y)

{

//此处大括号内的内容为函数题

int z = x + y;

return z;

}

int main()

{

     int num1 = 0;

     int num2 = 0;

     int sum = 0;

     printf("输入两个操作数:>");

     //函数

     //f(x)=2*x+1;

     //f(x,y)=x+y;

     scanf("%d %d", &num1, &num2);

     sum = add(num1, num2);//此处的add为函数

     printf("sum = %d\n", sum);

     return 0;

}

上述的Add就属于是自定义函数

函数的特点就是简化代码,代码复用。

数组

要储存1-10的数字,怎么存储?

C语言中给了数组的定义:一组相同类型元素的集合

数组定义

int main()

{

     int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//定义一个整形数组,最多放10个元素

     //1-10的下标分别是0,1,2,3……9

     printf("%d\n", arr[4]);//用下标的形式访问元素,这里访问的是下标是4的元素

     return 0;

}

调试——窗口——监视 检查代码运行

数组的使用

数组是通过下标来使用的

例:

int main()

{

     int i = 0;

     int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

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

     {

         printf("%d ", arr[i]);

     }

     return 0;

}

操作符

此处不重点讲述,后续会深入。

算术操作符

+

-

*

/

%

移位操作符

>>

<<

位操作符

&

^

|

赋值操作符

=

+=

-=

*=

/=

&=

^=

|=

>>=

<<=

算术操作符 % :取模

具体案例:

int main()

{

     int a = 5 % 2;

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

     return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值