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

C语言教程(一)——输出、数据类型、表达式、条件判断、循环

一个C语言程序必须包含以下代码:

int main(void){return 0;
}

这是整个C语言程序的入口

输出

输入以下代码并运行(注意分号):

#include <stdio.h>int main(void){printf("Hello World\n");return 0;
}

可以看到,控制台上会显示:

Hello World

这就证明你的程序写对了。

为什么会显示这个信息呢,因为我们在程序中写了这个代码:

printf("Hello World\n");

表示打印Hello World到显示屏上。注意,\n表示换行符。

另外,如果要使用printf,需要在代码的最顶上写:

#include <stdio.h>

输出整数

我们可以用如下代码输出整数1:

#include <stdio.h>int main(void){printf("%d\n", 1);return 0;
}

这段代码将会成功输出整数1.

数据类型

在C语言中,数据都有它的类型。数据会存储在进程的地址空间中,而数据类型就规定了访问这些数据的规则。

我们可以使用()运算符强行转换数据类型:

#include <stdio.h>int main(void){printf("%d\n", (int)1.12);return 0;
}

输出:

1

这是因为,我们规定了1.12这个数应遵循int(整数)类型的访问规则,因此它的输出为1.

常用的数据类型有如下几个:

int:整数,占4个字节

short:短整数,占2个字节

char:字符,占1个字节

变量

有些时候程序需要使用一些变量,变量的定义方法如下:

[数据类型] [变量名];

或者可以设定初始值:

[数据类型] [变量名] = [初始值];

定义完成后,我们可以使用=对变量进行赋值:

#include <stdio.h>int main(void){int var = 0;var = var + 1;var = var + 1;printf("%d\n", var);return 0;
}

其中,我们用+号获得变量加上指定数的结果,并赋值给var,输出:

2

因为var初始值为0,被加了两次

指针

指针也是一种数据类型,表示地址。因此,在访问指针类型的变量时,会将它当成一个地址来处理。这个地址可能是一个其他变量的地址。

我们可以通过&运算符获得变量的地址:

#include <stdio.h>int main(void){int var = 0;printf("%p\n", &var);return 0;
}

输出:

0000002f371ff7dc

一个指针变量需要被这么定义:

[访问地址内容的数据类型] *[变量名];

也可以设置初始值:

[访问地址内容的数据类型] *[变量名] = [初始值];

访问一个指针变量存储的地址时,需要使用*运算符:

#include <stdio.h>int main(void){int var = 0;int *p = &var;printf("%d\n", *p);return 0;
}

 表达式

C语言中,有许多表达式,如加减乘除,取地址,判断真假等:

加减乘除

两数相加用+运算符,相减用-运算符,相乘用*运算符,相除用/运算符:

#include <stdio.h>int main(void){printf("%d\n", 1+1);printf("%d\n", 1-1);printf("%d\n", 1*1);printf("%d\n", 1/1);return 0;
}

以上代码分别输出了1+1,1-1,1×1,1÷1的结果:

2
0
1
1

判断真假

==为等于运算符,!=为不等于运算符,!为非运算符。如果结果真结果为非0,假结果为0:

#include <stdio.h>int main(void){printf("%d\n", 1==1);printf("%d\n", 1!=1);printf("%d\n", !(1==1));return 0;
}

以上代码分别判断1是否等于1、1是否不等于1、1是否等于1的否定,输出:

1
0
0

 我们也可以用大于号和小于号表示大于小于的判断:

#include <stdio.h>int main(void){printf("%d\n", 1>1);printf("%d\n", 1<1);printf("%d\n", 1>=1);printf("%d\n", 1<=1);return 0;
}

这段代码将分别输出1是否大于1,1是否小于1,1是否大于等于1,1是否小于等于1:

0
0
1
1

 

三目运算符

C语言中,三目运算符可以根据一个条件的真假,得出特定的结果,如:

#include <stdio.h>int main(void){printf("%d\n", (1==1)?10:20);return 0;
}

表示,如果1等于1,那么输出10,否则输出20

逻辑与和逻辑或

逻辑与的结果取决于其并列的两个表达式的真假,只有都为真才是真。

逻辑或只需要有一个为真:

#include <stdio.h>int main(void){printf("%d\n", 1==1 && 1==2);printf("%d\n", 1==1 || 1==2);return 0;
}

这段代码将分别输出1等于1与1等于2的逻辑与和逻辑或,因此输出如下:

0
1

运算符优先级

运算符具有其优先级,如先算乘除后算加减。我们可以使用小括号是一个运算的优先级最高,如:

