【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语言之概念认知篇——带你开启编程世界的大门!
379 0
初识C语言之概念认知篇——带你开启编程世界的大门!
|
算法 程序员 C语言
C语言基础——五分钟打开递归大门
概念👏 什么是递归?网上用的例子是“从前有座山,山上有座庙……”,实际上程序调用自身的编程技巧就是递归,接地气一点就是套娃(包子馅的包子,它的极限是馒头)。
C语言基础——五分钟打开递归大门
|
Web App开发 算法 小程序
帮我妹一 jio 踹开了 C 语言的大门,从此学习的路上不再迷茫不再彷徨(史上最强 C语言学习路线)
帮我妹一 jio 踹开了 C 语言的大门,从此学习的路上不再迷茫不再彷徨(史上最强 C语言学习路线)
147 0
帮我妹一 jio 踹开了 C 语言的大门,从此学习的路上不再迷茫不再彷徨(史上最强 C语言学习路线)
|
2月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
84 23
|
16天前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
18 1
一文彻底搞清楚C语言的函数
|
2月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
102 15
|
2月前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
68 24
|
2月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
96 16
|
2月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
50 3