嵌入式初学-C语言-五

C语言语句概述

C语句的分类

⑴ 控制语句  用于完成一定的控制功能

     ① if (   ) …… else ……

     ② for (   ) ……

     ③ while (   ) ……

     ④ do …… while (   )

     ⑤ continue

     ⑥ break

     ⑦ switch (   )

     ⑧ return

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

     说明:“(   ) ”中是一个判断条件, “……”表示内嵌的语句。

⑵ 函数调用语句   由一个函数调用加一个分号构成,

例如:

      printf(“This is a C statement.”);

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

      a=3       是一个表达式     

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

⑷ 空语句  只有一个分号,什么都不做,例如:

      ;

⑸ 复合语句   用“{……}”括起来的若干个语句,例如:

      { z=x+y;

         t=z/100;

         printf(“%f”,t);

       }

一般形式为 : {语句部分;}

数据输入输出的概念及在C语言中的实现

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

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

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

 在C语言中,输入与输出是用标准库函数中的输入、输出函数实现的

库函数已编译成目标文件,在链接时与编译源程序得到的目标文件(.obj)相连接,生成可执行程序。

注意:在使用系统库函数时,要用预编译命令#include将有关的头文件包含到用户源文件中(即在程序的开头)头文件中包含了调用函数时所需的有关信息。

简单的格式输入与输出

用简单的printf函数输出数据

1. printf函数的一般格式

printf ("格式控制",输出表列) ;

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

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

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

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

⑶ 例如:        printf("a=%d  b=%f\n",a,b) ;

2. 基本的格式字符

        %d:按十进制整形数据的实际长度输出

        %c:仅输出一个字符

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

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

        %e或%E:一指数形式输出一个实数(含单双精度数)小数点前仅1位非0数字,并输出六位小数

用简单的scanf函数输入数据

1. scanf函数的一般格式

scanf(“格式控制”,地址表列);

作用:

        将从键盘输入的值存入内存中所占的存储单元里面。储存单元由地址标示。

说明:

        “格式控制”的含义同printf函数,说明输入的数据应使用的格式。

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

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

说明

        scanf函数中的“格式控制”后面应当是变量的地址,由取地址运算符和变量名共同组成,不能仅是变量名:

      scanf("%f%d", &a,&b); 

        如果“格式控制”中除了格式说明以外还有其它字符,则在输入数据时必须在对应位置输入与之相同的字符:

      scanf("%d,%d", &a,&b);

     从键盘输入时必须输逗号:  3,4 ↲

        ⑶ 用%c格式输入字符时,空格和转义字符都作为有效字符输入,应注意:scanf("%c%c%c", &a,&b,&c); 只有输入:xyz (回车)才能使a得到xb得到yc得到z

        ⑷ 在输入数值型数据时,遇到空格、回车、Tab键或遇非法输入,则认为该数据结束:

      scanf("%d%c%f", &a,&b,&c);

      若输入:1234a123o.26    o为非法字符则会输出: a:1234     b:a     c:123

        ⑸ 对于unsigned型变量所需的数据,可以用%u%d格式输入。

较复杂的输入输出格式控制

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

 1.输出数据格式控制

        1 整型格式说明符

十进制形式

        %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格式输出。按相互赋值的规则处理。

    2.字符型格式说明

字符char型

%mc  输出的字符占m列,如:

printf(“%3c”,’a’); 

实际输出为:空格 空格 a

字符串

        %ms  输出的字符串占m列。若串长>m,全部输出;若串长<m,左面补空格。

        %-ms  输出的字符串长<m,右面补空格

        %-m.ns  只取字符串前n个字符。若n<m,右面补空格;若n>m,m自动取n值。

 

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

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

     3.实型格式说明符

十进制数形式:    %m.nf或%-m.nf

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

%g或%G形式:       根据数值的大小,自动选%f 或 %e中宽度较短的一种格式,

                              不输出无意义的0。

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

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

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

例如:

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

 编译结果如下:

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

输入数据格式控制

  整型格式说明

十进制形式

        %d 或 %md      用于一般整型

        %ld 或 %mld     用于长整型

        %u 或 %mu       用于无符号基本整型

        %lu 或 %mlu     用于无符号长整型

八进制形式

        %o 或 %mo       用于一般整型

        %lo 或 %mlo      用于长整型

十六进制形式

        %x 或 %mx        用于一般整型

        %lx 或 %mlx     用于长整型

可见:用于输入与输出整型数据的格式说明符是完全一样的。  m表示输入数据时的宽度(即列数)。与输出情形一样,对于八进制形式与十六进制形式的输入格式,主要用于输入无符号整型的数据。

实型格式说明符

单精度实型: %f或%e

双精度实型: %if

与输出不同,输入时无论是单精度还是双精度实型,都不能用m.n来指定输出的宽度和小数点后的位数;

可以指定输入数据所占的列数,系统自动按它截取所需数据,如:scanf(“%3d%3d”,&a,&b); 当输入1234567时,a得到123,b得到456,多余的7无用;

