第6章c语言(输入输出)
C语言全国计算机二级等级考试教程第六章字符(章节带习题)(ppt文档)
12 3<CR> 1 2 3<CR> 1 2 3<CR>
⊙ 如下的语句为数值数据和字符数据进行混合输入:
int a1,a2; char c1,c2; scanf(“%d%c%d%c”,&a1,&c1,&a2, &c2); 正确的读入形式: 10A 20B<CR> A和20之间必须有间隔符,间隔符的个数不限 此时变量a1接受的是10,c1接受的是‘A’, a2接受的是20,c2接受的是‘B’,
输出:putchar() 输入:getchar()
例如: char ch=‘A’; putchar(ch);
A
putchar(‘Y’); Y
例如: char ch; ch=getchar();
给字符变量接受字符
6.4 程序举例
例6.1 以下程序输出26个大写字母和它们的ASCII代码,每行输出两组数据。
第6章 字符型数据
6.1 字符型常量 6.2 字符变量 6.3 字符的输入和输出 6.4 程序举例
6.1 字符型常量
6.1.1 字符常量
字符常量:是用单引号括起来的一个字符。
例如
‘A’ ‘C’ ‘t’ ‘!’ ‘?’
说明
‘B’ ‘b’
是不同的字符常量
‘ ’ 单引号内是空格,也是合法的字符常量
例如
‘\n’ 回车换行符
‘\t’ 横向跳格符
‘\v’ 竖向跳格符
‘\r’ 回车符
‘\f’ 换页符
‘\b’ 退格符
‘\0’ 空值
‘\\’ 表示反斜杠
‘\‘’ 表示单引号
‘\“’ 表示双引号
‘\ddd’ 三位八进制数所代表的字符
C语言程序设计第六章课件
6.3嵌套循环
使用嵌套循环的注意事项 使用复合语句,以保证逻辑上的正确性 – 即用一对花括号将各层循环体语句括起来 内层和外层循环控制变量不能同名,以免造 成混乱 采用右缩进格式书写,以保证层次的清晰性
2017/9/7
27/62
选择三种循环的一般原则
如果循环次数已知,计数控制的循环 – 用for
1!, 2!, 3!, … , n!
2017/9/7
24/62
【例6.4】输入n值,计算并输出
1! + 2! + 3! + … + n!
利用前项 计算后项
2017/9/7
25/62
【例6.4】输入n值,计算并输出
1! + 2! + 3! + … + n!
每次单独计算 累加项
2017/9/7
26/62
counter<6 true input n sum ← sum + n counter++ output sum
n
2 3 5 6 4
counter-controlled 计数器每次增1
使用了3个变量
2017/9/7
end
6/62
6.2计数控制的循环
counter ← initial value
test counter true
2017/9/7
end
条件控制的循环
当 型 循 环
假 假 真 假
条 件P
A
条 件P
真
A
直 到 型 循 环
2017/9/7
10/62
while循环语句
C语言输入输出语句
#include <stdio.h> ! int main() { putchar(getchar()); ! return 0; }
字符串
printf
printf
%x, %mx, %-‐mx, %lx
无符号整数
・ %u ・输出有符号整数时,将符号位作为数值
字符类型
・ 相当于 putchar ・ ・ putchar和printf如何选择?
%c
字符串类型
・%s 输出字符串 %ms 输出宽度为m,右对齐 ・ %-‐ms 输出宽度为m,左对齐 ・ %.ns 只输出字符串的前n位 ・
附加格式字符
字符 说明 l
用于输入长整数数据(可用%ld、%lo、%lx),以及double型数据(用%lf或
h
用于输入端整型数据(可用%hd、%ho,%hx)
m(正整数) 指定输入数据所占宽度(列数)
*
表示本输入项在读入后不赋给相应的变量
说明
・scanf不使用%u格式符,对unsigned数
据,以%d、%o或%x格式输入。
• printf(<格式控制>, <输出列表>); • 输出列表:需要输出的数据或表达式 • 格式控制:双引号括起来的字符串 • 普通字符 • 格式说明: %d, %f……
格式字符 d o x u c s f e g
说明 以带符号的十进制形式输出整型数(正数不输出符号) 以8进制无符号形式输出整型数(不输出前导符0) 以16进制无符号形式输出整型数(不输出前导符0x) 以无符号10进制形式输出整型数 以字符形式输出,只输出一个字符 输出字符串 以小数形式输出单、双精度数,隐含输出6位小数 以标准指数形式输出单、双精度数,数字部分小数位数为6位 自动选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0
C语言第6章习题解答
第6章函数和模块设计【习题6-1】更正下面函数中的错误。
(1)返回求x和y平方和的函数。
(2)返回求x和y为直角边的斜边的函数。
sum_of_sq(x,y) hypot(double x,double y){ {double x,y; h=sqrt(x*x+y*y);return(x*x+y*y); return(h);} }程序如下:/*c6_1(1).c*/ /*c6_1(2).c*/(1) (2)double sum_of_sq(double x,double y) double hypot(double x,double y) { {return(x*x+y*y); double h;} h=sqrt(x*x+y*y);return(h);}【习题6-2】说明下面函数的功能。
(1)itoa(int n,char s[ ])(2)int htod(char hex [ ]){ { int i,dec=0;static int i=0,j=0; for(i=0;hex[i]!='\0';i++)int c; { if(hex[i]>='0'&&hex[i]<='9') if(n!=0) dec=dec*16+hex[i]-'0';{ if(hex[i]>='A'&&hex[i]<='F') j++; dec=dec*16+hex[i]-'A'+10;c=n%10+'0'; if(hex[i]>='a'&&hex[i]<='f') itoa(n/10,s); dec=dec*16+hex[i]-'a'+10;s[i++]=c; }} return(dec);else }{ (3)void stod(int n)if(j==0) s[j++]='0'; { int i;s[j]='\0'; if(n<0){ putchar('-');n=-n;} i=j=0; if((i=n/10)!=0) stod(i);} putchar(n%10+'0');} }功能:(1)(略)(2)(略)【习题6-3】编写已知三角形三边求面积的函数,对于给定的3个量(正值),按两边之和大于第三边的规定,判别其能否构成三角形,若能构成三角形,输出对应的三角形面积。
c语言网络教室第六章答案
if(n==5) for(a1=1;a1<=9;a1++) for(a2=0;a2<=9;a2++) for(a3=0;a3<=9;a3++)
输入: m,n
输出: 满足条件的正整数及其平方
#include"stdio.h"
int main()
{int m,n,i=0,j,k=1,x,y,a[10],p=0,q=1;
scanf("%d %d",&m,&n);
for(x=m;x<=n;x++)
{y=x*x;
if(a3==0) c3=0; else for(b3=a3;b3>0;b3--) c3*=b3;
if(a4==0) c4=0; else for(b4=a4;b4>0;b4--) c4*=b4;
if(a5==0) c5=0; else for(b5=a5;b5>0;b5--) c5*=b5;
if(n==2) for(a1=1;a1<=9;a1++) for(a2=0;a2<=9;a2++)
{c1=c2=c3=c4=c5=c6=c7=1;
for(b1=a1;b1>0;b1--) c1*=b1;
if(a2==0) c2=0; else for(b2=a2;b2>0;b2--) c2*=b2;
第6章C语言
float
*point;
定义了一个指向浮点型数据的指针变量point,即point是一个 用于存放浮点型变量地址的变量。
6.1.2 指针变量的定义与初始化
在此定义中,基类型声明了该指针变量所指向的 实体的类型。如:一个指向float类型的指针变量,它 的基类型应该为float型;一个指向int类型的指针变 量,它的基类型应该为int型。“*”是一个标识,用 以说明该变量是一个具有指针类型的变量。对于指针 变量的变量名的命名也应该尽量做到“见名知义”。 需要注意的是,指针变量名为“point”,而非 “*point”。
第6章
指针
山东大学电气工程学院
第6章Байду номын сангаас指针
指针是C语言中一个非常重要的概念,它对于变量的引用、数组 的处理、字符串的操作、函数参数的调用及函数间数据的处理、 结构体的应用和文件的操作等等都起着相当重要的作用。正确的 运用指针不仅可以提高程序的执行效率,简化操作过程,而且可 以处理复杂的数据操作,实现动态的数据结构,完成形式多样的 参数传递以及灵活的修改形参与实参的数值。但是需要警惕的是, 因为指针的运用如此的灵活,以至于经常会出现一些意想不到的 错误和结果。甚至在某些情况下,错误的运用指针,会使程序受 到非常严重的破坏。因此可以说,正确的理解和运用指针是衡量 能否成功的编写高质量C程序的标准。
6.1.3 与指针有关的运算符
在C语言中有三个与指针有关的运算符: 1、“&”运算符 此运算符称为取地址运算符。通过取地址运算符“&”可以获得 一个变量的地址。“&”为单目运算符,运算方向为从右向左结合, 直接作用于一个变量前,表示该变量的地址。 例如: int x=10,*p1;
c语言输入和输出
每一个标准库都有一个相应的头文件,该头文件包含了该库中所 有函数的函数原型及其相关信息。在调用这些库函数时,要用预处理 命令“#include”将有关的“头文件”包括到用户源程序中。标准输入输出库 函数对应的头文件是“stdio.h”。stdio是standard input & output的
3.1 概述
通过终端输入(如键盘、鼠标等),也称为标准输入(standard input),直接向终端输出(如显示器、打印机等),也称为标准输出 (standard output)。
C语言本身没有提供输入输出语句,C语言中的所有I/O操作都是通过函 数调用来实现,而这些并非C语言一部分的输入输出函数均以目标级程序
int main()
{Байду номын сангаас
int *ptr;
/* 定义一个指针 */
scanf(“%[^\n]”, ptr);
printf(“ptr=%s\n”,ptr);
}
设输入为:
How are you!↙
程序输出为:
How are you!
C语言程序设计---第3章
17
第17页,共21页。
3.4.4 scanf()函数应用中两个最常见的问题
printf(“%s\n”,ptr);
}
设输入为:
How are you,John!↙ 程序输出为:
How are you
注:这是由于逗号作为不可接受字符,而作为
字符串的定界符. C语言程序设计---第3章
16
第16页,共21页。
/* 本程序可接收任意字符串的输入 */
#include<stdio.h>
第6章 输入输出系统-选择题
第6章输入输出系统(I/O管理)-选择题1.以下关于设备属性的叙述中,正确的是()。
A.字符设备的基本特征是可寻址到字节,即能指定输入的源地址或输出的目标地址B.共享设备必须是可寻址的和可随机访问的设备C.共享设备是指同一时间内允许多个进程同时访问的设备D.在分配共享设备和独占设备时都可能引起进程死锁2.虚拟设备是指()A.允许用户使用比系统中具有的物理设备更多的设备B.允许用户以标准化方式来使用物理设备C.把一个物理设备变换成多个对应的逻辑设备D.允许用户程序不必全部装入主存便可使用系统中的设备3.磁盘设备的1O控制主要采取()方式A.位B.字节C.帧D. DMA4.为了便于上层软件的编制,设备控制器通常需要提供()A.控制寄存器、状态寄存器和控制命令B.1/O地址寄存器、工作方式状态寄存器和控制命令C.中断寄存器、控制寄存器和控制命令D.控制寄存器、编程空间和控制逻辑寄存器5.在设备控制器中用于实现设备控制功能的是()A. CPUB.设备控制器与处理器的接C.I/O逻辑D.设备控制器与设备的接口6.在设备管理中,设备映射表(DMT)的作用是()A.管理物理设备B.管理逻辑设备C.实现输入/输出D.建立逻辑设备与物理设备的对应关系7.DMA方式是在()之间建立一条直接数据通路A.I/O设备和主存B.两个I/O设备C.I/O设备和CPUD.CPU和主存8.通道又称1/O处理机,它用于实现()之间的信息传输。
A.内存与外设B.CPU与外设C.内存与外存D.CPU与外存9.在操作系统中,()指的是一种硬件机制A.通道技术B.缓冲池C. Spooling技术D.内存覆盖技术10.若1O设备与存储设备进行数据交换不经过CPU来完成,则这种数据交换方式是()A.程序查询B.中断方式C.DMA方式D.无条件存取方式11.计算机系统中,不属于DMA控制器的是()A.命令/状态寄存器B.内存地址寄存器C.数据寄存器D.堆指针寄存器12.()用作连接大量的低速或中速1O设备A.数据选择通道B.字节多路通道 D.I/O处理机C.数据多路通道13.在下列问题中,()不是设备分配中应考虑的问题A.及时性B.设备的固有属性C.设备独立性D.安全性14.将系统毎台设备按某种原则统一进行编号,这些编号作为区分硬件和识别设备的代号,该编号称为设备的()A.绝对号B.相对号C.类型号D.符号15.关于通道、设备控制器和设备之间的美系,以下叙述中正确的是()A.设备控制器和通道可以分别控制设备B.对于同一组输入输出命令,设备控制器、通道和设备可以并行工作回C.通道控制设备控制器、设备控制器控制设备工作D.以上答案都不对16.有关设备管理的叙述中,不正确的是()A.通道是处理输入输出的软件B.所有设备的启动工作都由系统统一来做C.来自通道的IO中断事件由设备管理负责处理D.编制好的通道程序是存放在主存中的17.【2010统考真题】本地用户通过健盘登录系统时,首先获得健盘输入信息的程序是()A.命令解释程序B.中断处理程序C.系统调用服务程序D.用户登录程序18. I/O中断是CPU与通道协调工作的一种手段,所以在()时,便要产生中断A.CPU执行“启动I/O”指令而被通道拒绝接收B.通道接收了CPU的启动请求C.通道完成了通道程序的执行D.通道在执行通道程序的过程中19.一个计算机系统配置了2台绘图机和3台打印机、为了正确驱动这些设备,系统应该提供()个设备驱动程序A.5B.3C.2D.120.将系统调用参数翻译成设备操作命令的工作由()完成A.用户层I/OB.设备无关的操作系统软件C.中断处理D.设备驱动程序21.【2017统考真题】系统将数据从磁盘读到内存的过程包括以下操作①DMA控制器发出中断请求②初始化DMA控制器并启动磁盘③从磁盘传输一块数据到内存缓冲区④执行“DMA结束”中断服务程序正确的执行顺序是()A.③→①→②→④B.②→③→①→④C.②→①→③→④D.①→②→①→③22.【2011统考真题】用户程序发出磁盘I/O请求后,系统的正确处理流程是()A.用户程序→系统调用处理程序→中断处理程序→设备驱动程序B.用户程序→系统调用处理程序→设备驱动程序→中断处理程序C.用户程序→设备驱动程序→系统调用处理程序→中断处理程序D.用户程序→设备驱动程序→中断处理程序→系统调用处理程序23.【2012统考真题】操作系统的I/O子系统通常由4个层次组成,每层明确定义了与邻近层次的接口,其合理的层次组织排列顺序是()A.用户级1O软件、设备无关软件、设备驱动程序、中断处理程序B.用户级1O软件、设备无关软件、中断处理程序、设备驱动程序C.用户级1/O软件、设备驱动程序、设备无关软件、中断处理程序D.用户级IO软件、中断处理程序、设备无关软件、设备驱动程序24.【2013统考真题】用户程序发出磁盘I/O请求后,系統的处理流程是:用户程序→系统调用处理程序→设备驱动程序→中断处理程序。
C语言等级考试 第六章重点汇总
度可由编译器根据初始值表中的初值个数来确定。
如:int a[]={1,3,5,7,9}; 由于初始值表中包含5个数据,所以a数组的长度隐含地
确定为5。需要注意的是:如果没有初始值表或初始值表
中初值个数少于数组实际长度时,则在定义数组时,其长 度是不能省略的。同时,在不指定数组长度的情况下进行
数组定义时,在初始值表中必须要列出所有元素的初值。
[案例6.7]从键盘为一个5*5整型数组赋值,找出其中的 最小值不能感显示出来。 程序如下: main() {int x[5][5], i, j, min; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf(“%d”,&x[i][j]); min=x[0][0]; for(i=0;i<5;i++) for(i=0;i<5;i++) if(min> x[i][j]) min=x[i][j]; printf(“The min is:%d\n”,min); }
[案例6.4]从键盘输入20个不同整数,并检查整数10是否包含 在这些数据中,若是的话,它是第几个被输入的? 程序为: main( ) { int i, a[20]; for(i=0;i<20;i++) scanf(“%d”,&a[i]); for(i=0;i<20;i++) {if(a[i]==10) {printf(“10 is the position %d\n”,i+1); break; } } }
6.1.2一维数组元素的引用
1. 引用数组中的任意一个元素的形式:
数组名[下标表达式]
高树芳C语言程序设计--第六章
[解决方案]设置一个长度为10的类型为整型的数组
存储老题的年龄。
程序代码
5
6.1 一维数组的定义与使用
相关知识: 1.数组的概念 同类型的一组数据。 2.数组的维数 下标的个数 3.一维数组的定义 类型 数组名[常量表达式] 4.一维数组元素的引用 数组名[下标],如:a[1]
6
6.1 一维数组的定义与使用
案例6-10 输出中文大写数字 [案例任务] C语言的字符串知识
[解决方案]使用两维字符数组存储汉字的“壹”
和“拾”等字符串数据。
程序代码
28
6.3字符数组及字符串
相关知识: C语言的字符串知识应用: 数字转换为中国大写汉字数字字符。
29Biblioteka 编写C程序,输入8个整数,将其逆序输出,同 时要输出它们的和。
10
6.2 二维数组的定义与使用
案例6-4 求二维数组中最大数 案例6-5 整数四则运算测试程序
11
6.2 二维数组的定义与使用
案例6-4 求二维数组中最大数
[案例任务]
对于如下3×4的矩阵: 1 2 3 4 6 9 5 4 -10 10 0 -5 编程求出其中的最大值,并输出其所在的行 号和列号。
24
6.3字符数组及字符串
[课堂训练6-4] 统计字符数组中某类字符的个数。设有 一个长度不超过30的字符串s,统计其 中数字字符、大写字母、小写字母、其 它字符的个数。
25
6.3字符数组及字符串
案例6-9字符串处理函数 [案例任务] 从键盘输入两个字符串s1,s2,要求使用 字符串的常用处理函数strlen、strcat、 strcpy、strcmp等。
[解决方案]见流程图。
程序代码
C语言 — 第六章 数组(大学使用教程)
数组常用的循环形式
法一 int i,a[100]; for(i=0;i<100;i++) a[i]=i; 法二 int i,a[100]; for(i=0;i<=99;i++) a[i]=i;
C程序中常用的是第一种方法。 程序中常用的是第一种方法。 此法中,循环变量的终值是“小于”而非“等于” 此法中,循环变量的终值是“小于”而非“等于” 数组长度!否则将导致“越界”的发生。 数组长度!否则将导致“越界”的发生。
数
组
• 数组是一组有序的同类型数据 。 • 数据称为数组的元素。 数据称为数组的元素。
6
数组的用处
保存大量同类型的相关数据 – 如矩阵运算,表格数据等 如矩阵运算,
数组的特点
快速地随机访问 一旦定义, 一旦定义,不能改变大小
7
§6.1 数组的定义与初始化
数组的定义 : 数组在使用前要进行定义: 名称、类型、维数、 数组在使用前要进行定义 名称、类型、维数、大小 定义格式: 定义格式: 类型标识符 数组名[常量表达式1][常量表达式2]…… 数组名[常量表达式1][常量表达式2] 1][常量表达式2]
如有数组 int a[5]; 其中数据为:2、4、23、6、78 其中数据为: 、 、 、 、 则存放情况如下: 则存放情况如下:
12
数组在内存 中的首地址
2000 2002
2的低位字节 的低位字节 2的高位字节 的高位字节 4的低位字节 的低位字节 4的高位字节 的高位字节
a[0] a[1] a[2] a[3] a[4]
即a=2000
2004 2006 2008
int a[5]={ 2,4, 23,6,78 };
c语言 输入输出语句
输入输出语句
在程序的运行过程中,往往需要由用户输入 一些数据,这些数据经机器处理后要输出反馈给用 户。通过数据的输入输出来实现人与计算机之间的 交互,所以在程序设计中,输入输出语句是一类必 不可少的重要语句。在C语言中,没有专门的输入 输出语句,所有的输入输出操作都是通过对标准 I/O库函数的调用实现。最常用的输入输出函数有 )、printf )、getchar )和putchar scanf ( ) printf ( ) getchar ( ) putchar )。 ( )
★ g格式符
用来输出实型数,它根据数值的大小,自动选 f格式或e格式(选择输出时占宽度较小的一种), 且不输出无意义的零。
例:
若f=123.468,则: printf(”%f,%e,%g”,f,f,f); 输出如下: 123.468000,1.234680e+002,123.468 用%f格式输出占10列,用%e格式输出占13列,用%g格 式时,自动从前面两种格式中选择短者(今为%f格式为 短),故选择按%f格式输出,且小数位中的最后三位为无 意义的0,不输出。%g格式用得比较少。
scanf函数的执行中应注意的问题 scanf函数的执行中应注意的问题
◆scanf函数中的“格式控制”后面应当是变量地址,而
不应是变量名。
◆如果在“格式控制”字符串中除了格式说明外还有其它 ◆在用“%
字符,则在输入数据时应输入与这些字符相同的字符, 即原样输入。
c”格式输入字符时,空格字符和“转义字符” 都作为有效字符输入。
§4.3
[例4.8]
getchar 函数
此函数的作用是从键盘输入一个字符,并把这个字符作为函数 的返回值。getchar函数没有参数,其一般形式为:getchar()。
C语言程序设计 第6章
#include <stdio.h> #include <stdlib.h> main( ) { int a[10]; /*定义数组*/ int k,j; float ave,s; k=0;s=0.0; for(j=0;j<10;j++) /*用数组存放10个随机整数*/ a[j]=rand()%50; printf("数组中的值:"); for(j=0;j<10;j++) /*输出10个随机整数*/ printf("%6d",a[j]); printf("\n"); for(j=0;j<10;j++) { if(a[j]%2==0) /*如果数组元素的值为偶数*/ {s+=a[j];k++;} /*累加及偶数个数计数*/ } if(k!=0) {ave=s/k; printf("偶数的个数:%d\n偶数的平均植:%f\n",k,ave);} }
(2)定义一个二维数组a[N][5],数组每行存放一名 学生的数据,每行前4列存放学生4门单科成绩,第5列 存放学生的总分。 (3)输入N个学生的单科成绩,存入二维数组a中。 (4)通过变量sum累加计算每位学生的总分,然后 赋值给每行的最后一个元素。 (5)输出数组第5列上的值,即为每个学生的总分。
for(i=0;i<N;i++) { sum=0; for(j=0;j<4;j++) /*计算当前学生的总分*/ sum+=a[i][j]; a[i][4]=sum; } for(i=0;i<N;i++) /*输出每个学生的总分*/ printf("第%d个学生的总分为:%d\n",i+1,a[i][4]); }
计算机二级C语言 第6章 字符型数据
以下是关于转义字符的几点说明: 1.转义字符常量只代表一个字符。 2.反斜杠后的八进制数可以不用0开头,如 ‘\141’代表的就是字符常量‘a’。 3.反斜杠后的十六进制数只能以小写字母x 开头,不允许用大写X,也不能用0x开头, 如‘\x41’是代表字符常量‘A’。 重点提示: ※重点提示:转义字符常量,均以一个“\”开 头。若要输出一个\字符,则输出格式应 为’\\’。
字符形式 \n \t \b \r \f \\ \’ \’’ \ddd \xhh
功能 回车换行,将光标从当前位置移到下一行开头 横行跳格,相当于TAB键,光标从当前位置跳到下一个TAB位置 退格,光标从当前位置向左退一格 回车不换行,光标从当前位置移到本行开头 换页,将光标从当前位置移到下一页开头 反斜杠字符“\” 单引号字符(撇号) 双引号字符 1~3位八进制数代码对应的字符 1~2位十六进制数代码对应的字符
第6章 字符型数据
本章要点: 本章要点 6.1 字符型常量 6.2 字符变量 6.3 字符的输入和输出
6.1 字符型常量
6.1.1 字符常量 字符常量是用一对单引号括起来的一个字符。如‘a’、‘B’、 ‘>’、‘?’等都是字符常量。作为字符常量的小写字 母a,在程序中写成‘a’,以便和标识符a区别开来。 关于字符常量,以下有几点说明: (1)其中单引号只是作为定界符使用,并不是字符常量的 组成部分,也就是说在输出字符常量时,一对单引号并不 被输出。 (2)单引号中的大写字母和小写字母代表不同的字符常量, 如‘A’和‘a’是不同的字符常量。 (3)被一对单引号括起来的字符不允许是单引号或反斜杠, 即‘’’或‘\’。
说明:putchar函数的参数可以是表达式,因此 上述程序的第3、4、5行可以简化为一条语句: putchar(getchar()); 该语句中的putchar参数是函数getchar。 重点提示:本小节主要介绍C语言中数据输入 ※重点提示 输出的实现方法。这些输入输出规则比较繁琐, 用法不当就得不到预期的结果,不少编程人员由 于没掌握好这方面的知识而浪费了大量时间来调 试程序。当然,初学者不可能一下子掌握所有细 节,可以重点掌握最常用的一些规则,其他部分 可在需要的时候随时查阅。建议读者通过上机实 践来巩固所学知识。
《C语言程序设计》第6章习题答案
1、选择题(1)A(2)C(3)A(4)B(5)B(6)D(7)D(8)B(9)D(10)B2、填空题(1)a=10,b=20a=20,b=10(2)**pp=603、程序设计题(1)#include<stdio.h>char *month_name(int n);void main(){int n;printf("\nPlease enter 1 integer:");scanf("%d",&n);printf("%d month :%s\n",n,month_name(n));}char *month_name(int n){static char*name[]={"illegal month","Jan","Feb","Mar","Apr","May","Jun","July","Aug","Sept","Oct","Nov","Dec"};return ((n<1||n>12)?name[0]:name[n]);}(2)#include<stdio.h>#define N 10sort(int data[]){int i,j,min_a,temp;for(i=0;i<N;i++){min_a=i;for(j=i+1;j<N;j++)if(*(data+j)<*(data+min_a))min_a=j;if(min_a!=i){temp=*(data+min_a);*(data+min_a)=*(data+i);*(data+i)=temp;}}}main(){int i,j,data[N],temp;int min_a;printf("\nPlease input %d int:\n",N);for(i=0;i<N;i++)scanf("%d",&data[i]);sort(data);printf("After sorted:\n");for(i=0;i<N;i++)printf(" %d",data[i]);}(3)#include <stdlib.h>void reverse(char *c);void main(){char str[80];puts("Please enter 1 string\n");gets(str);reverse(str) ;puts("After reversed\n");puts(str);}void reverse(char *c){char *p,*q,temp;int size=0;for(p=c;*p!='\0';p++)size++;size=size/2;for(q=c,p--;q<c+size;q++,p--){temp=*q;*q=*p;*p=temp;}}(4)#include<stdio.h>#include<string.h>void sort(char *keyword[],int size);void print(char *keyword[],int size)void main(){char *keyword[]={"if","else","case","switch","do","whlie","for","break","continue"};sort(keyword,9);print(keyword,9);}void sort(char *keyword[],int size){int i,j,min_location;char *temp;for(i=0;i<size-1;i++){min_location=i;for(j=i+1;j<size;j++)if(strcmp(keyword[min_location],keyword[j])>0) min_location=j;if(min_location!=i){temp=keyword[i];keyword[i]=keyword[min_location];keyword[min_location]=temp;}}}void print(char *keyword[],int size){int i;for(i=0;i<size;i++)printf("\n%s",*(keyword+i));}(5)#include<stdio.h>void fun_char(char str1[],char str2[],char str3[]);void main(){char str1[80],str2[80],str3[80],c,i;printf("\nPlease enter 2 string:");scanf("%s%s",str1,str2);fun_char(str1,str2,str3);printf("Third string is %s.",str3);}void fun_char(char *str1,char *str2,char *str3){int i,j,k,flag;i=0,k=0;while(*(str1+i)!='\0'){j=0;flag=1;while(*(str2+j)!='\0'&&flag==1){if(*(str2+j)==*(str1+i)) flag=0;j++;}if(flag){*(str3+k)=*(str1+i); k++;}i++;}*(str3+k)='\0';}(6)#include<stdio.h>int count_word(char *str);void main(){char str1[80],c,res;puts("\nPlease enter a string:");gets(str1);printf("There are %d words in this sentence",count_word(str1)); }int count_word(char *str){int count ,flag;char *p;count=0;flag=0;p=str;while(*p!='\0'){if(*p==' ')flag=0;else if(flag==0){flag=1;count++;}p++;}return count;}(7)#include<stdio.h>#include<string.h>char *encrypt(char *string);char *decrypt(char *string);main(){char item[80];char *point;char *pEncrypted;char *pDecrype;printf("Please enter the string need to encrypt:\n");gets(item);point=item;pEncrypted=encrypt(point);printf("\nThe string after encrypted is:\n%s\n",pEncrypted); pDecrype=decrypt(pEncrypted);printf("\nThe string after decrypted is:\n%s\n",pDecrype);free(pEncrypted);free(pDecrype);}char *encrypt(char *string){char *q,*t;q=(char *)malloc(sizeof(char)*80);if(!q){printf("No place to malloc!");return 0;}t=q;while(*string!='\0'){*q=*string-2;string++;q++;}*q='\0';return t;}char *decrypt(char *string){char *q,*t;q=(char *)malloc(sizeof(char)*80); if(!q){printf("No place to malloc!");return 0;}t=q;while(*string!='\0'){*q=*string+2;string++;q++;}*q='\0';return t;}。
C语言第6章
16
#include “stdio.h” main() {int m,n; char ch; while((ch=getchar())!=‘\n’)
{if(ch>=‘a’&&ch<=‘z’) ch=ch-32;
putchar(ch); } putchar(‘\n’); }
运行时若输入: abcd1234EFgh 则输出: ABCD1234EFGH
又如’a’与“a”的存储方式分别为:
a 占一个字节
与 a \0 占两个字节 4
字符串的输出 方法一:直接输出。如printf(“How are you”); 方法二:采用格式符号%s输出。此是后话! 在C语言中没有字符串变量!下面的作法是错
误的: char c; c=“hello”; 因此,在C语言中字符串往往采用数组存放, 这也是后话!
{if(i%2==0) printf(“\n”); ch=i+65; printf(“c=%c ascii=%d } }
”,ch,ch);
15
例2、编程将用户从终端输入的一行字符中所有小写 字母转换成大写字母,其它字符不变。
分析:我们要对用户输入的每一个字符进行判别, 若为小写字母(在’a’~’z’之间),则应将其转换为大 写字母(字符-32),其它字符不变。 ①输入一行字符(用while((ch=getchar())!=‘\n’)来 接受输入); ②用循环对输入的字符一个一个地判别,若为小 写字母,则转换,否则不变; ③对转换后的字符进行显示(用putchar(ch))。 具体程序如下:
值就是-1。它的输入方法就是打^Z↙(见教材
P73)。
19
例4、把一串密码译成正文,密码以字符@表示结束。译码 规则如下:
C语言的输入输出
例
Ch3_1.c
/*ch3_1.c*/ #include <stdio.h> main() { int c; char a; c=65; a='B'; putchar(c); putchar('\n'); putchar(a); } 运行结果:A B
§ 4.2 赋值语句 1、C语言中的赋值号“=”是一个运算符, 、 语言中的赋值号 语言中的赋值号“ 是一个运算符 是一个运算符, 而其它大多数语言中不是运算符。 而其它大多数语言中不是运算符。 2、 、 if((a=b)>0) t=a; if((a=b;)>0) t=a;
§4.3 数据输出
C语言无I/O语句,I/O操作由函数实现 #include <stdio.h> 字符输出函数
char a=65;printf(“%c”,a); 百分号本身 printf(“%%”);
说明 65535 11 11 11 11 11 11 11 11 格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式 输出
附加格式说明符(修饰符) 修饰符 功 能 m 输出数据域宽,数据长度<m,左补空格;否则按实际输出 .n + 0 # l 对实数,指定小数点后位数(四舍五入) 对字符串,指定实际输出位数 输出数据在域内左对齐(缺省右对齐) 指定在有符号数的正数前显示正号(+) 输出数值时指定左面不使用的空位置自动填0 在八进制和十六进制数前显示前导0,0x 在d,o,x,u前,指定输出精度为long型 在e,f,g前,指定输出精度为double型
第6章 格式输入输出
分析下列程序的输出结果。 I=56 J=1247 K=5126 WRITE(*,10)I,J,K 10 FORMAT(1X,2(I5,2X)/) END 输出结果为: □□□56□□□1247 (空一行) 5126
总 结
FORTRAN 90提供的编辑描述符很多,这给初学者学习 带来了困难,但一些编辑描述符也有共同特点,把握 这些特点以后也就不难掌握了。 可重复编辑描述符是用来决定对应输入输出项的输入输 出格式的,其中都有字段宽度w,而且对于输入都是 从输入记录中取w个字符,对于输出都是在输出记录 w 中输出w个字符。但问题是,在输入时,取得的w个 字符按什么规则加工后传送到对应的输入项。在输出 时,当输出项实际包括的字符的个数和编辑符中所确 定的字段宽度(对于数值型数据还有小数位数)之间不 相符时,如何输出?读者可以分数值型、逻辑型、字 符型进行总结。
二、格式输入输出语句
1.格式输出 PRINT f,输出项 其中f是格式说明符,指明了输出所用的格式。它有以下 三种形式: (1)格式说明符是一个“*”,表示输出使用表控格式。 (2)格式说明符是一个字符常量。例如 PRINT '(1X,2F7.3)',X,Y (3)格式说明符是格式语句(FORMAT)的语句标号。例如 PRINT 100,A,B,C 100 FORMAT(1X,F9.4,2F7.3) WRITE(u,f) 输出项 其中u是设备号,用于指明具体使用的输出设备。u可以 是一个无符号整数,还可以是星号*。*表示系统预先约 定的外部设备,一般为显示器。
实验七 格式输入输出
字符型数据编辑描述符 字符型数据的输入输出用A编辑符。其一般格式是: rAw 其中字段宽度w可以省略,省略时,输入输出项的字段宽度隐含为对 应的字符型输入输出项的长度l。 (1)A编辑符的输入规则:当w>l时,从w个字符中取出最右边l个字 符送给对应的输入项。当w<l时,当w个字符全部送入输入项,并 靠左对齐,右边补l-w个空格。这一点同字符赋值语句的规则是相 同的。 (2)A编辑符的输出规则:在输出记录中,Aw编辑符所对应的输出项 一定占w个字符的宽度,但输出项实际包含字符的个数l可能与w 不一致。当w=l时,输出项所有的字符全部输出。当w>l时,输出 项所有的字符全部输出,并且靠右对齐,左补w-l个空格。当w<l 时,输出项最左边w个字符输出。当w省略时,按输出项的长度输 出,这是最方便的形式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.2.2 格式控制字符
【范例6-2】 格式控制字符d的应用。 01 #include <stdio.h> 02 int main(void) 03 { 04 int i=123456; /*初始化变量*/ 05 printf("%d\n",i); /*按%d格式输出数据*/ 06 printf("%5d\n",i); /*按%md格式输出数据*/ 07 printf("%7d\n",i); /*按%md格式输出数据*/ 08 return 0; 9 } 第6、7行中使用了%md形式,其中第6行的m=5,数据位数 6>m,输出原数据;第7行中的m=7,数据位数6<m,以前 面补空格的方式输出,所以在输出结果中第3行的123456前 多了一个空格。
6.1 标准输入输出
C语言本身并不提供输入输出语句,而是用一组库 函数来实现数据的输入和输出,由于不同的C系统 提供不同的输入输出函数,而一些常用的函数是各 系统中共有的,称之为标准输入输出函数。 本章就来学习这些标准的输入输出函数,包括上面 程序所提到的格式化输入(printf)输出(scanf) 函数,以及字符输入(getchar)输出(putchar) 函数和字符串输入(gets)输出(puts)函数等。
6.2.2 格式控制字符
01 02 03 04 #include<stdio.h> int main(void) { float f1=11.110000811; /*定义一个float类型的变量f1并 赋值*/ 05 float f2=11.110000; /*定义一个float类型的变量f2并赋值*/ 06 printf("%f\n",f1); /*按%f的格式输出f1*/ 07 printf("%f\n",f2); /*按%f的格式输出f2*/ 08 return 0; 9 } 本例中定义的f1和f2的小数位数不同,但是输出后位数都为6位,这是问什么 呢?是因为%f格式输出的数据小数部分必须是6位,如果原数据不符合, 位数少的时候补零,位数多的时候小数部分取前6位,第7位四舍五入。
用户与计算机的交互——输入和输出
输入/输出是计算机最基本的行为,也是任 何语言必需的功能,起到了用户和计算机桥 梁的作用,那么,在C语言的世界里,输入 和输出是怎么实现的?怎么样高速、高效的 进行输入和输出呢?我们就在这一章来进行 讨论吧!
6.1 标准输入输出
程序如何知道用户想要的内容,用户又如何 得知程序运算的结果呢?可以通过输入输出 来实现。我们先来看下面的程序运行结果。
6.2.1 格式化输出函数——printf()
在前面章节中我们用的最多的就是print()函数,但代码中包含 的%d、%f和%c有什么含义和区别呢?本节就来深入学习此 函数详细用法。 printf()函数,作用是将计算机中数据,按照特定的格式输出 到终端,使用户能从终端查看数据,它是输出数据的接口。使 用格式如下: printf("<格式化字符串>",<参数列表>); 例如: 01 int i=10,j=20; 02 printf(“欢迎来到C语言的世界!\n”); /*输出引号内的内容 并换行*/ 03 printf(“i=%d,j=%d\n”,i,j); /*输出变量i和j的值并换行 */
6.2.2 格式控制字符
下面详细介绍这些格式控制字符的使用方法。 1. d格式控制字符 使用如下。
⑴ %d:以十进制形式输出整数。 ⑵ %md:与%d相比,用m限制了数据的宽度,是指数据 的位数,当数据的位数小于m时,以前面补空格的方式 输出,反之,如果位数大于m,则按原数输出。 ⑶ %ld:输出长整型的数据,其表示数据的位数比%d多。
6.2.2 格式控制字符
2. u格式控制字符
⑴ %u:以十进制形式输出无符号的整数。 ⑵ %mu:与%md类似,限制了数据的位数。 ⑶ %lu:与%ld类似,输出的数据是长整型,范 围较大。
6.2.2 格式控制字符
3. f格式控制字符 ⑴ %f:以小数形式输出实数,整数部分全 部输出,小数部分为六位。 【范例6-3】 格式控制字符f的应用。 6-3 f
6.2 格式化输入输出
6.2.1 格式化输出函数——printf() 6.2.2 格式控制字符 6.2.3 格式化输入函数——scanf()
6.2 格式化输入输出
格式化是指按照一定的格式,格式化输入输 出就是指按照一定的格式读取来自输入设备 的数据和向输出设备输出数据。符合格式化 输入输出的代表函数是printf()函数和 scanf()函数。这两个函数是程序中用的最 多的输入输出函数,也是本章的重点。
6.2.2 格式控制字符
6. 格式控制字符
以八进制形式表示数据。即把内存中数据的二进制 形式转换为八进制后输出,由于二进制中有符 号位,那么就把符号位也作为八进制的一部分 进行输出。
7. 格式控制字符
以十六进制形式表示数据。与%o一样,也把二进 制中的符号位作为十六进制中的一部分进行输 出。
6.2.2 格式控制字符
在上面的程序中, 我们所使用的%d、 %c和%f就是格式 控制字符,除了这 些外还有很多,下 表所示就是C语言 程序中常用的格式 控制字符。
格式控制字 符 d o x u c s f e g 含义 以十进制形式输出整数值 以八进制形式输出整数值 以十六进制形式输出整数值 以无符号数形式输出整数值 输出字符值 输出字符串 输出十进制浮点数 以科学计数法输出浮点数 等价于%f或%e,输出两者中占 位较短的
6.1 标准输入输出
在命令行中,提示用户输入1个整数,当用 户输入100,并按【Enter】键后,程序显 示“您输入的整数是:100”,这就是个简单 的输入输出的过程:程序提示 用户输入数 据 程序读取后输出,实现了用户和计算机 的交互。
6.1 标准输入输出
此程序的代码如下。 01 #include<stdio.h> 02 int main(void) 03 { 04 int i; 05 printf("请输入1个整数:\n"); /*提示用户输入*/ 06 scanf("%d,",&i); /*读取输入数据*/ 07 printf("您输入的整数是:%d\n",i); /*输出数据 */ 08 return 0; 09 } 以上程序是通过printf()函数和scanf()函数来实现输入输出的, 这些函数都包含在C语言的库函数中。
第6章
用户与计算机的交互——输入和输出
标准输入输出 格式化输入输出 字符输入输出 字符串输入输出 跟我上机
第6章
用户与计算机的交互——输入和输出
标准输入输出 格式化输入输出 字符输入输出 字符串输入输出 跟我上机
第6章
用户与计算机的交互——输入和输出
标准输入输出 格式化输入输出 字符输入输出 字符串输入输出 跟我上机
6.2.1 格式化输出函数——printf()
【范例6-1】 printf函数的使用。
#include<stdio.h> int main(void) { int num; char r; float f; printf("请输入1个整数,1个字符,1个浮点型的数据:\n"); /*输出引号中的 内容并换行*/ 08 scanf("%d,%c,%f",&num,&r,&f); /*输入数据,给num,r,f分别赋值*/ 09 printf("输入的数据是:num=%d,r=%c,f=%f",num,r,f); /*输出变量的值 */ 10 printf("\n"); /*换行*/ 11 return 0; 12 } 此段代码定义了3个变量,分别是int、char和float类型,第7行没有参数是原样输出引 号中的内容后换行,第8行是输入数据,给num,r和f分别赋值,第9行是输出变 量的值,用到了格式控制字符%d、%c和%f,%d代表的是int类型的格式,%c 代表的是char类型的格式,%f代表的是float类型的格式,与后面的参数类型一一 对应。第10行的调用格式与第7行的一样,但第10行双括号内的是转义字符,所以 起到了换行的作用。 01 02 03 04 05 06 07
⑵ %-m.ns:与%m.ns相比是右端补空格。
6.2.2 格式控制字符
【范例6-5】 m.ns和-m.ns格式符练习。
01 #include<stdio.h> 02 int main(void) 03 { 04 printf("%s\n","Hello"); /*按%s格式输出*/ 05 printf("%5.3s\n","Hello"); /*按%m.ns格式输出*/ 06 printf("%-5.3s\n","Hello"); /*按%-m.ns格式输出*/ /* %-m.ns */ 07 return 0; 8 } 这个例子是练习%m.ns格式和%-m.ns输出,并比较二者输出的区别。第4 行是原样输出,%s格式。第5行是%m.n格式输出,共m位,从“Hello” 中截取前3位,并在前面补两个空格。第6行与第5行的不能是空格是补在 字符的后端。若n>m时,m就等于n,保证字符⑵ %m.nf:以固定的格式输出小数,m指 的是包括小数点在内的数据的位数,n是指 小数的位数,当总的数据位数小于m时,数 据左端补空格,如果大于m时,原样输出。 ⑶ %-m.nf:除了%m.nf以外,要求输出 的数据向左靠齐,右端补空格。
6.2.2 格式控制字符
【范例6-4】 格式控制字符%m.nf和%-m.nf格式符练习。 01 #include <stdio.h> 02 int main(void) 03 { 04 float f=123.456; /*初始化变量*/ 05 printf("%f\n",f); /*按%f格式输出*/ 06 printf("%10.1f\n",f); /*按%m.nf格式输出*/ 07 printf("%5.1f\n",f); 08 printf("%10.3faaa\n",f); 09 printf("%-10.3faaa\n",f); /*按%-m.nf格式输出*/ 10 return 0; 11 }