【C语言航路】第一站:初识C语言(三)

简介: 【C语言航路】第一站:初识C语言(三)

五、注释

1.注释的好处

1.代码中有不需要的代码可以进行直接删除,也可以注释掉

2.代码中有些代码比较难懂,可以加一下注释

2.注释风格

注释有两种注释风格

一种是c语言注释风格   /*xxxxx*/

缺陷:不能嵌套注释

另一种是c++注释风格  //xxxxx

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

六、选择语句

       人生处处面临选择,c语言中也一样拥有选择语句,可以通过一些选择来达成一些需求。选择语句在此处仅仅简单介绍一下if else选择语句的基本应用,后续文章将专门详细介绍。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int input = 0;
  printf("请问你是否要坚持好好学习吗?(1/0)");
  scanf("%d", &input);
  if (input == 1)
  {
    printf("好offer\n");
  }
  else if (input == 0)
  {
    printf("回家卖红薯");
  }
  else 
  {
    printf("选错了");
  }
  return 0;
}

   这就是一个最简单的选择语句了,其中if后面的括号是判断是否成立的,如果成立则执行大括号里面的语句,如果不成立就依次往下判断,知道判断完毕。

七、循环语句

c语言中常用的循环语句一共有三种

while循环

do while循环

for循环

这三种循环我们暂时只浅浅的了解一下while循环,在后续的文章中,我将详细介绍这三种循环

int main()
{
  int line = 0;
  while (line <= 20000)
  {
    printf("敲代码: %d\n", line);
    line++;
  }
  if (line > 20000)
    printf("好offer\n");
  else
    printf("好好学习,天天编程\n");
  return 0;
}

这是一个最简单的while循环语句,进入循环语句以后,先判断line是否小于20000,如果小于,这执行完大括号的语句后重新判断一次条件,就这样一直重复下去,直到打破循环。

八、函数

1.函数的引入

我们首先看一段代码

#include<stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  int c = a + b;
  printf("%d", c);
  return 0;
}

这段代码相信很容易理解吧,就是算出输入两个数的和,那么我们思考一下,如果一个超大的工程里面,需要重复性的用到某一段极其复杂的算法很多次,那么我们怎么办呢?,就这样一直写下去吗。那太烦了,而且万一出错了,很难寻找到这些错误。那我们不得不引入一个概念——函数。

函数这个相信大家很不陌生了,尤其是在大学学习高数时候,各种函数极限,函数微分,求导,积分各种运算。在c语言中同样也有函数,那么c语言的函数跟高数的函数有区别吗。其实有但不是很大,因为我们些代码几乎不需要对函数求导,积分运算的,我们c语言中所接触到的函数仅仅只是在多元函数上的一个应用。

我们在数学中函数是这样的y=f(x),通俗的来说对于任意一个x,总有唯一确定的y与之对应。这句话在我们c语言中是如何应用的呢?

这里给一个代码

int f(int x, int y) {
  return (a + b);
}
#include<stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  int c = f(a, b);
  printf("%d", c);
  return 0;
}

这段代码中,我们输入了a与b两个整数,然后我们使用一个二元函数f(x,y),将他带入参数a,b,便可很快的算出最终的答案了。而且即便是以后需要多次使用这个函数,也是直接调用即可。

2.函数如何写

其实我们可以继续看上面的代码。

数学中函数由四部分组成,是定义域,值域,对应法则。在c语言中函数由四部分组成,函数名,参数,返回类型,函数的主体。这两者之前由异曲同工之妙,读者可以自行体会

其中函数名由自己决定,参数以及参数的类型由所输入的数据决定,主体就是具体的功能,下面的代码,就是一个典型的加法函数。

#include <stdio.h>
int Add(int x, int y)
{
  int z = x + y;
  return z;
}
int main()
{
  int num1 = 0;
  int num2 = 0;
  int sum = 0;
  printf("输入两个操作数:>");
  scanf("%d %d", &num1, &num2);
  sum = Add(num1, num2);
  printf("sum = %d\n", sum);
  return 0;
}

好了,本章函数就暂时讲这么多,其实函数还有很多知识还没有讲到,但我们本节仅仅只是入个门,后面我们会更加详细的介绍函数的应用。

九、数组

1.数组的定义

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

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
int arr[10] = { 1,2,3,4,5 };//不完全初始化,剩余默认为0
char arr[5] = { 'a','b','c' };//不完全初始化,剩余默认为\0

2.数组的下标

数组的下标与从0开始的,这一点与中学的数列很像,数列的首元素一般也是a0开始的

int a[10] 1 2 3 4 5 6 7 8 9 10
下标 0 1 2 3 4 5 6 7 8 9

