C02_C语言基础

news/2024/11/7 9:27:21/

1.关键字、标示符、注释

        1关键字都是小写的

auto break case char const continue 
default do double else enum extern 
float for goto if int long register return 
short signed sizeof static struct switch 
typedef union unsigned void volatile while 
_Bool _Complex _Imaginary 

        2)标示符

标示符命名规则:

(1)只能由字母(区分大小写)、数字、下划线组成;
(2)必须以字母或下划线开头;
(3)不可以是C保留字或C库函数名。

        3)注释

多行注释,或段注释,可以出现在代码内部。/*说明文字*/
单行注释,只能在代码最后出现。//说明文字


2.数据类型

常量声明使用const,常量的值是不能被更新的。


        1)基本类型

1)整型数据类型:

短整型 short, 占内存2字节
整型     int,   占内存4字节
长整形 long,  占内存4字节

2)浮点类型:

单精度 float,  占内存4字节
双精度 double,占内存8字节

3)字符类型:char,占内存1字节


        2)构造类型

1)数组
2)结构体 struct
3)联合体 union
4)枚举 enum

        3)函数、void、指针

后文详解。

3.表达式和运算符

        1)算数运算符

加法:+
减法:-
乘法:*
除法:/
取余:%

        2)逻辑运算符

&& 且,如果左边为假,则直接返回假,不再判断右边
||    或,当左边为真,则直接返回真,不再判断右边
!     非,一元运算,如果紧跟的操作数为真,则返回假

        3)关系运算符

==  值等,判断值是否相等,相等则返回真true
!=  不等于,判断值是否不相等,不相等则返回真true
>   大于,判断是否左边的值大于右边的值,大于则返回真 
<   小于,判断左边的值是否小于右边的值,小于则返回真 
>=  大于等于,判断左边的值是否大于或等于右边的值
<=  小于等于,判断左边的值是否小于或等于右边的值

        4)一元运算符

++ 自增运算符
    a++,首先返回a的值,然后执行a=a+1
        ++a,首先执行a=a+1,然后返回a的值

-- 自减运算符
    a--,首先返回a的值,然后执行a=a-1
        --a,首先执行a=a-1,然后返回a的值

sizeof
        计算一个变量或基本数据类型占用多少内存

printf("%d\n", sizeof(short));	//结果为2
short i; printf("%d\n", sizeof i);	//结果为2


        5)三目运算符

三元运算,有三个操作数或算式,当第一个算式为真,则返回第二个算式结果,否则返回第三个算式的结果,使用方法:
算式? 算式: 算式

	int i=90;i = ( i > 0 )  ?  87 : 34;printf("%d\n", i);	//87

4.流程控制语句

        1if 判断

