IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 半小时让你了解C语言基础 -> 正文阅读

[C++知识库]半小时让你了解C语言基础

文章目录

  • 一、C语言是什么?
  • 二、C语言简单介绍
    • 1.第一个C语言程序
    • 2.基本数据类型
    • 3.输入输出函数
    • 4.变量
    • 5.字符串和字符
    • 6.判断语句
    • 7.循环语句
    • 8.数组
    • 9.函数
    • 10.指针
    • 11.结构体

一、C语言是什么?

C 语言是一种通用的、面向过程式的计算机程序设计语言C语言是接近底层的,C语言能做嵌入式开发和操作系统等等。

二、C语言基本数据类型

1.第一个C语言程序

代码如下(示例):?

#include <stdio.h> //引入头文件

int main(){  //主函数
    
    printf("第一个C语言程序!\n"); //输出函数
    return 0; //结束代码运行,返回一个0

} 

2.基本数据类型

(1). c语言的基本数据类型很多,是为了很合理的运用内存。

????????类型

名称所占内存空间的大小
char字符串1字节
short短整型2字节
int整形4字节
long长整形4字节
long long更长的整形8字节
float单精度浮点数4字节
double双精度浮点数8字节

?(2). sizeof 是一个关键字?用来查看变量或者数据类型的所占内存空间大小

代码如下(示例):?

printf("%d",sizeof(char)); // 1
printf("%d",sizeof(short)); // 2
printf("%d",sizeof(int)); // 4
printf("%d",sizeof(long)); // 4
printf("%d",sizeof(long long)); // 8
printf("%d",sizeof(float)); // 4
printf("%d",sizeof(double)); // 8

3.输入输出函数

?1. printf()? 发送格式化输出到标准输出 stdout

? ? ? ? ?根据格式字符输出对应的数据:

%i , %d输出十进制整数
%f??

输出浮点数

%lf输出双精度浮点数
%c输出字符
%s输出字符串
%p输出变量地址

? ? ? ? 这里只做简单的一些格式字符介绍

代码如下(示例):?

printf("%d", 10);  // 10
printf("%c", 'a');  // a
printf("%s","abcd"); //abcd

? 2. scanf()? 从键盘上输入。

? ? ? ? ? ? 根据格式字符,输入一个对应的数据

代码如下(示例):

int a;
char str; 
scanf("%d",&a); //输入一个数字,赋值给a
scanf("%c",&str); //输入一个字符,赋值给str

4.变量,常量

? ? ? ? 定义变量:

? ? ? ? ? ? ? ?数据类型? 变量名;

? ? ? ? 定义变量并初始化

? ? ? ? ? ? ? ?数据类型? 变量名? = 值;

? ? ? ? 局部变量和全局变量

? ? ? ? ? ? ? ?在函数内部定义的变量叫局部变量,在函数外部定义的变量叫全局变量。

? ? ? ? 变量的生命周期

? ? ? ? ? ? ? ? 变量的生命周期就是变量的创建和销毁之间的时间段。

? ? ? ? ? ? ? ? 局部变量的生命周期:进入局部范围生命开始,出局部范围生命结束。

? ? ? ? ? ? ? ? 全局变量的生命周期:程序执行结束。

? ??代码如下(示例):

#include "stdio.h"

int a = 100; 全局变量

int main(){

    int b = 10;  //定义变量并初始化, 局部变量
    printf("%d",b); // 10 
    return 0;

}

? ? ? ?定义常量:

? ? ? ? ? ? ? ? #define 定义标识符常量

? ? ? ? ? ? ? ? 例:#define Max 1000? ? ? ? ? ? ? 这后面不能加分号

? ? ? ? ? ? ? ? ? ? ? ? 这是定义了一个名叫Max的常量? 它的值是1000

? ? ? ? ? ? ? ? ? ? ? ? #define和#inculde都是它们是预处理指令

? ? ? ? ? ? ? ? ?const 关键字修饰的常变量

? ? ? ? ? ? ? ? ?例: const int a = 100;

? ? ? ? ? ? ? ? ? ? ? ? ?这个a本质还是变量 ,但是被const修饰过后,就具有常量的属性了

5.字符串和字符

????????字符串是由双引号引起来的,字符串末尾位置隐藏着一个 '\0' 代表字符串结束? ? ? ?

????????????????"aa"? 这是一个字符串

? ? ? ? ? ? ? ? 定义字符串变量:

? ? ? ? ? ? ? ? ? ? ? ? char str[] = "abcd";? ?通过下标访问? ?str[0]? = 'a'? str[1] = 'b';??

?????????????????? ? ? ?char str[20] = {0};? ? ?这是定义了一个空字符串数组,0 的ASCII值是 '\0'