这就是数组的下标了

3.数组的使用

这里先简单介绍一下数组的使用,后续章节更深入的探究

#include<stdio.h>
int main()
{
  int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int i = 0;
  while (i < 10)
  {
    printf("%d ", arr1[i]);
    i = i + 1;
  }
  return 0;
}

输出结果为

十、操作符

这里仅仅简单介绍一下,不会太过于深入,后面将详细讲解

1.算数操作符

+    -     *      /     %

算数操作符一共有这五种,加减乘都很简单,这里主要讲解一下/ 和%这两种

(1)/ 和 %的基本使用

/ 代表的是两个数相除后的商,也就是整数部分

%代表的是两个数相除后的模,也就是余数部分

#include<stdio.h>
int main()
{
  int a = 5 / 4;
  int b = 5 % 4;
  printf("%d %d", a, b);
  return 0;
}

输出结果为

(2)几个经典的错误,标准的零分

①对/理解不到位

如何输出结果是一个正常的小数呢?

#include<stdio.h>
int main()
{
  float a = 5 / 4;
  int b = 5 % 4;
  printf("%f %d", a, b);
  return 0;
}

这段代码运行以后

是这种结果,说明想要输出一段小数问题出在右边

正确的做法是

这样就成功了

这里总结一下/的处理小数中的问题

1.除号两端如果都是整数,则执行的是整数除法

2.除号两段至少有一个是浮点数,才能执行浮点数的除法

%d - 十进制的整型

%c - 字符

%s - 字符串

%f - 打印float类型的浮点数

%lf - 打印double类型的浮点数

②对%理解不到位

#include<stdio.h>
int main()
{
  float a = 5.0 / 4.0;
  int b = 5.0 % 4.0;
  printf("%f %d", a, b);
  return 0;
}

这段代码运行后会发生什么呢?答案是报错了。为什么报错?因为%运算不能对浮点数使用

% 取模(取余),%操作的两个操作数必须都是整数

2.移位操作符

>>      <<

与二进制有关,暂时不讲

3.位操作符

&   ^    |

与二进制有关,暂时不讲

4.赋值操作符

=    +=   -=   *=   /=    %=   &=   ^=   |=   >>=   <<=

#include<stdio.h>
int main()
{
  int a = 0;//初始化,创建变量的同时给一个值,这叫初始化
  a = 20;//赋值
  a = a + 5;
  a += 5;//与前一行等价
  a = a * 10;
  a *= 10;//与前一行等价
  return 0;
}

a+=5与a=a+5是等价的,同理可以推出很多的等价式

5.单目操作符

!              逻辑反操作

-              负值

+             正值

&             取地址

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

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

--             前置、后置--

++           前置、后置++

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

(类型)     强制类型转换

这就是所有的单目操作符

(1) !  操作符

!主要是取反的作用

这里首先讲解一个小知识点

c语言中,0是假,非零就是真

int main()
{
  int flag = 5;
  //如果flag为真,就打印hehe
  if (flag)
  {
    printf("hehe\n");
  }
  if (!flag)
  {
    printf("haha\n");
  }
  return 0;
}

这段代码的运行结果为

(2)+  -

关于这两个操作符,-有一个作用就是取相反数,+基本上就是一种可有可无的状态

(3)&,*,~

暂时不讲

(4)sizeof

这里着重强调两点

sizeof是操作符,用于计算变量所占内存空间的大小,单位是字节

strlen是库函数,是计算字符串的长度的,统计的是字符串中\0之前出现的字符个数

#include<stdio.h>
int main()
{
  int a = 10;
  float f = 5.5f;
  printf("%d\n", sizeof(a));
  printf("%d\n", sizeof(int));
  printf("%d\n", sizeof(f));
  printf("%d\n", sizeof(float));
  return 0;
}

对于这段程序运行结果为

(5)++ --

int main()
{
  int a = 100;
  int b = a++;//后置++,先使用,后++
  int b=a,a=a+1;
  int b = ++a;//前置++,先++,后使用
  a=a+1,b=a;
  int b = a--;
  int b = a,a=a-1;
  int b = --a;
  a=a-1,b=a;
  printf("a=%d b=%d\n", a, b);
  return 0;
}

对于这段代码中主要区分前置++,与后置++的区别

即前置是先++,后引用,等价于a=a+1,b=a

后置++是先引用后++,等价于b=a,a=a+1

一个经典的错误标准的零分

#include<stdio.h>
int main()
{
  int b = 0;
  int a = 4;
  b = (a++);
  printf("%d", b);
  return 0;
}

给这个++带了一个括号,会先在括号内++完毕之后然后再将a赋值给b吗?

