C语言学习笔记(第一阶段:初识)<1>

本文详细介绍了在VisualStudio中创建C语言项目的步骤,包括源文件、头文件的编写,以及C语言的基础概念如main函数、数据类型、变量、常量、输入输出、选择结构、函数、数组、转义字符、C99标准和操作符的使用。
摘要由CSDN通过智能技术生成

1.打开VS
2.创建项目
视图 解决方案资源管理器

3.创建源文件(添加时注意后缀)
.c 源文件
.h 头文件

4.写代码
#include <stdio.h>
int main()
{
    return 0;
}
注意:
C语言代码中一定要有main函数,以上是标准的主函数写法
printf是一个库函数,专门用来打印数据的,要想使用自带的库函数,必须有 #include <stdio.h>
运行代码:ctrl+f5
main函数是程序的入口,但有且仅有一个

ctrl +k+c 选中代码注释,ctrl +k+u 选中代码取消注释

5.C语言内置的数据类型: 
char 字符型 1byte
short 短整型 2byte
int 整型 4byte
long 长整型 4byte
long long 更长的整形 8byte
float 单精度浮点数 4byte
double 双精度浮点数 8byte

打印整型时要写 “ %d\n”即:printf("%d\n",100);
sizeof(char)表示char的大小字节,要打印出它的大小printf("%zu\n",sizeof(char)); zu表示无法整型,经常与sizeof用

计算机中的单位:
bit 比特位(一个二进制0,1所占的大小)
byte 字节
kb ,mb ,gb ,tb ,pb
1byte = 8bit,其余所有进制为1000

6.变量和常量
局部变量:{}内的变量
全局变量:{}外的变量
注:局部变量、全局变量各自内部变量名不可一样,但当全局变量和局部变量名字相同的情况下,局部优先

7.变量的使用
输入函数:scanf("%d %d", &num1,&num2);  格式一定要写对(中间不能有空格的地方一定不要有空格)
输出函数:printf("%d\n",100);
注:(1)想正确使用scanf("%d %d", &num1,&num2);函数,要在源文件的第一行放上:
#define _CRT_SECURE_NO_WARNINGS (这句话是从报错里看见的,所以要会看报错)
<这个报错是在VS上报错的,那么此解决方法也只在VS上解决>
可一劳永逸解决(已解决)
(2)scanf_s这个函数是VS编译器自己提供的函数,非标准C提供的函数,所以只有VS编译器自己认识
建议使用scanf,若用scanf_s一定要提前研究

8.变量的作用域和生命周期
局部变量的作用域:该变量所在的局部范围(比如它所在的大括号内部)
全局变量的作用域:是整个工程(在同一个源文件的不同c文件之间都能使用,
但在使用前要声明:extern int a;  用来声明来自外部的符号)

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

9.常量
(1)字面常量:数字常量30;20;3.1;...字符常量‘1’...字符串常量“abc”(一个字符用单引号,字符串用双引号)
(2)const修饰的常变量:const int a = 10;用const修饰之后编译器就无法容忍你在后面再次修改了
(在c语言中,const修饰的变量,本质是变量,但是不能直接修改,只有常量的属性)
证明方法:const int n = 10;
                 int arr[n] = {0};
这时会报错,因为数组内需要一个常量,但此处n本质是个变量
(3)define定义的标识符常量,如 #define MAX 100;#define YCH “woaini”;在后面主函数内可直接打印出来,
或者再将它的值赋给另一个变量再使用(后续无法再对该变量进行更改)
打印字符串printf("%s\n", YCH)
(4)枚举常量
enum Color //定义了color这种枚举类型
{
    RED,
    GREEN,
    BLUE
    //这三个可能取值就是枚举常量
};
之后在主函数内可以创一个Color的变量c:enum Color c = RED;(后面不能改这三个枚举常量)