? ? ? ? ? ? ? ? ? ? ? ? 字符串遇到'\0' 就会结束? ?

? ? ? ? ? ? ? ? 这是字符串数组,因为字符串是多个所以得这样定义,数组下标是从0开始的

????????字符是由单引号引起来的。

????????????????'a' 这是一个字符

? 6.判断语句? ? ? ? ? ? ?

例:这是双分支

#include "stdio.h"

int main(){
    
  int i = 0;
  if(i){
    printf("执行if");
  }else{
    printf("执行else");
  }
  return 0; 
}

这段代码最终会输出 "执行else"

因为 if 括号里面的表达式 / 值是 0,0为假执行 else ,1为真执行 if 。

if else 语句可以理解为? ? 如果条件不成立,就执行else。

?例:这是多分支

#include "stdio.h"

int main(){
    //定义一个变量为成绩
    int score = 80;  
    // if() else if() 来判断成绩为优秀还是良好还是及格
    
    if(score >= 90){
        printf("优秀!");
    }else if(score >= 80){
        printf("良好");
    }else if(score >= 60){
        printf("及格");
    }else{
        printf("如果上面条件都不符合就执行我!");
    }
    
    return 0;
}

这段代码最终会输出良好

代码是从上往下执行的,先判断第一个条件条件不符合,看下一个,下一个如果还不符合,再看下一个,如果还不符合就执行 else

很显然第二个条件符合,输出。

多分支语句是? 多个条件 , 由 if 和 多个 (else if) 组成的?

三元表达式

? ? ? ? ?格式:

? ? ? ? ? ? ? ? ? 表达式 ?值1 : 值2 ;?

char s;
s = 1 > 0 ? 'Y' : 'N';
printf("%c",s); //Y

??可以理解为? ? 1 > 0 吗? 如果大于那就是为真,就把 'Y' 赋值给s变量,不大于则为假

? 就把'N' 赋值给 s变量

7.循环语句

? ? ?1.? for循环

? ? ? ? ? ? ? ?格式 :?

????????????????????????????????for(初始值 ; 条件表达式; 增量){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????循环体

????????????????????????????????}

? ? ? ? ? ? ? ? 初始值只使用一次,条件是判断循环结束否,增量控制循环次数

? ? ? ? ? ? ? ? 执行顺序 : 1.初始值??? 2.判断条件? 真 执行代码块? 执行完,初始值+1,继续重复

????????????????????????????????????1.初始值??? 2.判断条件? 假 结束循环

#include "stdio.h"

int main(){
    
    int i;
    for(i = 1; i < 101; i++){
        printf("%d",i);      //打印结果是 1 - 100
    }                    
    return 0;

}

? 2. while循环

? ? ? ? ? ? ? ? 格式:

? ? ? ? ? ? ? ? ? ? ? ? int i = 0;? 初始值

? ? ? ? ? ? ? ? ? ? ? ? while (条件表达式){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 代码块

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i++;? 自增量

????????????????????????}

? ? ? ? ? ? ? ? 执行顺序: i = 0;? 判断条件? 真: 执行代码块 ,i++,继续重复,再判断,真:执行

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?i = 0;? 判断条件? 假:? ? 结束循环

? ? break,continue关键字

? ? ? ? ? ? ? ?break 跳出循环。后面代码不执行? ? ? ? ? ? ? ?跳出一层循环

? ? ? ? ? ? ? ?continue 跳过本次循环,后面代码不执行

#include "stdio.h"

int main(){
    
    int i,j;
    for(i = 1; i < 101; i++){
        if(i % 2 == 0){
            continue;
        }
        printf("%d",i);      //打印结果是 1 - 100 中的奇数
    }
                        

    for(j = 1; j < 101; j++){
        if(j == 51){
            break;
        }
        printf("%d",j);      //打印结果是 [1 - 50]
    }     
}

? 8.数组? ? ? ? ? ? ? ?

? ? ???1.一维数组

? ? ? ? ? ? ? 数组是一堆连续的空间,存放着相同数据类型且大小差不多的值? ? ? ??

? ? ? ? ? ? ? 定义数组 : 元素类型? 变量名[ 数量 ];

? ? ? ? ? ? ? 定义数组并初始化:元素类型? 变量名[]? = {值1,值2};

? ? ? ? ? ? ? ? ? ? ? ?例: int arr1[4] = {1,2,3,4};

? ? ? ? ? ? ? ?数组下标 从 0 开始??

? ? ? ? ? ? ? ?访问数组某个元素? arr1[3]? => 4?

? ? ? ? ? ? ? ? 遍历数组:

#include <stdio.h>

