【C初阶】第一篇——初识C语言(万字篇,带你敲响C语言的大门)(二)

简介: 【C初阶】第一篇——初识C语言(万字篇,带你敲响C语言的大门)

选择语句


"如果你好好学习,毕业后就能找到好工作,如果你不好好学习,毕业后·就会就种地(家里有况另算)"这就是一种选择

image.png

if(判断条件){
    语句块1
}else{
    语句块2
}
#include<stdio.h>
int main()
{
  int code = 0;
  printf("你会好好学习嘛?(1or0):");
  scanf("%d", &code);
  if (code == 1)
  {
    printf("毕业后你会得到好offer\n");
  }
  else {
    printf("毕业后回家种地\n");
  }
  return 0;
}

循环语句


有些事情需要日复一日的去做,比如你想要找到好工作,就要坚持每天去敲代码,假如当你敲到50000行代码时就可以找到好offer了,没到这之前你需要每天都坚持敲,直到到了就可以结束循环了.

C语言中通如何实现循环囊?

  • while语句
  • for语句
  • do...while语句

这里大家只需要知道就行,后期详细讲.

#include<stdio.h>
int main()
{
  printf("找到好offer\n");
  int line = 0;
  while (line <= 20000)
  {
    line++;
    printf("我要继续努力敲代码\n");
  }
  if (line > 20000)
    printf("赢取白富美\n");
  return 0;
}

函数


函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码。

函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码。函数还可以接收数据,并根据数据的不同做出不同的操作,最后再把处理结果反馈给我们。

#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=num1+num2;
  sum = Add(num1, num2);
  //例如:盘子=李四(20,蛋炒饭)
  //输出
  printf("sum = %d\,", sum);
  return 0;
}

数组


要存储1-10的数字,怎么存储?

C语言中给了数组的定义:一组相同类型元素的集合数组定义

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

数组的使用

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

image.png

操作符


简单的介绍下,后面详细讲;

算术操作符

+ - * / %

移位操作符

>> <<

位操作符

& ^ |

赋值操作符

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

单目操作符

!:    逻辑反操作

—:    负值

+  :    正值

&  :    取地址

sizeof:  操作数的类型长度

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

--  :      前置--,后置--

++ :   前置++,后置++

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

关系操作符

>

>=    

<

<=

!=

==

逻辑操作符

&&   逻辑与

||      逻辑或

条件操作符

exp1?exp2:exp3

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

【】() . ->

image.png

常见关键字


image.png

auto :声明自动变量   

short :声明短整型变量或函数   

int: 声明整型变量或函数

long :声明长整型变量或函数   

float:声明浮点型变量或函数   

double :声明双精度变量或函数   

char :声明字符型变量或函数   

struct:声明结构体变量或函数   

union:声明共用数据类型   

enum :声明枚举类型   

typedef:用以给数据类型取别名   

const :声明只读变量   

unsigned:声明无符号类型变量或函数   

signed:声明有符号类型变量或函数   

extern:声明变量是在其他文件正声明   

register:声明寄存器变量   

static :声明静态变量   

volatile:说明变量在程序执行中可被隐含地改变   

void :声明函数无返回值或无参数,声明无类型指针   

if:条件语句   

else :条件语句否定分支(与 if 连用)   

switch :用于开关语句   case:开关语句分支   

for:一种循环语句   

do :循环语句的循环体   

while :循环语句的循环条件   

goto:无条件跳转语句   

continue:结束当前循环,开始下一轮循环   

break:跳出当前循环   

default:开关语句中的“其他”分支   

sizeof:计算数据类型长度   

return :子程序返回语句(可以带参数,也可不带参数)循环条件

关键字typedef

typedef顾名思义是类型定义,这里应该理解为类型重命名

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
return 0;
}

关键字register

寄存器是存储空间,在电脑上一般是集成到CPU上的所和内存是不同的独立存储空间

image.png

可以放在寄存器中,运行速度快,但是寄存器容纳空间小,最后变量存到哪还得看编译器如何决定

#include<stdio.h>
int main()
{
  register int num = 100;
  //&num; //error
  printf("%d", num);
  return 0;
}

关键字static

在C语言中:

static是用来修饰变量和函数的

1.修饰局部变量—静态局部变量

2.修饰全局变量—静态全局变量

3.修饰函数            静态函数

static修饰局部变量:

改变了变量的生命周期,不影响作用域

#include<stdio.h>
试分析test1和test2的区别
void test1()
{
  int a = 1;
  a++;
  printf("%d ", a);
}
void test2()
{
   static int a = 1;
   a++;
   printf("%d ", a);
}
int main()
{
  int i = 0;
  while (i < 10)
  {
    test1();
    i++;
  }
  printf("\n");
  int j = 0;
  while (j < 10)
  {
    test2();
    j++;
  }
  return 0;
}

