C语言学习笔记:流程控制和数据输入输出

流程控制和数据的输入输出

算法

著名计算机科学家沃思提出了一个公式:

 数据结构 + 算法 = 程序

数据结构:对数据的描述

算法:对操作步骤的描述

算法定义

广义的说,为解决一个问题而采取的方法和有限的步骤,就称为“算法”

例如:

将大象放入冰箱的算法就可以如下描述:

打开冰箱门-把大象装进去-关闭冰箱门

算法特征

  • 有穷性:包含有限的操作步骤,不能无限制的执行下去

  • 可行性:算法中的每一条指令必须是切实可执行的

  • 确定性:算法中的每一条指令必须有确切的含义,不能产生歧义

算法描述-流程图

案例:

  • 要求:对于计算 s=1+2+3+4+5+6+7+8+9+10(累加求和)

  • 用流程图表示为:

程序的三种结构

顺序结构

特点:各操作是按先后顺序执行的,是最简单的一种结构,这个结构是默认的。

其中A和B两个框是顺序执行的。也就是在A框所指定的操作后,必然接着执行B框所指定的操作。

分支结构

分支结构又被称作“条件结构”或“选择结构”

特点:根据是否满足给定条件而从两组或者多组操作中选择一种进行执行。


  • 无论P条件是否成立,只能执行A操作或者B操作中的一个。

  • 无论执行完哪一个分支后,就结束了

分支结构又被分为“重复结构”。即在一定条件下,反复执行某一部分的操作,有两种类型:

循环结构

又被称之为“重复结构”。即在一定条件下,反复执行某一部分的操作,有两种类型:

  • 当型循环

  • 执行过程:

  • 当给定条件P成立时,执行S操作,然后再判断P条件是否成立,如果仍成立,再执行S操作,然后再判断···,如此反复,直到某一次P条件不成立为止,此时不再执行S,结束循环。

    • 特点:

    先判断,后执行,S有可能一次也不执行。(while,for)

  • 直到型循环

    • 执行过程:

    执行S操作,然后判断条件P是否成立,如果成立,再执行S操作,然后再判断,···,如此反复,直到某一次P条件不成立不再执行S,结束循环。

    • 特点:

    先执行,后判断,S最少要执行一次。(do...while)

C语句

  • C程序是以函数为基本单位的。

  • 一个函数的执行部分是由若干条语句组成的。

  • C语句都是用来完成一定的操作任务的。

  • C语句必须依赖于函数存在。

C程序结构

C语句分类

控制语句

用于完成一定的控制功能

① if()......else......

②for()......

③while()......

④do......while()

⑤continue

⑥break

⑦switch()

⑧return

⑨goto 标号(无条件跳转语句)

函数调用语句

由一个函数调用加一个分号构成,例如:

 printf("这是一个c程序!\n");

表达式语句

由一个表达式加一个分号构成,最典型的是赋值语句,例如:

 a = 3       // 是一个表达式
 a = 3;      // 是一个表达式语句

空语句

只有一个分号,什么都不做,例如:

 ;

复合语句

用"{......}"括起来的若干个语句,例如:

 {
     z = x + y;
     t = z / 100;
     printf("%f\n",t);
 }

数据的输入输出

数据的输入与输出相对于计算而言,其中:

  • 从计算机向外部设备输送数据称之为输出。通常的输出设备包括:显示器、打印机的等。

  • 从外部设备向计算机输送数据称之为输入。通常的输入设备包括:键盘、鼠标、扫描仪等。

  1. 在C语言中,输入与输出时用标准库(<stdio>)函数中的输入(scanf())、输出函数(printf())实现。

  2. 库函数已经被编译成了目标,在链接时与编译源程序员得到的目标我问及那(oni),下生成可执行程序

注意:在使用系统函数时,要用编译命令#unclude将有关的头文件包含到用户源中(要放在程序的开头位置)头文件含入调用是需要的有关信息

简单的输入和输出

用简单的printf函数输出数据

语法“格式控制”,输出列表;

 printf("格式控制\n",i,34);

