您好,欢迎访问三七文档
实验四基本输入输出语句4.1目的和要求1.掌握标准输出函数printf的调用形式。2.掌握printf函数中常用的格式说明。3.掌握简单的输出格式设计。4.掌握标准输入函数scanf的调用格式。5.掌握scanf函数中常用的格式说明。6.掌握使用scanf函数进行数据输入的方法。4.2知识回顾1.printf()函数的一般调用形式printf()函数是C语言提供的标准输出函数,用来在标准输出终端设备上按指定格式进行输出。在函数调用后加“;”构成输出语句。例如:printf(“a=%d,b=%d”,a,b);以上输出语句中,printf是函数名,用双引号括起来的字符串部分是输出格式控制,决定了输出数据的内容和格式。a,b为输出项,是printf函数的实参。输出语句输出结果:printf(%s\n,Hello!);//Hello!printf(%10s\n,Hello!);//####Hello!printf(%10.3s\n,Hello!);//#######Helprintf(%c\n,'A');//Aprintf(%5c\n,'A');//####A(1)给输出项提供输出格式说明:将要输出的数据按照指定的格式说明。(2)提供需要原样输出的文字或字符:除了格式转换说明外,字符串中的其他字符将按原样输出。2.printf()函数中常用的格式说明(1)格式字符及其功能。(2)长度修饰符:在%和格式字符之间,可以加入长度修饰符,以保证数据输出格式的正确和对齐。例如:假如有如下定义:floatf=12345.678;doubled=12345.6789056789;通过实验验证以下的printf与相应的运行结果:输出语句输出结果printf(%f\n,f);//12345.677734printf(%f\n,d);//12345.678906printf(%10.2f\n,f);//12345.68printf(%e\n,d);//1.234568e+004(3)输出数据所占的宽度说明,输出数据带“+,—”号。3.scanf()函数的一般调用格式scanf函数的一般调用形式如下:scanf(格式控制,输入项1,输入项2,…);例如:若k为int型变量,a为float型变量,y为double型变量,可通过以下函数调用语句进行输入:scanf(“%d%f%lf”,&k,&a,&y);4.scanf()函数中常用的格式说明每个格式说明都必须用%开头,以一个“格式字符”作为结束。在格式串中,必须含有与输入项一一对应的格式转换说明符。在scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以对实数指定小数位的宽度。由于输入是一个字符流,scanf从者个流中按照格式控制指定的格式解析出相应数据,送到指定地址的变量中。scanf函数有返回值,其值就是本次scanf调用正确输入的数据项的个数。5.通过scanf()函数从键盘输入数据(1)输入数值数据。若要给k赋值10,a赋值12.3,y赋值1234567.89,输入格式可以是(输入的每一个数据之前可有任意空格):1012.31234567.89CR此处CR表示回车键。也可以表示为:10CR12.3CR1234567.89CR(2)指定输入数据所占的宽度,可以在格式字符前加入一个正整数指定输入数据所占的宽度。例:scanf(”%3d%5f%5lf”,&k,&a,&y);(3)跳过某个输入数据,可以在%和格式字符之间加入“*”号,作用是跳过对应的输入数据。(4)在格式字符控制串中插入其他字符。例如:#includestdio.hvoidmain(){inta,b,c;getchar();scanf(%d%d%d,&a,&b,&c);printf(%d,%d,%d\n,a,b,c);}6.其他输入输出格式(1)使用putchar()函数——输出单个字符#includestdio.hvoidmain(){chara,b,c;a='A';b='B';c='C';putchar(a);putchar(b);putchar(c);putchar('\n');putchar(a);putchar('\n');putchar(b);putchar('\n');putchar(c);}(2)使用getchar()函数——输入单个字符#includestdio.hvoidmain(){charc;c=getchar();putchar(c);putchar('\n');}4.3应用案例——日期数据处理1.需求陈述日期数据中包含年、月、日三部分数据。用户输入时可能以12/02/2003格式键入,也可能以12-02-2003格式键入,还有可能以12:2:2003格式键入,都要求能够从输入数据中读取有效数据。2.需求分析假设读入的日期数据格式为:12-2-2003或12/02/2003,该数据格式中的年、月、日三个数据需要保存到相应的变量,但是连接年、月、日数据的连接符需要被丢弃。当用户以12-02-2003形式键入日期数据时,该数据中的每一个数值(年、月、日)需要被读入对应的变量year、month、date内存单元中,为了去掉不需要的将年、月、日数据分开的连接符,直接方法是将这些字符包含在scanf的格式控制串中。例如将语句写成:scanf(“%d─%d─%d’,&date,&month,&year);这条语句可以去掉以12-2-2003形式读入数据中的连字符,但是当用户输入如下格式的日期数据::12/2/2003或12:2:2003时,该语句语句不仅不能去掉不需要的字符(/或:),还会造成数据错误(只能正确得到date数据)。如果在输入格式字符串中使用scanf函数提供的*c格式。将语句写成:scanf(“%d%*c%d%*c%d’,&date,&month,&year);就能够从输入数据中读取有效数据并丢弃任何%*c所指定的数据(不将其赋给某个变量)。3.设计定义三个基本整型变量month、day、year,用于存放日期中月、日和年份数据,通过scanf语句输入日期数据,并取的相应数值,分别赋值给day,month,year三个变量,然后通过printf语句输出日月年。详细设计过程如图2-4-1所示。图2-4-1程序流程图4.编码实现#includestdio.hvoidmain()输入日期数据输出day,mouth,year结束开始定义变量{intmonth,day,year;printf(Enteradateintheformd-m-y:);scanf(%d%*c%d%*c%d,&month,&day,&year);printf(month=%d,day=%d,year=%d\n,month,day,year);}5.测试(1)预期测试方案测试目的——得到一个预期的日期数据。输入数据——08:02:2015或者06-02-2015预期结果——month=8,day=2,year=2015程序运行结果如图2-4-2所示。图2-4-2预期程序运行结果(2)非预期测试方案测试目的——得到一个错误的日期数据。输入数据——0802---2015预期结果——不能输出正确结果。程序运行结果如图2-4-3所示。图2-4-3非预期程序运行结果4.4实验小结通过对该实训案例的学习,希望读者能够掌握以下两点:1.printf()函数和scanf()函数的使用。2.输入与输出函数格式控制符的使用。4.5编程提高1.编写程序,通过键盘输入两个乘数,给小学生出一道乘法运算题,并输出正确的答案。提示:(1)提示输入两个乘数:乘数1和乘数2;(2)接受键盘输入的两个乘数;(3)以“乘数1*乘数2=”的形式显示乘法题;(4)输出正确的答案。2.从键盘输入学生姓名、年龄、性别、成绩,并在屏幕上显示。要求程序的输出形式如下:Pleaseinputname、age、sex、score:唐一哲19男89.5Nameagesexscore唐一哲19男89.54.5本章小结通过本章的案例学习,格式字符的个数必须与输入项的个数相同,数据类型必须一一对应,非格式字符要原封不动的输入。输入实行数据时,可以比不带小数点,即按整形数据输入,数值型数据与字符或字符串混合输入时,需要注意输入方式。指定输出格式,由格式字符串和非格式字符串两种组成,非格式字符串照原样输出。实验九指针9.1目的和要求1.理解指针、地址和数组间的关系。2.掌握通过指针操作数组元素的方法。3.掌握数组名作为函数参数的编程方式。4.掌握通过指针操作字符串的方法。5.了解掌握使用断点调试程序的方法。9.2知识回顾1.指针变量的定义定义指针变量的一般形式如下:类型名*指针变量名1,*指针变量名2,……;如:int*pi,*pj;pi和pj都是用户标识符,在每个变量前的星号*是一个说明符,用来说明该变量是指针变量。2.元素与元素地址的表示方法元素:a[i]、*(a+i)、p[i]、*(p+i)元素地址:&a[i]、a+i、&p[i]、p+i3.地址值的获取(1)通过求址运算符(&)获得地址值;(2)通过指针变量获得地址值;(3)通过标准函数获得地址值。4.对指针变量的操作(1)通过指针来引用一个存储单元:如*p=*p+1,当*p出现在赋值号左边时,代表的是指针所指的存储单元;当*p出现在赋值号右边时,代表的是指针所指的存储单元的内容。(2)移动指针:所谓移动指针就是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。5.函数之间地址值的传递(1)形参为指针变量时实参和形参之间的数据传递:若函数的形参为指针类型,调用该函数时,对应的实参必须是基类型相同的地址值或者是已指向某个存储单元的指针变量。(2)通过传送地址值在被调用函数中直接改变调用函数中的变量的值。指针作为函数的参数,传递的是实参变量的地址。形参变量本身改变,反过来不会影响实参指针值。6.函数的返回值(1)函数返回值是通过return语句实现的。语句格式:return表达式;或return(表达式)。(2)return语句中返回值的类型应于函数定义时类型一致,如果不一致以函数类型为准,调用时自动进行类型转换。(3)函数值的类型不仅可以是简单的数据类型,而且可以是指针类型。7.一维数组和指针一维数组和数组元素的地址:C语言中,在函数体中或在函数外部定义的数组名可以认为是一个存放地址值的指针变量名,其中的地址值是数组第一个元素的地址,也就是数组所占一串连续存储单元的起始地址,定义数组时的类型即是此指针变量的基类型。8.引用一维数组元素的方法(1)通过数组的首地址引用数组元素。(2)通过指针引用一维数组元素。(3)用带下标的指针变量引用一维数组元素。9.二维数组和指针引用二维数组元素的方法:(1)通过地址引用二维数组元素。(2)通过建立一个指针数组引用二维数组元素。(3)通过建立一个行指针引用二维数组元素。9.3应用案例——查找1.需求陈述输入10个整数存入数组a,再输入一个整数x,在数组a中查找x,若找到则输出相应的下标,否则显示“Notfound”。要求定义和调用函数search(intlist[],intn,intx),在数组list中查找元素x,若找到则返回相应的下标,否则返回-1,参数n代表数组list中元素的数量。2.需求分析根据需求陈述,可知该程序具有的功能有以下四点:(1)数组定义;(2)接收键盘数据实现数组创建;(3)查找子函数实现查找功能;(4)查找结果的输出;3.设计根据需求陈述和分析,可知定义数组a[10],使用循环结构完成键盘数据的接收,实现数组的创建;定义子函数search(intlist[],intn,intx),三个形参分别用来接收主函数的三个实参,分别为数组的首地址、数组大小、要查找的数值,在search(intlist[],intn,intx)函数体中使用循环结构实现数组元素和x值的大小比较,如果找到返回数组元素下标,如果找
本文标题:C实验指导
链接地址:https://www.777doc.com/doc-2908517 .html