若在%号后有一个“*”和一个数字,表示跳过它指定的列数,如:scanf(“%2d%*3d%3d”,&a,&b);当输入12345678时,a得到12, %*3d表示读入345这3个数但不赋给变量, b得到678。

当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入数据时分为以下两种情况:

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

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

   若输入语句为   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);× 此用法是错误的

为了便于程序执行过程中从键盘输入数据,在一个C程序开始执行时,  系统就在计算机内存中开辟了一个输入缓冲区,用于暂存从键盘输入的数据。开始时该输入缓冲区是空的。当执行到一个输入函数时,就检查输入缓冲区中是否有数据:

        如果输入缓冲区中已经有数据(上一个输入函数剩下的),则依次按照“格式控制”中的格式说明符从输入缓冲区中取出数据转换成计算机中的表示形式(二进制),最后存放到内存地址表中指出的对应地址中。

顺序结构

含义:程序中所有语句都是按自上而下的顺序执行的,不发生跳转

例题:

从键盘输入一个大写字母,要求用小写输出。

分析:

        大写字母与小写字母的ASCII码值相差32。

        对从键盘输入的大写字母加32即变为相应的小写字母。

程序如下:

#include <stdio.h>
void  main()
{ char c1,c2;scanf(“%c”,&c1);printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);
}

输入:A

运行结果: A,56         a,97;

小结

一个具有良好结构的程序均是由以下三种基本结构组成的:

①顺序结构      ②选择结构       ③循环结构

由这三种结构组成的程序:结构合理、思路清晰、容易理解、便于维护

●  C语言中语句使计算机执行特定的操作,所以称执行语句;

●  对变量的定义是为了在编译时给变量指定类型、分配空间;

●   “表达式+分号”构成语句。“赋值表达式+分号”构成赋值语句;  

●   赋值时应注意赋值号两边的类型应该兼容,以免丢失数据;

●   数据的输入输出靠调用函数实现,熟练掌握scanf和printf函数;

●  格式控制、格式说明%d、格式字符d,f,u,c,s,i,e,g、格式修饰符%3d, %7.2f, %-10.3f。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux第一个小程序~~~进度条

1.操作过程 我们这个是实现一个进度条的程序&#xff0c;类似于下面的这个样子&#xff0c;但是效果肯定没有下面这个高级哈 我们的实现效果是这个样子的&#xff08;动态的哈&#xff09;&#xff1a; 我们这个需要去进行一个文件系统的搭建&#xff0c;类似于我们进行这个C语…

奇异值分解(SVD)时间复杂度分析与优化

奇异值分解是一种矩阵分解的方法&#xff0c;大学线性代数里面也讲过奇异值分解的方法&#xff0c;因此这是一个为大家所熟知的算法。 1 SVD 时间复杂度分析 给定一个 m n m \times n mn 的矩阵 a \boldsymbol{a} a&#xff0c;按照下面公式做分解&#xff0c;其中 Σ \S…

Cmake生成的Xcode工程相对路径与绝对路径的问题

Cmake生成的Xcode工程相对路径与绝对路径的问题 文章目录 Cmake生成的Xcode工程相对路径与绝对路径的问题前言修改.pbxproj文件验证工程小结 前言 由于Cmake的跨平台的自动化构建的方便性以及他广泛应用于编译过程的管理&#xff0c;在开发过程中难免用到Cmake。我也使用Cmake…

R语言统计分析——控制流

参考资料&#xff1a;R语言实战【第2版】 语句&#xff08;statement&#xff09;是一条单独的R语言或一组复合语言&#xff08;包含在花括号{}中的一组R语言&#xff0c;使用分号分隔&#xff09; 条件&#xff08;cond&#xff09;是一条最终被解析为真&#xff08;TRUE&…

每天一个设计模式之职责链模式(第一天)

特别感谢刘伟老师&#xff0c;看他的书我学到了很多东西&#xff0c;从今天开始我要开始更新啦&#xff01; 在csdn个人博客来总结知识&#xff0c;把他们变成自己的能力。 对三&#xff0c;要不起&#xff0c;张三李四王五几个人在玩斗地主&#xff0c;过过过&#xff0c;一…

Android 应用内下载 APK Demo(Kotlin语言)

应用内下载更新包 包含&#xff1a; 权限检测、通知栏生成进度、实时进度反馈、下载完成自动安装、通知栏点击安装 效果 代码 第三方依赖&#xff08;仅仅主要提供上下文对象Context&#xff09;&#xff1a; implementation com.blankj:utilcodex:1.30.6下载工具类&#x…

【Python】python员工信息管理系统(数据库版本)(GUI界面+数据库文件+源码)【独一无二】

在这里插入图片描述> &#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff…

爬虫提速!用Python实现多线程下载器!

✨ 内容&#xff1a; 在网络应用中&#xff0c;下载速度往往是用户体验的关键。多线程下载可以显著提升下载速度&#xff0c;通过将一个文件分成多个部分并行下载&#xff0c;可以更高效地利用带宽资源。今天&#xff0c;我们将通过一个实际案例&#xff0c;学习如何用Python实…

