【谭浩强C程序设计精讲 7】数据的输入输出

文章目录

    • 3.5 数据的输入输出
      • 3.5.1 输入输出举例
      • 3.5.2 有关数据输入输出的概念
      • 3.5.3 用 printf 函数输出数据
        • 1. printf 的一般格式
        • 2. 格式字符
      • 3.5.4 用 scanf 函数输入数据
        • 1. scanf 函数的一般形式
        • 2. scanf 函数中的格式声明
        • 3. 使用 scanf 函数时应注意的问题
      • 3.5.5 字符输入输出函数
        • 1. 用 putchar 函数输出一个字符
        • 2. 用 getchar 函数输入一个字符

3.5 数据的输入输出

3.5.1 输入输出举例

首先介绍一个含有输入函数 scanf 和输出函数 printf 的示例。

  • 功能要求:求 a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0 方程的根。 a , b , c a,b,c a,b,c 由键盘输入。
  • 解题思路:首先要知道求方程式的根的方法。由数学知识已知:如果 b 2 − 4 a c ≥ 0 b^2-4ac\geq0 b24ac0,则一元二次方程有两个实根:
    x 1 = − b + b 2 − 4 a c 2 a , x 2 = − b − b 2 − 4 a c 2 a x_1=\frac{-b+\sqrt{b^2-4ac}}{2a}, x_2=\frac{-b-\sqrt{b^2-4ac}}{2a} x1=2ab+b24ac ,x2=2abb24ac
    可以将上面的分式分成两项:
    p = − b 2 a , q = b 2 − 4 a c 2 a p=\frac{-b}{2a},q=\frac{\sqrt{b^2-4ac}}{2a} p=2ab,q=2ab24ac


x 1 = p + q , x 2 = p − q x1=p+q,x2=p-q x1=p+q,x2=pq

有了以上公式,只要知道 a , b , c a,b,c a,b,c 的值,就能顺利地求出方程的两个根。

#include <stdio.h>
#include <math.h>   //程序中用到求平方根函数sqrt
int main(void)
{double a,b,c,disc,x1,x2,p,q;    //disc用来存放判别式(b*b-4*a*c)的值printf("请输入a,b,c的值:");scanf("%lf%lf%lf",&a,&b,&c);    //输入双精度型变量的值要用格式声明“%lf”,输入变量前面要加取地址符&disc=b*b-4*a*c;                 //求判别式的值while(disc<0)                   //判断输入的a,b,c值是否符合判别式大于等于0的要求{printf("输入的a,b,c的值不符合要求,请重新输入:");scanf("%lf%lf%lf",&a,&b,&c); disc=b*b-4*a*c;             //重新求判别式的值}p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;                 //求出方程的两个根printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);   //“%7.2”表示整数部分占用7列,小数部分保留两位有效数字,且第三位小数按四舍五入。return 0;
}

测试结果1:
在这里插入图片描述

测试结果2:
在这里插入图片描述

3.5.2 有关数据输入输出的概念


  • 输入输出是以计算机主机为主体而言的。
  • 输出:从计算机向输出设备(如显示器、打印机等)输出数据称为输出。
  • 输入:从输入设备(如键盘、光盘、扫描仪等)向计算机输入数据称为输入。

  • C语言本身不提供输入输出语句,输入和输出操作是由C标准函数库中的函数来实现的。

  • C语言函数库中有一批标准的输入输出函数,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。其中有:

    函数名说明函数名说明函数名说明
    putchar输出字符printf格式输出puts输出字符串
    getchar输入字符scanf格式输入gets输入字符串

  • 要在程序文件的开头用预处理指令#include把有关头文件放在本程序中。
    如:
    #include <stdio.h>      //如果程序调用标准输入输出函数,必须包含该头文件
    #include <math.h>       //如果程序中用到标准数学库函数,必须包含该头文件
    

    需要说明的是:如果包含的头文件在C编译系统的子目录下使用#include <xxx.h>形式;如果包含的头文件在用户的当前目录(一般是用户存放源程序文件的子目录)中,则按#include "xxx.h"形式。