image.png

默认一个全局变量是具有[外部]链接属性的而如果全局变量被static修饰,是的全局变量的外部链接属性变成了内部链接属性,这个时候这个全局变量只能在本源文件内部使用其他源文件无法链接到,也无法使用!!!

736f22afcb3742d6bc69131ee2dea812.png

#define 定义常量和宏


define定义常量
#define MUM 100
//define定义宏
#define MAX(x,y) (x>y?x:y)
int main()
{
  int a = 10, b = 20;
  int c = MAX(a, b);//宏定义,把它替换成c=(a>b?a:b)
  printf("%d\n", c);
  return 0;
}

注:#define和typedef的区别?

#define INT1 int *
typedef int * INT2;
INT1 a1, b1;
INT2 a2, b2;
b1 = &m;         
b2 = &n;  

因为 INT1 a1, b1; 被宏代换后为: int * a1, b1;即定义的是一个指向int型变量的指针 a1 和一个int型的变量b1.而INT2 a2, b2;表示定义的是两个变量a2和b2,这两个变量的类型都是INT2的,也就是int *的,所以两个都是指向int型变量的指针。


所以两者区别在于,宏定义只是简单的字符串代换,在预处理阶段完成。而typede不是简单的字符串代换,而是可以用来做类型说明符的重命名的,类型的别名可以具有类型定义说明的功能,在编译阶段完成的。

指针  


内存

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址

image.png

变量都有地址,取出变量地址如下:

int main()
{
  int num = 10;//向内存申请4个字节空间,里面存放10
  //sizeof(int)==4
  printf("%p\n", &num);//打印地址;&取地址操作符
  return 0;
}

image.png

image.png

那地址如何存储,需要定义指针变量

指针使用的实例

int main()
{
  int num = 10;//向内存申请4个字节空间,里面存放10
   //sizeof(int)==4
  //pa=&num; pa是一个存放地址的变量,这样的变量成为指针变量
  int* pa = &num;
  printf("%p\n", &num);//打印地址;&_取地址操作符
  *pa = 20;//解引用操作符,会修改num的值
  printf("%d\n", num);//20
  return 0;
}

image.png

指针变量的大小


int main()
{
  printf("%d\n", sizeof(char*));
  printf("%d\n", sizeof(short*));
  printf("%d\n", sizeof(int*));
  printf("%d\n", sizeof(double*));
  return 0;
}

image.png

结构体  


结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。

这里只能使用结构体来描述了。

例如:

struct Stu
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};

结构体的初始化:

//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);

相信经过阅读本篇博客,对C语言有了初步的了解,知道了C语言的大概语法;这样今天的目的就达到啦,后面我们会对其进行详细讲解,大家记得关注哦,最后再三赞支持一波,爱你们

相关文章
|
存储 Java C语言
【C初阶】第一篇——初识C语言(万字篇,带你敲响C语言的大门)(一)
【C初阶】第一篇——初识C语言(万字篇,带你敲响C语言的大门)
【C初阶】第一篇——初识C语言(万字篇,带你敲响C语言的大门)(一)
|
Java 编译器 程序员
初识C语言之概念认知篇——带你开启编程世界的大门!
初识C语言之概念认知篇——带你开启编程世界的大门!
333 0
初识C语言之概念认知篇——带你开启编程世界的大门!
|
算法 程序员 C语言
C语言基础——五分钟打开递归大门
概念👏 什么是递归?网上用的例子是“从前有座山,山上有座庙……”,实际上程序调用自身的编程技巧就是递归,接地气一点就是套娃(包子馅的包子,它的极限是馒头)。
C语言基础——五分钟打开递归大门
|
Web App开发 算法 小程序
帮我妹一 jio 踹开了 C 语言的大门,从此学习的路上不再迷茫不再彷徨(史上最强 C语言学习路线)
帮我妹一 jio 踹开了 C 语言的大门,从此学习的路上不再迷茫不再彷徨(史上最强 C语言学习路线)
134 0
帮我妹一 jio 踹开了 C 语言的大门,从此学习的路上不再迷茫不再彷徨(史上最强 C语言学习路线)
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
34 3
|
6天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
22 6
|
26天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
34 10
|
20天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
25天前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
53 7
|
25天前
|
存储 编译器 程序员
【c语言】函数
本文介绍了C语言中函数的基本概念,包括库函数和自定义函数的定义、使用及示例。库函数如`printf`和`scanf`,通过包含相应的头文件即可使用。自定义函数需指定返回类型、函数名、形式参数等。文中还探讨了函数的调用、形参与实参的区别、return语句的用法、函数嵌套调用、链式访问以及static关键字对变量和函数的影响,强调了static如何改变变量的生命周期和作用域,以及函数的可见性。
29 4