如果是按照上面的逻辑的话,答案是5,如果不是则为4

那么我们运行一下试试

答案是4,这说明于此时的括号形如虚设。这一点要注意一下,这是一个经典的错误,标准的零分

至于--则与++类似,可以对比去学习。

(6)(类型)

这个操作意思是强制类型转换,如下面代码一样,将3.14强制类型转化为int类型,就变成了3

#include<stdio.h>
int main()
{
  int a = (int)3.14;
  printf("%d",a);
  return 0;
}

6.关系操作符

>    >=     <    <=     !=     ==

这几个都是用于判断的,如果判断为真,则返回1,否则返回0

一个经典的错误,标准的零分

#include<stdio.h>
int main()
{
  int a = 3;
  if (a = 5)
  {
    printf("hehe\n");
  }
  return 0;
}

这段代码中有一个错误,就是==和=号用错了,=是赋值,他这个意思是将5赋给a,那么这个式子结果为5,为真,打印hehe。

7.逻辑操作符

&&  ||

这两个操作符的区别就是

a&&b,两边同时为真,结果为真

a||b,两边同时为假,结果为假

一个经典的错误标准的零分

#include<stdio.h>
int main() {
  int age = 20;
  if (18 < age < 60) {
    printf("成年");
  }
}

这段代码中,if语句的圆括号内,age先大于18,返回1,然后1小于60,满足,输出成年,答案正确,但是逻辑完全不符合我们的预期,一旦换一个值就会出现错误,比如age=17时,17<18,不满足结果,输出为0,0小于60,输出为1,最终打印成年。这下错误就暴露出来了

那么该如何解决呢,应该这样写

#include<stdio.h>
int main() {
  int age = 20;
  if (age>18&&age<60) {
    printf("成年");
  }
}

这样就是一个正确的代码了。

8.条件操作符

exp1 ? exp2 :exp3

这个操作符的意思是如果exp1为真,则输出exp2,否则输出exp3

9.逗号表达式

exp1,exp2,……,expn;

暂时不讲

10下标引用,函数调用,结构成员

[]  ()  .  ->

(1)[]

这是数组下标引用操作符,先看一段代码

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

这就是下标引用操作符的用法

(2)()

这是函数调用操作符,我们先看一段代码

int main()
{
  int num1 = 0;
  int num2 = 0;
  int sum = 0;
  //输入
  scanf("%d %d", &num1, &num2);
  //求和
  sum = Add(num1, num2);//()函数调用操作符
  //输出
  printf("%d\n", sum);
  return 0;
}

这就是函数调用操作符的基本用法了

(3). ->

结构体成员操作符,暂时不讲


总结

本节主要讲述了,注释,选择,循环,函数,数组,以及操作符的简单基本使用,暂时只需了解最基本的概念即可。希望能对读者有很大的帮助。不要忘记留下你免费的赞赞和关注哦。

本站未完,欲知后事,请看下节

相关文章
|
6月前
|
编译器 Linux C语言
【C语言航路】第十五站:程序环境和预处理(下)
【C语言航路】第十五站:程序环境和预处理(上)
41 0
|
6月前
|
存储 自然语言处理 编译器
【C语言航路】第十五站:程序环境和预处理(上)
【C语言航路】第十五站:程序环境和预处理
43 0
|
6月前
|
存储 编译器 C语言
【C语言航路】第十四站:文件(下)
【C语言航路】第十四站:文件
42 0
|
6月前
|
存储 编译器 数据库
【C语言航路】第十四站:文件(上)
【C语言航路】第十四站:文件
37 0
|
6月前
|
程序员 C语言 C++
【C语言航路】第十三站:动态内存管理(下)
【C语言航路】第十三站:动态内存管理
35 0
|
6月前
|
编译器 C语言
【C语言航路】第十三站:动态内存管理(上)
【C语言航路】第十三站:动态内存管理
50 0
|
6月前
|
编译器 Linux C语言
【C语言航路】第十二站:自定义类型:结构体、枚举、联合体
【C语言航路】第十二站:自定义类型:结构体、枚举、联合体
41 0
|
6月前
|
存储 编译器 C语言
【C语言航路】第十一站:字符串、字符和内存函数(下)
【C语言航路】第十一站:字符串、字符和内存函数
52 0
|
6月前
|
算法 安全 编译器
【C语言航路】第十一站:字符串、字符和内存函数(中)
【C语言航路】第十一站:字符串、字符和内存函数
57 0
|
6月前
|
IDE 开发工具 C语言
【C语言航路】第十一站:字符串、字符和内存函数(上)
【C语言航路】第十一站:字符串、字符和内存函数
34 0