注意:格式控制中的格式化要和输出的数据一一对应

举例:

 printf("i=%d,x=%d\n"i,34);

① 格式控制,用一对双引号括起来,包括两种信息:

  1. 格式说明:由“%”和特定的字符组成,如:%d,%c,%f等,这是格式说明符,用于说明输出项目所采用的格式

  2. 普通字符:作为说明性的文字、符号等,照原样显示出来

② 输出列表:输出列表中的各项目指出了所要输出的内容,可以是常量、变量、表达式

基本的格式字符

%d 按有符号十进制整型(int)数据的实际长度输出。(十进制(0)、八进制(00)、十六进制(0x00))

%u 按无符号十进制整型(int)数据的实际长度输出。

%c 仅输出一个字符(char)

%s 输出结果是字符串,举例:printf("%s\n","CHINA") ,输出结果:CHINA

%f 以小数形式输出一个实数(含单双精度)。整数部分全部输出,小数部分输出6位

%e 也可以写作%E,以指数形式输出一个实数(含单双精度)。小数点前1位非0数字,并输出6位小数。

%hd 短整型(short int/short)

%hhd 字符型的ASCII码,char数据对应的ASCII码的值,举例:char a = 'A';printf("%hhd\n",a);

%lf 双精度浮点型(double)

%ld 长整型(long int/long)

%lld 长长整型(long long int/long long)

%x 十六进制,并且十六进制的前缀0x不会打印出来

%#x 十六进制,并且十六进制的前缀0x也会打印出来

%#o 八进制,并且八进制的前缀0也会打印出来

%p 打印内存的地址

用简单的scanf函数输入数据

语法:

 scanf("格式控制",地址列表); -- 注意,不能传变量、常量、表达式,只能传与之对应的内存地址

取地址举例:

 int a = 10; // 定义一个变量a
 scanf("%d",&a); // &被称之为取地址符
 printf("%p\n",a); // 打印输出a的内存地址

作用:

将键盘输入的值存入内存中所占的存储单元里。存储单元有地址标识。

说明:

  1. “格式控制”:含义等同于printf函数的格式控制,说明输入的数据应该使用的格式,但是格式控制中不能添加除格式化符以外的字符。

  2. “地址列表”:是由若干个地址组成的,可以是变量的地址或者字符串的首地址。&取地址运算符,用于取出变量的地址。

  3. 与格式输出一样,在格式控制中,用于说明输入数据格式的格式说明符总是以%开头,后面紧跟具体的格式。

案例:
  • 要求:从键盘输入整数给变量a,b,c

  • 代码:

 #include <stdio.h>
 ​
 void main()
 {
     // 定义三个变量,用来接收控制台的输入
     int a,b,c;
     printf("请输入三个整数:\n");
     scanf("%d%d%d",&a,&b,&c);    
 }

复杂的输入与输出

按指定格式输出数据的宽度、小数位数、上下行数据按小数点对齐、用八进制、十六进制输出等。

输出数据格式的控制
整型格式说明符
  • 十进制形式

说明符说明数据类型
%d或%md用于基本整型Int
%ld或%mld用于长整型long
%u或%mu用于无符号的基本整型unsigned
%lu或%mlu用于无符号长整型unsigned long

  • 八进制形式

说明符说明数据类型
%o或%mo用于基本类型int
%lo或%mlo用于长整型long

  • 十六进制形式

说明符说明数据类型
%x或%mx用于基本类型int
%lx或%mlx用于长整型long

m表示输出整型数据所占总宽度(即列数),其中:

① 当实际数据的位数不到m位时,数据前面将用空格填满;

② 若实际数据位大于m,则以数据的实际位数为准进行输出。

一个int型整数也可以用%u输出,反之一个unsigned型整数也可以用%d、%o、%x格式输出。按相互赋值的规则处理。

字符型格式说明符
  • 字符char型

说明符说明举例
%c或%mc输出的字符占m列printf("%3c\n",'a')
  • 字符串型