3.5.3 用 printf 函数输出数据

1. printf 的一般格式

printf 函数的一般形式:
printf(格式控制,输出表列)
例如:

printf("%d,%c\n",i,c);
  • “格式控制” 是用双撇号括起来的一个字符串,称为格式控制字符串,简称格式字符串。它包括两个信息:
    格式声明:由 “%”格式字符组成,如 %d、%f 等。

    它的作用是将输出的数据转换为指定的格式后输出。

    普通字符:需要在输出时原样输出的字符。如 逗号、空格、换行符或其他字符。

  • 输出表列:是程序需要输出的一些数据,可以是常量、变量或表达式


printf函数的一般形式也可以表示为:
printf(参数1, 参数2, 参数3, …, 参数n)

  • 参数1是格式控制字符串,参数2~参数n是需要输出的数据。
  • 执行 printf 时,参数2~参数n按参数1所指定的格式进行输出。
  • 参数1是必须有的,参数2~参数n是可选的。

2. 格式字符
表3.6 printf 函数中用到的格式字符
格式字符说明
d, i以带符号的十进制形式输出整数(正数不输出符号)
o以八进制无符号形式输出整数(不输出前导符0)
x, X以十六进制无符号形式输出整数(不输出前导符0x),用 x 则输出十六进制数的 a~f 时以小写形式输出,用 X 时,则以大写字母输出。
u以无符号十进制形式输出整数
c以字符形式输出,只输出一个字符
s输出字符串
f以小数形式输出单、双精度数,隐含输出6位小数
e, E以指数形式输出实数,用 e 时指数以 “e” 表示(如1.2e+02),用 E 时指数以 “E” 表示(如1.2E+02)
g, G选用 %f 或 %e 格式中输出宽度较短的一种格式,不输出无意义的0。用 G 时,若以指数形式输出,则指数以大写表示
表3.7 printf 函数中用到的格式附加字符
格式字符说明
l长整型数,可加在格式符 d、o、x、u前面
m(代表一个正整数)数据最小宽度
n(代表一个正整数)对实数,表示输出 n 位小数;对字符串,表示截取的字符个数
-(负号)输出的数字或字符在域内向左靠

以下将举例说明:
【例1】d格式符

printf("%5d\n%5d\n",12,-345);//%5d指定输出数据的位宽

运行结果:
在这里插入图片描述
说明:12前面有3个空格;-345前面有1个空格。

【例2】ld,lld格式符

#include <stdio.h>
int main()
{long i=123456;long long j=1234567890;printf("%ld\n%lld\n",i,j);//长整型用%ld打印,长长整型用%lld打印return 0;
}

运行结果:
在这里插入图片描述

【例3】c格式符

#include <stdio.h>
int main()
{char ch='a';printf("未指定位宽:%c\n",ch);printf("  指定位宽:%5c\n",ch);return 0;
}

运行结果:
在这里插入图片描述

说明:指定位宽的a前面有4个空格。

【例4】c格式符

#include <stdio.h>
int main()
{  short a=121;//定义一个值范围在0~127范围的整数,也可以用%c打印是字符yshort b=377;//若值超过127,再用%c打印,则把最后一个字节的信息按字符形式输出printf("%c\n%c\n",a,b);//377的最后一个字节数值也是121return 0;
}

运行结果:
在这里插入图片描述

【例5】s格式符

printf("%s\n","CHINA");

运行结果:
在这里插入图片描述

【例6】f格式符
(1)基本型,%f,系统默认,整数部分全部输出,小数部分输出6位;
(2)指定数据宽度和小数位数,用 %m.nf,数据总的宽度为m,其中小数占列宽为n。

#include <stdio.h>
int main()
{  double a=1.0;printf("%f\n",a/3);//系统一般默认:整数部分全部输出,小数部分输出6位printf("%20.15f\n",a/3);//数据总的宽度为20,其中小数占列宽为15return 0;
}

