首页 > 其他分享 >c语言基础

c语言基础

时间:2023-04-13 15:34:02浏览次数:31  
标签:main return 语言 int void 基础 printf include

目录

1、初识C语言

1.1、第一个C语言程序

#include <stdio.h>  //#include 引用头文件  stdio.h 标准输出与输入,凡是使用打印输出或者输入一定要引用stdio.h

int main(void)
{
    printf("你好,C");  //打印输出到屏幕上
    return 0;
}


#计算两数之和
#include <stdio.h> 
int main(void)
{
    int i1,i2,sum;
    i1 = 2;
    i2 = 3;
    sum=i1+i 2;
    printf("sum=%d\n",sum);
    return 0;
}
转义字符 含义
\b 退格,将当前位置移到前一列
\f 换页,将当前位置移到下页开头
\n 换行,将当前位置移到下一行开头
\r 回车,将当前位置移到本行开头
\t 水平制表,跳到下一个Tab位置
\v 垂直制表
\\ 表示反斜杠本身(\)
\’ 表示单引号(')
\" 表示双引号(")
\? 表示问号(?)
\0 表示空字符(NULL)
\ddd 1~3位八进制数所代表的任意字符
\xhh 1~2位十六进制数所代表的任意字符

1.2、变量与常量

变量 常量
在c语言运行过程中,需要把值存储在一个地方,方便下次直接拿出来使用,并且可以随时修改。 在c语言运行过程中,将值放入其中后,不能修改。
变量命名只能由英文字母(A-Z,a-z)、数字或者下划线组成。必须以英文字母或者下划线开头。区分大小写 常量命名一般用大写英文字母
数据类型 变量名 = 初始值 如 int i = 1 const 数据类型 常量名 = 值 const float PI=3.14
#define 常量名 值 #define PI 3.14
#include <stdio.h> 
#define PI 3.14
int main(void)
{
    int i1=2;
    /*
    const double PI = 3.14; */
    printf("PI=%lf",PI);
    return 0;

}

1.3、数据类型

c语言基础_#include

1.4、关键字

auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while

2、分支与循环

2.1、分支结构

c语言基础_内存空间_02

在程序运行过程中往往会遇到选择判断的,比如判断用户是否满18岁?

运算符 含义 优先级 举例 说明
! 逻辑非 !a 如果a为真,!a为假
如果a为假,!a为真
&& 逻辑与 a&&b 只要有一个为假,结果就为假
如果两个都为真,结果为真
|| 逻辑或 a||b 只要有一个为真,结果为真
如果两个都为假,结果为假

选择语句有if、switch

if运用于判断一个范围

#include <stdio.h> 
int main(void)
{
    int i;
    printf("你多少岁:");
    scanf("%d",&i);
    if (i >= 18) {
        printf("你是青年!");
    }
    else {
        printf("你是儿童");
    }
    return 0;
}

switch运用于判断一个确切的值

#include <stdio.h> 
int main(void)
{
    int i;
    printf("你多少岁:");
    scanf("%d",&i);
    switch (i) {
      case 20:
        printf("你是青年!");
        break;
      case 17:
        printf("你是不青年!");
        break;
      default:
          printf("什么都不是");
    }

    return 0;
}

2.2、循环结构

c语言基础_内存空间_03

在程序运行过程中往往会去做一些重复的事情,这个时候就需要循环结构了。

循环语句有while、for

while运用于不知道要循环多少次的

#include <stdio.h> 
int main(void)
{
    int i=1,sum=0;
	while (i<=100)
	{
		sum = sum + i;
		i = i + 1;
	}
	printf("结果是:%d\n",sum);
    return 0;
}

for运用于知道循环的次数

#include <stdio.h> 
int main(void)
{
    

    for (int i = 0;i < 10;i++) {
        printf("jpl\n");
    }
    return 0;

}

3、数组

3.1、定义

数组用来存储同一类型的一组数据

3.2、使用

数组常与for循环语句结合使用

定义数组 :数据类型 数组名[长度] int a[6];

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

4、指针

4.1、定义

指针就是地址,变量存储在机器中的地址。

4.2、大小

在32位的机器上指针大小就是4个字节

在64位的机器上指针大小就是8个字节

4.3、使用

指针变量的定义

int *p;

指针数组的定义

int *a[6];

5、函数

5.1、定义

随着程序规模不断扩大,有一些代码重复、mian函数变得相当复杂,不易看懂。这个时候就需要我们去拆分main函数。按照功能将代码拆分出来,变成一个一个小模块。这些小模块就是函数

5.2、函数的分类

函数有官网给的函数,也有我们自己在写程序过程中定义的函数

//计算两数之和
#include <stdio.h> 

float cube(int x, int y) //函数的定义
{
    float result;
    result = x + y;
    return result;
}

int main(void)
{
    
    int x, y;
    int volume;
    printf("请输入x:\n");
    scanf("%d",&x);
    printf("请输入y:\n");
    scanf("%d", &y);
    volume = cube(x, y);
    printf("the volume of cube is:%d",volume);
    return 0;
}

5.3、形参与实参

