【从0到1学习C】之初识C语言2【初阶详解篇2】

本文详细介绍了C语言的基础知识,包括字符串的定义与结束标志验证,转义字符的作用,注释的使用,以及数组、选择语句、循环语句、函数、操作符的详解。此外,还讨论了数组的不完全初始化、位操作符、逻辑操作符以及条件操作符的应用。内容涵盖了C语言编程的基础要素,是初学者入门的重要参考资料。
摘要由CSDN通过智能技术生成

本节重点

字符串+转义字符+注释

字符串

在C语言中字符串就是用双引号引起来的一串字符**

#include <stdio.h>
int main()
{
        "abcdefg";//它就是一个字符串
        return 0;
}
验证字符串结束标志

方法1:通过监视查看
在这里插入图片描述

字符数组

数组是一组相同类型的元素

在这里插入图片描述
方法2:利用求字符串的长度验证字符串结束标志。

#include <stdio.h>
#include <string.h>
int main()
{
        char arr[] = "hello";
        char arr1[] = "abc";
        char arr2[] = { 'a', 'b', 'c' };             
        int len = strlen("abc");
        printf("%d\n", len);//打印结果:3
        printf("%d\n", strlen(arr1));//打印结果:3
        printf("%d\n", strlen(arr2));//打印结果:15,是随机值
        return 0;
}
  • strlen():求字符串的长度,string length的缩写,它需要引用头文件#include <string.h>
转义字符

转义字符就是转变了一个字符原来的意思

#include <stdio.h>
int main()
{
        printf("c:\test\test.c");
        printf("c:\\test\\test.c");//打印结果:c:\test\test.c
        printf("ab\ncd");
        printf("%c\n", '\'');//运行结果为一个单引号
        printf("\a\a\a");
        return 0;
}

上述代码中:

  • \t 是转义字符(水平制表符相当于tab键的功能)而不再是两个普通的字符
  • \n是转义字符(换行符)
  • 转义字符\ '运行结果为一个单引号
  • 转义字符\a(警告字符,蜂鸣)电脑会响一下

\ddd:ddd表示1~3个八进制数字,如\130=X
\xdd :dd表示2个十六进制数字,如:\x30=0

