赞
踩
C语言入门系列
此文章接博主上篇文章【C语言快速上手】带你了解C语言,零基础入门①,没有看过博主上一篇的文章,可以先去看一下。希望各位大佬在阅读后能及时指出其中的问题,作者一定会积极采纳建议,不断改进,不断进步。在此感谢各位的指正。
本系列的内容主要是C语言其中的一些基础知识,在阅读后每个人都可以对C语言有一个大概的认识。当然每一个知识点就是简单认识,日后,博主会陆续按C语言学习顺序,去做详细讲解。篇幅较长,建议收藏食用。
这个C语言学习系列,我会一直做下去,请持续关注博主,你们的支持与鼓励是我更新的最大动力!!
目录
在实际问题中,经常遇到先判断条件是否成立,然后选择如何完成的情形,这就需要用到选择结构。选择结构是程序设计过程中经常用到的结构,选择结构可分别采用if语句、switch语句、if语句和switch语句的嵌套等多种方式实现。在这里,我们只介绍if语句来让大家理解,深入的介绍,后续在分支语句和循环语句中和大家介绍。
我们举一个生活中的例子:如果你好好学习,校招时拿一个好offer,走上人生巅峰。如果你不学习,毕业等于失业,回家卖红薯。这就是选择。
下面我们再拿一段代码进行演示:
- #include <stdio.h>
-
- int main()
- {
- int coding = 0;
- printf("你会去坚持敲代码吗?(选择 1 or 0):");//进行选择
- scanf("%d", &coding);
-
- if (coding == 1)//判断输入coding是否等于1
- {
- printf("坚持,你会有好offer\n");
- }
- else//输入值不为1的话
- {
- printf("放弃,回家卖红薯");
- }
-
- return 0;
- }
附上代码的不同结果
输入1和输入0为两个不同的结果,这就是C语言中的选择。
注:回家卖红薯,只是我举的一个小例子,读者请不要当真。
在实际问题中,不仅仅只有选择问题,还存在着一些重复性工作,这时,我们就需要采用循环结构来解决这些问题。
有些事是必须一直做的,比如我们每天都得吃饭,以及日复一日的学习。我们再举一个例子来给大家说明。如图。
简单粗暴,这张图其实就是一个循环,在进入大学后你可以每天买一张彩票,并老老实实学习,因为是菜鸟,所以每天重复学习、买彩票的过程,但如果有一天,买彩票中了五百万,那么就可以跳出循环走上人生巅峰,同理不断学习,总有一天你会变成大牛,并走上人生巅峰,这就是生活中的循环。
那么C语言中是怎样实现循环的呢?有while语句、for语句、do while语句。在这里我们先介绍while语句让大家初步了解一下。废话不多说,我们上代码。
- #include <stdio.h>
-
- int main()
- {
- printf("进入学校\n");
- int line = 0;//line代表敲代码数
-
- while (line <= 20000)//将敲代码行数与20000进行比较,如果小于等于就循环,大于就退出循环
- {
- line++;//与line = line + 1;表示相同意思,在这里意思为敲代码行数加一
- printf("我要继续努力敲代码\n");
- }
-
- if (line > 20000)//选择语句,如果大于便执行其中语句
- {
- printf("好offer\n");
- }
-
- return 0;
- }
再附上代码输出的结果
其实上面还有很多行“我要继续努力敲代码”,博主这里是直接在程序结束处截图。这就是C语言中的循环。
在结构化程序设计中,一个较大的程序一般应分为若干个程序模块,每个模块完成某一特定的功能。C语言是结构化程序设计语言,引入了函数的概念,用函数来完成各个程序模块的设计。
C语言中本身提供了极为丰富的函数库,前面经常使用的printf、scanf等函数就是C语言函数库中的函数,也就是库函数。
此外,C语言还提供了用户自定义函数的功能,以满足不同用户对不同问题求解的需要。
下面我们来写一个简单的求和程序。
- #include <stdio.h>
-
- int main()
- {
- //创建变量
- int num1 = 0;
- int num2 = 0;
- int sum = 0;
-
- printf("输入两个操作数:>");
- scanf("%d %d",&num1,&num2);
-
- sum = num1 + num2;//求两数之和
- printf("sum = %d", sum);//输出和
-
- return 0;
- }
既然C语言中可以自定义函数,那么我们也可以自定义一个加法函数。上述代码写成函数如下:
- #include <stdio.h>
-
- //自定义函数
- //int Add代表return返回值类型为整型,即函数类型为整型
- int Add(int x, int y)
- {
- int z = x + y;//计算x + y的值
- return z;//将z的结果返回z
- }
-
- int main()
- {
- int num1 = 0;
- int num2 = 0;
- int sum = 0;
-
- printf("输入两个操作数:>");
- scanf("%d %d", &num1, &num2);
-
- sum = Add(num1, num2);//调用Add函数
-
- printf("sum = %d", sum);
-
- return 0;
- }
函数的特点就是简化代码,代码复用。有读者一定会在这里产生疑问,感觉创建函数后反而比原先直接两数相加求和麻烦了许多,以前实现两数相加只需要几行代码,定义函数反而感觉更复杂了。
在简单函数中,定义函数确实会显得比较复杂、看起来比较臃肿,但在日后的学习中我们写的代码会越来越长,遇到多次出现的函数,我们不妨自定义一个函数,在使用时调用即可。具体的函数使用,在之后的学习中还会讲到。
实际问题中存在许多相同类型的数据,如编写程序求全班50名同学某门课的平均成绩,如果对每个同学定义一个课程成绩变量,需要定义50个变量,程序繁琐且不方便处理。所以,把具有相同类型的若干数据按有序的形式组织起来,这些按顺序排列的同类数据元素的集合称为数组。如果使用数组处理50名学生的成绩,程序代码就会变得比较简洁。在C语言中,数据属于构造数据类型。一个数组可以包含多个数组元素,这些数组元素可以是基本数据类型,也可以是构造类型。
数组中有一维数组、二维数组。在这里我们只带大家认识一下一维数组。
数组是一组有序数据的集合,只有一个下标的数组称为一维数组。50个学生的成绩可以采用一个一维数组表示,数组的大小是50,这样可以使代码简单。
数组必须先定义后使用。一维数组的定义格式如下:
类型说明符 数组名 [常量表达式];
类型说明符用来定义数组中元素的数据类型,数组名必须符合标识符的命名规定,常量表达式用来定义数组中元素的个数。常量表达式只能是字符型常量或符号常量,不能是变量,C语言中不允许动态定义数组的大小。
那么在C语言中要存储1-10的数字,应怎样存储?
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整型数组,最多存放10个元素
C语言规定,数组的每一个元素都有一个下标,下标是从0开始的。
数组定义后,系统在内存中给数组分配一块连续的存储空间,存储空间的大小取决于数组的数据类型和数组元素的个数,数组名表示数组在内存中的首地址。
例如:int arr[4] = {1,2,3,4};
数组a包含4个元素,每个元素都是int型且在内存中占4字节的存储空间,因此系统给数组a共分配16字节的存储空间。数组中包括4个元素,分别是arr[0]、arr[1]、arr[2]、arr[3]。
C语言中可以通过下标来访问数组。比如:
- int arr[4] = {1,2,3,4};
- //如果数组4个元素,下标的范围是0-3
int arr[4] | 1 | 2 | 3 | 4 |
下标 | 0 | 1 | 2 | 3 |
在定义了数组后,数组中每个元素就相当于一个普通变量,就可以利用下标来引用每个元素,格式为:数组名[下标],即arr[0]、arr[1]、arr[2]、arr[3]代表数组arr中的4个元素。
数组元素在引用时,要注意以下问题:
(1)下标表达式的值必须是一个整型的量,可以是整型常量、整型变量或运算结果为整型的表达式。
(2)只能单个使用数组中的元素,而不能引用整个数组。
(3)C语言的数组下标是从0开始的,因此数组的下标范围为0~L-1,其中L为数组的长度。C语言中不i对数组进行越界检查。数组arr中包含了4个元素,若有语句arr[10] = 2;,在编译过程中也许不会出错,但可能导致其他变量或程序出错。
下面拿代码演示一下,数组应如何使用。
- #include <stdio.h>
-
- int main()
- {
- int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//定义数组
-
- //利用for循环打印数组
- for (int i = 0; i < 10; i++)
- {
- printf("%d ", arr[i]);//打印当前循环内数组元素
- }
-
- printf("\n");//换行
-
- return 0;
- }
打印结果如下
这里我们以介绍为主,后面会不断穿插着讲。
+ - *(乘) /(除) %(求余)
C语言中的加减乘与数学中达到的效果相同,但 /(除)是略有不同的。在C语言中,4 / 3等于多少?
在数学中,4 / 3 = 1.3333~,但若在C语言中使用int整型来计算4 / 3的值,其实是等于1的,只会求商,不会求余。在C语言中有一种全新的运算符 %(求余),4 % 3 = 1,这就是它的运算规则。
>> <<
& ^ |
= += -= *= /= &= ^= |= >>= <<=
! - + & sizeof ~ -- ++ * (类型)
" ! ":逻辑反操作。在C语言中,要想实现"不",就得利用它,"!=" 就代表不等于。
" - ":负值
" + ":正值
" & ":取地址(在指针部分我们会再介绍)
" sizeof ":操作符的类型长度(以字节为单位)
" ~ ":对一个数的二进制位按位取反
" -- ":前置、后置--
" ++ ":前置、后置++
" * ":间接访问操作符(解引用操作符)
"(类型)":强制类型转换
下面我们重点介绍一下前置、后置++,前置、后置--,用法一致。
前置++是先自加,后使用;后置++是先使用,后自加。这里的自加也就是对变量的值增加,++等同于该变量值+1,使用则是指直接使用该变量。
接下来,我们再利用一段代码加强理解。
- #include <stdio.h>
-
- int main()
- {
- int i = 5;
- int j = 5;
-
- printf("i的值为%d\n", i++);//输出5
- //i++为后置++,先使用,后自加。在输出i++时,i先使用,即i的值为5,然后i再加1,值为6
-
- printf("j的值为%d\n", ++j);//输出6
- //j++为前置++,先自加,后使用。j加1后,值为6,所以输出为6.
-
- printf("i++后的值为%d\n", i);//输出6
- //再一次打印i的值。i++后,i的值为6.
-
- return 0;
- }
我们再看一下运行结果。
> >= < <= != ==
关系操作符用来判断两个量的大小关系,!=用于测试“不相等”,==用于测试“相等”
注意在C语言中,'='是赋值,'=='是判断关系
&&(逻辑与) ||(逻辑或)
在C语言中,逻辑与、逻辑或和数学中的并和或,用法较为相似,在C语言中零为假,非零为真。
&&(逻辑与)判断两表达式,有一假即为假,两真才为真。
||(逻辑或)判断两表达式,有一真即为真,两假才为假。
exp ? exp2 : exp3
条件操作符是C语言中唯一的三元操作符,它允许将简单的if-else判断语句嵌入表达式中。条件操作符的语法格式为:表达式1? 表达式2: 表达式3。
表达式1是一个条件判断表达式,条件操作符首先计算的是表达式1的值,如果表达式1的值为非0,则计算表达式2,如果表达式1的值为0,则跳过表达式2,直接计算表达式3,所以无论如何,表达式1的值是一定会计算的,表达式2和表达式3不管怎样,也只有一个表达式被计算。
我们可以使用条件操作符让代码更加简单,以下,我们拿两数取最大值来举例:
这是拿if语句来做到求两数最大值,接下来我们再使用一下条件操作符。
可以看到原本要写三四行的代码才能实现的功能,一个条件操作符就搞定了,希望读者们以后能灵活运用。
exp1,exp2,exp3,... ,expN
[ ] ( ) . ->
可以看到,有一些操作符,我们都没有细细讨论,之后我们遇到什么,我们再去深入了解他们。
本文拖了整整一周才写出来,给等待更新的读者们说声抱歉,上学期间,我在抽时间为读者为你们编写一份合格的C语言资料,秉着一个认真编写的心,不想一两天把他草草了事,希望所写内容能带给你们些许收获,拖更许久,抱歉!
感谢你们的耐心阅读,博主本人为一名大一新生,也还有需要很多学习的东西。写这篇文章是以本人所学内容为基础,日后也会不断更新自己的学习记录,我们一起努力进步,变得优秀,小小菜鸟,也能有大大梦想,关注我,我们一起学习。
《C语言小白入门》这一系列,我会分为三篇,这里是第二篇,我们下期再见。
系列第一篇文章在这里 --->【C语言快速上手】带你了解C语言,零基础入门①
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。