(一)字符串和字符

1.字符串:

这种由双引号引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。(注意:字符串后面天然带有一个\0,

在计算字符串长度的时候 \0 是结束标志,不算作字符串内容)。比如“abc”,后面其实隐藏了一个\0.

C语言学习笔记(二)_C语言学习笔记

 

2.字符:

字符一般由单引号引出。比如'a','b','c'

 

3.打印字符串以及字符

C语言学习笔记(二)_C语言学习笔记_02

结果如图。为什么第一个会直接输出abc,第二个除了abc外,后面还有乱码呢?

因为,在字符串“abc”中,其后面天然有\0(虽然藏起来了,但就是有),作为计算字符串长度的终止符,其本身不计入长度。但是在arr2里面,只有字符,没有\0,所以电脑没有检测到终止符,就会一直输出后面的随机值,也就出现了乱码。

所以,要想让arr2也打印成abc,可以这样写:

C语言学习笔记(二)_C语言学习笔记_03

 

 

4.字符串长度的计算

引出一个新函数:strlen函数,用于计算长度。strlen=string length,在使用之前,要在前面声明#include<string.h>

C语言学习笔记(二)_C语言学习笔记_04

因为第二个字符构成的集合中,没有\0,随意会继续计算随机数值,直到出现\0才会停止。这里的15,表示第16位有\0.

C语言学习笔记(二)_C语言学习笔记_05

加上\0之后,计算机停止计算。

 

(二)转义字符

C语言学习笔记(二)_C语言学习笔记_06

C语言学习笔记(二)_C语言学习笔记_07

 

 

这里重点讲解一下\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语言学习笔记(二)_C语言学习笔记_08

 

 

(三)注释语句

注释有两种风格:

C语言风格的注释 /*xxxxxx*/

缺陷:不能嵌套注释

C++风格的注释 //xxxxxxxx

可以注释一行也可以注释多行

 

(四)选择语句和循环语句

1.选择语句:

C语言学习笔记(二)_C语言学习笔记_09

 

写成代码:涉及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;
}

输出结果如下:

C语言学习笔记(二)_C语言学习笔记_10

 

循环语句:

C语言学习笔记(二)_C语言学习笔记_11

代码如下:这里引入while和if语句。如果line值小于20000,则进入上一个循环,大于20000,进入下一个。

C语言学习笔记(二)_C语言学习笔记_12

 

(五)函数

我们以一个简单的加法代码为例:

#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语言学习笔记(二)_C语言学习笔记_13

 

(六)数组

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

C语言学习笔记(二)_C语言学习笔记_14

那么如何改正代码呢?

 

 

 

 

(七)简单介绍操作符

1.算数操作符:+       -        *         /        %=加 减 乘 除 取模

什么是取模:就是取余数。比如说5%2=1

2.移位操作符:

  >> :右移符

 <<:左移符

值得注意的是:这里的右移或者左移,指的是移动一个二进制位

左移:原来二进制化为十进制=1,位移后变成1*2^1+0*2^0=2

C语言学习笔记(二)_C语言学习笔记_15

C语言学习笔记(二)_C语言学习笔记_16

 

 

右移:

C语言学习笔记(二)_C语言学习笔记_17

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,成立

C语言学习笔记(二)_C语言学习笔记_18

 

 

 

 

 

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语言学习笔记(二)_C语言学习笔记_19

!逻辑反操作

在C语言中,0代表假,非零代表真

比如说10,逻辑反操作后,变为0

C语言学习笔记(二)_C语言学习笔记_20

 

sizeof:后面直接加括号就好了!!!比如sizeof(int)

如果算数组长度,指的是字节长度

C语言学习笔记(二)_C语言学习笔记_21

这样,10个整形元素的数组,长度为40个字节,输出为40.

C语言学习笔记(二)_C语言学习笔记_22