初识C语言:从入门到精通(3)

简介: 第三篇对C语言基础知识的概要,适合新手入门,简单易懂。

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

紫蓝色几何渐变科技互联网微信公众号封面 (1).gif

1.选择语句

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

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

1.1if语句:

  • 语法结构
if(//表达式1){
//语句1;}
elseif(//表达式2){
//语句2;}
else//语句3;

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

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

#include<stdio.h>intmain()
{
intinput=0;
//进行选择 printf("你要学好C语言吗?(1 or 0)\n");
//输入    scanf("%d", &input); 
//选择语句                   if (input==1)     //要注意这里使用的是==,意思是如果input等于1则执行下面的语句    {
//输出printf("你可以得到好offer\n");
    }
else//这里是input不等于1的情况,则执行下面的语句    {
//输出printf("另寻出路吧!\n");
    }
return0;
}

1.2注意事项:

  • if语句里面的表达式如果要判断相不相等一定要使用==
  • 如果if、else后面有多条语句得加上{}
  • 如果要判断多个条件可以使用多次else if

2.循环语句

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

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

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

本篇我们先来介绍while循环

2.1while循环:

  • 语法结构
while(//表达式){
//循环语句;}

我们用代码来表示一下:

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

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

3.函数

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

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

  • 不用函数来写两个数的求和:
#include<stdio.h>intmain()
{
inta=0;
intb=0;
intsum=0;
//输入printf("请输入两个整数\n");
scanf("%d %d", &a, &b);
//计算sum=a+b;
//输出printf("sum=%d\n", sum);
return0;
}

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

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

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

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

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

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

4.数组

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

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

4.1数组的定义:

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

intarr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

4.2数组的下标:

  • C语言规定:数组的每个元素都有一个下标,下标是从0开始的
intarr[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的元素

#include<stdio.h>intmain()
{
intarr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[5]);
return0;
}

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

4.3数组的使用:

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

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

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

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

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:可以用来计算变量、类型所占空间的大小(以字节为单位)

#include <stdio.h>intmain()
{
inta=10;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(int));
return0;
}

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

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

#include<stdio.h>intmain()
{
intarr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", sizeof(arr));             //计算的是整个字符串的总的大小  40个字节printf("%d\n", sizeof(arr[0]));          //计算的是一个字符的大小intsz=sizeof(arr) /sizeof(arr[0]);   //计算出这个字符串里面有多少个字符printf("%d\n", sz);
return0;
}

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

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

#include<stdio.h>#include<string.h>intmain()
{
chararr[] ="abcdef";
printf("%d\n", strlen(arr)); //?printf("%d\n", sizeof(arr)); //?return0;
}

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

是因为:

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

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

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

5.5.2++、--:

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

先来了解后置++:

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

#include<stdio.h>intmain()
{
inta=2;            //这里简单解读一下intc=0;            
c=a++;               //c=a;a=a++;printf("c=%d a=%d\n", c, a);
return0;
}

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

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

#include<stdio.h>intmain()
{
inta=2;
intc=0;
c=++a;           //c=a++,a=a++printf("c=%d a=%d\n", c, a);
return0;
}

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

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

5.6关系操作符:

>

用于测试“大于”

>=

用于测试“大于等于”

<

用于测试“小于”

<=

用于测试“小于等于”

==

用于测试“相等”

!=

用于测试“不相等”

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

5.7逻辑操作符:

&&

逻辑与(并且)

||

逻辑或(或者)

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

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

#include<stdio.h>intmain()
{
intage=0;
scanf("%d", &age);
if (age>=0&&age<=18)         //逻辑与操作符:两边的条件同时满足才可以执行    {
printf("未成年\n");
    }
elseif (age>18&&age<=28)
printf("青年\n");
elseif (age>28&&age<=45)
printf("中年\n");
elseprintf("老年\n");
return0;
}

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

#include<stdio.h>intmain()
{
intnum=0;
scanf("%d", &num);
if (num==5||num==10)   //逻辑或操作符:只要满足两边任何一个条件便可以执行printf("hehe\n");
elseprintf("haha\n");
return0;
}

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

5.8条件操作符:

exp1 ? exp2: exp3

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

这个也叫三目操作符

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

#include<stdio.h>intmain()
{
inta=0;
intb=0;
scanf("%d %d", &a, &b);           //在输入的时候两个数中间要有空格printf("MAX= %d", a>b?a : b); //如果a>b成立,则执行a,如果不成立,则执行breturn0;
}

5.9逗号表达式:

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

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

代码演示:

#include<stdio.h>intmain()
{
inta=3;
intb=5;
intc=0;
intd= (a+=3, b-=a, c-2);
printf("%d\n", d);
return0;
}

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

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

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

#include<stdio.h>intmain()
{
inta=3;
intb=5;
intc=0;
intd= (a+=3, b-=a, c=a+b, c-2);
printf("%d\n", d);
return0;
}

如果我们只计算最后一个表达式的结果: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下标引用操作符:

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

#include<stdio.h>intmain()
{
chararr[10] = { 1,2,3,4,5,6,7,8 };//不完全初始化:设置的字符串里面一共有10个元素//但是我只写了8个元素,剩下的元素默认初始化都是0printf("%d", arr[5]);            //下标引用,找下标为5的元素return0;
}

5.10.2函数调用操作符:

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

#include<string.h>   //包含头文件可不敢忘记#include<stdio.h>intmain()
{
intlen=0;
len=strlen("abcd");
printf("%d\n", len);
return0;
}

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


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

目录
相关文章
|
20天前
|
存储 自然语言处理 编译器
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
|
8天前
|
IDE Java 开发工具
C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
|
11天前
|
C语言
【C语言入门小游戏】扫雷
【C语言入门小游戏】扫雷
19 1
|
11天前
|
编译器 C语言
【C语言入门小游戏】三子棋
【C语言入门小游戏】三子棋
16 0
【C语言入门小游戏】三子棋
|
14天前
|
编译器 C语言 C++
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr(下)
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr
20 0
|
14天前
|
存储 安全 编译器
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr(上)
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr
22 0
|
14天前
|
存储 安全 编译器
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(下)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
19 0
|
14天前
|
存储 编译器 C语言
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(中)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
22 0
|
14天前
|
自然语言处理 编译器 C语言
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(上)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
27 0
|
14天前
|
编译器 C语言 C++
从C语言到C++①(第一章_C++入门_上篇)C++学习介绍(命名空间和C++输入输出流)(下)
从C语言到C++①(第一章_C++入门_上篇)C++学习介绍(命名空间和C++输入输出流)
20 0