10.字符串
有字符类型char,没有字符串类型。所以要存储字符串时可以用到数组
char arr[10] = “dfwcwvw";//至少要8个位置,因为字符串结束标志\0也要占一个位置
想知道数组内部的具体,可以通过 Fn+f10 进入调试,运行完相关步之后,打开“调试、窗口、监视”
在监视框里输入要监视的变量即可

字符串的结尾会有隐藏的\0,而字符的结尾没有,如:
char arr1[] = "sdsda"; (打印结果就是sdsda)
char arr2[] = {'s','d','s','d','a'}; (打印结果是sdsda****<知道搜寻到了\0位置>)
char arr3[] = {'s','d','s','d','a','\0'}; (打印结果就是sdsda)

求字符串长度的一个库函数:strlen(); 库函数的使用包含头文件:string.h 即:#include <string.h>
这个长度不包含结束符\0

11.转义字符(是指1个字符):转变字符的含义
\?--在书写连续多个?时使用,防止他们被解析成三字母词,如??)--]
不过现在很少出现这个问题
\'--用于表示字符常量',就表示 单引号 本身的意思
printf("%c\n", '\'');打印出来就是 单引号
\"--用于表示字符串",就表示 双引号 本身的意思
printf("%s\n", "\"");打印出来就是 双引号
\\ --用于表示一个反斜杠,防止它被解释为一个转义序列符
如:(1)就想打印出\0,而不是想让它作为结束符号,则为\\0;
(2)就想打印出\t,而不想让它变成 水平制表符,则为\\t
路径打印的时候一定是两个字符\\,防止成为其它转义字符
\a --警告字符,蜂鸣
\n --换行
\0 --字符串结束标志
\r --回车
\t --水平制表符(与键盘上Tab效果一样)
\ddd --ddd表示1-3个八进制(0-7)的数字,打印出来的是以对应十进制为ASCII码值的对应字符
如\130打印出来为X(注:\ddd仍然是一个字符,打印它时用单引号)
\xdd --dd表示2个十六进制,打印出来的是以对应十进制为ASCII码值的对应字符
如\x30打印出来为0(注:\xdd仍然是一个字符,打印它时用单引号)
注:不能超过ASCII码值的范围

注:
%d - 打印整型类型的数据
%c - 打印字符类型的数据
%s - 打印字符串类型的数据
%f - 打印float类型的数据
%lf - 打印double类型的数据
%zu - 打印sizeof的返回值