3 + 2 * 4

会先算2*4,最后在算3+8。而如果我们加上括号:

(3 + 2) * 4

就会先算3+2,后算5*4了 

变量运算

运算符也可以操作变量,如:

#include <stdio.h>int main(void){int var = 0;printf("%d\n", var == 0);printf("%d\n", (var + 1) == 0);return 0;
}

输出:

1
0

条件判断

条件判断可以使用if关键字实现:

if(表达式){表达式为真后执行的代码
}

如:

#include <stdio.h>int main(void){if(1==1){printf("1==1\n");}return 0;
}

输出:

1==1

我们也可以对设置表达式为假后执行的代码:

if(表达式){表达式为真后执行的代码
}else{表达式为假后执行的代码
}

如:

#include <stdio.h>int main(void){if(1==2){printf("1==2\n");} else{printf("1!=2\n");}return 0;
}

 输出:

1!=2

当然,我们也可以设置否则如果,也就是表达式为假后,再判断另一表达式是否为真:

if(表达式1){表达式1为真后执行的代码
}else if(表达式2){表达式2为真后执行的代码
}else if...
}else{    (可选)表达式都为假后执行的代码
}

如: 

#include <stdio.h>int main(void){int age=18;if(age < 8){printf("1\n");} else if (age < 16){printf("2\n");} else if (age < 18){printf("3\n");} else{printf("4\n");}return 0;
}

输出:

4

我们将age改成7,输出:

1

循环

C语言中,循环分为while循环和for循环:

while循环

while循环的写法如下:

while (表达式){表达式为真后执行的代码
}

如果表达式为真,则会循环,直到表达式为假。如果表达式为假,则会跳出循环,如:

#include <stdio.h>int main(void){int count = 0;while (count < 10){printf("%d\n", count);count++;}return 0;
}

 count++表示将count变量自己增加1,因此,程序将会输出:

0
1
2
3
4
5
6
7
8
9

for循环

for循环的写法如下(注意分号):

for(表达式1;表达式2;表达式3){表达式2为真后执行的代码
}

for循环中,表达式1是进入循环前要执行的语句(只执行1次),表达式3是每次循环结束后要执行的语句。同样的,for循环也是循环直到表达式2为假。

前面的代码可以改写为:

#include <stdio.h>int main(void){int count;for (count = 0; count < 10; count++){printf("%d\n", count);}return 0;
}

输出:

0
1
2
3
4
5
6
7
8
9

相关文章:

C语言教程(一)——输出、数据类型、表达式、条件判断、循环

一个C语言程序必须包含以下代码&#xff1a; int main(void){return 0; } 这是整个C语言程序的入口 输出 输入以下代码并运行&#xff08;注意分号&#xff09;&#xff1a; #include <stdio.h>int main(void){printf("Hello World\n");return 0; }可以看…...

Prompt Engineering、Finetune、RAG:OpenAI LLM 应用最佳实践

一、背景 本文介绍了 2023 年 11 月 OpenAI DevDay 中的一个演讲&#xff0c;演讲者为 John Allard 和 Colin Jarvis。演讲中&#xff0c;作者对 LLM 应用落地过程中遇到的问题和相关改进方案进行了总结。虽然其中用到的都是已知的技术&#xff0c;但是进行了很好的总结和串联…...

[C语言]——分支和循环(4)

目录 一.随机数生成 1.rand 2.srand 3.time 4.设置随机数的范围 猜数字游戏实现 写⼀个猜数字游戏 游戏要求&#xff1a; &#xff08;1&#xff09;电脑自动生成1~100的随机数 &#xff08;2&#xff09;玩家猜数字&#xff0c;猜数字的过程中&#xff0c;根据猜测数据的⼤…...

【LeetCode】392. 判断子序列(简单)——代码随想录算法训练营Day54

题目链接&#xff1a;392. 判断子序列 题目描述 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"…...

1. Typescript入门

TS 基础 Typescript 在线编译平台 基础类型 boolean、number 和 string 类型 boolean let isHandsome: boolean true赋值与定义的不一致&#xff0c;会报错&#xff0c;静态类型语言的优势就体现出来了&#xff0c;可以帮助我们提前发现代码中的错误。 let isHandsome: …...

【Git】merge时报错:refusing to merge unrelated histories

文章目录 一、问题二、解决办法1、将feature分支的东西追加到master分支中2、将feature里的东西直接覆盖到master分支中 一、问题 今天将feature分支合并到master时报错&#xff1a;refusing to merge unrelated histories&#xff08;拒绝合并无关历史&#xff09; 报错原因&…...