说明符说明
%ms输出的字符串占m列。若串长>m,全部输出,反之,在串前补空格(正前)
%-ms输出的字符串占m列。若串长>m,全部输出,反之,在串前补空格(负后)
%m.ns输出的字符串占m列。只取字符串前n个字符,不足部分串前补空格(正前)
%-m.ns输出的字符串占m列。只取字符串前n个字符,不足部分串后补空格(负后)

一个整数,只要其值在0~255范围内,也可以用%c格式使其按字符形式输出。

在这个输出前,系统会自动将该整数作为ASCII转换成相应的字符;反之,一个字符也可以输出成一个整数。

实型格式说明符
  • 十进制形式:%m.nf或%-m.nf

  • 指数形式:%m.ne或%-m.ne

  • %g或%G形式:根据数值的大小,自动选择%f或%e中宽度较短的一种格式,不输出无意义的0

  1. 在输出实型数据时,格式说明符中的m表示整个数据所占的列宽,n表示小数点后面所占的位数。

  2. 如果在小数点后取n位后,所规定的数据宽度m不够输出数据前面的整数部分(包括小数点),则按实际的位数进行输出。

  3. 在C语言中,用于输出单精度实型数据与双精度实型数据格式说明符是一样的。

案例
  • 要求:输出实数时,指定小数位

  • 代码:

 #include "stdio.h"
 main()
 {
     double x=34.567;
     printf("x=%f\n",x);// 34.567000
     printf("x=%d\n",x);// 34,这种写法错误,自动类型转换异常
     printf("x=%d\n",(int)x);// 34
 }

案例

要求:设有如下C程序

代码

这个程序的实际运⾏结果为

x=34.567000

x=27263

x=34

说明

显然,这个程序中的第⼆个格式输出语句输出的结果是错误的,这是因为在第二个格式输出语句中,格式说明符%d是基本整型格式说明符,而输出项目是双精度型的数据,它们是不匹配的。

输入数据格式的控制
整型格式说明符
  • 十进制形式

说明符说明数据类型
%d或%md用于基本整型Int
%ld或%mld用于长整型long
%u或%mu用于无符号的基本整型unsigned
%lu或%mlu用于无符号长整型unsigned long

  • 八进制形式

说明符说明数据类型
%o或%mo用于基本类型int
%lo或%mlo用于长整型long

  • 十六进制形式

说明符说明数据类型
%x或%mx用于基本类型int
%lx或%mlx用于长整型long

可⻅:

① ⽤于输⼊与输出整型数据的格式说明符是完全⼀致的。

② m表⽰输⼊数据时的宽度(列数)

③ 与输出情形⼀样,对于⼋进制与⼗六进制的输⼊格式,主要⽤于输⼊⽆符号的整型数据。

实型格式说明符

单精度实型:%f或者%e

双精度实型:%lf

※ 可⻅:

(1)与输出不同,输⼊时⽆论是单精度还是双精度实型,都不能⽤m.n来指定输出的宽度和⼩数点后的

位数;

(2)可以指定输⼊数据所占的列数,系统⾃动按它截取所需数据,如:scanf("%3d%3d",&a,&b); 当输⼊

1234567时,a得到123,b得到456,多余的7⽆⽤;

(3)若在%号后有⼀个 * 和⼀个数字,表⽰跳过它指定的列数,如: scanf("%2d%*3d%3d",&a,&b); 当输

⼊12345678时,a得到12, %*3d表⽰读⼊345这3个数但不赋给变量, b得到678。

 int a,b;
 scanf("%3d%3d",&a,&b);
 // 1234567
  • 当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入数据时分为以下两种情况:

① 如果各格式说明符之间没有其它字符,则在输入数据时,两个数据 之间用"空格"、或"Tab"、或"回车"来分隔。

② 如果各格式说明符之间包含其它字符,则在输入数据时,应输入与这些字符相同的字符作为间隔。

例如,设有如下说明

int a,b;

float c,d;

