C语言-002
March 3.24
一,常见的报错或者警告(VS2019版)
1.函数不安全问题
解决:
1.1方法一:根据此报错提示,在文件最前面加上如下代码:
#define _CRT_SECURE_NO_WARNINGS
1.2 方法二:找到如下路径,打开newc++file文件,添加如下语句:
#define _CRT_SECURE_NO_WARNINGS
注意:可能保存时遇到权限问题,有一个方法思路:
1.先复制newc++file到另外目录下,再添加#define _CRT_SECURE_NO_WARNINGS, 保存成功后:
2.删除原来D:\vs2019\Common7\IDE\VC\VCProjectItems下newc++file文件,将新建的newc++file文件移入,名字要一样。
二,常量
1.字面常量
#include int main(){ 3;//这就是一个字面常量 100;//直接写出来就好,现在我还真不知道他的作用和意义 return 0;}
2.const修饰的常变量
#include int main(){ const int Vary =6;//Vary不能再修改,const限制了 int C=8; int arr[5]={1,2,3};//5常数,所以不报错 //int arr[C]={1,2,3,4}:// C是个局部变量,所以报错 //int arr[Vary]={1.2};// Vary 本质上还是个变量,所以会报错 printf("%d",arr[1]}; printf("%d",vary); return 0;}
3.#define 定义的标识符常量
#include #define Max 100 //标识符常量int main(){ int arr[Max] = { 1 }; printf("%d\n", Max); printf("%d\n", arr[0]); return 0;}
4.枚举常量(enum定义)
#include int main() enum Sex{ MALE,//默认值0 FEMALE,// 默认值1 SECRET//默认值2};enum Week{ MONDAY,//同理 0 TUESDAY,//1 WEDNESDAY, THURDAY, FEIDAY, SATURDAY,//5 SUNDAY//6}; { //枚举常量(各个列举)enum标注和默认值 enum Sex s = FEMALE; s = MALE;//注意 s是个变量 可以改,枚举常量不可以改 /*printf("%d\n", s);//默认值1 printf("%d\n", MALE); printf("%d\n", SECRET); printf("%d\n", SUNDAY);*/ return 0;}
三,字符串
1.字符串
1.1 赋值或者输出时:字符用单引号,字符串用双引号
#include int main(){ //char是字符类型 //"shafhkjhafk"是字符串 "abc";//怎么放,用数组 char arr01[] = "abc"; // “abc” == 'a','b','c','\0' // '\0' 指字符串结束标志且是隐藏的,所以后面没有再打印 char arr02[] = {'a','b','c','\0'};//{'0'}=={'\0'} char arr03[] = { 'a','b','c' }; printf("%s\n", arr01);//%s输出字符类型 printf("%s\n", arr02); printf("%s\n", arr03); printf("%d\n", strlen(arr01)); //strlen字符长度函数 printf("%d\n", strlen(arr02)); // '\0' 是字符结束符,所以终止计算长度 printf("%d\n", strlen(arr03)); //15是随机值,即第几位找到\0结束 //字符在计算机是二进制标识,用ASCII码表 return 0;}
1.2运行结果
1.3三种数组放字符串方式
char arr01[] = "abc";
char arr02[] = {'a','b','c','\0'};
char arr03[] = { 'a','b','c' };
个人建议第一种,因为方便和没有乱码
注意:这里乱码出现是因为我的数组没有限定长度。
2.转义字符
2.1,格式就是 \+sth,这个sth是字符.
我的理解:键盘上所有的的键都可以是字符
#include int main(){ printf("abcdefg"); // 1. \n 转义换行 printf("\n"); printf("abcdefg\n"); // 2. \t转义水平制表 printf("abc\tcdd\tefg "); // 3. 注意一下: \?是连续多个问号时用,以防三字母词 printf("\n"); // 4. 要输出\时 将\转义一下得 \\ printf("dak\\fajfk\\fdfd\\sfak\n"); // 5. 打印单引号 = ' \' ' 双引号同理 printf("%c\n", '\''); printf("%s\n", "\""); // 6. 猜猜有几个转义字符 printf("c:\test\32\test.c\n"); printf("%d\n", strlen("c:\test\32\test.c")); //13个字符长度 printf("难点难难难,进制转换,ASCII码转化"); // \32指 32是八进制数字 32八进制转十进制得26=3*8^2+2*8^0 再找26的ASCII码的所得的值 // 注意123,257,都可以但182不行,因为八进制中不能有大于或等于8的数,其他进制也一样 // \ddd 表示1~3个八进制数字 // \xdd dd表示两个16进制数 printf("%c\n", '\x61');// 6*16^1+1*16^0得113,再对应ASCII码表输出字符 printf("%c\n", '\32'); //单引号叫字符 printf("%s\n", "\32"); //双引号叫字符串 return 0;}
2.2 一张ASCII码表
2.3 问题 :打印ASCII码时控制台显示不了,如下
解决问题方法,这个方法是修改注册表,别人的主意,不是我的,是我引用的,没有抄袭的意思
1.看控制台属性->当前代码页,我们要把936改为437
2.打开regdit,修改注册表,如下
3.修改完成后再运行代码,成功
4.再看控制台属性,ok
5.注意:这个438不支持中文,想要显示中文就再改回936,改法同上。
四,注释
1.两种注释
// 单行注释,经常使用/**/ 多行注释 ,不支持嵌套
2.注释快捷键
ctrl+k+c == 整段代码全部注释
ctrl+k+u == 整段代码取消注释
五,选择语句
1.if语句
#include int main(){ printf("上课不?(0/1)\n");// 0 ==不上课,1==上课 scanf("%d", &input01); if(input01==1)// { printf("好好学习吗?(1/0):");// 0==不学习 ,1==好好学习 scanf("%d", &input02); if (input02 == 1) printf("拿到offer\n"); else printf("苦逼生活!!"); } else { printf("good luck for you!!"); } return 0;}
六,循环语句
1.while语句
#include int main(){ int line=0; printf("开始学习:\n"); while (line < 200) //()放一个判断条件, { printf("敲一行代码,%d \n",line); line++; //自加== i=i+1 循环200 //printf("%d", line); } if(line>199) printf("不是菜鸟了!!"); return 0;}
2.do ....while语句
3.for语句
七,函数浅讲
1.简单Add()函数
#include int main(){ int num1=0; int num2=0; printf("请任意输入两个整数:"); scanf("%d%d",&num1,&num2);// &取地址符,scanf也是函数 sum = Add(num1,num2);//调用加法函数 printf("%d\n", sum);//printf也是函数, return 0;}//函数体 自定义函数int Add(int x, int y){ int z = x + y; return z;}
八,数组
1.下标
#include int main(){ int arr[10] = { 1,2,3,4,5,6,7 };//定义存放十个整数的数组 int i = 0; //char ch[12]; //float f[12];//都有相应的下标0到n-1 printf("%d\n", arr[2]);//下标用于访问元素 while (i < 10) { printf("数=%d,下标=%d\n", arr[i], i); i++; } return 0;}
九,操作符
1.位操作符
1.1代码
#include int main(){ //位操作 按二进制位操作 // 与(同1为1,否则为0),或(有1为1,否则为0),异或(同0同1为0,不同为1) int a = 3;//0011 int b = 5;//0101 int c = 7;//0111 int d = a&b;//0001 与 int e = b&c;//0101 与 int f = a | c;//0111 或 int g = a ^ b;// 0110 异或 printf("%d\n", d); printf("%d\n", e); printf("%d\n", f); printf("%d\n", g); return 0;}
2.2结果
2.算数操作符
2.1代码
#include int main(){ int a = 8 / 3;//结果为2 精度丢失 float d = 8 / 3; //类型不对 一样丢失精度 float b = 8.0 / 3.0;//非整除一般是用浮点型,保证精度 int c = 9 % 4;//取模 ==取余数 printf("整型=%d 浮点数做除=%f 取模=%d 丢失精度=%f ",a, b, c, d); int t = 1; //4字节 32bit 0000 0000 0000 0000 0000 0000 0000 0001 //左移和右移是 针对二进制数列 int e = t <<1;//01 变成 10 int f = t >>1;//01 变成 00 printf("%d\n", t); printf("%d\n", e); printf("%d\n", f); return 0;}
2.2运行结果
3.赋值操作符
3.1 代码
#include int main(){ //赋值 int a = 10; printf("%d\n", a); a = a + 10;// a += 10; printf("%d\n", a); a = a - 20;// a-=20; printf("%d\n", a); a = a & 2; // a&=2; printf("%d\n", a); // == 是判断符号 =赋值符号 if(a==10) printf("%d\n",a); else printf("不等于"); return 0;}
3.2结果
注意:C语言代码是自上而下运行的,所以a一直在变化的
4.操作符
1.单目
!==(真1假0) 正负号 &== 取地址
sizeof(算类型和变量的空间大小 单位是字节)
~ 取反负号,二进制取反(这个陌生,有代码)
++,--,前置加加减减,先计算再赋值,后置,先赋值再计算
强制类型转化:int a =(int)3.14;把3.14double型强制转换成int型
#include int main(){ int a = 10; int b = ~a; int arr[10]={1,2,3,3,3,3,3,5}; //sizeof(算类型和变量的空间大小 单位是字节) printf("%d\n", sizeof(a)); printf("%d\n", sizeof(arr)); //40个字节 printf("这个数组元素个数==%d\n", sizeof(arr) / sizeof(a)); //~ 按位二进制位取反 //原码 原本二进制数 //反码 最高位符号位不变,其余按位取反 //补码 反码加一得补码 // 0符号位是正号,1符号位是负号 // 注意正数的反码==补码==原码,内存中放原码 //负数在内存中存储的是二进制补码 //a原码==00000000000000000000000000000000 //a取反==11111111111111111111111111111111 这是取反不是反码 符号位1==负数 所以内初存补码,打印这个数原码 //b补码==11111111111111111111111111111111 //b反码==11111111111111111111111111111110 //b原码==10000000000000000000000000000001 //-1 printf("%d\n", b);//打印的是b的原码 return 0;}
2.结果
2.双目操作符
1.关系操作符
(大于>,小于<,大于等于>=,小于等于<=,等于==)
2.逻辑操作符
#include int main(){ //逻辑操作符 ( &&逻辑与 , ||逻辑或) int a = 0; int b = 3; int c = a && b;//同真则真,有假则假 int d = a || b;//有真则真,全假则假 printf("%d\n", c);//0表示假 printf("%d\n", d);//非零表示真 return 0;}
结果
3.三目操作符
#include int main(){ int a = 100; int b = 23; int max = 0; max = (a > b ? a : b);//条件操作符,三目操作符 (esp1?esp2:esp3) printf("%d\n", max); //等同于 if (a > b) max = a; else max = b; 注意:还有逗号表达式,但还没讲 return 0;}
结果
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~