当前位置: 首页 > news >正文

C语言初步介绍(初学者,大学生)【上】

1.C语⾔是什么?

⼈和⼈交流使⽤的是⾃然语⾔,如:汉语、英语、⽇语
那⼈和计算机是怎么交流的呢?使⽤ 计算机语⾔
⽬前已知已经有上千种计算机语⾔,⼈们是通过计算机语⾔写的程序,给计算机下达指令,让计算机⼯作的。
C语⾔就是众多计算机语⾔中的⼀种,当然C++/Java/Go/Python都是计算机语⾔。

2.C语⾔的历史和辉煌

C 语⾔最初是作为 Unix 系统的开发⼯具⽽发明的。

3.编译器的选择VS2022

        3.1编译和链接

C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。

C语⾔代码是放在 .c 为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个 过程。

注意:⼀个⼯程⼀般都会有多个源⽂件组成,

1. 每个源⽂件(.c)单独经过编译器处理⽣成对应的⽬标⽂件(.obj为后缀的⽂件)
2. 多个⽬标⽂件和库⽂件经过链接器处理⽣成对应的可执⾏程序(.exe⽂件)

3.2编译器的对⽐

C语⾔是⼀⻔编译型的计算机语⾔,需要依赖编译器将计算机语⾔转换成机器能够执⾏的机器指令。
那我们常⻅的C语⾔编译器都有哪些呢?
⽐如:msvc、clang、gcc 就是⼀些常⻅的编译器,当然也有⼀些集成开发环境 如:VS2022、
XCode、CodeBlocks、DevC++、Clion 等。
集成开发环境(IDE)⽤于提供程序开发环境的应⽤程序,⼀般包括代码编辑器、 编译器 、 调试器
和 图形⽤⼾界⾯ 等⼯具。 集成了代码编写功能、分析功能、编译功能、调试功能等⼀体化的开发软 件服务套。
VS2022 集成了MSVC(安装报包较⼤⼀些,安装简单,⽆需多余配置,使⽤起来⾮常⽅便)
XCode 集成了clang(苹果电脑上的开发⼯具)
CodeBlocks 集成了gcc(这个⼯具⽐较⼩众,需要配置环境)
DevC++ 集成了gcc(对于代码⻛格的养成不好,⼀些竞赛使⽤)
Clion 是默认使⽤CMake,编译器是可以配置的(⼯具是收费,所以暂时推荐⼤家使⽤)

3.3VS2022 的优缺点

优点:
  • VS2022 是⼀个主流的集成开发环境,企业中使⽤较为普遍
  • VS2022 包含了:编辑器+编译器+调试器,功能强⼤
  • 直接安装即可使⽤,基本不⽤额外配置环境,上⼿容易
  • 默认界⾯是中⽂的,初学者友好
缺点:
  • 功能丰富,安装包⼤,占⽤空间多。

4.VS项⽬ 和 源⽂件、头⽂件介绍

在VS上写代码,我们是需要创建项⽬的,直接新建项⽬就可以了。
在项⽬中就可以添加源⽂件和头⽂件。
C语⾔把 .c 为后缀的⽂件称为源⽂件,把 .h 为后缀的⽂件称为头⽂件。

5.第⼀个C语⾔程序

#include <stdio.h>int main()
{printf("hello,world\n");return 0;
}
这⾥演⽰VS2022中创建项⽬和编写C代码的过程,并运⾏出结果。
在VS2022上运⾏代码的快捷键: Ctrl+f5

6.main函数

每个 C 语⾔程序不管有多少⾏代码,都是从 main 函数开始执⾏的, main 函数是程序的⼊⼝,
main 函数也被叫做:主函数。 main 前⾯的 int 表⽰ main 函数执⾏结束的时候返回⼀个整型类
型的值。所以在 main 函数的最后写 return 0; 正好前后呼应。
  • main函数是程序的⼊⼝
  • main函数有且仅有⼀个
  • 即使⼀个项⽬中有多个.c⽂件,但是只能有⼀个main函数(因为程序的⼊⼝只能有⼀个)

第⼀次写代码,⼀些常⻅的错误总结:

main 被写成了mian
main后边的()漏掉了
代码中不能使⽤中⽂符号,⽐如括号和分号
⼀条语句结束后,有分号

7.printf和库函数

在上⾯的代码中有⼀句代码如下:
printf("hello,world!\n");
代码中使⽤了 printf 函数,实现了在屏幕上的信息的打印。
这⾥简单的介绍⼀下 printf printf 是⼀个 库函数 ,它的功能是在标准输出设备(⼀般指屏
幕)上进⾏信息的打印。上⾯的代码是使⽤ printf 函数打印字符串。只要把想要打印的⼀串字符放
在双引号中并传递给printf函数就可以打印。
printf函数也可以⽤来打印其他类型的数据,⽐如:
int a = 100;
printf("%d\n,a");        //printf打印整形
printf("%c\n",'q');      //printf打印字符
printf("%lf\n",3.14);    //printf打印双精度浮点型
这⾥的 %d , %c 等是占位符,会被后边的值替换。(后面会介绍的)
同时我们在使⽤库函数的时候,是需要包含头⽂件的,⽐如: printf 函数需要包含的就是
stdio.h 这个头⽂件,具体的⽅法就是:
#include <stdio.h>

