(一)字符串和字符
1.字符串:
这种由双引号引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。(注意:字符串后面天然带有一个\0,
在计算字符串长度的时候 \0 是结束标志,不算作字符串内容)。比如“abc”,后面其实隐藏了一个\0.
2.字符:
字符一般由单引号引出。比如'a','b','c'
3.打印字符串以及字符
结果如图。为什么第一个会直接输出abc,第二个除了abc外,后面还有乱码呢?
因为,在字符串“abc”中,其后面天然有\0(虽然藏起来了,但就是有),作为计算字符串长度的终止符,其本身不计入长度。但是在arr2里面,只有字符,没有\0,所以电脑没有检测到终止符,就会一直输出后面的随机值,也就出现了乱码。
所以,要想让arr2也打印成abc,可以这样写:
4.字符串长度的计算
引出一个新函数:strlen函数,用于计算长度。strlen=string length,在使用之前,要在前面声明#include<string.h>
因为第二个字符构成的集合中,没有\0,随意会继续计算随机数值,直到出现\0才会停止。这里的15,表示第16位有\0.
加上\0之后,计算机停止计算。
(二)转义字符
这里重点讲解一下\ddd和\xdd两种转义字符
\ddd:ddd指的是1-3个8进制数字
比如说:如果打印\32,后面3和2是两个八进制数字。换成十进制是:3*8^1+2*8^0=26,则对应到ASCII码表所对应的字符,然后输出。
在计算长度时,\32记一个单位长度即可。
但是要注意,八进制中只有0-7,如果出现了8,那么不符合语法规矩,不构成转义字符,比如\382,直接输出\382。计算长度记4个单位。
\xdd:dd表示两个十六进制的数字
比如\x61,转换成十进制就是:6*16^1+1*16^0=97,输出ASCII对应的值
一道题目:计算字符串“c:\test\328\test.c”
(三)注释语句
注释有两种风格:
C语言风格的注释 /*xxxxxx*/
缺陷:不能嵌套注释
C++风格的注释 //xxxxxxxx
可以注释一行也可以注释多行
(四)选择语句和循环语句
1.选择语句:
写成代码:涉及scanf语句和if语句
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int input=0;
printf("你考上了大学\n");
printf("大学四年中是否要好好学习呢?(1/0)>:");//>:代表提示符,要在后面输入一个数字
scanf("%d",&input);
if(input==1)//if语句后面不用跟冒号哦,如果带了冒号,那后面的else就无法识别这个if了
printf("好offer\n");
else//两个都带冒号也不行哦
printf("卖红薯\n");
return 0;
}
输出结果如下:
循环语句:
代码如下:这里引入while和if语句。如果line值小于20000,则进入上一个循环,大于20000,进入下一个。
(五)函数
我们以一个简单的加法代码为例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a=0;
int b=0;
int sum=0;
printf("请输入两个数字,电脑会将他们求和");
scanf("%d%d",&a,&b);
sum=a+b;
printf("sum=%d\n",sum);
return 0;
}
这样可以运行,但是还有另外一种写法:先将加法函数封装起来,独立于主函数之外。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Add(int x,int y)//自定义一个加法函数,里面有整形Z和整形Y,将其封装起来,独立于主函数之外。
{
int z=x+y;
return z;
}
int main()//主函数部分和原来的写法类似
{
int a=0;
int b=0;
int sum=0;
printf("请输入两个数字\n");
scanf("%d%d",&a,&b);
sum=Add(a,b);
printf("sum=%d\n",sum);
return 0;
}
运行结果如下:
(六)数组
C语言中给了数组的定义:一组相同类型元素的集合。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素。前面的10,表示这个整型数组最多放10个整形,如果里面没有填数字,那就说明对存放的整形没有限制,就会出现如下图所示的随机数值。其下标i=0,1,2,3,4,5,6,7,8,9
那么如何改正代码呢?
(七)简单介绍操作符
1.算数操作符:+ - * / %=加 减 乘 除 取模
什么是取模:就是取余数。比如说5%2=1
2.移位操作符:
>> :右移符
<<:左移符
值得注意的是:这里的右移或者左移,指的是移动一个二进制位
左移:原来二进制化为十进制=1,位移后变成1*2^1+0*2^0=2
右移:
3.位操作符:
& ^ |
(在C语言二进制中,0是假,1是真)
&:按位与:(并且),在两个二进制中,比如两个二进制011和101,按位于后,变成001(只要有一个0,就是变成0,即相异就变0),然后按照十进制输出
^:按位异或:在两个二进制中,比如两个二进制011和101,按位异或,表示:如果对应位置的两个数相同,则取0,不同则取1(对应异或),则变为110,按十进制输出。
|:按位或:(只要),在两个二进制中,比如两个二进制011和101,按位或,变成111(只要有一个1,就变成1),然后按照十进制输出
这里只验证按位异或:110对应的十进制为1*2^2+1*2^1+0*2^0=6,成立
4.赋值操作符:
= += -= /= &= ^= |= >>= <<=
=:表示赋值
==:表示判断相等
我们拿语句来举例:
a=20
a=a+10和a+=10是等价的;
a=a-10和a-=10是等价的;
a=a/10和a/=10是等价的;
a=a&10和a&=10是等价的(按位与);
+=这种,叫复合赋值符
。。。。。下面同理,写法一致
5.单目操作符
!逻辑反操作
在C语言中,0代表假,非零代表真
比如说10,逻辑反操作后,变为0
sizeof:后面直接加括号就好了!!!比如sizeof(int)
如果算数组长度,指的是字节长度
这样,10个整形元素的数组,长度为40个字节,输出为40.