int main(){

	int arr1[10] = {1,2,3,4,5,6,7,8,9,10};  //定义并初始化
	int j; 
	printf("arr1数组元素为:");
	for (j = 0; j < 10; j++) {
		printf(" %d", arr1[j]); //循环10次 从0开始 每次输出数组[i]个元素
	}
    return 0;
}

? ? ? ? 2. 二维数组

? ? ? ? ? ? ? ? 定义二维数组 : 元素类型 变量名[长度][长度];

? ? ? ? ? ? ? ? 例: int arr[2][3];? ? ? ?

? ? ? ? ? ? ? ? 定义二维数组并初始化: 元素类型 变量名[长度][长度] = {{值1},{值1},{值1}};

? ? ? ? ? ? ? ? 例:? int arr[3][3] = {{1,2,3},?{4,5,6} , {7,8,9}};?

? ? ? ? ? ? ? ??一个二维数组可以被认为是一个带有 x 行和 y 列的表格:例?

arr[0][0] =>1arr[0][1] =>2arr[0][2] =>3
arr[1][0] =>4arr[1][1] =>5arr[1][2] =>6
arr[2][0] =>7arr[2][1] =>8arr[2][2] =>9

? ? ? ? ? ? ? ? 第一行 是 arr[0] => {1,2,3};? ??

? ? ? ? ? ? ? ? 第二行是?arr[1] => {4,5,6};?

? ? ? ? ? ? ? ? 第三行是?arr[2] => {7,8,9};??

? ? ? ? ?遍历二维数组:? ? ??

#include <stdio.h>

int main(){

    int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
	int i, j;
	for (i = 0;i < 3;i++) {  //外循环一次
		for (j = 0;j < 3;j++) {  //内循环 循环到不符合条件为止 
			printf("arr[%d][%d] = %d\n",i,j,arr[i][j]);
		}
	}
    return 0;
}	
//运行结果                          i可以看做每一行 j可以看做每一列
            arr[0][0] = 1                
		    arr[0][1] = 2
		    arr[0][2] = 3
		    arr[1][0] = 4
		    arr[1][1] = 5
		    arr[1][2] = 6
		    arr[2][0] = 7
		    arr[2][1] = 8
		    arr[2][2] = 9

    	

9.函数

? ? ? ? ? ? ? 函数是C语言非常重要的知识,函数是C语言模块,有很强的独立性,可以互相调用。

? ? ? ? ? ? ? C语言有很多内置函数,像printf()? scanf()? 都是内置函数