现要利用格式输入函数输入a=12,b=78,c=12.5,d=7.6。 采用不同的格式说明,其输入数据的形式也是不同的。分别说明如下:

  • 若输入语句为 scanf(“%d%d%f%f”,&a,&b,&c,&d); (即格式说明符中没有宽度说明,各格式说明符之间也没有其他字符。)

    则输入数据的形式应为 12 78 12.5 7.6↲ (两个数据之间用空格来分隔,当然也可用“Tab”或“回车”来分隔。)

  • 若输入语句为 scanf(“%d,%d,%f,%f”,&a,&b,&c,&d);(格式说明符中没有宽度说明,但各格式说明符之间有其它字符,即逗号)

    则输入数据的形式应为 12,78,12.5,7.6↲ (即在输入的两个数据之间同时要输入逗号。)

  • 若输⼊语句 scanf("a=%d,b=%d,c=%f,d=%f",&a,&b,&c,&d);(即格式说明符中没有宽度说明,但各格式说明符之间有其它字符。)

    输⼊数据的形式应为 a=12,b=78,c=12.5,d=7.6↲ (即在输⼊的两个数据之间同时要输⼊这些⾮格

    式说明符的字符。)

  • 在⽤于输⼊的实型格式说明符中不能⽤m.n来指定输⼊的宽度和⼩数点后的位数(这是与输出的不同之处)。

例如: scanf("%7.2f",&a); × 此用法是错误的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

旋转图像(java)

题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 代码思路&#xff1a; class Solution {public void ro…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…

【R语言管理】Pycharm配置R语言及使用Anaconda管理R语言虚拟环境

目录 使用Anaconda创建R语言虚拟环境1. 安装Anaconda2. 创建R语言虚拟环境 Pycharm配置R语言1. 安装Pycharm2. R Language for IntelliJ插件 参考 使用Anaconda创建R语言虚拟环境 1. 安装Anaconda Anaconda的安装可参见另一博客-【Python环境管理工具】Anaconda安装及使用教程…

C语言进程编程

getpid函数&#xff1a; 原型&#xff1a;pid_t getpid(void) 特性&#xff1a;返回值是PID值 用途&#xff1a;获取当前进程PID 用法例 #include<stdio.h> #include <sys/types.h> #include<unistd.h> int main() {pid_t pid;pid getpid();printf(&qu…

SpringMVC |(一)SpringMVC概述

文章目录 &#x1f4da;SpringMVC概述&#x1f407;三层架构&#x1f407;异步调用 &#x1f4da;SpringMVC入门案例&#x1f407;入门案例&#x1f407;注意事项 &#x1f4da;小结 学习来源&#xff1a;黑马程序员SSM框架教程_SpringSpringMVCMaven高级SpringBootMyBatisPlus…

Android 桌面窗口新功能推进,聊一聊 Android 桌面化的未来

Android 桌面化支持可以说是 Android 15 里被多次提及的 new features&#xff0c;例如在 Android 15 QPR1 Beta 2 里就提到为 Pixel 平板引入了桌面窗口支持&#xff0c;桌面窗口允许用户在自由窗口同时运行多个应用&#xff0c;同时可以像在传统 PC 平台上一样调整这些窗口的…

Vue+Vite 组件开发的环境准备(零基础搭建)

一、什么是Vite Vue3作为一款现代化的JavaScript框架&#xff0c;配合Vite这样的构建工具&#xff0c;极大地简化了流程&#xff0c;提升了效率。Vite 是一个基于现代浏览器原生的 ES 模块系统&#xff0c;能够以原生模块导入的方式运行源代码的开发服务器。它被设计用来替代传…

linux高级系统编程之进程

进程 一个正在进行的程序 并行与并发 并行:执行的程序在不同CPU上同时执行 并发:一个CPU,多个进程交替执行,因为交替速度很快,所以从宏观上来看是同时执行的,但是从围观的角度是交替执行的 单道与多道 单道程序设计:所有进程一个一个排队执行,若A阻塞,B只能等待,,即使CPU处于空…

git 命令之只提交文件的部分更改

git 命令之只提交文件的部分更改 有时&#xff0c;我们在一个文件中进行了多个更改&#xff0c;但只想提交其中的一部分更改。这时可以使用 使用 git add -p 命令 Git add -p命令允许我们选择并添加文件中的特定更改。它将会显示一个交互式界面&#xff0c;显示出文件中的每个更…