那什么是库函数呢?

为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不
同的编译器⼚商根据标准进⾏实现,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准
库,这些函数也被称为库函数。在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函 数其他编译器不⼀定⽀持)。
⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头⽂件。
库函数⽐较多,后期慢慢来介绍,提前了解可参考链接: https://cplusplus.com/reference/clibrary/

8.关键字介绍

C语⾔中有⼀批保留的名字的符号,⽐如: int if return ,这些符号被称为保留字或者关键 字。
  • 关键字都有特殊的意义,是保留给C语⾔使⽤的
  • 程序员⾃⼰在创建标识符的时候是不能和关键字重复的
  • 关键字也是不能⾃⼰创建的。
C语⾔的32个关键字如下:
1 auto break case char const continue default do double else enum 
extern
2 float for goto if int long register return short signed sizeofstatic
3 struct switch typedef union unsigned void volatile while
⼀些关键字⼤家可以去了解⼀下,不过使⽤最多的还是上⾯的32个关键字。
注: https://zh.cppreference.com/w/c/keyword (C语⾔所有关键字的介绍)

9.字符和ASCII编码

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号
括起来的,如:'a','b','@'。
我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆ 进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为 了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C
语⾔中的字符就遵循了 ASCII 编码的⽅式。
参考: https://zh.cppreference.com/w/cpp/language/ascii
我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数据:
  • 字符A~Z的ASCII码值从65~90
  • 字符a~z的ASCII码值从97~122
  • 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
  • 数字字符0~9的ASCII码值从48~57
  • 换⾏ \n 的ASCII值是:10
  • 在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
单个字符的打印可以使⽤%c来指定格式:
#include <stdio.h>int main()
{printf("%c\n",'Q');printf("%c\n",81);    //这里的81是字符Q的ASCII码值,也是可以正常打印的return 0;
}

可打印字符展示:

#include <stdio.h>
int main()
{int i = 0;for (i = 32; i <= 127; i++){printf("%c ", i);if (i % 16 == 15)printf("\n");}return 0;
}

10.字符串和\0

C语⾔中如何表⽰字符串呢?使⽤双引号括起来的⼀串字符就被称为字符串,如:"abcdef",就是⼀个 字符串。
字符串的打印格式可以使⽤ %s 来指定,也可以直接打印如下:
#include <stdio.h>
int main()
{printf("%s\n", "hello C");printf("hello c");return 0;
}
C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串 的结束标志。

相关文章:

C语言初步介绍(初学者,大学生)【上】

1.C语⾔是什么&#xff1f; ⼈和⼈交流使⽤的是⾃然语⾔&#xff0c;如&#xff1a;汉语、英语、⽇语 那⼈和计算机是怎么交流的呢&#xff1f;使⽤ 计算机语⾔ 。 ⽬前已知已经有上千种计算机语⾔&#xff0c;⼈们是通过计算机语⾔写的程序&#xff0c;给计算机下达指令&am…...

陈文自媒体:现在的房价,已经跌到7年前!

今年的国庆北上广深都放开了政策&#xff0c;很多人都放弃旅游去看房了&#xff0c;现在的全民都有一个基本意识&#xff0c;现在的房子已经到了谷底&#xff0c;从各大政策就可以看出来&#xff0c;稍微有点钱的可以出手买房了。 昨天我哥跟我说&#xff0c;现在xx地方的房子…...

基于STM32的智能水族箱控制系统设计

引言 本项目基于STM32微控制器设计一个智能水族箱控制系统。该系统能够通过传感器监测水温、照明和水位&#xff0c;并自动控制加热器、LED灯和水泵&#xff0c;确保水族箱内的环境适宜鱼类生长。该项目展示了STM32在环境监测、设备控制和智能反馈系统中的应用。 环境准备 1…...

java语言基础案例-cnblog

java语言基础案例 象棋口诀 输出 package nb;public class XiangQi {public static void main(String[] args) {char a 马;char b 象;char c 卒;System.out.println(a"走日"b"走田""小"c"一去不复还");} }输出汇款单 package nb…...

MyBatis-Plus 之 typeHandler 的使用

一、typeHandler 的使用 1、存储json格式字段 如果字段需要存储为json格式&#xff0c;可以使用JacksonTypeHandler处理器。使用方式非常简单&#xff0c;如下所示&#xff1a; 在domain实体类里面要加上&#xff0c;两个注解 TableName(autoResultMap true) 表示自动…...

HDLBits中文版,标准参考答案 |2.5 More Verilog Features | 更多Verilog 要点

关注 望森FPGA 查看更多FPGA资讯 这是望森的第 7 期分享 作者 | 望森 来源 | 望森FPGA 目录 1 Conditional ternary operator | 条件三目运算符 2 Reduction operators | 归约运算器 3 Reduction: Even wider gates | 归约&#xff1a;更宽的门电路 4 Combinational fo…...