? ? ? ? ? ? ? 函数定义 :? 返回值类型? 函数名(形参){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????函数体

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ?定义需要在主函数main()的外部定义,调用需要在main()函数里调用

????????例:

#include <stdio.h>
// 定义一个求和函数, 返回值类型是整形,参数有两个整形参数
int sum(int x, int y){    
    return x + y;  
}

int main(){
    int x = 1;
    int y = 2;
    int sum1;
    sum1 = sum(x,y);   // 调用sum函数将x,y的值传进去
    printf("%d",sum1);  // 打印返回的结果
    return 0;
}

返回值类型 有 int char? float 等等,还有一个空类型(void) 可以理解为无返回值类型

????????例:

#include <stdio.h>
    
void hello(){
    printf("hello world!"); // 没有返回值
}
    
int main(){
    hello();
    return 0;
}

封装一个函数,函数功能是冒泡排序

????????例:????????

#include <stdio.h>

int Sort(int array[],int arrlen) {
    int i, j, z; 
    for (i = 0; i < arrlen - 1; i++) {
        for (j = 0; j < arrlen - i - 1; j++) {
            if (array[j] > array[j + 1]) {  //如果 数组第一个元素比第二个元素大
                array[j] = array[j] + array[j + 1];     //那么就交换
                array[j + 1] = array[j] - array[j + 1];
                array[j] = array[j] - array[j + 1];
            }                                 // 交换的代码可以看做这样
        }                                     // a = 2 , b = 3 
    }                                         // a = a + b,  b = a - b, a = a - b; 
    printf("排序后的array是:");
    for (z = 0; z < arrlen; z++) {
        printf(" %d", array[z]);
    }
    return 0;
}

int main() {
    int arr1[] = { 1,20,5,7,8,4,2,1,20,9 }; //定义数组
    int length = sizeof(arr1) / sizeof(int); //计算数组长度
    Sort(arr1,length);  //将数组,长度传进去
    return 0;
}

10.指针?

? ? ? ? 指针是什么? 指针就是地址。

? ? ? ? 地址是什么? 计算机所有程序都在内存中进行,地址就是内存中的内存单元的编号。

? ? ? ? 一个内存单元大小是1字节(8bit),一个内存单元对应一个地址(或编号)。

? ? ? ? 计算机的单位:

?1bit? =? 1 或 0bit是二进制数
?1byte = 8bitbyte是字节
?1kb? =? 1024bytekb 常见单位
? 1mb =? 1024kbmb 常见单位
? 1gb = 1024mbgb 常见内存单位

? ? ? ? 地址是由32bit位组成的

? ? ? ? int a = 10;? ? 因为int所占大小是4字节,所以它有四个地址,但是取地址默认取出第一个地址

?地址? ?值
?0x00000067EEBFF5940a
?0x00000067EEBFF59500
?0x00000067EEBFF59600
?0x00000067EEBFF59700?

? ????????&a 默认取出整形变量a的第一个地址,所以是 0x00000067EEBFF594

? ? ? ? ? 这四个地址就是四个内存单元,专门存放a变量的

? ?定义指针:? ?类型 * 变量名;

? ?定义并引用 :? ? ? ?类型? a? = 值;

????????????????????????????????类型 * 变量名? =? &a;? ? ? ? ? ?变量a的类型要与 指针变量的类型相同

? ? ? ? 例1:? ? ? ? ?

#include <stdio.h>

int main(){
    int a = 10;
    printf("%p",&a);  
    int * pa = &a;     
    printf("%d",*pa);   
     // %p专门打印地址,打印出的形式是十六进制
     // &a这是取地址,就是一串地址 0x000000BFAC
     // *pa 说明这是指针变量,int说明pa执行的对象类型是int。
     // printf("%d",*pa);  *pa 解引用操作,通过地址找到a变量 打印10
    return 0;
}

? ?指针类型的大小都是相同的,它们都是存放着地址。

? ?指针的类型大小取决于编译器的位数(32位数4字节,64位数8字节)

? ?因为笔者使用的是32位的所以都是四字节

????????例:

printf("%d",sizeof(char *));  // 4
printf("%d",sizeof(short *));  // 4
printf("%d",sizeof(int *));  // 4
printf("%d",sizeof(long *));  // 4
printf("%d",sizeof(long long *));  // 4
printf("%d",sizeof(float *));  // 4
printf("%d",sizeof(double *));  // 4

11.结构体

???????? 结构体使得c语言有能力秒数复杂类型,比如一个学生有年龄,有身高,有学号,这几个数据类型不相同,定义变量太多也不好。这样就可以使用结构体,构建一个 虚拟学生

构建一个虚拟学生出来,就可以实例化多个学生,它们有自己的名字,成绩,学号

? ? ? ? 定义结构体:

? ? ? ? ? ? ? ? ? ? ? ? ?struct? 结构体名{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 年龄

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 姓名

????????????????????????}????????

? ? ? ? ? ? ? ? ? ? ? ? struct 结构体名? 变量名 = { 20 , "lisi" };? 实例化??

? ? ? ? ?例:

#include <stdio.h>

struct stu {		//用struct关键字定义一个stu结构体
	char name[20];  //学生姓名
	int age;		//学生年龄
	double score;	//学生成绩
    int id;         //学号
};
int main() {
    // 创建了一个李四学生
	struct stu s = {"李四" , 20 , 91.9, 20040202}; //结构体的创建和初始化
	printf("1: %s %d %lf %d\n", s.name, s.age, s.score , s.id);//结构体变量.成员变量
	struct stu * ps = &s;	//struct stu是&s的类型
	printf("2: %s %d %lf %d\n", ps->name, ps->age, ps->score, s.id);

    // 创建了一个张三学生
    struct stu z = {"张三" , 19 , 99.5, 20040302}; //结构体的创建和初始化
	printf("11: %s %d %lf %d\n", z.name, z.age, z.score , z.id);//结构体变量.成员变量
	struct stu * pz = &z;	//struct stu是&z的类型
	printf("12: %s %d %lf %d\n", pz->name, pz->age, pz->score, pz->id);
    return 0;
}

? ? ? ? 访问结构体成员可以有两种方式:

? ? ? ? ? ? ? ?使用结构体变量名. 成员名

? ? ? ? ? ? ? ? ? ? ( . ) 可以理解为 的? ? ? ?比如 : s的name? ? ?s的age? ?s的score

????????????????使用结构体指针名->成员名???

? ? ? ? ? ? ? ? ? ? ?ps?是一个地址? ?存放 s 这个结构体变量名这个地址

? ? ? ? ? ? ? ? ? ? ?ps -> age? ? 可以理解为? ? ps指针变量 找到 s结构体变量访问里面的成员。? ? ? ? ???

? ? ? ? ? ??

本章完!如果觉得对你有帮助!请大家点赞评论转发!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:51:59  更:2022-01-16 12:52:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:42:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码