Excel中根据某列内容拆分为工作簿

简介&#xff1a;根据A列的内容进行筛选&#xff0c;将筛选出来的数据生成一个新的工作簿(可以放到指定文件夹下)&#xff0c;且工作簿名为筛选内容。 举例&#xff1a; 将上面的内容使用VBA会在当前test1下生成5个工作簿&#xff0c;工作簿名分别为TEST1.xls TEST2.xls TEST3…

数据结构 (10)队列

前言 队列是一种特殊的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。 一、定义与基本概念 定义&#xff1a;队列是一种只允许在一端&#xff08;队尾&#xff09;进行插入操作&#xff0c;而在另一端&#xff08;队头…

Tomcat10部署Servlet加载错误问题解决

Servlet加载错误&#xff1a;HelloServlet不是Servlet 环境信息&#xff1a;IDEA中的maven项目&#xff0c;tomcat10.1.33 问题信息&#xff1a;XXX.Servlet不是Servlet 问题原因&#xff1a;tomcat10将JavaEE也换成了Jakarta EE&#xff1b; Jakarta EE较以前的JavaEE有一个重…

2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

百度智能云发布首个空间智能解决方案,百度AI优势如何分析?

首先&#xff0c;百度智能云此次推出的空间智能解决方案&#xff0c;在技术底座上展现了其强大的AI异构计算能力。百度百舸AI异构计算平台作为该方案的底层支撑&#xff0c;为2D和3D应用中的人物、物件及场景生成提供了强大的算力支持。这一平台的推出&#xff0c;不仅提升了空…

RTSP摄像头、播放器为什么需要支持H.265?

H.264还是H.265&#xff1f; 好多开发者在做选RTSP播放器的时候&#xff0c;经常问我们的问题是&#xff0c;用H.264好还是H.265好&#xff1f;本文我们就H.264 和 H.265的主要区别和适用场景&#xff0c;做个大概的交流。 一、压缩效率 H.265 更高的压缩比 H.265 在相同视频…

BGP协议路由黑洞

一、实验环境 1、分公司与运营商AS自治系统内运行IGP路由协议OSPF、RIP或静态路由&#xff0c;AS自治系统内通过IBGP路由协议建立BGP邻居关系。 2、公司AS自治系统与运营商AS自治系统间运行EBGP路由协议。 3、通过loopback建立IBGP与EBGP邻居关系&#xff0c;发挥loopback建立…

解决数据传送问题:内网http传输

在服务器上启http服务 在服务器上输入命令&#xff1a; python3 -m http.server 1234 回车启动 访问和下载方法&#xff1a; 然后可以在本地的浏览器上访问&#xff1a;服务器IP:1234 例如192.11.1.1:1234&#xff0c;然后就可以下载对应文件夹下的东西了 在本地上启htt…

飞塔防火墙只允许国内IP访问

飞塔防火墙只允许国内IP访问 方法1 新增地址对象&#xff0c;注意里面已经细分为中国内地、中国香港、中国澳门和中国台湾 方法2 手动新增国内IP的对象组&#xff0c;目前好像一共有8632个&#xff0c;每个对象最多支持600个IP段

《Learn Three.js》学习(3)光源

前言&#xff1a; WebGL本身不支持光源&#xff0c;不使用three.js,则需使用着色程序来模拟光源。 学习大纲&#xff1a; Three.js中的光源 特定光源的使用时机 如何调整和配置所有光源的行为 如何创建镜头光晕 光源表 基础光源&#xff1a;THRER.AmbientLight、THERE.Point…

Linux——基础命令(2) 文件内容操作

目录 ​编辑 文件内容操作 1.Vim &#xff08;1&#xff09;移动光标 &#xff08;2&#xff09;复制 &#xff08;3&#xff09;剪切 &#xff08;4&#xff09;删除 &#xff08;5&#xff09;粘贴 &#xff08;6&#xff09;替换,撤销,查找 &#xff08;7&#xff…