在这里插入图片描述

说明:0前面有3个空格,为什么?可以在评论区讨论(标注:讨论1)。

【例7】float 型数据的有效位数

#include <stdio.h>
int main(void)
{float a;a=10000/3.0;printf("%f\n",a);return 0;
}

运行结果:
在这里插入图片描述

结果说明:因为float型数据只能保证6~7位有效数字,因此,虽然程序输出了6位小数,但从左边数第7位数字(即第3位小数)以后的数字并不保证是绝对正确的。

【例8】将例7中的a改成double

#include <stdio.h>
int main(void)
{double a;a=10000/3.0;printf("%f\n",a);return 0;
}

运行结果:
在这里插入图片描述

【例9】输出的数据向左对齐,用%-m.nf。

#include <stdio.h>
int main(void)
{double a;a=10000/3.0;printf("%-25.15f\n%25.15f\n",a,a);return 0;
}

运行结果:
在这里插入图片描述

【例10】e 格式符

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

运行结果:
在这里插入图片描述

【例11】i 格式符。作用与d格式符相同,一般用d少用i。

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

运行结果:
在这里插入图片描述

【例12】o 格式符。以八进制整数形式输出。

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

运行结果:
在这里插入图片描述

结果说明:-1在内存中是按补码形式存放4个字节的(1111 1111 1111 1111),因此%o按内存单元实际的二进制按3位一组(从右向左)构成八进制数形式。

【例13】x 格式符。十六进制整数形式输出。

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

运行结果:
在这里插入图片描述

【例14】u 格式符。用来输出无符号型数据,以十进制形式输出。

#include <stdio.h>
int main(void)
{unsigned int a=10;int b=-10;printf("%d\t%u\n",a,a);  printf("%d\t%u\n",b,b);  return 0;
}

运行结果:
在这里插入图片描述

【例15】g 格式符。用来输出浮点数,系统自动选择f和e格式输出中长度短的那个。

#include <stdio.h>
int main(void)
{double a=12345678954321;printf("%f\n%e\n%g\n",a,a,a);   return 0;
}

运行结果:
在这里插入图片描述

【例16】普通字符原样输出,%字符输出。

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

运行结果:
在这里插入图片描述

3.5.4 用 scanf 函数输入数据

1. scanf 函数的一般形式
  • scanf(格式控制,地址表列)
  • “格式控制”的含义同printf。
  • “地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址
2. scanf 函数中的格式声明
  • 以 % 开始,以一个格式字符结束,中间可以插入附加的字符。
    scanf("a=%f,b=%f,c=%f",&a,&b,&c);
    
表3.8 scanf 函数中用到的格式字符
格式字符说明
d, i输入有符号的十进制整数
u输入无符号的十进制整数
o输入无符号的八进制整数
x, X输入无符号的十六进制整数(大小写作用相同)
c输入单个字符
s输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志 ‘\0’ 作为其最后一个字符
f输入实数,可以用小数形式或指数形式输入
e,E,g,G与 f 作用相同,e 与 f、g 可以互相替换(大小写作用相同)
表3.9 scanf 函数中用到的格式附加字符
格式字符说明
l输入长整型数据(可用%ld,%lo,%lx,%lu)以及 double 型数据(%lf或%le)
h输入短整型数据(可用%hd,%ho,%hx)
域宽指定输入数据所占宽度(列数),域宽应为正数
*本输入项在读后不赋给相应的变量
3. 使用 scanf 函数时应注意的问题

(1)scanf 函数中的格式控制后面应当是变量地址,而不是变量名。

scanf("%f%f%f",a,b,c);      //错误
scanf("%f%f%f",&a,&b,&c);   //正确

(2)如果在格式控制字符串中除了格式声明以外,还有其他字符,则在输入数据时在对应的位置上输入与这些字符相同的字符。