树状数组+离散化求逆序对超详细讲解!

树状数组离散化求逆序对 用一个数组 w [ ] w[] w[]来记录遍历到当前数时&#xff0c;每个数出现的次数 由于只关心每个数前边有多少个数比他大&#xff0c;遍历到 i i i时&#xff0c;求大于 a [ i ] a[i] a[i]的数有多少个&#xff0c;就是对 [ a [ i ] , n ] [a[i], n] [a[i…...

《解密云计算:企业之选》

前言 在当今数字化时代&#xff0c;企业面临着巨大的数据处理压力和信息化需求&#xff0c;传统的IT架构已经无法满足日益增长的业务需求。在这样的背景下&#xff0c;越来越多的企业开始转向云计算&#xff0c;以实现灵活、高效和可扩展的IT资源管理和利用。 云计算 云计算是…...

地址分词 | EXCEL批量进行地址分词,标准化为十一级地址

一 需求 物流需要对用户输入地址进行检查&#xff0c;受用户录入习惯地址可能存在多种问题。 地址标准化是基于地址引擎和地址大数据模型&#xff0c;自动将地址信息标准化为省、市、区市县、街镇、小区、楼栋、单元、楼层、房屋、房间等元素&#xff0c;补充层级缺失数据、构建…...

KubeSphere平台安装系列之二【Linux单节点部署KubeSphere】(2/3)

**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere&#xff08;亲测–实操完整版&#xff09;】&#xff08;1/3&#xff09; 【Linux单节点部署KubeSphere】&#xff08;2/3&#xff09; 【Linux多节点部署KubeSphere】&#xff08;3/3&#xff09; **《KubeS…...

网络安全: Kali Linux 使用 docker-compose 部署 openvas

目录 一、实验 1.环境 2.Kali Linux 安装docker与docker-compose 3.Kali Linux 使用docker-compose方式部署 openvas 4. KaliLinux 使用openvas 二、问题 1. 信息安全漏洞库 2.信息安全漏洞共享平台 3.Windows 更新指南与查询 4.CVE 查询 5.docker-compose 如何修改o…...

【学习考试心得】在誉天学习考试RHCE9.0的体验

作为华中第一位参加RHCE9.0线上考试的考生&#xff0c;很荣幸能来写这个心得&#xff0c;和大家分享一下线上的考试的一些体验。 一、学习体验 首先在红帽课程的学习中&#xff0c;跟着杨峰老师的脚步&#xff0c;整个学习过程中都非常有意思。杨峰老师充满磁性的声音和小王老师…...

Flip Clock(not good)

最近体验了一下iOS的翻页时钟app&#xff0c;很想自己做一个&#xff0c;但是效果不好 public class main {public static void main(String[] args) {//psvmnew MyFrame();} }import javax.swing.*; import java.awt.*; import java.io.File; import java.io.IOException; im…...

目标检测——摩托车头盔检测数据集

一、简介 首先&#xff0c;摩托车作为一种交通工具&#xff0c;具有高速、开放和稳定性差的特点&#xff0c;其事故发生率高&#xff0c;伤亡率排在机动车辆损伤的首位。因此&#xff0c;摩托车乘员头盔对于保护驾乘人员头部安全至关重要。在驾乘突发状况、人体受冲击时&#…...

Windows 安装 Xinference

Windows 安装 Xinference 0. 引言1. 创建虚拟环境2. 安装 pytorch3. 安装 llama_cpp_python4. 安装 chatglm-cpp5. 安装 Xinference6. 设置 model 路径7. 启动 Xinference8. 查看 Cluster Information 0. 引言 Xorbits Inference&#xff08;Xinference&#xff09;是一个性能…...

静态时序分析:SDC约束命令set_case_analysis详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 目录 指定值 指定端口/引脚列表 简单使用 set_case_analysis命令用于对电路进行特定模式的设定&#xff0c;例如对于一个工作在正常模式下的芯片&#xff0c;…...

C++ · 代码笔记4 ·继承与派生

目录 前言010继承与派生简单例程020多级继承030使用using关键词更改访问权限040隐藏050派生类与基类成员函数同名时不构成重载060使用多级继承展示成员变量在内存中的分布情况071派生类在函数头调用基类构造函数072构造函数调用顺序080构造函数与析构函数的调用顺序091多重继承…...

解决uni-app中使用webview键盘弹起遮挡input输入框问题