函数定义时写的参数叫形参,实参就是调用函数时传进去的参数。当函数调用时,实参的值传给形参,形参只有函数被调用时才会分配内存,函数调用结束后,立即释放内存。

5.4、局部变量与全局变量

局部变量定义在函数内部的变量,只能在函数内部使用。

全局变量定义在函数之外的变量,在程序中可能多一个函数需要使用同一个变量,这个时候就可以定义全局变量

5.5、存储类型

auto 自动变量,在代码块中声明的变量默认的存储类型
register 寄存器变量,理论上是存放在CPU的寄存器中的,但因为一些原因,可能会被编辑器忽略,变成普通的自动变量。
static 修饰局部变量:局部变量初始化一次,直到程序终止,才会被销毁。
修饰全局变量:被修饰的变量的作用域在当前文件中,直到程序终止,才会被销毁。
extem 用于提供一个全局变量的引用,对所有程序文件可见。

5.6、内存管理

之前提到的定义变量、定义常量,其实就是向内存要一个存储空间,这个空间的大小必是由据储存类型来确定的。那么我想直接在内存要一个自定义的存储空间如何做呢?可以通过下面的方式来申请内存空间。

函数名 作用
malloc 申请动态内存空间
free 释放动态内存空间
calloc 申请并初始化一系列内存空间
realloc 重新分配内存空间

使用以上四个函数时需要引用stdlib.h这个头文件

//这个程序的意思是  使用malloc申请一块空间,然后用ptr指针指向它,随后将用户输入的数据存储在这块空间里,
#include <stdio.h> 
#include<stdlib.h>
int main(void)
{
    int *ptr;
    //void *malloc(size);  
    ptr = (int *)malloc(4);//malloc如果调用成功,返回void指针,它可以转换成任意数据类型,如果调用失败,返回NULL。
    if (ptr == NULL)
    {
        printf("分配内存失败!\n");
        exit(1);
    }
    printf("请输入一个整数:\n");
    scanf("%d", ptr);
    printf("你输入的整数是:%d\n", *ptr);
    free(ptr);//释放ptr指向的内存空间
    return 0;
}

malloc申请的空间,在不使用后,一定要用free释放空间。

如果出现第一次申请的内存空间不够,后面在去申请内存空间就很麻烦,因为无法保障malloc两次申请的空间是连续的,处理起来很麻烦。这个时候可以用realloc

#include<stdlib.h>
int main(void)
{
  。。。。。。
  void *realloc(ptr,size);   //将ptr指向的内存空间大小修改为size字节 
}
#include<stdlib.h>
int main(void)
{
  。。。。。。
  void *calloc(num,size);   //申请内存空间大小为size字节num个 
}

5.7、内存布局

c语言基础_缓存_04

代码段
存放程序执行代码的一块区域
数据段
存放已经初始化的全局变量和局部静态变量
BBS段
存放程序中未初始化的全局变量

程序运行中被动态分配的内存区域,程序员手动申请。

函数执行的内存区域,系统自动分配

6、结构体

6.1、定义

前面说了几个基本类型,但有时候面临的问题比较复杂,基本类型很难解决问题,就需要自己定义一个类型,这就是结构体

6.2、声明

struct  结构体名字
{
    结构体成员1;
    结构体成员2;
    结构体成员4;
}
示例
struct  People
{
    char name[20];
    int age;
    char sex;
}

6.3、示例

#include <stdio.h> 
struct  People
{
    char name[20];
    int age;
    char sex;
};
int main(void)
{
    struct People people;
    printf("请输入姓名:\n");
    scanf("%s",people.name);
    printf("请输入年龄:\n");
    scanf("%d", &people.age);
    printf("请输入性别:\n");
    scanf("%s", &people.sex);

    printf("\n======录入完毕======\n\n");
    printf("名字:%s\n",people.name);
    printf("年龄:%d\n", people.age);
    printf("性别:%s\n", &people.sex);
    return 0;

}

7、文件操作

7.1、文件的读写

7.1.1文件的打开模式

模式 描述
“r” 以只读模式打开一个文本文件,从头开始读取
“w” 以只写模式打开一个文本文件,从头开始写入,如果文件不存在则创建一个文件,如果文件存在,则写入内容覆盖原内容
“a” 以追加模式打开一个文本文件,从文件末尾追加内容,如果文件不存在,则创建新文件
“r+” 以读和写的模式打开一个文本文件,从文件头开始读取与写入,文件必须存在,写入时不会覆盖原有内容
“w+” 以读和写的模式打开一个文本文件,从文件头开始读取与写入,如果文件不存在,则创建新文件,写入时会覆盖原有内容
“a+” 以追加和读模式打开一个文本文件,如果文件不存在,则创建新文件,从头开始读取,从文件末尾追加内容
b 与上面6种模式均可结合(“rb”,“wb”,“ab”,“r+b”,“w+b”,“a+b”),操作对象为二进制文件(图片、视频等)

普通文件在win系统上换行符为\r\n,unix(linux)换行符为\n,mac换行符为\r