#include <stdio.h>
int main()
{  float a,b,c;scanf("a=%f,b=%f,c=%f",&a,&b,&c);printf("%f\t%f\t%f\n",a,b,c);return 0;
}

运行结果:
在这里插入图片描述

结果说明:在输入时必须按照原字符原样输入,比如控制字符串中有逗号,如果不输入逗号改成空格是错误的,输入结束后回车。

(3)在用 “%c” 格式声明输入字符时,空格字符和“转义字符”中的字符都作为有效字符输入。

#include <stdio.h>
int main()
{  char c1,c2,c3;scanf("%c%c%c",&c1,&c2,&c3);printf("%c\t%c\t%c\n",c1,c2,c3);return 0;
}

测试结果1:
在这里插入图片描述

测试结果2:
在这里插入图片描述

(4)在输入数值数据时,如输入空格、回车、Tab键或遇非法字符(不属于数值的字符)认为该数据结束。

#include <stdio.h>
int main()
{  int a;char b;float c;scanf("%d%c%f",&a,&b,&c);printf("%d\t%c\t%f\n",a,b,c);return 0;
}

运行结果:
在这里插入图片描述

结果说明:第一个要求输入的是整型数值,输入1234后面输入了一个非数值字符a,则第一个整型变量值就为1234了。因为第2个要求输入一个字符,所以输入的字符a即为第2个字符型变量的值。第3个要求输入浮点型数据,第一个数字开始到非数值结束,因为遇到字母o(字母o实际上是要输入数字0的,但是输入错误了,结果也错了)时结束。

3.5.5 字符输入输出函数

1. 用 putchar 函数输出一个字符
  • putchar 函数的一般输出格式:
    putchar©
    举例:

    #include <stdio.h>
    int main()
    {  char a='B',b='O',c='Y';  //定义三个字符变量并初始化int a1=66,b1=79,c1=89;  //定义三个整型变量并初始化BOY三个字符的ASCII码值putchar(a);putchar(b);putchar(c);putchar('\n');putchar(a1);putchar(b1);putchar(c1);putchar('\n');
    }
    

    运行结果:
    在这里插入图片描述

2. 用 getchar 函数输入一个字符
  • getchar 函数的一般格式:
    getchar()

  • getchar函数没有参数,它的作用是从计算机终端输入一个字符。

  • 示例1:

      #include <stdio.h>int main(){  char a,b,c;     //定义三个字符变量a = getchar();     //从键盘输入一个字符,送入字符变量ab = getchar();     //从键盘输入一个字符,送入字符变量bc = getchar();     //从键盘输入一个字符,送入字符变量cputchar(a);putchar(b);putchar(c);putchar('\n');}
    

    (1)若键盘输入三个字符boy,中间无任何字符,然后回车,输出打印boy。
    测试结果1:
    在这里插入图片描述

    (2)若键盘每输入一个字符,按一次enter回车键,输出是什么样的?
    测试结果2:
    在这里插入图片描述

  • 示例2:输入的字符不传送给变量直接输出boy

    #include <stdio.h>
    int main()
    {  putchar(getchar());putchar(getchar());putchar(getchar());putchar('\n');
    }
    

    测试结果:
    在这里插入图片描述

  • 示例3:从键盘上输入任意一个大写字母,在显示屏上显示相应的小写字母。

     #include <stdio.h>int main(){  char c1,c2;c1 = getchar();     //从键盘上输入一个大写字母,送给字符变量c1c2 = c1+32;         //求对应小写字母的ASCII代码,放在字符变量c2中//使用puchar输出putchar(c2);putchar('\n');//使用printf输出printf("大写字母:%c\n小写字母:%c\n",c1,c2);}
    

    运行结果:
    在这里插入图片描述


    本节完

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年 最新 iPhone手机 历代机型、屏幕尺寸、纵横比、分辨率 整理

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

华为端口安全常用3种方法配置案例

