版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计
—进阶篇第1章数据类型与输入输出(二)2023/1/3C语言程序设计
—进阶篇第1章数据类1内容概述1.C语言的数据类型及分类。2.C语言中的常量和变量。3.C语言的数据输入/输出。2023/1/3内容概述1.C语言的数据类型及分类。2022/12/262教学目标1.掌握数据类型的概念,了解C语言能够处理的数据类型。2.掌握各种类型常量的特点及表示形式。3.掌握变量的概念,了解float、char型变量的特点,掌握这二种类型变量的定义、赋值和使用方法。4.掌握数据的输入输出(包括汉字的输入与输出)的基本方法。2023/1/3教学目标1.掌握数据类型的概念,了解C语言能够处理的数据类型3数据是计算机程序处理的所有信息的总称,数值、字符、文本等都是数据,如整数、实数、英文字母、数字符号、英语单词、汉字、一句话、一段文章、一个学生信息等。在C语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类,共9种。 本章中,将介绍基本数据类型中的浮点型和字符型。其余类型在以后各章中陆续介绍。1.1C的数据类型
2023/1/3数据是计算机程序处理的所有信息的总称,数值、字符、文本41.基本数据类型
基本数据类型最主要的特点是,其值不可以再分解为其它类型。基本类型整型字符型浮点型单精度双精度枚举短整型长整型2023/1/31.基本数据类型基本数据类型最主要的特点是,52.整型变量整型变量分为四种:基本型、短整型、长整型、无符号型基本型: 用“int”定义,在不同的系统中它的长度可能不同,如在DOS下的int变量占2个字节,相当于短整型,而在Windows下的int变量占4个字节,相当于长整型。2023/1/32.整型变量整型变量分为四种:基本型、短整型、长整型、无62.整型变量短整型:用“shortint”或“short”定义,占2个字节。长整型:用“long”或“longint”定义,占4个字节。无符号型:用“unsigned”定义
不存放符号,数据不带符号数。 无符号整型:“unsignedint”
无符号短整型:“unsignedshortint”
无符号长整型:“unsignedlongint” 注意:如无指定,则为有符号数。2023/1/32.整型变量短整型:用“shortint”或“shor7【例1.1】整型数用法示例main(){ unsignedshortinta; shortintb; a=65535; b=32767; a=a+1;
b=b+1;
printf("a=%d\n",a); printf("b=%d\n",b);}运行结果为:a=0b=-32768为什么?a从原来的65535加1后变为0,这说明a所能表示的值的大小是有限的!65535的二进制数为1111111111111111,再加1=?32767的二进制数为0111111111111111,再加1=?2023/1/3【例1.1】整型数用法示例main()运行结果为:a从原来的8整型变量取值范围类型说明符数的范围 分配字节数
int-32768~32767 ■■
shortint-32768~32767 ■■
signedint-32768~32767 ■■
unsignedint0~65535 ■■
longint-2147483648~2147483647 ■■■■
unsignedlong0~4294967295 ■■■■int根据特定的系统对应shortint或longintunsignedint根据特定的系统对应unsignedshortint或unsignedlongint超过变量所能表示的范围,产生计算错误:溢出.2023/1/3整型变量取值范围类型说明符数的范围 分配字9整型常量即整数,按不同的进制区分,整数有三种表示方法:十进制数:以非0开始的数,如:220、-560、+369等。八进制数:以0开始的数,如:06、0106、0677等。
十六进制数:以0X或0x开始的数,如:0X0D、0XFF、0x4e、0x123等。3.整型常量2023/1/3整型常量即整数,按不同的进制区分,整数有三种10另外,可在整型常数后添加一个“L”或“l”字母,表示该数为长整型数,如:22L、0773L、0Xae4l等。诸如38A、0578、0x29FG等,都是不合法的常数形式。2023/1/3另外,可在整型常数后添加一个“L”或“l”字母,表示该数为长11(1)十进制数形式 由数码0~9和小数点组成。例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均为合法的实数。注意,必须有小数点。
1.2.1实型常量的表示方法
实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。1.2实型数据2023/1/3(1)十进制数形式1.2.1实型常量的表示方法
实12(2)指数形式
由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为:
aEn(a为十进制数,n为十进制整数)其值为a*10n。如: 2.1E5(等于2.1*105) 3.7E-2(等于3.7*10-2) 0.5E7(等于0.5*107) -2.8E-2(等于-2.8*10-2)2023/1/3(2)指数形式如:2022/12/2613以下则不是合法的实数: 345(无小数点)
E7(阶码标志E之前无数字) -5(无阶码标志) 53.-E3(负号位置不对) 2.7E(无阶码)标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356.f和356.是等价的。因此:(1)十进制小数形式:必须有小数点。(2)指数形式:字母e前必须有数字,字母e后必须为整数
,规范化的指数形式输出。
2023/1/3以下则不是合法的实数:因此:2022/12/2614【例1.2】实型常量的使用#include<stdio.h>main(){ printf("%f\n",356.); printf("%f\n",356); printf("%f\n",356.f);}VC++输出:356.000000-1.#QNAN0356.0000002023/1/3【例1.2】实型常量的使用VC++输出:356.00000151.2.2实型变量
1实型数据在内存中的存放形式实型数据一般占4个字节(32位)内存空间,按指数形式存储。如实数3.14159在内存中的存放形式如下:+.3141591数符小数部分指数小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。2023/1/31.2.2实型变量
1实型数据在内存中的存放形式+.162.实型变量的分类
实型变量分为:单精度(float型)、双精度(double型)和长双精度(longdouble型)三类。如下表:类型说明符比特数(字节数)有效数字数的范围float32(4)6~710-37~1038double64(8)15~1610-307~10308longdouble128(16)18~1910-4931~1049322023/1/32.实型变量的分类类型说明符比特数(字节数)有效数字数的范17实型变量定义的格式和书写规则与整型相同。例如:
floatx,y; (定义x,y为单精度实型量)
doublea,b,c; (定义a,b,c为双精度实型量)2023/1/3实型变量定义的格式和书写规则与整型相同。20183实型数据的舍入误差由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。不同的编译器下处理的精度不同,如下例。【例1.3】实型数据的舍入误差。#include <stdio.h>main(){ floata,b; a=123456.789e5; b=a+20; printf("%f\n",a); printf("%f\n",b);}运行结果(VC++):12345678848.00000012345678848.000000可见一个大数与一小数间运算会产生什么结果?2023/1/33实型数据的舍入误差【例1.3】实型数据的舍入误差。运行结19【例1.4】main(){ floata; doubleb; a=33333.33333; b=33333.33333333333333; printf("%f\n%f\n",a,b);}从本例可以看出,由于a是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。
b是双精度型,有效位为十一位(VC++)。
实型数据在实际运用中要注意!!!(较大数与小数算术运算、比较等)运行结果(VC++): 33333.332031 33333.3333332023/1/3【例1.4】从本例可以看出,由于a是单精度浮点型,20舍入误差示例1.5(VC++):#include<stdio.h>#include<math.h>main(intargc,char**argv){ printf("%d\n",1.0/3*3); /*结果为0*/
printf("%f\n",1.0/3.*3.);/*结果为1.000000*/
printf("%d\n",sqrt(2.)*sqrt(2.)); /*结果为1*/
printf("%f\n",sqrt(2.)*sqrt(2.)); /*结果为2.000000*/}2023/1/3舍入误差示例1.5(VC++):2022/12/26211.2.3实型常量的类型实型常量不分单、双精度,都按双精度double型处理。2023/1/31.2.3实型常量的类型2022/12/26221.3.1字符常量
1.3字符型数据1字符常量定界符为单引号(')的单字符。例如: 'a'、'A'、'3'、'='、'+'、'?'注意英文字母区分大小写。C字符常量特点:(1)字符常量只能用单引号括起来,不能用双引号或其它括号。(2)字符常量只能是单个字符,不能是字符串。(3)字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如‘5’和5。2023/1/31.3.1字符常量1.3字符型数据1字符常量202232转义字符转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或几个字符。 转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义如下表:
2023/1/32转义字符2022/12/2624转义字符转义字符的意义ASCII代码\n换行10\t横向跳到下一制表位置9\b退格8\r回车13\f走纸换页12\\反斜线符"\"92\'单引号符39\"双引号符34\a鸣铃7\ddd1~3位八进制数所代表的字符
\xhh1~2位十六进制数所代表的字符
2023/1/3转义字符转义字符的意义ASCII代码\n换行10\t横向跳到25广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字母“A”(见附录I),\102表示字母“B”,\134表示反斜线,\X0A表示换行等。
常见字符的值: 20H~空格 30H~‘0’-----39H~‘9' 41H~'A' 61H~'a'内码(ASCII码)在32~126范围内为可显示字符。
2023/1/3广义地讲,C语言字符集中的任何一个字符均可用转26【例1.6】转义字符的使用。main(){ inta,b,c; a=5; b=6; c=7; printf("abc\tde\rf\n"); printf("hijk\tL\bM\n");}运行结果:fabcdehijkM2023/1/3【例1.6】转义字符的使用。运行结果:2022/12/26271.3.2字符变量
字符变量用来存储字符常量,即单个字符。字符变量的类型说明符是char。在内存中占一个字节,字符变量类型定义的格式和书写规则都与整型变量相同。例如:
chara,b;2023/1/31.3.2字符变量2022/12/26281.3.3字符数据在内存中的存储形式及使用方法字符以ASCII码形式存放在内存单元中,因此ASCII码被称作字符的内码。字符型与整型的转换:自动进行注意:字符型占一个字节,整型占两个字节(与编译器有关)。每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。
2023/1/31.3.3字符数据在内存中的存储形式及使用方法2022/129如'x'的十进制ASCII码是120,'y'的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值:
a='x'; b='y';
实际上是在a,b两个单元内存放120和121的二进制代码:0111100001111001a:
b:
可以把字符作为整型量进行处理,也可以对整型变量赋以字符值,把整型量按字符量输出。整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。
2023/1/3如'x'的十进制ASCII码是120,'y30【例1.7】向字符变量赋以整数。main(){ chara,b; a=120; b=121; printf("%c,%c\n",a,b); printf("%d,%d\n",a,b);}运行结果:x,y120,1212023/1/3【例1.7】向字符变量赋以整数。运行结果:2022/12/231【例1.8】字符运算。main(){ chara,b; a='a'; b='b'; a=a-32; b=b-32; printf("%c,%c\n%d,%d\n",a,b,a,b);}运行结果:A,B65,662023/1/3【例1.8】字符运算。运行结果:2022/12/2632
1.3.5字符串常量
字符串常量是由一对双引号括起的字符序列。例如:"CHINA",“Cprogram”,"$12.5"等都是合法的字符串常量。字符串常量和字符常量之间区别:(1)字符常量由单引号括起来,字符串常量由双引号括起来。(2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。(3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量,但是可以用一个字符数组来存放一个字符串常量。2023/1/3
1.3.5字符串常量2022/12/2633(4)字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加1。增加的一个字节中存放字符“\0”(ASCII码为0)。这是字符串结束的标志,该字符不能显示也不用显式写出来。例如:字符串"Cprogram"在内存中所占的字节为:
C
program\0'a'和"a"的区别是?“A”存储方式为A\0但‘A’存储方式为:A2023/1/3(4)字符常量占一个字节的内存空间。字符串常量占的内存字节数34举例"TES""""a"'T''E''S''T'\08469838400\0'a'\0009700字符串变量的使用在第6章数组(2)中介绍.2023/1/3'T''E''S''T'\08469838400\0'a'\35变量使用的三部曲:定义,赋初值,改变之。在程序中常常需要对变量赋初值,以便使用变量。C语言程序中可有多种方法为变量提供初值。方法:(1)先定义后赋值类型说明符变量1,变量2,……;(2)在变量定义中赋初值,一般形式为:
类型说明符变量1=值1,变量2=值2,……;1.4变量赋初值2023/1/3变量使用的三部曲:定义,赋初值,改变之36
变量定义的同时给变量赋以初值
以下程序与左边的有什么区别?main(){ inta=3,b,c=5; b=a+c; printf("a=%d,b=%d,c=%d\n",a,b,c);}main(){ inta,b,c;a=3;c=5; b=a+c; printf("a=%d,b=%d,c=%d\n",a,b,c);}2023/1/3
变量定义的同时给变量赋以初值以下程序与左边的有什么区别?371.5.1数据输入输出的概念及在C语言中的实现1.5数据的输入输出
在C语言中,所有的数据输入/输出都是由库函数完成的。因此都是函数语句。在使用C语言库函数时,要用预编译命令
#include将有关“头文件”包含到源文件中。2023/1/31.5.1数据输入输出的概念及在C语言中的实现1.5数38使用标准输入输出库函数时要用到“stdio.h”文件,因此源文件开头应有以下预编译命令: #include<stdio.h>或 #include"stdio.h"二者的区别:2023/1/3使用标准输入输出库函数时要用到“stdio391.5.2字符数据的输入输出1putchar函数(字符输出函数)功能:在显示器上输出单个字符。其一般形式为:
putchar(字符变量);例如:
putchar('A');(输出大写字母A) putchar(x);(输出字符变量x的值)
putchar(‘\101’);(也是输出字符A) putchar('\n');(换行)2023/1/31.5.2字符数据的输入输出2022/12/2640【例1.9】输出单个字符。#include<stdio.h>main(){ chara,b,c; a='B'; b='o'; c='k'; /*以下书写方式不提倡*/
putchar(a);putchar(b);putchar(b);putchar(c); putchar('\t'); putchar(a);putchar(b); putchar('\n'); putchar(b);putchar(c);}运行结果:BookBook2023/1/3【例1.9】输出单个字符。运行结果:2022/12/26412.getchar函数(键盘输入函数)功能:从键盘上输入一个字符。其一般形式为:
getchar();通常把输入的字符赋予一个字符变量,构成赋值语句,如:
charc; c=getchar();2023/1/32.getchar函数(键盘输入函数)2022/12/2642使用getchar函数还应注意几个问题:(1)getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。(2)使用本函数前必须包含文件“stdio.h”。2023/1/3使用getchar函数还应注意几个问题:2022/12/2643【例1.10】getchar()示例--屏幕菜单设计及应用。要求:在屏幕显示上供用户选择的功能菜单,用户通过键盘选择后,计算机显示用户选择的结果,不断重复,直到用户选择退出,结束程序运行.分析:1)可以通过循环实现同一功能的重复执行;2)在每一次循环中:
A.清除屏幕;
B.显示菜单信息;
C.获取用户的键盘输入;
D.分析用户输入并作出相应处理;2023/1/3【例1.10】getchar()示例--屏幕菜单设计及应用。44/*参考程序*/#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){charselect;while(1) /*(1)--为什么可以这样用?*/{system(“cls”); /*执行DOS系统命令:cls清屏*/
printf("\t\t屏幕菜单示例\n");printf("1--加法测试;\t2--减法测试\n");printf("3--除法测试;\t4--记忆力测试\n");printf("0--退出.\n");printf("请选择(0--4):");
select=getchar(); /*等待用户输入,也可以用scanf()*/2023/1/3/*参考程序*/#include<stdio.h>202245
if(select<‘0’||select>‘4’)/*判断输入合法?*/printf("选择错误!请重新选择!\n"); if(select==‘0’){ /*用"0"会如何?*/ printf("您选择的是退出测试!\n");_beep(300,400);break; }
if(select==‘4‘) /*==换成“=”如何?*/printf("您选择的是记忆力测试!\n"); system("PAUSE"); getchar();/*用户的输入是<字符>+Enter,清除<Enter>*/ }return(0);}2023/1/3if(select<‘0’||sel461.5.3格式输入与输出1printf函数(格式输出函数)函数功能:按用户指定的格式,把指定的数据显示到显示器屏幕上。(1)printf函数调用的一般形式
printf(“格式控制字符串”,输出表列);其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。2023/1/31.5.3格式输入与输出2022/12/2647格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如: “%d”表示按十进制整型输出; “%ld”表示按十进制长整型输出; “%c”表示按字符型输出等。非格式字符串在输出时原样照印,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。
2023/1/3格式字符串是以%开头的字符串,在%后面跟有各种48【例1.11】格式输出main(){ inta,b; a=88; b=89; printf("%d%d\n",a,b); printf("%d,%d\n",a,b); printf("%c,%c\n",a,b); printf("a=%d,b=%d",a,b);}运行结果:888988,89X,Ya=88,b=892023/1/3【例1.11】格式输出运行结果:2022/12/2649(2)格式字符串在C中格式字符串的一般形式为:
[标志][输出最小宽度][.精度][长度]类型其中方括号[]中的项为可选项。各项的意义介绍如下:1)类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:
2023/1/3(2)格式字符串2022/12/2650格式字符意
义d以十进制形式输出带符号整数(正数不输出符号)o以八进制形式输出无符号整数(不输出前缀0)x,X以十六进制形式输出无符号整数(不输出前缀Ox)u以十进制形式输出无符号整数f以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数g,G以%f或%e中较短的输出宽度输出单、双精度实数c输出单个字符s输出字符串2023/1/3格式字符意义d以十进制形式输出带符号512)
标志:标志字符为-、+、#、空格四种,其意义下表所示:标
志意
义-结果左对齐,右边填空格+输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号#对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f类当结果有小数时才给出小数点2023/1/32)
标志:标志字符为-、+、#、空格四种,其意义下表所示:523)输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。4)精度:精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。5)长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。
2023/1/33)输出最小宽度:用十进制整数来表示输出的最少位数。53【例1.12】格式输出(2)#include<stdio.h>main(){ inta;floatb;doublec;chard; a=15; b=123.1234567; c=12345678.1234567; d='p'; printf("a=%d,%5d,%o,%x\n",a,a,a,a); printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b); printf("c=%lf,%f,%8.4lf\n",c,c,c); printf("d=%c,%8c\n",d,d);}2023/1/3【例1.12】格式输出(2)2022/12/2654运行结果:a=15,15,17,fb=123.123459,123.123459,123.1235,1.231235e+002c=12345678.123457,12345678.123457,12345678.1235d=p,p2023/1/3运行结果:2022/12/2655说明:(1)C语言的格式化输入/输出比较繁琐,在以GUI为主流的应用程序的输入输出中较少使用(scanf()函数则用不到),但它的另一种形式sprintf()函数中的格式化数据处理则经常会用到。(2)如何获得有关sprintf()函数的用法知识?请使用微软开发者网络—MicrosoftDeveloperNetwork(MSDN)。它是一个有关计算机软件设计知识的海洋,是微软平台的软件开发和应用人员的最好的获取知识的工具。(3)读者从现在开始,应该逐步学会如何获取书本上没有的知识,从MSDN、Internet……。请查阅字符串输出函数puts()的用法。
2023/1/3说明:2022/12/26562scanf函数(格式输入函数)功能:按用户指定的格式从键盘上把数据输入到指定的变量之中。(1)scanf函数的一般形式
scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。
例如: &a,&b分别表示(取)变量a和变量b的地址。
2023/1/32scanf函数(格式输入函数)2022/12/2657变量的地址和变量值的关系如下:在赋值表达式中给变量赋值,如:
a=567则,a为变量名,567是变量的值,&a是变量a的地址。
2023/1/3变量的地址和变量值的关系如下:2022/12/2658【例1.13】格式输入#include<stdio.h>main(){ inta,b,c; printf("请输入整型量a,b,c的值:\n"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c);}2023/1/3【例1.13】格式输入2022/12/2659(2)
格式字符串格式字符串的一般形式为: %[*][输入数据宽度][长度]类型其中有方括号[]的项为任选项。各项的意义如下:1)类型:表示输入数据的类型.格式字符意义d输入十进制整数o输入八进制整数x输入十六进制整数u输入无符号十进制整数f或e输入实型数(用小数形式或指数形式)c输入单个字符s输入字符串2023/1/3(2)格式字符串格式字符意义d输入十进制整数o输入八进制整602)“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
如:
scanf("%d%*d%d",&a,&b);当输入为:123时,把1赋予a,2被跳过,3赋予b。3)宽度:用十进制整数指定输入的宽度(即字符数)。例如:
scanf("%5d",&a);
输入:12345678,只把12345赋予变量a,其余部分被截去。又如:
scanf("%4d%4d",&a,&b);输入:12345678,将把1234赋予a,而把5678赋予b。
4)长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示短整型数据。2023/1/32)“*”符:用以表示该输入项,读入后不赋予相应的61【例1.14】输入格式字符串#include<stdio.h>main(){ chara,b; printf("inputcharactera,b\n"); scanf("%c%c",&a,&b); printf("%c%c\n",a,b);}由于scanf函数“%c%c”中没有空格,输入MN,结果输出只有M。而输入改为MN时则可输出MN两字符。试一试:“%c%c”中加上空格会怎样?(分别输入MN或M,N)2023/1/3【例1.14】输入格式字符串由于scanf函数“%c62【例1.15】输入格式字符串(2)#include<stdio.h>main(){ chara,b; printf("inputcharactera,b\n"); scanf("%c%c",&a,&b); printf("\n%c%c\n",a,b);}本例表示scanf格式控制串"%c%c"之间有空格时,输入的数据之间可以有空格间隔。
2023/1/3【例1.15】输入格式字符串(2)2022/12/2663【例1.16】输入格式字符串(3)#include<stdio.h>main(){ chara,b,c; printf("inputcharactera,b,c\n"); scanf("%c%c%c",&a,&b,&c); printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);}
输入三个小写字母,输出其ASCII码和对应的大写字母。
2023/1/3【例1.16】输入格式字符串(3)2022/12/2664【例1.17】输出各种数据类型的字节长度。#include<stdio.h>
main(){ inta; longb; floatf; doubled; charc; printf("\nint:%d\nlong:%d\nfloat:%d\ndouble:%d\nchar:%d\n",sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c));}运行结果:int:4long:4float:4double:8char:12023/1/3【例1.17】输出各种数据类型的字节长度。运行结果:2022651.5.4汉字的输入与输出1汉字信息的存储 与用7位ASCII码表示的英文字符不同,一个汉字占用二个字节,每个字节的最高位为1,汉字在计算机中的存储编码表示称为汉字的机内码,详细的信息请查阅有关资料或GB2312-80。
如汉字“啊”的机内码为0xb0、0xa1,“阿”的机内码为0xb0、0xa2。 2汉字信息的输出
汉字信息的形式输出方法可见例1.20。
2023/1/31.5.4汉字的输入与输出2022/12/2666【例1.18】汉字信息的输出#include<stdio.h>main(intargc,char**argv){ unsignedcharc1,c2;/*定义为无符号char型*/
c1=0xb0; /*汉字啊的机内码的第一字节*/
c2=0xa1; /*汉字啊的机内码的第二字节*/
puts("\n汉字输出示例:");
printf("\n输出的汉字:%c%c\n",c1,c2); puts("\n另一种输出方法:");
putchar(c1); putchar(c2);}2023/1/3【例1.18】汉字信息的输出2022/12/26673汉字信息的输入
由于每个汉字实际存储需要二个字节,故每个汉字是一个字符串,字符串(西文或汉字)的输入要通过数组或指针进行,详见进阶篇第6章数组(2)。
2023/1/33汉字信息的输入2022/12/2668C语言程序设计
—进阶篇第1章数据类型与输入输出(二)2023/1/3C语言程序设计
—进阶篇第1章数据类69内容概述1.C语言的数据类型及分类。2.C语言中的常量和变量。3.C语言的数据输入/输出。2023/1/3内容概述1.C语言的数据类型及分类。2022/12/2670教学目标1.掌握数据类型的概念,了解C语言能够处理的数据类型。2.掌握各种类型常量的特点及表示形式。3.掌握变量的概念,了解float、char型变量的特点,掌握这二种类型变量的定义、赋值和使用方法。4.掌握数据的输入输出(包括汉字的输入与输出)的基本方法。2023/1/3教学目标1.掌握数据类型的概念,了解C语言能够处理的数据类型71数据是计算机程序处理的所有信息的总称,数值、字符、文本等都是数据,如整数、实数、英文字母、数字符号、英语单词、汉字、一句话、一段文章、一个学生信息等。在C语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类,共9种。 本章中,将介绍基本数据类型中的浮点型和字符型。其余类型在以后各章中陆续介绍。1.1C的数据类型
2023/1/3数据是计算机程序处理的所有信息的总称,数值、字符、文本721.基本数据类型
基本数据类型最主要的特点是,其值不可以再分解为其它类型。基本类型整型字符型浮点型单精度双精度枚举短整型长整型2023/1/31.基本数据类型基本数据类型最主要的特点是,732.整型变量整型变量分为四种:基本型、短整型、长整型、无符号型基本型: 用“int”定义,在不同的系统中它的长度可能不同,如在DOS下的int变量占2个字节,相当于短整型,而在Windows下的int变量占4个字节,相当于长整型。2023/1/32.整型变量整型变量分为四种:基本型、短整型、长整型、无742.整型变量短整型:用“shortint”或“short”定义,占2个字节。长整型:用“long”或“longint”定义,占4个字节。无符号型:用“unsigned”定义
不存放符号,数据不带符号数。 无符号整型:“unsignedint”
无符号短整型:“unsignedshortint”
无符号长整型:“unsignedlongint” 注意:如无指定,则为有符号数。2023/1/32.整型变量短整型:用“shortint”或“shor75【例1.1】整型数用法示例main(){ unsignedshortinta; shortintb; a=65535; b=32767; a=a+1;
b=b+1;
printf("a=%d\n",a); printf("b=%d\n",b);}运行结果为:a=0b=-32768为什么?a从原来的65535加1后变为0,这说明a所能表示的值的大小是有限的!65535的二进制数为1111111111111111,再加1=?32767的二进制数为0111111111111111,再加1=?2023/1/3【例1.1】整型数用法示例main()运行结果为:a从原来的76整型变量取值范围类型说明符数的范围 分配字节数
int-32768~32767 ■■
shortint-32768~32767 ■■
signedint-32768~32767 ■■
unsignedint0~65535 ■■
longint-2147483648~2147483647 ■■■■
unsignedlong0~4294967295 ■■■■int根据特定的系统对应shortint或longintunsignedint根据特定的系统对应unsignedshortint或unsignedlongint超过变量所能表示的范围,产生计算错误:溢出.2023/1/3整型变量取值范围类型说明符数的范围 分配字77整型常量即整数,按不同的进制区分,整数有三种表示方法:十进制数:以非0开始的数,如:220、-560、+369等。八进制数:以0开始的数,如:06、0106、0677等。
十六进制数:以0X或0x开始的数,如:0X0D、0XFF、0x4e、0x123等。3.整型常量2023/1/3整型常量即整数,按不同的进制区分,整数有三种78另外,可在整型常数后添加一个“L”或“l”字母,表示该数为长整型数,如:22L、0773L、0Xae4l等。诸如38A、0578、0x29FG等,都是不合法的常数形式。2023/1/3另外,可在整型常数后添加一个“L”或“l”字母,表示该数为长79(1)十进制数形式 由数码0~9和小数点组成。例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均为合法的实数。注意,必须有小数点。
1.2.1实型常量的表示方法
实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。1.2实型数据2023/1/3(1)十进制数形式1.2.1实型常量的表示方法
实80(2)指数形式
由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为:
aEn(a为十进制数,n为十进制整数)其值为a*10n。如: 2.1E5(等于2.1*105) 3.7E-2(等于3.7*10-2) 0.5E7(等于0.5*107) -2.8E-2(等于-2.8*10-2)2023/1/3(2)指数形式如:2022/12/2681以下则不是合法的实数: 345(无小数点)
E7(阶码标志E之前无数字) -5(无阶码标志) 53.-E3(负号位置不对) 2.7E(无阶码)标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356.f和356.是等价的。因此:(1)十进制小数形式:必须有小数点。(2)指数形式:字母e前必须有数字,字母e后必须为整数
,规范化的指数形式输出。
2023/1/3以下则不是合法的实数:因此:2022/12/2682【例1.2】实型常量的使用#include<stdio.h>main(){ printf("%f\n",356.); printf("%f\n",356); printf("%f\n",356.f);}VC++输出:356.000000-1.#QNAN0356.0000002023/1/3【例1.2】实型常量的使用VC++输出:356.00000831.2.2实型变量
1实型数据在内存中的存放形式实型数据一般占4个字节(32位)内存空间,按指数形式存储。如实数3.14159在内存中的存放形式如下:+.3141591数符小数部分指数小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。2023/1/31.2.2实型变量
1实型数据在内存中的存放形式+.842.实型变量的分类
实型变量分为:单精度(float型)、双精度(double型)和长双精度(longdouble型)三类。如下表:类型说明符比特数(字节数)有效数字数的范围float32(4)6~710-37~1038double64(8)15~1610-307~10308longdouble128(16)18~1910-4931~1049322023/1/32.实型变量的分类类型说明符比特数(字节数)有效数字数的范85实型变量定义的格式和书写规则与整型相同。例如:
floatx,y; (定义x,y为单精度实型量)
doublea,b,c; (定义a,b,c为双精度实型量)2023/1/3实型变量定义的格式和书写规则与整型相同。20863实型数据的舍入误差由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。不同的编译器下处理的精度不同,如下例。【例1.3】实型数据的舍入误差。#include <stdio.h>main(){ floata,b; a=123456.789e5; b=a+20; printf("%f\n",a); printf("%f\n",b);}运行结果(VC++):12345678848.00000012345678848.000000可见一个大数与一小数间运算会产生什么结果?2023/1/33实型数据的舍入误差【例1.3】实型数据的舍入误差。运行结87【例1.4】main(){ floata; doubleb; a=33333.33333; b=33333.33333333333333; printf("%f\n%f\n",a,b);}从本例可以看出,由于a是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。
b是双精度型,有效位为十一位(VC++)。
实型数据在实际运用中要注意!!!(较大数与小数算术运算、比较等)运行结果(VC++): 33333.332031 33333.3333332023/1/3【例1.4】从本例可以看出,由于a是单精度浮点型,88舍入误差示例1.5(VC++):#include<stdio.h>#include<math.h>main(intargc,char**argv){ printf("%d\n",1.0/3*3); /*结果为0*/
printf("%f\n",1.0/3.*3.);/*结果为1.000000*/
printf("%d\n",sqrt(2.)*sqrt(2.)); /*结果为1*/
printf("%f\n",sqrt(2.)*sqrt(2.)); /*结果为2.000000*/}2023/1/3舍入误差示例1.5(VC++):2022/12/26891.2.3实型常量的类型实型常量不分单、双精度,都按双精度double型处理。2023/1/31.2.3实型常量的类型2022/12/26901.3.1字符常量
1.3字符型数据1字符常量定界符为单引号(')的单字符。例如: 'a'、'A'、'3'、'='、'+'、'?'注意英文字母区分大小写。C字符常量特点:(1)字符常量只能用单引号括起来,不能用双引号或其它括号。(2)字符常量只能是单个字符,不能是字符串。(3)字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如‘5’和5。2023/1/31.3.1字符常量1.3字符型数据1字符常量202912转义字符转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或几个字符。 转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义如下表:
2023/1/32转义字符2022/12/2692转义字符转义字符的意义ASCII代码\n换行10\t横向跳到下一制表位置9\b退格8\r回车13\f走纸换页12\\反斜线符"\"92\'单引号符39\"双引号符34\a鸣铃7\ddd1~3位八进制数所代表的字符
\xhh1~2位十六进制数所代表的字符
2023/1/3转义字符转义字符的意义ASCII代码\n换行10\t横向跳到93广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字母“A”(见附录I),\102表示字母“B”,\134表示反斜线,\X0A表示换行等。
常见字符的值: 20H~空格 30H~‘0’-----39H~‘9' 41H~'A' 61H~'a'内码(ASCII码)在32~126范围内为可显示字符。
2023/1/3广义地讲,C语言字符集中的任何一个字符均可用转94【例1.6】转义字符的使用。main(){ inta,b,c; a=5; b=6; c=7; printf("abc\tde\rf\n"); printf("hijk\tL\bM\n");}运行结果:fabcdehijkM2023/1/3【例1.6】转义字符的使用。运行结果:2022/12/26951.3.2字符变量
字符变量用来存储字符常量,即单个字符。字符变量的类型说明符是char。在内存中占一个字节,字符变量类型定义的格式和书写规则都与整型变量相同。例如:
chara,b;2023/1/31.3.2字符变量2022/12/26961.3.3字符数据在内存中的存储形式及使用方法字符以ASCII码形式存放在内存单元中,因此ASCII码被称作字符的内码。字符型与整型的转换:自动进行注意:字符型占一个字节,整型占两个字节(与编译器有关)。每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。
2023/1/31.3.3字符数据在内存中的存储形式及使用方法2022/197如'x'的十进制ASCII码是120,'y'的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值:
a='x'; b='y';
实际上是在a,b两个单元内存放120和121的二进制代码:0111100001111001a:
b:
可以把字符作为整型量进行处理,也可以对整型变量赋以字符值,把整型量按字符量输出。整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。
2023/1/3如'x'的十进制ASCII码是120,'y98【例1.7】向字符变量赋以整数。main(){ chara,b; a=120; b=121; printf("%c,%c\n",a,b); printf("%d,%d\n",a,b);}运行结果:x,y120,1212023/1/3【例1.7】向字符变量赋以整数。运行结果:2022/12/299【例1.8】字符运算。main(){ chara,b; a='a'; b='b'; a=a-32; b=b-32; printf("%c,%c\n%d,%d\n",a,b,a,b);}运行结果:A,B65,662023/1/3【例1.8】字符运算。运行结果:2022/12/26100
1.3.5字符串常量
字符串常量是由一对双引号括起的字符序列。例如:"CHINA",“Cprogram”,"$12.5"等都是合法的字符串常量。字符串常量和字符常量之间区别:(1)字符常量由单引号括起来,字符串常量由双引号括起来。(2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。(3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量,但是可以用一个字符数组来存放一个字符串常量。2023/1/3
1.3.5字符串常量2022/12/26101(4)字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加1。增加的一个字节中存放字符“\0”(ASCII码为0)。这是字符串结束的标志,该字符不能显示也不用显式写出来。例如:字符串"Cprogram"在内存中所占的字节为:
C
program\0'a'和"a"的区别是?“A”存储方式为A\0但‘A’存储方式为:A2023/1/3(4)字符常量占一个字节的内存空间。字符串常量占的内存字节数102举例"TES""""a"'T''E''S''T'\08469838400\0'a'\0009700字符串变量的使用在第6章数组(2)中介绍.2023/1/3'T''E''S''T'\08469838400\0'a'\103变量使用的三部曲:定义,赋初值,改变之。在程序中常常需要对变量赋初值,以便使用变量。C语言程序中可有多种方法为变量提供初值。方法:(1)先定义后赋值类型说明符变量1,变量2,……;(2)在变量定义中赋初值,一般形式为:
类型说明符变量1=值1,变量2=值2,……;1.4变量赋初值2023/1/3变量使用的三部曲:定义,赋初值,改变之104
变量定义的同时给变量赋以初值
以下程序与左边的有什么区别?main(){ inta=3,b,c=5; b=a+c; printf("a=%d,b=%d,c=%d\n",a,b,c);}main(){ inta,b,c;a=3;c=5; b=a+c; printf("a=%d,b=%d,c=%d\n",a,b,c);}2023/1/3
变量定义的同时给变量赋以初值以下程序与左边的有什么区别?1051.5.1数据输入输出的概念及在C语言中的实现1.5数据的输入输出
在C语言中,所有的数据输入/输出都是由库函数完成的。因此都是函数语句。在使用C语言库函数时,要用预编译命令
#include将有关“头文件”包含到源文件中。2023/1/31.5.1数据输入输出的概念及在C语言中的实现1.5数106使用标准输入输出库函数时要用到“stdio.h”文件,因此源文件开头应有以下预编译命令: #include<stdio.h>或 #include"stdio.h"二者的区别:2023/1/3使用标准输入输出库函数时要用到“stdio1071.5.2字符数据的输入输出1putchar函数(字符输出函数)功能:在显示器上输出单个字符。其一般形式为:
putchar(字符变量);例如:
putchar('A');(输出大写字母A) putchar(x);(输出字符变量x的值)
putchar(‘\101’);(也是输出字符A) putchar('\n');(换行)2023/1/31.5.2字符数据的输入输出2022/12/26108【例1.9】输出单个字符。#include<stdio.h>main(){ chara,b,c; a='B'; b='o'; c='k'; /*以下书写方式不提倡*/
putchar(a);putchar(b);putchar(b);putchar(c); putchar('\t'); putchar(a);putchar(b); putchar('\n'); putchar(b);putchar(c);}运行结果:BookBook2023/1/3【例1.9】输出单个字符。运行结果:2022/12/261092.getchar函数(键盘输入函数)功能:从键盘上输入一个字符。其一般形式为:
getchar();通常把输入的字符赋予一个字符变量,构成赋值语句,如:
charc; c=getchar();2023/1/32.getchar函数(键盘输入函数)2022/12/26110使用getchar函数还应注意几个问题:(1)getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。(2)使用本函数前必须包含文件“stdio.h”。2023/1/3使用getchar函数还应注意几个问题:2022/12/26111【例1.10】getchar()示例--屏幕菜单设计及应用。要求:在屏幕显示上供用户选择的功能菜单,用户通过键盘选择后,计算机显示用户选择的结果,不断重复,直到用户选择退出,结束程序运行.分析:1)可以通过循环实现同一功能的重复执行;2)在每一次循环中:
A.清除屏幕;
B.显示菜单信息;
C.获取用户的键盘输入;
D.分析用户输入并作出相应处理;2023/1/3【例1.10】getchar()示例--屏幕菜单设计及应用。112/*参考程序*/#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){charselect;while(1) /*(1)--为什么可以这样用?*/{system(“cls”); /*执行DOS系统命令:cls清屏*/
printf("\t\t屏幕菜单示例\n");printf("1--加法测试;\t2--减法测试\n");printf("3--除法测试;\t4--记忆力测试\n");printf("0--退出.\n");printf("请选择(0--4):");
select=getchar(); /*等待用户输入,也可以用scanf()*/2023/1/3/*参考程序*/#include<stdio.h>2022113
if(select<‘0’||select>‘4’)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论