12.选择语句
c语言选择结构:if...else...    switch... 
循环写法:while语句;for语句;do...while语句
while()   表达式为真,进入循环体
{

13.函数
int add(int x, int y)   //int--返回类型   add--函数名  int x, int y--函数参数
{
    int z = 0;
    z = x + y;    //函数体     此处整个函数体可简化为:return (x + y);
    return z;
}
int main()
{
    int n1 = 0;
    int n2 = 0;
    scanf("%d %d",&n1, &n2);
    int sum = add(n1, n2);
    printf("%d",sum);
    return 0;
}

14.数组(可存放一组相同类型的数)
数组的下标是从0开始的,访问数组是从下标开始访问的,通过循环访问
注:数组的大小必须是常量!!
int main()
{
    int arr[10] = {0,1,2,3,4,5,6,7,8,9};
    int i = 0;
    while (i < 10)
    {
        printf("%d ",arr[i]);
        i++;
    }
    return 0;
}

15.0 --数字0
‘0’--字符0,ASCII码值是48
‘\0’--一个转义字符,ASCII码值是0(与数字0本质上没什么区别)
EOF --end of file 文件的结束标志,值是-1

16.注:
char arr[] = {'b', 'i', 't'}与char arr[3] = {'b', 'i', 't'}是一样的,长度是个随机值
char arr[4] = {'b', 'i', 't'}的长度为3,因为第4个位置没有被初始化,默认为0,此时会被解释为\0

17.C99标准之前,数组的大小都是用常量或者常量表达式来指定
int arr1[10] = {0};
int arr2[4+6] = {1};

C99标准之后,支持了变长数组,这个时候允许数组的大小是变量,但是这种指定方式的数组
是不能初始化的
int n = 100;
int arr3[n];

VS对C99中的一些语法不太支持

18.操作符
(1)除号/:当它两端都是整数的时候,执行的是整数除法。如果两端只要有一个浮点数就执行浮点数的除法
int n1 = 7 / 2;
int n3 = 7 % 2;
float n2 = 7 / 2.0;
printf("%d\n", n1);  //结果为3
printf("%f\n", n2);  //结果为3.500000
printf("%.1f\n", n2); //结果为3.5,小数点后为1位
printf("%d\n", n3);  //结果为1
(2)移位操作符>> <<:涉及二进制的运算
(3)位操作符& | ^
(4)赋值操作符:=、+=、-=、/=、&=、^=、|=、>>=、<<=......
a = 3
a = a + 3 -- a += 3
a = a - 3 -- a -= 3
(5)单目操作符:只有一个操作数的操作符
!--逻辑取反操作 (0表示假,非0表示真<一定牢记是非0>)
- --负号
+ --正号
& --取地址
sizeof --操作数的类型长度(以 字节 为单位)
(1)int a = 10;
printf("%d\n", sizeof(a)); //4
printf("%d\n", sizeof a); //4
printf("%d\n", sizeof(int)); //4 
sizeof是一个单目操作符,既可以计算变量的长度(可以不加括号),也可以计算类型的长度(必加括号)
(2)可以计算整个数组的大小,单位是字节
int arr[10] = { 0 };
printf("%d\n", sizeof(arr)); //40(因为10个整型数,每个数是4个字节)
printf("%d\n", sizeof(arr[0])); //4(第一个元素的字节长度)
printf("%d\n", sizeof(arr) /sizeof(arr[0])); //10 --数组的元素个数
以此可以知道计算数组元素个数的办法:总长度/每个元素的长度

~ --对一个数的二进制按位取反
--/++ --有前置、后置两种形式
a++(后置++):先使用,后++ 
++a(前置++):先++,后使用 

* --间接访问操作符(解引用操作符)
(类型)--强制类型转换
int a = (int)3.89;
printf("%d\n", a);  //3
(6)关系操作符
注:if(a = 3)与if(a == 3)的区别
if(a = 3):把3赋值给a,则为if(3),由于非0表示真,所以if语句为真,则执行if语句内的命令
if(a == 3):判断a与3是否相等,相等语句为真,不等语句为假
(7)逻辑操作符
&& 逻辑与 - 并且   if(a && b):a与b同时为真,整体语句才为真,有一个为假则语句为假
|| 逻辑或 - 或者 if(a || b) :a与b至少一个为真,则整体语句就为真
(8)条件操作符(三目操作符)
表达式1 ?表达式2 :表达式3   (注:此表达式可求两者中较大值)
若表达式1为真,则整个结果为表达式2的结果;若表达式1为假,整个结果为表达式3的结果
int a = 10;
int b = 2;
int c = a > b ? a : b;
printf("%d\n", c); //10
(9)逗号表达式
表达式1,表达式2,......表达式n
特点:从左到右依次计算,整个表达式的结果就是最后一个表达式的结果
int a = 10;
int b = 20;
int c = 0;
int d = (c=a-2, a=b+c, c-3);  // c=8   a=28  5
printf("%d\n", d); //5
(10)下标引用操作符[]、函数调用操作符()
[]:
int arr[10] = {0}; //此处不是下标引用操作符,只是数组语法的一种定义形式,所以此处10的位置不能是变量
arr[3] = 20; //[]就是下标引用操作符,arr和3就是其操作数。因为是在访问数组元素,所以3的位置可以是变量
():
Add(3,4); //()就是函数调用操作符,Add、2、3都是其操作数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值