安全动态mac地址学习功能 [Huawei]int g0/0/01 interface GigabitEthernet0/0/1 port-security enable //开启安全 port-security max-mac-num 2 //最多为2个mac地址学习 port-security protect-action restrict //丢包带警告 port-security aging-time 1 //mac地址的老化时间…

Java电影购票小程序在线选座订票电影

Java电影购票小程序 功能&#xff1a;注册用户可已查看电影场次评价选座订票退票&#xff0c;影院管理员可以排片退款在线卖票和管理演播室等。超级管理员可管理电影排片电影院用户管理等。 演示视频 小程序&#xff1a; https://www.bilibili.com/video/BV11W4y1A7mK/?shar…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑤

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应处理&#xff0c;执行j10*x-y返回文字“j1&#xff1a;”和计算值&#xff0c;执行j(x-y)*(10⁵%7)返回文字“j2&#xff1a;”和计算值&#xff0c;执行jy*log(x10)返回文字“j3&#xff1a;”和计算值…

【ChatGPT-Share,国内可用】GPTS商店大更新:一探前沿科技的魅力!

使用地址&#xff1a;https://hello.zhangsan.cloud/list GPTS商店预览,王炸更新 精选应用&#xff1a; 系统内置应用&#xff1a; 绘画应用&#xff1a; 写作应用&#xff1a; 高效工具应用&#xff1a; 学术搜索和分析应用&#xff1a; 编程应用&#xff1a; 教育应…

第九届远程教育与学习国际会议(ICDEL 2024)即将召开!

2024年第九届远程教育与学习国际会议&#xff08;ICDEL 2024&#xff09;将于2024年6月14-17日在中国广州召开&#xff0c;由华南师范大学主办。在信息通信技术和学习科学发展的影响下&#xff0c;远程教育的进一步发展和传播&#xff0c;使之逐渐成为当前教育领域的重要组成部…

2023 Gartner® 云数据库管理系统魔力象限发布 PingCAP 入选“荣誉提及”

近日&#xff0c;全球 IT 市场研究和咨询 公司 Gartner 发布最新报告《Magic Quadrant™ for Cloud Database Management Systems》&#xff08;云数据库管理系统魔力象限&#xff09;&#xff0c; 企业级开源分布式数据库厂商 PingCAP 入选“荣誉提及” 。前不久&#xff0c;P…

「Qt Widget中文示例指南」如何实现一个日历?(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文中的CalendarWi…

QWebEngineView类方法、属性、信号与槽汇总

文章目录 📖 介绍 📖🏡 环境 🏡📒 使用方法 📒📝 使用示例📝 方法📝 属性📝 信号(Signals)📝 槽(Slots)⚓️ 相关链接 ⚓️📖 介绍 📖 QWebEngineView 是 Qt 提供的一个用于呈现 Web 内容的类,基于 Google 的 Chromium 浏览器引擎。它提供了对现…

NSSCTF Interesting_include

开启环境: 通过审计,我们可知: flag在flag.php中,可以利用php中伪协议 payload:?filterphp://filter/readconvert.base64-encode/resourceflag.php 将其base64解码就是flag. NSSCTF{3dc54721-be9e-444c-8228-7133fba76ad4}

【前后端的那些事】前后端环境搭建+树形结构表格实现

文章目录 1. 前后端项目环境搭建2. table-tree2.1 后端准备2.2 前端准备 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&#xff0c;想写文章&#xff0c;录视频把这些内容记录下。但这些功能太零碎&#xff0c;如果为每个功能都单独搭建一个项目&#xff0…

Qt QTableView和QStandardItemModel包含搜索出现的文本及隐藏顶层节点

前言 使用Qt进行开发时&#xff0c;树结构一般是使用QTreeWidget或使用QTreeViewQStandardItemModel结合。 查找 如果要进行查找树的所有项中&#xff0c;是否包含某文本&#xff0c;就需要遍历。 QTreeWidget查找 以下是使用QTreeWidget进行查找&#xff1a; 首先初始化一…