形式1if (条件) { 执行语句1; } else {  执行语句2; } 。else部分不是必须的。只要条件为真,就执行语句1,省略语句2

	if (3 > 2) {printf("3>2\n");	//输出} else {printf("3<2\n");	//省略}

形式2if (条件1) { 执行语句1; } else if (条件2) {  执行语句2; }  else {  执行语句3; } 。如果条件1不为真,就会判断条件,如果条件2也不为真,则执行语句3。如果条件1假单条件2真,则仅执行语句2

	if (3 < 2) {printf("3<2\n");} else if (3 > 1) {printf("3>1\n");	//输出} else {printf("3<0\n");}


        2switch 匹配

	int i = 9;_Bool b = i>5;	//布尔型switch (b) {//case的条件只能是常量case 0:	//0为假printf("9<5 \n");break;case 1:	//非0为真printf("9>5 \n");	//输出break;default:printf("9...5 \n");break;}


        3whiledo-while 循环

	int i = 5;//while(条件),条件可以使算式,结果必须为真。首先判断条件,非0(负数也是非0)才执行while (i) {printf("%d \n", i);i--;}int j = 0;//无论如何,首先至少执行一次do{printf("%d \n", j);j--;}while (j == 0);//while(条件),先执行再判断

        4for 遍历

	int i;//for(表达式1;表达式2;表达式3)//表达式1:仅执行一次,一般做初始化//表达式2:控制执行语句,一般是保证循环结束的条件//表达式3:动态控制语句,动态改变控制语句状态for (i = 0; i < 5; i++) {printf("%d \n", i);}

5.函数

printf格式控制:

        %c  输出单个字符
        %d  输出带符号的十进制整数
        %4d  若表示的位数大于4,再按原样输出; 若小于4,左侧补空格,-4空侧补空格
        %e  输出标准指数形式的单、双精度整数,默认6位小数
        %f  输出小数形式的单双精度数字,默认6位小数
        %.2f 输出两位小数
        %o  输出不带符合的8进制整数
        %p  输出内存的地址。如:int a; printf("%p", &a); 
        %s  输出单个或多个字符
        %u  输出不带符号的十进制整数
        %x  输出不带符号的十六进制整数

printf转义字符:

        \a 蜂鸣,响铃
        \b 回退:向后退一格
        \f 换页
        \n 换行,光标到下行行首
        \r 回车,光标到本行行首
        \t 水平制表
        \v 垂直制表
        \\ 反斜杠
        \' 单引号
        \" 双引号
        \? 问号
        \0 空字符(NULL),什么都不做
        \ddd 三位八进制
        \xhh 二位十六进制

scanf参数控制:

        scanf("格式符分隔符格式符分隔符格式符", &a, &b, &c); 
接收多个参数时,分隔符可以是空格、制表符、回车。

函数是把实现某一功能的一段代码的封装,可以提高代码的复用性,避免代码冗余。

/*使用<> 先去系统目录中找头文件,如果没有,再到当前目录下找。标准的头文件 stdio.h、stdlib.h等一般都用这个方法。使用"" 首先在当前目录下寻找,如果找不到,再到系统目录中寻找。自定义的头文件一般用这个方法。
*/
#import <stdio.h>
// #import比起#include的好处就是不会引起交叉编译,由GCC支持。//返回值类型	函数名(参数类型 形参)
//返回值类型省略,则默认是int
int funcCount(int i, int j){return i+j;	//如果没有return语句,则返回i
}//自定义函数要声明或创建在main之前
void funcShow(char str[]);	//C语言里没有方法重载
void funcShow(char str[]);	//可以重复声明同一个函数int main() {int i=10, j=9;//int k = myFunc(i, j);printf("%d, %d, %d\n", i, j, funcCount(i, j));//如果不在main之前声明自定义函数,可以直接在调用前声明//void funcShow(char str[]);funcShow("Hello Function !");
}//返回值类型	函数名(参数类型 形参)
void funcShow(char str[]){printf("%s\n", str);return;	//尽管这个函数无返回值(void),但仍可以return,表示程序执行到这里就结束printf("这里不会执行了...\n");
}


6.进制转换

#include <stdio.h>int main() {//无特殊标注,默认10进制int i = 10;//以0b开始,2进制//int j = 0b10;	//须编译器的支持//以0开始,8进制int k = 010;//以0x开始,16进制int l = 0xA;printf("%d \n", i);//printf("%d \n", j);printf("%d \n", k);printf("%d \n", l);/*10进制 -> 2进制方法1:10 = 8 + 2= 2的3次方 + 2 * 2的0次方= 0b1000 + 0b10= 0b1010方法2(10进制转n进制方法):10/2 = 商 5 余 05/5 = 商 2 余 12/2 = 商 1 余 01/2 = 商 0 余 1倒序余数 1010*//*2进制 -> 10进制//自右向左四个数字依次匹配2的0次方、2的1次方、2的2次方、2的3次方0b1010=1 * 2的3次方 + 0 * 2的2次方 + 1 * 2的1次方 + 0 * 2的0次方=1*8 + 0*4 + 1*2 + 0*1=8 + 0 + 2 + 0=10*//*n进制 -> 10进制//自右向左四个数字依次匹配n的0次方、n的1次方、n的2次方、n的3次方、...1010=1 * n的3次方 + 0 * n的2次方 + 1 * n的1次方 + 0 * n的0次方*/return 0;
}