提升开机速度:有效管理Windows电脑自启动项,打开、关闭自启动项教程分享

日常使用Windows电脑时&#xff0c;总会需要下载各种各样的办公软件。部分软件会默认开机自启功能&#xff0c;开机启动项是指那些在电脑启动时自动运行的程序和服务。电脑开机自启太多的情况下会导致电脑卡顿&#xff0c;开机慢&#xff0c;运行不流畅的情况出现&#xff0c;而…...

数据库简单介绍

数据库是现代信息技术中用于存储、管理和检索数据的重要工具。数据库技术的发展经历了多个阶段&#xff0c;从早期的层次模型和网状模型&#xff0c;到关系型数据库的兴起&#xff0c;再到NoSQL和NewSQL的多样化发展。数据库系统已经成为现代信息系统的核心和基础设施。 数据库…...

运用MinIO技术服务器实现文件上传——利用程序上传图片(二 )

在上一篇文章中&#xff0c;我们已经在云服务器中安装并开启了minio服务&#xff0c;本章我们将为大家讲解如何利用程序将文件上传到minio桶中 下面介绍MinIO中的几个核心概念&#xff0c;这些概念在所有的对象存储服务中也都是通用的。 - **对象&#xff08;Object&#xff0…...

C语言 | Leetcode C语言题解之第461题汉明距离

题目&#xff1a; 题解&#xff1a; int hammingDistance(int x, int y) {int s x ^ y, ret 0;while (s) {s & s - 1;ret;}return ret; }...

Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系

理清 Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系 在开发图形界面应用时&#xff0c;特别是在使用 Qt 框架时&#xff0c;开发者可能会接触到多个概念&#xff0c;如 Qt 3D、QtQuick、QtQuick 3D 和 QML。这些术语分别代表了 Qt 中不同的模块或技术&#xff0c;但由于它们的功能…...

软件设计师(软考学习)

数据库技术 数据库基础知识 1. 数据库中的简单属性、多值属性、复合属性、派生属性简单属性&#xff1a;指不能够再分解成更小部分的属性&#xff0c;通常是数据表中的一个列。例如学生表中的“学号”、“姓名”等均为简单属性。 多值属性&#xff1a;指一个属性可以有多个值…...

第一讲:Go语言开发入门:环境搭建与基础语法

文章目录 环境搭建windows环境搭建Mac环境搭建安装GO使用 Homebrew 安装 Go手动下载安装 Go 配置环境变量配置环境变量检查 Go 是否正确安装 验证安装&#xff1a;编写第一个 Go 程序创建 Go 工作区编写 Hello World 程序运行程序编译程序 常用的 Go 命令 Go语言基础语法1. 变量…...

Linux CentOS stream9配置本地yum源

在Linux系统中,yum源配置是一个重要的环节。把系统安装时配置的国外yum源转换为国内yum源,能够帮助系统快速安装软件包。对于网络环境不稳定或无法联网的系统,配置本地yum源,可以让用户在离线状态下也能进行软件包的安装,十分重要。 一、国内源 在使用Linux的日常工作中…...

std::string

std::string是C标准库中的一个基本类模板&#xff0c;专门用于处理字符串。它提供了一个可变长度的字符序列&#xff0c;以及一系列用于字符串操作的方法。std::string是值类型&#xff0c;这意味着当它作为函数参数传递或赋值时&#xff0c;整个字符串数据会被复制。 std::st…...

【Docker】03-自制镜像

1. 自制镜像 2. Dockerfile # 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["ja…...

Java GC 分类,8和9使用的哪种?

Java的垃圾收集器&#xff08;Garbage Collector, GC&#xff09;负责自动管理内存&#xff0c;回收不再使用的对象所占用的空间。随着JVM的发展&#xff0c;出现了多种不同特性的垃圾收集器来适应不同的应用场景和性能需求。在Java 8中&#xff0c;主要有以下几种垃圾收集器&a…...

【Docker从入门到进阶】01.介绍 02.基础使用

1. 介绍 1.1. 什么是 Docker Docker 是一个开源的平台&#xff0c;用于开发、发布和运行应用程序。它使开发者能够以更精简的方式封装应用及其依赖&#xff0c;做到“打包一次&#xff0c;到处运行”。通过 Docker&#xff0c;您可以创建轻量级、可移植的容器&#xff0c;每个…...

GraphRAG-Local-UI - 基于 GraphRAG 支持本地的聊天UI

文章目录 一、关于 GraphRAG-Local-UI &#x1f578;️特点&#x1f31f;&#x1f5fa;️路线图最近更新即将推出的功能 二、&#x1f4e6;安装和设置三、使用入门&#x1f680;1、创建索引目录2、添加示例数据&#xff08;可选&#xff09;3、初始化索引文件夹4、配置设置5、定…...

Java 根据字符生成背景透明的图片

上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...