//以只读的形式打开文件,并读取文件内容
#include <stdio.h> 
#include<stdlib.h>
int main(void)
{

    FILE* fp;
    int ch;
    if ((fp = fopen("D:\\1.txt", "r")) == NULL)
    {
        printf("打开文件失败!\n");
        exit(EXIT_FAILURE);
    }
    while ((ch = getc(fp)) != EOF) 
    {
        putchar(ch);
    }
    fclose(fp);
    return 0;

}
//向文件写入内容
#include <stdio.h> 
#include<stdlib.h>
int main(void)
{

    FILE* fp;
    int ch;
    if ((fp = fopen("D:\\1.txt", "w")) == NULL)
    {
        printf("打开文件失败!\n");
        exit(EXIT_FAILURE);
    }
    fputs("jpl\n",fp);
    fclose(fp);
    return 0;

}

7.2、I/O缓存区

文件并不是程序直接从设备中读取与写入的,他们中间有一个缓存区,读取与写入的数据会经过缓存区。当缓存区关闭或者写满时。数据才会到达设备或者程序

7.2.1、缓存模式

缓存区有两种模式:1、按数据块缓存,即填满缓存区才会进行实际的设备书写。2、按行缓存,即缓存区读取到换行符(‘\n’),就开始实际设备的读写。

8、Linux上运行c程

由于企业中c语言开发大多是在Linux上调式与运行的,在这里简单介绍一下,如何在Linux环境中运行c程序。Linux的内核基本上是有c语言编写的,c语言在Linux中很大的发挥空间。
我的linux版本为centos7
首先检查一下,系统上有没有gcc(c语言的编辑器)

//查看gcc信息
gcc -version
//安装gcc
yum -y install  gcc  gcc-c++  kernel-devel

编写程序
运行c语言程序

gcc  文件名.c  && ./a.out

c语言基础_缓存_05

由于c语言是直接运行在机器上的,所以操作系统对c语言的影响会比较大。在linux上运行的结果可能与在win上运行的结果有所偏差。

标签:main,return,语言,int,void,基础,printf,include
From: https://blog.51cto.com/u_15314615/6188094

相关文章

  • 65、K8S-部署管理-Helm基础知识、安装、入门示例
    Kubernetes学习目录1、基础知识1.1、需求在kubernetes平台上,我们在部署各种各样的应用服务的时候,可以基于手工或者自动的方式对各种资源对象实现伸缩操作,尤其是对于有状态的应用,我们可以结合持久性存储机制实现更大场景的伸缩动作。但是,无论我们怎么操作各种资源对象,问......
  • 【0基础学爬虫】爬虫基础之数据存储
    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为数据存储。概述上期我们介绍到了文件......
  • java故障处理(一)基础命令行工具
     一、基础命令行工具1.jps:虚拟机进程状况工具可以列出本机正在运行的虚拟机进程,并显示主类1.1.选项:选项作用-q省略主类,只显示id-l显示主类全名,或jar包路径-m显示传递给主类main方法的参数-v输出jvm启动时所有参数2.jstat:虚拟机统计信息监控用于监......
  • NumPy 基础知识 :6~10
    原文:NumpyEssentials协议:CCBY-NC-SA4.0译者:飞龙六、NumPy中的傅立叶分析除其他事项外,傅立叶分析通常用于数字信号处理。这要归功于它在将输入信号(时域)分离为以离散频率(频域)起作用的分量方面如此强大。开发了另一种快速算法来计算离散傅里叶变换(DFT),这就是众所周知的快......
  • c语言贪吃蛇(2)关于蛇的函数封装
    hassnakenode():检测循环体内部是否含有蛇身结点,若有,则返回1(对应main输出蛇结点),否则判断点后移吗,再判断,之后返回0(不输出蛇结点)  addnode():创造新蛇结点,用malloc申请空间,并插入到尾结点之后。(尾插法)initsnake():创建初始头尾结点,malloc申请空间,方便后续蛇结点的添加,初始赋......
  • go语言基础-切片
    0x00切片切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。0x00切片的定义切片的声明:varname[]T//name:表示变量......
  • go语言基础-map
    0x00mapmap是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。0x00map的定义go语言当中map的定义map[KeyType]ValueType//KeyType:表示键的类型 //ValueType:表示键对应的值的类型。map类型的变量默认初始值为nil,需要使用make()函数来......
  • go语言基础-数组
    0x00数组go语言中的数组声明的基本语法://定义一个长度为3元素类型为int的数组avara[3]intvar数组名称[元素数量]元素类型比如:vara[5]int,数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。[5]int和[10]int是不同的类型。vara[3]intvar......
  • go语言基础-变量和常量
    0x00标识符与关键字0x01标识符go语言中的标识符是由数字,字母和_(下划线)组成的,并且只能由字母和_开头。eg:abc,_,_abc,abc10x02关键字关键字是指编程语言中定义好的具有特殊意义的标识符。(关键字和保留字都不建议作为变量名)go语言中常用的25个关键字breakdefault......
  • go语言基础-基本数据结构
    0x00基本数据结构go语言中,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。0x00整型(int)整型分为以下两个大类:按长度分为:int8、int16、int32、int64对应的无符号整型:uint8、uint16、uint32、uint64。其中,uint8就是我们熟知的......