2024年软件系统与信息处理国际会议(ICSSIP 2024)即将召开!

2024年软件系统与信息处理国际会议&#xff08;ICSSIP 2024&#xff09;将于2024年10月25-27日在中国昆明举行。引领技术前沿&#xff0c;共谋创新未来。ICSSIP 2024将汇聚来自世界各地的专家学者&#xff0c;他们将在会上分享最新的研究成果、技术突破及实践经验。会议议题涵盖…

昇思25天学习打卡营第1天|快速入门-实现一个简单的深度学习模型

目录 实验环境 Jupyter云上开发环境使用 导包 处理数据集 网络构建 模型训练 评估模型性能 保存模型 加载模型 预测推理 实验环境 02-快速入门.ipynb (4) - JupyterLab (mindspore.cn) 规格&#xff1a;4u 16G 20G 镜像&#xff1a;py39-ms2.3.0rc1 特性&#xff1…

【计算机网络】IP分片实验

一&#xff1a;实验目的 1&#xff1a;理解IP数据报分片的工作原理。 2&#xff1a;理解IP协议报文类型和格式。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS-C服务器、网线、Windows 2019/2003操作系统的计算机等。 软件&#xff1a;记事本、WireShark、Chrom…

Pc端vue2实现横向纵向鼠标滚动布局

类似uniaapp中的scroll-view组件,可横向可竖向,样式需要自己跳整一下 横向:(鼠标按下滑动里面的元素,可滑动,滚动条和左右都可以调整) 纵向: 代码实现:主页面引入组件 <template><div><!-- 调用组件 --><!-- vertical 垂直 写宽高 例如: widt…

失业潮下,有人靠天工AI做副业年入10万?

前言 你好&#xff0c;我是咪咪酱 这篇文章总结2个AI副业项目&#xff0c;不用写代码&#xff0c;就能做的2个副业项目。 第一&#xff1a;AI生成微信表情包&#xff0c;上传到微信表情包平台等&#xff0c;坚持下去&#xff0c;会有可观的收入。 第二&#xff1a;AI生成连载…

MQ消息队列+Lua 脚本实现异步处理下单流程

具体实现和代码可参考我以前做过的笔记&#xff1a;《黑马点评》异步秒杀优化|消息队列 回顾一下下单流程&#xff1a; 用户发起请求 会先请求Nginx,Nginx反向代理到Tomcat&#xff0c;而Tomcat中的程序&#xff0c;会进行串行工作&#xff0c; 分为以下几个操作&#xff1…

KamaCoder 98. 所有可到达路径 + LC 797. All Paths From Source to Target

题目要求 给定一个有 n 个节点的有向无环图&#xff0c;节点编号从 1 到 n。请编写一个函数&#xff0c;找出并返回所有从节点 1 到节点 n 的路径。每条路径应以节点编号的列表形式表示。 输入描述 第一行包含两个整数 N&#xff0c;M&#xff0c;表示图中拥有 N 个节点&…

Apache Nifi挂接MQTT与Kafka实践

目录 1. 说明&#xff1a; 2. 方案设计&#xff1a; 2.1 资源配置&#xff1a; 2.2 交互Topics: 3. 实现步骤 3.1 Nifi 桌面 3.2 MqttToKafka 3.2.1 配置 3.2.2 测试 3.2.3 结果 3.3 KafkaToMqtt 3.3.1 配置 3.3.1 测试 3.3.1 结果 ​编辑 4. 总结&#xff…

HAL STM32 SPI/ABZ/PWM方式读取MT6816磁编码器数据

HAL STM32 SPI/ABZ/PWM方式读取MT6816磁编码器数据 &#x1f4da;MT6816相关资料&#xff08;来自商家的相关资料&#xff09;&#xff1a; 资料&#xff1a;https://pan.baidu.com/s/1CAbdLBRi2dmL4D7cFve1XA?pwd8888 提取码&#xff1a;8888&#x1f4cd;驱动代码编写&…

计科录取75人!常州大学计算机考研考情分析!

常州大学&#xff08;Changzhou University&#xff09;&#xff0c;简称“常大”&#xff0c;位于江苏省常州市&#xff0c;是江苏省人民政府与中国石油天然气集团有限公司、中国石油化工集团有限公司及中国海洋石油集团有限公司共建的省属全日制本科院校&#xff0c;为全国深…

repo中的default.xml文件project name为什么一样?

文章目录 default.xml文件介绍为什么 name 是一样的&#xff0c;path 不一样&#xff1f;总结 default.xml文件介绍 在 repo 工具的 default.xml 文件中&#xff0c;定义了多个 project 元素&#xff0c;每个元素都代表一个 Git 仓库。 XML 定义了多个不同的 project 元素&…

Vue常用指令及其生命周期

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 目录 1.常用指令 1.1 v-bind 1.2 v-model 注意事项 1.3 v-on 注意事项 1.4 v-if / v-else-if / v-else 1.5 v-show 1.6 v-for 无索引 有索引 生命周期 定义 流程 1.常用指令 Vue当中的指令…