{mtitle title="运算符及输入输出符C"/}第一学习输入输出符，第二学习运算符，第三进行练习普通运算符的基础理解还不错，对于位运算符，移位运算符和逗号表达式理解不是非常明白，只能超过了没有一点想法，此外实验了几道题目，也是前面的会，后面的能猜到用什么，但是输出不完整。//printf是一个库函数=》C语言已经实现好了，要想使用库函数，必须引用头函数stdio.h //要想换行要在其中加入\n //占位符第一个字符为%，第二个字符为占位符的类型， // %d表示代入的值必须是十进制整数，%s表示代入的是字符串，%c表示字符，，%f小数，%p指针（用来打印地址） #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { printf("Change World\n"); printf("Change world\nHello world"); printf("There are %d apples, %d bananas\n", 3, 9); //第一个占位符就占的是第一个逗号后面的内容，第二个就占用第二个逗号后面的内容 printf("%s是一个动漫人物\n", "王麻子"); printf("%5d\n", 123); // 不足五位会在左边（前面）加空格，因为输出值默认为右对齐 printf("%5d\n", 123456); // 超过是多少就输出多少 printf("%-5d\n", 123); //在％后面添加-号会导致输出的值变为左对齐,会在后面加空格 //printf允许限定占位符的最小宽度 printf("Number is %.2f\n", 0.5); //限定小数位数是在%后添加 .2 表示小数点后两位 printf("%6.2f\n", 1.2); //代表数据的宽度是6，这个宽度包含小数点的，且要求小数点后两位 //空格 空格 1 . 2 0 int score = 0; int a = 0; int b = 0; //printf("请输入成绩："); //从键盘获取一个数据，写道变量score里面，&为取地址符号 //scanf("%d", &score); //要想使用score需要在最前面加 #define _CRT_SECURE_NO_WARNINGS //第一个参数是占位符，第二个参数表示用户输入的参数存入变量中 //程序开始后，控制台会等待输入 //scanf中有什么输入什么，如果在%d后加入\n，必须输入\n才能继续 //printf("成绩是：%d\n", score); scanf("%d%d", &a, &b); //scanf()返回值的含义 //正常情况下会返回读取的变量个数 //如果没有任何读取项或者匹配失败返回0 //如果没有读取任何数据前，发生读取错误，或者读取到文件结尾，返回常量EOF(-1) //end of file 文件结束的标志 //读取多个数值时，如果想要提前结束按ctrl+z int ret = scanf("ret = %d\n", ); printf("数字是：%d,%d\n", a, b); int year = 0; int month = 0; int day = 0; scanf("%d-%d-%d",&year, &month, &day); //scanf里面有什么就输入什么，比如上述2025-12-2 printf("%d%d%d\n", year, month, day); return 0; }#include<stdio.h> int main() { int a = 1 + 2; int b = 5 - 3; int c = 5 - 16; //负数也是可以被输出的 int d = 3 * 5; float e = 3.3 * 5.5; printf("a=%d\nb=%d\nc=%d\nd=%d\ne=%f\n", a, b, c, d, e); float x = 6 / 4; int y = 6 / 4; //整数除法，只会返回整数部分，丢弃小数部分 float z = 6.0 / 4; //如果想要出现小数就要变成浮点数6.0 float w = 7.0 / 22; printf("x=%f\ny=%dz=%f\nw=%f\n", x, y, z, w); int g = 3 % 2; int h = -8 % -3; //只能用于整数不能用于浮点数 printf("g=%d\nh=%d\n", g, h); //赋值操作符 //int a = 100其实就是运算符，就是吧100给了a，a =200就是把200给到了a //复合运算符 //+=，-=，*=，/=，%=，》=（右移），《=（左移），&=，|=,^= int j = 5; j += 3; //其实就是j = j + 3 printf("j=%d\n",j); //单目运算符 int i = 7; //i++; //相当于给i自增1,把++放在i的前面也是给i加了1（++i）， //++在前，先自增，在赋值 ++在后，先赋值，后自增 int k = ++i;//相当于把i自增1，在把值赋给k int l = i++;//把i赋值给l，在给i自增1 //--也是和++一样的运算规律 printf("i = %d\n", i);//输出的是在k自增和在l自增后的 9 printf("k = %d\n", k);//输出的是 8 printf("l = %d\n", l);//输出的是 8 //移位运算符，移的是比特位bit //左移在右边补零，在左边掉0 左移是乘法，2的乘方运算 int num = 10; int num1 = num << 1; // 输出的是20 10*2的一次方 int num2 = num << 2; // 输出的是40 10*2的二次方 printf("num=%d\nnum1=%d\nnum2=%d\n", num, num1, num2); int nmu = 10; int nmu1 = nmu >> 1; // 输出的是5 10/（2的一次方） int nmu2 = nmu >> 2; // 输出的是2 10/（2的二次方） printf("nmu=%d \nnmu1=%d \nnmu2=%d \n", nmu, nmu1, nmu2); int unm = -1; //非常特殊，如果这个数字是-1，移位后还是-1 int unm1 = unm >> 1; int unm2 = unm >> 2; printf("unm=%d\nunm1=%d\nunm2=%d\n", unm, unm1, unm2); int umn = -100; int umn1 = umn >> 1; int umn2 = umn >> 2; printf("umn=%d\numn1=%d\numn2=%d\n", umn, umn1, umn2); //位操作符 //按位与 & 按位或 | 按位亦或 ^ 按位取反 ~ /* 0101 1011 0001 1001 按位与 对应位上都是1，结果才会出现1，只要对应位上出现0，结果就是0 0001 1001 按位或 对应位上都是0，结果才会出现0，只要对应位上出现1，结果就是1 0101 1011 按位异或 对应位上一样，结果出现0，对应位上出现不一样的，结果就是1 0100 0010 按位取反 原来是0，结果就是1，原来是1，结果就是0 */ int mun1 = -3; int mun2 = 5; printf("%d\n", mun1 & mun2); printf("%d\n", mun1 | mun2); printf("%d\n", mun1 ^ mun2); printf("%d\n", ~0); //关系运算符 int m = 11; int n = 12; printf("%d\n", m > n); printf("%d\n", m < n); printf("%d\n", m >= n); printf("%d\n", m <= n); printf("%d\n", m != n); printf("%d\n", m == n); //输出0表示假，输出1表示真 //逻辑运算符 /* 逻辑与 && 逻辑或 || 逻辑非 ! */ //逗号表达式 从左向右一次执行，整个表达式的结果就是最后一个表达式的结果 int o = 1; int p = 2; int q = (o > p, o = p +10, a, b = a + 1); printf("%d\n", q); return 0; }
今天学习了数据类型，变量，内存管理，数据类型占用大小及取值范围等。课程中的内容通俗易懂，目前下来都能明白。此外在整个学习流程中，有点缺乏方向了，后续需要了解整体学习内容及流程。以下是我学习的笔记，欢迎指出错误，轻喷，谢谢。//数据类型 /* 基本类型→字符型，整型（短整型，整型，长整型，长长整形），浮点型和布尔类型 枚举类型(enum) 空类型(void) 派生类型→指针类型，数组类型，结构体类型，共用体类型，函数类型 */ /* 字符型 char 有三种书写类型 char [signed] char 有符号 其中signed可以省略 unsigned char 无符号 其中unsigned必须有 */ /* 整型 short [signed] short unsigned short int [signed] int unsigned int long [signed] long unsigned long long long [signed] long long unsigned long long */ /* 浮点型 float 单精度 double 双进度 long doubele */ /* 布尔型 只有0表示假 */ #include <stdio.h> #include <stdbool.h> //int main() //{ //char a = 'a'; //unsigned char ch2 = 'b'; //short sh = 10; //int i = 20; //在这里博哥写的定义a了，会报错，类型不一样也会报错 //long la = 100; //long long lla = 1000; //float f = 12.5; //double d = 12.5; //long double ld = 12.5; //printf("%d\n%d\n%d\n%d", 'a', ch2, i, 'i'); //想要看输出是否正确可以加一个打印，记住是字符 //这里打印中，输出的是不一样的，还需注意，此外 单行注释快捷键， 1选中 2ctrl 3/ // _Bool flg = true; //其中_Bool中B必须大写,假为false, // if (flg) // { // printf("this is true!"); // } // return 0; //} //有了数据类型后，我们如何使用数据类型？ //通过类型我们可以定义变量，而变量中可以存储数据 /* 变量 data_type name 数据类型 变量名 */ /* 变量命名的一般规则 只能由字母，数字和下划线组成 不能由数字开头 长度不能超过63字符 区分大小写 不能用关键字 */ /* 变量的分类 全局变量 在大括号{}外定义的变量 局部变量 在大括号{}内定义的变量 */ /* 变量既然是数据，那保存在哪里了，保存在内存中 为什么划分内存，因为存数据和取数据效率高，太乱了就不好找 初步分为三个区 栈区：局部变量 堆区：内存管理等 静态区：全局变量 */ int local = 10; //全局变量 int gloable = 100; //全局变量 int main() { int local = 20; //局部变量 printf("%d\n", local); //变量名一样，先读取局部变量 printf("%d\n", gloable); printf("%zd\n", sizeof(char)); //1个字节 sizeof返回值是size_t类型，期望通过%zd输出 printf("%zd\n", sizeof(_Bool)); //1个字节 当然%d使用也可以 printf("%zd\n", sizeof(short)); //2个字节 printf("%zd\n", sizeof(int)); //4个字节 printf("%zd\n", sizeof(long)); //4个字节 printf("%zd\n", sizeof(long long)); //8个字节 printf("%zd\n", sizeof(float)); //4个字节 printf("%zd\n", sizeof(double)); //8个字节 printf("%zd\n", sizeof(long double)); //8个字节 return 0; } /* 数据类型占用内存大小以及取值范围 数据存储容量或者数据传输速率的基本单位：bit,byte,kb,mb,gb,tb,pb 8 bit = 1 byte 1024 byte = 1 kb 其余的进率都是1024 sizeof关键字可以计算 某个类型或者表达式的长度，单位是字节。 在不同平台下字节大小是不一样的，目前都是x64平台下 */ // 前缀为[signed]的是有符号类型，只能表示负数，0，正数 范围是-128-127 // signed int a = 'a' 等同于 // int a = 'a' // 8bit分为八个位置，第一位是符号位，0是正数，1是负数 // 负数在内存中怎么储存？ 源码 =》（源码符号位不变，其它位取反）反码 =》（反码加一） 补码 // -1的源码 1000 0001 反码1111 1110 补码1111 1111 // -2的源码 1000 0010 反码1111 1101 补码1111 1110 // 128的源码 1000 0000 反码0111 1111 补码1000 0000 128比较特殊 // // 前缀为unsigned的为无符号类型只能表示 0,正数 范围是0-255
{mtitle title="记录C语言学习过程"/}本来想着学习就好了，但是有时候就是有惰性在，有很大可能学不下去，分享才能让自己的学习更有动力，那我就分享好了，目前计划2026过年前，目标是达到能考过二级水平，然后再进行计划学习，今天是11月25日，初步认识C语言的概念，记录一些笔记，轻喷。 目前是看见B站上的一个9月份发布的视频进行学习，#include<stdio.h> /*头文件后缀为.h 源文件后缀为.c */ // 行注释和块注释 块注释不能嵌套 //关键字，如int，if等不能定义，因为C本身已经有的 //单引号‘’只能包含一个字符，字母@！都算是字符，汉字不可以 //字符串 “”一个或者多个字符成为字符串，字母中文等都可以 //先打断点再调试，再数字前面点红点 目的看内存布局 /* str数组中为什么会多一个\0？ %s打印的字符串，\0起到的作用就是标记结尾 字符串结尾都是以\0结尾的 */ /* ASCLL编码 dec是十进制，oct是八进制，hex是十六进制，ch是字符的意思 字符零‘0’对应的十进制数字是48 大写字符‘A’对应的十进制数字是65 小写字符‘a’对应的十进制数字是97 小写a和大写A差值是32 ASCLL前32个字符是不可答应的，无法再屏幕上观察到 */ int main() //main是c语言的入口，一个项目只有一个入口，即使有很多个.c文件也只能有一个main { printf("hello world\n"); printf("%c", 'a'); char str[] = "abcde"; //char str是储存字符串的，其中str叫做数组 printf("%s\n", str); //这里换行符斜杠错误过 printf("%c\n", 'A'); //字符在计算机中存储规则是十进制 printf("%c\n", 65); //字符A的十进制也可以用 return 0; } ...