7.位运算

        1)与或异或取反

	int i = 9;	//1001int j = 5;	//0101//----------------//i&j = 1;	//0001//i|j = 13;	//1101//i^j = 12;	//1100//~i = -10;	//1111 1111 1111 1111 1111 1111 1111 0110//位运算 与 & ,位置一一对应,都为1时得到一,否则为0//任何位置和1与操作,都得到原值printf("%d\n", i&j);//位运算 或 | ,位置一一对应,只要有一个1即得1printf("%d\n", i|j);//位运算 异或 ^ ,位置一一对应,不相同即得1//相同数值异或操作得0//多个数值异或时位置可交换。9^7^3 == 7^3^9//任何数值和0异或,得原值printf("%d\n", i^j);//位运算 按位取反 ~ ,把原位置的0变为1,1变为0printf("%d\n", ~i);return 0;

        2)位移

	int i = 9;//-------------------向左位移-----------------------------//原二进制数             0000 0000 0000 0000 0000 0000 0000 0000 1001//向左位移一位           000 0000 0000 0000 0000 0000 0000 0000 10010//最左侧超出的一位舍弃,右侧空缺的一位补0 。得到10010int j = i << 1;	//如同 i*(2的1次方)printf("%d \n", j);//最左侧超出的2位舍弃,右侧空缺的2位补0 。得到100100j = i << 2;	//如同 i*(2的2次方)printf("%d \n", j);//i左移N位,同i*(2的N次方)//-------------------向右位移-----------------------------//原二进制数             0000 0000 0000 0000 0000 0000 0000 0000 1001//向右位移一位           00000 0000 0000 0000 0000 0000 0000 0000 100//最右侧超出的一位舍弃,左侧空缺的一位按原符号位的值补齐 。得到100j = i >> 1;	//如同 i/(2的1次方)printf("%d \n", j);//最左侧超出的2位舍弃,右侧空缺的2位补0 。得到100100j = i >> 2;	//如同 i/(2的2次方)printf("%d \n", j);//i右移N位,同i/(2的N次方)//-------------------交换两个变量的值------------------------------int a = 9, b = 8;int t = a;a = b;b = t;printf("a=%d, b=%d \n", a, b);a = 9;b = 8;a = b-a;	//a=-1b = b-a;	//b=9a = a+b;	//a=8printf("a=%d, b=%d \n", a, b);a = 9;b = 8;//a = 1001, b = 1000。异或:不相同得1a = a^b;	//a = 0001b = a^b;	//b = 1001a = a^b;	//a = 1000printf("a=%d, b=%d \n", a, b);int m = 10;//匹配16、32、64位系统中int占多少位内存int n = (sizeof(m) << 3) - 1;//从最左侧的位开始打印while(n >= 0){//向右移,保留最左侧位int v = m >> n & 1;printf("%d", v);//依次打印全部的位n--;//逢4留空if((n+1)%4 == 0){printf(" ");}}

- end


http://www.ppmy.cn/news/753012.html

相关文章

Python3 爬虫学习笔记 C02 【基本库 requests 的使用】

Python3 爬虫学习笔记第二章 —— 【基本库 requests 的使用】 文章目录 【2.1】 requests 简介【2.2】 requests 基本用法 【2.3】 requests 构建 GET 请求 【2.3.1】 基本用法【2.3.2】 二进制数据抓取 【2.3.3】 添加 headers 【2.4】 requests 构建 POST 请求 【2.5】 requ…

C语言基础C02数组

1.编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排序,然后将这两个数组合并成一个升序数组 int c[5] ={0}, d[5] = {0}, e[10] = {0}; printf("请输入一个包含5个元素的数组:"); for (int i =0; i < 5; i++) { sc…

7.3基础概念/文件、文件路径/batch_size,length,total/acc、loss计算/ect

一、 一些基础术语&#xff1a; util是utility的缩写&#xff0c;意思为实用工具。一般用于描述和业务逻辑没有关系的数据处理分析工具。 logger &#xff1a;日志 meter : 记录表 使用下划线 _ 表示不需要的变量是一种常见的开发者的约定&#xff0c;&#xff08;Python 解释…

8-js高级-3

JavaScript 进阶 - 3 了解构造函数原型对象的语法特征&#xff0c;掌握 JavaScript 中面向对象编程的实现方式&#xff0c;基于面向对象编程思想实现 DOM 操作的封装。 编程思想构造函数原型综合案例 编程思想 学习 JavaScript 中基于原型的面向对象编程序的语法实现&#xff…

新博文将发布在opoo.org

之前没想过在正儿八经的写博客&#xff0c;最近又突然来了兴趣&#xff0c;有时间想将自己的心得体会尽量写下来&#xff0c;新博将发布在 opoo.org 。

Opera下载最新版本地址

目前Opera官网可以打开&#xff0c;但是点下载时就会出错&#xff0c;国内无法访问Opera的下载地址&#xff0c;无法通过官网直接下载Opera浏览器。下面提供下载的方式。 一、通过官方的ftp站点下载 FTP地址为 1 http: //ftp .opera.com /pub/opera/desktop/ 如图&#xff0c;选…

使用Django操作数据库的一些坑-ORM机制

分析这两个接口 def get_topology_by_project(request):if request.method "POST":project_id request.POST.get(project_id)print(project_id)topologies Topology.objects.filter(project_id_idproject_id)topology_list []for topology in topologies:topolo…

postgresql(一):使用psql导入数据库

使用psql导入数据库 1、概述2、具体问题3、总结 1、概述 大家好&#xff0c;我是欧阳方超。 听说postgresql越来越流行了&#xff1f;psql是一个功能强大的命令行工具&#xff0c;用于管理和操作PostgreSQL数据库。它提供了一个交互式环境&#xff0c;允许用户执行SQL查询、创…