#include <stdio.h>
int main()
{
       
        printf("%c\n", '\130');//打印结果:X(它的ASCII码值是88).
        //8进制的130是十进制的多少呢?
       // 1       3        0
      //  8^2     8^1      8^0=1*8^2+3*8^1+0*8^0=64+24+0=88.
        printf("%c\n", '\101');//A(它的ASCII码值是65),8进制的65是:101
              
        printf("%c\n", '\x30');//打印结果:字符0
               //3*16^1+0*16^0=48
        //48对应的ASCII码值为0
  • 总结:斜杠后面跟上三个数字是一个转义字符,它是把斜杠后面的八进制数字,转换为十进制数字之后,以这个数字为ASCII码值代表的那个字符就是我们要的那个字符。(较难理解)

练习:下列字符串的长度为多少?

#include <stdio.h>
int main()
   { 
        printf("%d\n", strlen("c:\test\328\test.c"));//结果:14
        return 0;
   }
注释

注释:是用来解释复杂代码的
“//”:是C++的注释风格:它可以注释一行也可以注释多行
/**/:是C语言的注释风格:它不支持嵌套注释

int mian()
{
       
        //int b = 0;     
        /*int b = 0;*/   
}

选择语句:if…else

#include <stdio.h>
int main()
{
        int input = 0;
        printf("学习IT:>\n");
        printf("不学IT (1/0)>:");
        scanf("%d", &input);
        if (input == 1)
        {  
               printf("多挣钱!!\n");
        }       
        else
        {
               printf("少挣钱……\n");
        }
        return 0;
}

注意:当只有一句话时if语句中可以不用写大括号,超过一句话时就需要写大括号,其他语句也一样。

while循环语句

#include <stdio.h>
int main()
{
        int line = 0;
        while (line < 30000)
        {
               printf("每天写代码:%d\n",line);
               line++;
        }
        if (line == 30000)
        {
               printf("拿到一个好offer\n");
        }
        return 0;
}

函数

两个数普通相加

#include<stdio.h>
int main()
{
        //定义两个变量并赋初值
        int num1 = 0;
        int num2 = 0;
        scanf("%d%d", &num1, &num2);
        int sum = num1 + num2;
        printf("sum=%d\n", sum);
        return 0;
}

用函数方式实现两个数相加

int Add(int x,int y)
{
        int z = 0;
        z = x + y;
        return z;
}
int main()
{
        //定义两个变量并赋初值
        int num1 = 0;
        int num2 = 0;
        scanf("%d%d", &num1, &num2);
        int sum=Add(num1, num2);
        printf("sum=%d\n", sum);
        return 0;
}

数组

数组:是一组相同类型的元素的集合

#include<stdio.h>
int main()
{
        int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int i = 0;
        while (i < 10)
        {
               printf("%3d", arr[i]);
               i++;
        }
        //创建一个字符数组,[5]存放5个字符,但{ 'a', 'b', 'c' }只有三个字符,这是不完全初始化,剩余的默认为0.
        char ch[5] = { 'a', 'b', 'c' };
        return 0;
}

上述代码解析:

  • int arr[10]:创建一个名为arr的数组,[10]表示存放十个元素,每个元素类型为int
  • { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }是初始化
    记住:数组是用下标来访问的,第一个元素的下标为0,第二个下标为1,以此类推。

操作符

C语言中有很多操作符
下面结合代码演示对常用操作符进行讲解

1.算术操作符:+-*/%
#include <stdio.h>
int main()
{
        int a = 9 / 2;//运行结果:4
        int a = 9 / 2.0;//运行结果:4.5
        int a = 9 % 2;//运行结果:1
        printf("%d\n", a);
        return 0;
}

代码注解:

  • 9 / 2:两个整数相除,得到的也是一个整数 。
  • 9 / 2.0:要想得到一个小数,只需有一位为小数即可得。
  • 9 % 2:%:取模操作符(或取余)
2.移位操作符:>>(右移操作符)   <<(左移操作符)
#include <stdio.h>
int main()
{
        int a = 2;
        int b = a << 1;
        printf("%d\n", b);//运行结果为:4
        return 0;
}

上述代码解析:

  • 左移操作符(<<):移动的是二进制位
  • a是2,2的二进制序列为10,因为a是放在整型里面的,一个整型是4个字节=32个比特位,所以2的二进制序列需要写出32个比特位即:00000000000000000000000000000010
  • a << 1:表示把a的二进制序列向左移动一位得到:00000000000000000000000000000100=1x22+0*x21+0x20=4

3.位操作符

  • &:按位与
  • ||:按位或
  • ^:按位异或

4.赋值操作符:= 、+= 、-= 、*= 、/= 、&= 、^=、|=、 >>= 、<<=

int main()
{
        int a = 2;//  =是赋值,把2赋给a
        a = a + 5;
        a += 5;//  +=复合赋值,a += 5;等于 a=a + 5;
        a = a - 3;
        a -= 3;
        a = a % 3;
        a %= 3; 
}

5.单目操作符

! : 逻辑反操作
-:负值
+:正值
&:取地址
~ :对一个数的二进制位按位取反
–:前置、后置–
++:前置、后置++
“*” :间接访问操作符(解引用操作符)
(类型):强制类型转换
sizeof :操作数的类型长度(以字节为单位)

单目操作符中!操作符讲解

  • !:把真变为假,把假变为真
  • C语言中:0表示假,非0就是真
int main()
{
        int a = 10;//a为真
        printf("%d\n", !a);//!a(非a);把a变为假;  运行结果:0
        if (a)
        {
              //如果a为真,做事
        }
        if (!a)
        {
              //如果a为假,做事
        }
        return 0;
}

单目操作符中~操作符讲解
~:表示对一个二进制位按位取反

拓展补充:整数在内存中存储的是补码,一个整数的二进制表示有三种
原码:是一种计算机中对数字的二进制定点表示方法,其最高位为符号位,符号位整数位0,负数为1,其余位表示数值的大小;
已知原码求反码:符号位不变,其余的1变为0,0变为1;
已知反码求补码:反码的二进制序列加1;
已知补码求原码:补码-1得到反码,反码再符号位不变,其他位按位取反得原码。

#include<stdio.h>
int main()
{
 int a = 0;
 printf("%d\n", ~a);//运行结果:-1
  return 0;
}

根据上述代码讲解~操作符

  • ~按(二进制)位取反:就是把所有二进制中的数字,原来是1的变为0,原来是0的变为1;
  • 本例中整数a里面放的是0,0的二进制如何表示呢?、
    • 因为0是一个32bit的整型,所以0的二进制表示形式为:00000000000000000000000000000000
      所以~a为:11111111111111111111111111111111
      如:-1:"-"号是符号位,1是十进制数,负数的符号位为1,正数的符号位为0,
      因为-1为int(整型)
      所以:-1的
      原码为:10000000 00000000 00000001 (32个bit)
      反码为:11111111 11111111 11111110
      补码为:11111111 11111111 11111111
  • 原码、反码、补码的计算是针对负数的,因为正数的原码、反码、补码都相同
  • 按位取反得到的是整数的二进制的补码;
  • 按位取反不考虑符号位,直接取反(1变0,0变1)

疑问:为什么打印结果为-1?
答:二进制和补码都是内存里面的值,%d打印出的真实的值是原码。

单目操作符中前置++ 后置++操作符讲解
前置++

#include<stdio.h>
int main()
{
 int a = 10;
 int b = ++a;   //前置++,先++,再使用,即a先++,b再使用。
 printf("%d\n", b);//打印结果:11
 printf("%d\n", a);//打印结果:11
 return 0;
}

后置++

int main()
{
 int a = 10;
 int b = a++;   //后置++,先使用,再++,即b先使用,a再++。
 printf("%d\n", b);//打印结果:10
 printf("%d\n", a);//打印结果:11
 return 0;
}

单目操作符中“强制类型转换”操作符讲解

int main()
{
 int a = (int)3.14;
 printf("%d\n", a);
  return;
}

上述代码中:

  • 运行会警告,想要避免报错需进行强制类型转换,可将int a=3.14,写成int a=(int) 3.14

在这里插入图片描述
单目操作符中sizeof()操作符讲解

  • sizeof是一个操作符,它是计算变量或类型的大小的
  • 注意1:sizeof()求类型的大小时括号不能省略
  • 注意2: sizeof求变量的大小时,括号可以省略,但一般不省。
  • 结论:由此也可以看出sizeof是一个操作符而不是一个函数,因为函数的括号在什么情况下都不可以省。
int main()
{
        int a = 10;
        printf("%d\n", sizeof(int));//求类型大小
        printf("%d\n", sizeof a);//求变量大小
        return 0;
}

sizeof计算一个数组的大小

int main()
{ 
        int arr[10] = { 0 };
        printf("%d\n", sizeof(arr));  //运行结果:40
     
      
        printf("%d\n", sizeof(arr[0])); //运行结果:4
        
       
  
        int sz = sizeof(arr) / sizeof(arr[0]);
        printf("%d\n", sz);//运行结果:10
        return 0;
}

上述代码中:

  • sizeof(arr):计算的是数组的总大小,单位是字节。
  • arr[0]:是这个数组的第一个元素
  • 疑问:如何计算数组元素的个数?
    答:数组元素的总大小/一个元素的大小=数组元素的个数
    即 sz = sizeof(arr) / sizeof(arr[0]);

6.关系操作符

=
<
<=
!= //用于测试“不相等”
== //用于测试“相等”

7.逻辑操作符

&& 逻辑与
|| 逻辑或

  • && 逻辑与:只要有一个假就为假,两个都为真才是真
int main()
{
 int a = 3;//真
 int b = 4;//真
 int c = a&&b;//真
 printf("%d\n", c);//运行结果:1
 return 0;
}

|| 逻辑或:只要有一个真就为真,两个都为假才是假

int main()
{
 int a = 0;//假
 int b = 0;//假
 int c = a||b;//假
 printf("%d\n", c);//运行结果:0
 return 0;
}

8.条件操作符

exp1 ?exp2 :exp3
条件操作符也叫三目操作符
exp1 ? exp2 : exp3
表达式1 ? 表达式2 : 表达式3 三个操作数
解释:exp1(表达式1)如果成立,exp2计算,整个表达式的结果就是exp2的结果
exp1(表达式1)如果不成立,exp2不计算,exp3计算,整个表达式的结果是exp3的结果

int main()
{
int a = 0;
int b = 3;
int max = 0;
if (a > b)
max = a;
else
max = b;
printf("%d\n", max);//打印结果为3
return 0;
}
//用条件操作符写
int main()
{
int a = 0;
int b = 3;
int max = 0;
max = a > b ? a : b;
printf("%d\n", max);//打印结果为3
return 0;
}

9.逗号表达式

是逗号隔开的一串表达式,就是逗号表达式
exp1,exp2,exp3,expN

int main()
{
 //(2, 4 + 5, 6);//逗号表达式
 int a = 0;
 int b = 3;
 int c = 5;
 int d = (a = b + 2, c = a - 4, b = c + 2);//逗号表达式是从左向右依次计算的,整个表达式的结果是最后一个表达式的结果
 printf("%d\n", d);//运行结果;3
 return 0;
}

10.下标引用、函数调用和结构成员

下标引用操作符:[]
函数调用操作符:()
.
->

下标引用操作符:[]

int main()
{
 int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 printf("%d\n", arr[5]);//[]就是下标引用操作符,打印结果;6
 return 0;
}

函数调用操作符:()

调用函数的时候,函数名后面的()就是函数调用操作符

int main()
{
 printf("hehe\n");//printf后面的()就是函数调用操作符,里面有一个操作数
 printf("%d", 100);//它里面有两个参数,即两个操作数,函数调用操作符可以传多个参数,也可以一个不传。
 return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值