初识C语言:从0开始,由菜鸟变大牛(3)-创新互联

上篇我们讲解了变量、常量、字符串、转义字符、注释。那么我们继续来学习C语言的一些基本知识,同样,知识也是点到为止,不会很深入,后面我会发布更深层次的知识。(注:本篇的内容稍稍有点多,大家可以分批学习)

站在用户的角度思考问题,与客户深入沟通,找到集安网站设计与集安网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广、国际域名空间、虚拟主机、企业邮箱。业务覆盖集安地区。1.选择语句

在C语言中有时有多种分支,我们就需要用到选择语句

在C语言中有两种常见的选择语句:if语句、switch语句,本篇先来学习if语句

1.1if语句:
  • 语法结构

if(//表达式1)
{
    //语句1;
}
else if(//表达式2)
{
    //语句2;
}
else
    //语句3;

我们这里要注意,如果if、else if、else后面有多条语句就得加上{},如果只有一条语句可以不用加{},另外else if可以使用多次用来进行多个选择

我们来写一串代码来实现选择语句:

#includeint main()
{
    int input = 0;
    //进行选择 
    printf("你要学好C语言吗?(1 or 0)\n");
    //输入    
    scanf("%d", &input); 
    //选择语句                   
    if (input == 1)     //要注意这里使用的是==,意思是如果input等于1则执行下面的语句
    {
        //输出
        printf("你可以得到好offer\n");
    }
    else                //这里是input不等于1的情况,则执行下面的语句
    {
        //输出
        printf("另寻出路吧!\n");
    }
    return 0;
}
1.2注意事项:
  • if语句里面的表达式如果要判断相不相等一定要使用==

  • 如果if、else后面有多条语句得加上{}

  • 如果要判断多个条件可以使用多次else if

2.循环语句

循环很好理解,就比如我们日复一日的学习,老师日复一日的讲课...等等

那在C语言中怎么样实现循环呢?

在C语言中的循环语句有while循环;for循环,do while循环

本篇我们先来介绍while循环

2.1while循环:
  • 语法结构

while(//表达式)
{
     //循环语句;
}

我们用代码来表示一下:

比如:跟着我学C语言,每天都要敲代码,当你敲了20000行有效代码时,你将会有一个好的offer

#includeint main()
{
    printf("跟着我学习C语言\n");
    int line = 0;
    //设置循环:当line小于20000时进入这个循环
    while (line< 20000)        
    {
        printf("敲代码:%d\n",line);
        line++;    //这里的意思表示line每次进来之后都会+1
    }
    if (line >= 20000)  //当line大于等于20000之后跳出上面的循环进入这个选择语句中
        printf("你将会得到一个好offer\n");

    return 0;
}
3.函数

函数能够使用一个独立的功能

我们在初识C语言(2)里面在讲注释的时候使用了一串代码就是使用函数来求两个数的和

  • 不用函数来写两个数的求和:

#includeint main()
{
    int a = 0;
    int b = 0;
    int sum = 0;
    //输入
    printf("请输入两个整数\n");
    scanf("%d %d", &a, &b);
    //计算
    sum = a + b;
    //输出
    printf("sum=%d\n", sum);
    return 0;
}

当我们在一个工程里写很多加法运算的时候,如果每次使用这种写法会很麻烦,这时候就要使用函数

  • 用函数写两个数的求和:

#include//这里设置这个用来求和的函数Add
int Add(int x, int y)         //由于输入的是整形,所以函数类型也应该为整形
{                            //在函数里面设置两个整形x,y来接收a,b
    int z = x + y;           //这里用z来表示两个数的和
    return z;                //这里返回值是z,是因为当我们计算出a,b的和将它存放在z里面,将它返回
}                            //我们的sum,从而打印输出
int main()
{
    int a = 0;
    int b = 0;
    int sum = 0;
    printf("请输入两个整数\n");
    //输入
    scanf("%d %d", &a, &b);
    //求和
    sum = Add(a, b);    //这里使用一个函数Add,将输入的a,b放进函数Add中                                                  //然后设置一个sum变量来存放计算出的值
    //输出
    printf("sum=%d\n", sum);

    return 0;
}

函数的特点就是简化代码,代码复用

说到这里还有老铁不理解的话我们来画一个图来展示一下:

函数的功能就好比一个工厂,我们只需要把原材料给工厂,然后通过工厂的加工来得到我们需要的东西

由上面的函数求和的例子来说明函数的一些基本组成

4.数组

要存储1~10的数字,该怎么储存呢?

数组从简单方面理解就是一堆数字组合起来,但是C语言中有明确定义

4.1数组的定义:

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

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
4.2数组的下标:
  • C语言规定:数组的每个元素都有一个下标,下标是从0开始的

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
         //下标 0 1  2  3 4 5 6  7 8  9 
//假设n是元素个数,那么它的下标的范围是0~n-1
  • 使用下标的方式访问元素

arr [//下标];

假设一个数组里面有10个元素,我们需要找到下标为5的元素

#includeint main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    printf("%d\n", arr[5]);
    return 0;
}

我们可以很直观的看到,我们打印下标为5的元素就可以得到6

4.3数组的使用:

当我们给定了一组数组,我们需要把这组数全部打印出来,我们需要如何做呢?

按照我们以前的方法,我们可以使用查找下标的方法依次将他们打印,但是非常麻烦

但是我们可以使用我们前面学过的while循环,我们可以先找元素下标为0的元素,然后依次下标+1,从而循环打印出整个数组

#includeint main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int i = 0;              //这里设置一个循环变量
    while (i< 10)          //while循环开始:当i<10时,循环开始
    {
        printf("%d ", arr[i]);    //在这里刚刚进来的i是0,所以打印的下标为0的元素
        i++;                      //在这里i+1,每次进来都会加1,直到加到10
                                  //则不满足whiel循环的条件则会跳出循环
    } 
    return 0;
}
5.操作符

关于操作符在初识C语言里只是简单介绍,后面的文章会详细介绍

5.1算数操作符:

+

-

*

/

%

//a+b         a-b          a*b          a/b          a%b

关于算数操作符,有几点要注意:

%:这个是取模(取余)

当使用A%B时要注意,%两边都得是整数

//5%2=1 

当使用A/B时要注意,如果两边都为整数,则计算出的结果是整数,如果两边有一个是小数,则计算出的结果是小数

//5/2 = 2
//5.0/2 = 2.5
//5.0/2.0 = 2.5
5.2移位操作符(移动的是二进制位):

>>

<<

后面会发布文章介绍

5.3位操作符(操作的是二进制位):

&

^

|

后面会发布文章介绍

5.4赋值操作符:

=

+=

-=

/=

*=

&=

|=

<<=

>>=

这里我们只讲前面五个

= :这里是赋值的意思,就比如a=5,是把5赋值给a

+= :a += 5 这里的意思是给a加上5再赋值给a,比如原本a = 0,那么a+ =5之后a=5

-= 、*=、/=都是同样的道理

5.5单目操作符:
  • 单目指的就是操作符两边只有一个操作数

逻辑反操作

-

负值

+

正值

&

取地址

sizeof

操作数的类型长度(以字节位单位)

~

对一个数的二进制位按位取反

--

分为前置、后置

++

分为前置、后置

*

间接访问操作符(解引用操作符)

(类型)

强制转换类型

在C语言中0表示假,非0表示真

在这里我们讲一下sizeof和--、++

5.5.1sizeof:

sizeof:可以用来计算变量、类型所占空间的大小(以字节为单位)

#includeint main()
{
    int a=10;
    printf("%d\n",sizeof(a));
    printf("%d\n",sizeof(int));
    return 0;
}

计算出的结果都是4个字节

了解到这里我们可以计算出一个字符串里面有多少个字符

#includeint main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    printf("%d\n", sizeof(arr));             //计算的是整个字符串的总的大小  40个字节
    printf("%d\n", sizeof(arr[0]));          //计算的是一个字符的大小

    int sz = sizeof(arr) / sizeof(arr[0]);   //计算出这个字符串里面有多少个字符
    printf("%d\n", sz);
    return 0;
}

我们再来了解一个前面提到过的知识:strlen

strlen是一个计算字符串长度的函数,使用时要包含头文件#include

#include#includeint main()
{
    char arr[] = "abcdef";
    printf("%d\n", strlen(arr)); //?
    printf("%d\n", sizeof(arr)); //?
    return 0;
}

那这里打印出来为什么是6、7呢?

是因为:

sizeof计算的是所占内存空间的大小,不在乎内存里面放的是什么,单位是字节

strlen统计的是\0之前的字符的个数,所以不包含\0

在这个字符串里面有abcdef\0这7个字符,所以用strlen来统计时是6,不统计\0,而用sizeof来计算时,它不管这个字符串里面放的是什么,统统都计算,所以计算出来的大小是7.

5.5.2++、--:

++、--可以分为两类:前置和后置

先来了解后置++:

后置++的意思就是先使用,后++

#includeint main()
{
    int a = 2;            //这里简单解读一下
    int c = 0;            
    c = a++;               //c=a;a=a++;
    printf("c=%d a=%d\n", c, a);
    return 0;
}

这里的a++类似于我们前面见到过的line++,就是在a的基础上+1再赋值给a,这里的后置++就是先把a的值使用赋值给c,然后a再++赋值给a,所以c=2,a=3.

前置++:先++,再使用

#includeint main()
{
    int a = 2;
    int c = 0;
    c = ++a;           //c=a++,a=a++
    printf("c=%d a=%d\n", c, a);
    return 0;
}

前置++,先++,再使用,意思就是:先给a++,然后使用赋值给c,所以c=3,a=3.

前置++和前置--意思一致,后置++和后置--意思也一致。

5.6关系操作符:

>

用于测试“大于”

>=

用于测试“大于等于”

<

用于测试“小于”

<=

用于测试“小于等于”

==

用于测试“相等”

!=

用于测试“不相等”

注:要注意区分“==”和“=”,前者是相等,后者是赋值

5.7逻辑操作符:

&&

逻辑与(并且)

||

逻辑或(或者)

我们定义0~18岁为未成年,18~28岁为青年,28~45岁为中年,45岁以上为老年

我们可以用代码来表示一下:

#includeint main()
{
    int age = 0;
    scanf("%d", &age);
    if (age >= 0 && age<= 18)         //逻辑与操作符:两边的条件同时满足才可以执行
    {
        printf("未成年\n");
    }
    else if (age >18 && age<= 28)
        printf("青年\n");
    else if (age >28 && age<= 45)
        printf("中年\n");
    else
        printf("老年\n");
    return 0;
}

逻辑与操作符类似于并且,A并且B

#includeint main()
{
    int num = 0;
    scanf("%d", &num);
    if (num == 5 || num == 10)   //逻辑或操作符:只要满足两边任何一个条件便可以执行
        printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

逻辑或操作符类似于或者,A或者B

5.8条件操作符:

exp1 ? exp2: exp3

简单介绍这个操作符的意思:exp1成立吗?,如果成立,则执行exp2,如果不成立,则执行exp3

这个也叫三目操作符

使用三目操作符来比较两个数的大小:

#includeint main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);           //在输入的时候两个数中间要有空格
    printf("MAX= %d", a >b ? a : b); //如果a>b成立,则执行a,如果不成立,则执行b
    return 0;
}
5.9逗号表达式:

exp1, exp2, exp3, ..... expn

逗号表达式会从左向右依次计算,整个表达式的结果是最后一个表达式的结果

代码演示:

#includeint main()
{
    int a = 3;
    int b = 5;
    int c = 0;
    int d = (a += 3, b -= a, c - 2);
    printf("%d\n", d);
    return 0;
}

我们来分析一下这个代码:a+=3的意思是给a+3再赋值给a,所以a=3+3=6。b-=a的意思是给b-a再赋值给b,所以b=5-6=-1。c-2=-2,所以打印出的结果就是-2。

因为逗号表达式最后打印的是最后一个表达式的结果,那么我们是不是不用管前面的表达式,直接去计算最后一个表达式呢?

可不敢这样去想,如果前面有一个表达式改变了最后一个表达式的值,那么还这样计算就出现bug,我们来看一个代码:

#includeint main()
{
    int a = 3;
    int b = 5;
    int c = 0;
    int d = (a += 3, b -= a, c = a + b, c - 2);
    printf("%d\n", d);
    return 0;
}

如果我们只计算最后一个表达式的结果:c-2的出的结果是-2,那可就错了,因为前面有一个表达式改变了c的值,所以可不敢贸然去计算,如果从左向右依次计算:a+=3,所以a=6。b-=a,所以b=-1。c=a+b,所以c=5。c-2,所以最终结果c=3,这样就对了。

5.10下标引用、函数调用、结构成员操作符:

[ ]

( )

.

->

我们这里只讲前两个

5.10.1下标引用操作符:

下标引用操作符在前面的数组的下标中提到过,我们在使用元素下标可以找到该元素时就采用的"[ ]"

#includeint main()
{
    char arr[10] = { 1,2,3,4,5,6,7,8 };//不完全初始化:设置的字符串里面一共有10个元素
                                          //但是我只写了8个元素,剩下的元素默认初始化都是0
    printf("%d", arr[5]);            //下标引用,找下标为5的元素
    return 0;
}
5.10.2函数调用操作符:

在使用函数时需要用到"( )"

#include//包含头文件可不敢忘记
#includeint main()
{
    int len = 0;
    len = strlen("abcd");
    printf("%d\n", len);
    return 0;
}

可以看到我们在使用strlen函数求这个字符串的长度时使用了“()”,在使用其他函数时也是同样的道理。

本篇的分享到此为止,大家可以慢慢学习,最后感谢大家阅览,如果有什么不足和疑问可以私信我或者打在品论区,感谢大家!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:初识C语言:从0开始,由菜鸟变大牛(3)-创新互联
当前URL:http://myzitong.com/article/gpjje.html