这个平平无奇的回答&#xff0c;可能是全网最靠谱的解决方案。 这里我用的是vue3 setup .vue文件的方式 <view> <web-view :fullscreen"false" :webview-styles"{top: statusBarHeight40,height:height,progress: {color: green,height:1px } }"…...

Java注解介绍

Java注解 注解介绍元注解RetentionTargetDocumentedInherited接口类测试结果 注解介绍 Java注解&#xff08;Annotation&#xff09;是一种元数据&#xff08;Metadata&#xff09;的形式&#xff0c;它可以被添加到Java代码中的类、方法、变量、参数等元素上&#xff0c;以提…...

万字详解,Java实现低配版线程池

文章目录 1.什么是线程池2.线程池的优势3.原理4.代码编写4.1 阻塞队列4.2 ThreadPool线程池4.3 Worker工作线程4.4 代码测试 5. 拒绝策略5.1 抽象Reject接口5.2 BlockingQueue新增tryPut方法5.3 修改ThreadPool的execute方法5.4 ThreadPool线程池构造函数修改5.5 拒绝策略实现1…...

挂耳式蓝牙耳机哪家的好用?购买耳机前必须了解的几大要点

随着健康意识的提升&#xff0c;越来越多的人开始热衷于运动。运动不仅能够增强体质&#xff0c;对于我们这些忙碌的上班族而言&#xff0c;它也是一种极佳的减压方式。经过一天的辛勤工作&#xff0c;能够在户外跑步&#xff0c;让汗水带走压力&#xff0c;实在是一种享受。在…...

CSS文本属性

CSS文本属性 1.文本颜色2.文本间距3. 文本修饰4 .文本缩进5.文本对齐_水平6.行高7. vertical-align 1.文本颜色 属性名&#xff1a;color作用&#xff1a;控制文字的颜色。可选值&#xff1a; 颜色名rgb或rgbaHEX或HEXA &#xff08;十六进制&#xff09;HSL或HSLA 开发中常用…...

MySQL篇—执行计划之覆盖索引Using index和条件过滤Using where介绍(第三篇,总共三篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…...

最短路径(2.19)

目录 1.网络延迟时间 弗洛伊德算法 迪杰斯特拉算法 2. K 站中转内最便宜的航班 3.从第一个节点出发到最后一个节点的受限路径数 4.到达目的地的方案数 1.网络延迟时间 有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的…...

vue 总结

1.vue 的生命周期 1. es6 2. vue 基本属性指令 <template><div><!--<h1>vue基本指令的使用方式</h1><a :href"url">v-bind使用链接</a><img :src"srcUrl" /><div>解决闪烁问题<p v-cloak>{{…...

深入理解TCP/IP协议:互联网通信的核心

深入理解TCP/IP协议&#xff1a;互联网通信的核心 在数字化时代&#xff0c;TCP/IP协议是支撑全球互联网通信的基石。它不仅负责数据的传输和路由&#xff0c;还确保了信息传递的准确性和完整性。本文将深入探讨TCP/IP协议的工作原理、结构以及它在网络编程中的应用。 TCP/IP…...

Python数据处理实战(4)-上万行log数据提取并作图进阶版

系列文章&#xff1a; 0、基本常用功能及其操作 1&#xff0c;20G文件&#xff0c;分类&#xff0c;放入不同文件&#xff0c;每个单独处理 2&#xff0c;数据的归类并处理 3&#xff0c;txt文件指定的数据处理并可视化作图 4&#xff0c;上万行log数据提取并作图进阶版&a…...

JavaWeb Tomcat启动、部署、配置、集成IDEA

web服务器软件 服务器是安装了服务器软件的计算机&#xff0c;在web服务器软件中&#xff0c;可以部署web项目&#xff0c;让用户通过浏览器来访问这些项目。 Web服务器是一个应用程序&#xff08;软件&#xff09;&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序…...

关于Vue3的一些操作

1. 设置浏览器自动打开 在package.json 中设置 dev: vite --open 2.给src文件夹配置别名 在vite.config.ts配置文件中添加以下内容 3. 如果2中有红色波浪线的问题 ***安装一个文件包***npm install types/node3. 在tsconfig.json配置文件中&#xff0c;找到配置项compi…...

外贸常用的出口认证 | 全球外贸数据服务平台 | 箱讯科技

出口认证是一种贸易信任背书&#xff0c;对许多外贸从业者而言,产品的出口认证和当前的国际贸易环境一样复杂多变&#xff0c;不同的目标市场、不同的产品类别,所需要的认证及标准也不同。 国际认证 01 IECEE-CB IECEE-CB体系的中文含义是“关于电工产品测试证书的相互认可体…...