输入输出•3.26第4周.406,405•4.23第8周.406,405•5.7第10周406,405•5.21第12周406,405•6.4第14周404,405•MOOC平台玩课网注册输入邀请码•邀请码CBE862E75C•注册学生账号-》课程-》编程课程(C语言程序设计)-》选择上海理工大学C语言(陈章)输入邀请码-》加入班级后选择课件目录计算机•所谓输入输出是以计算机主机为主体而言的。•从计算机向外部设备输出数据称为“输出”(如显示屏、打印机、磁盘等)•从外部设备向计算机输入数据称为“输入”(如键盘、磁盘、光盘、扫描仪等)。C语言中的输入输出与程序的交互C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。例如,printf函数和scanf函数。注意:printf和scanf不是C语言的关键字,而只是函数的名字。标准输入输出函数•c语言函数库中有一批“标准输入输出函数”,它是以标准的输入输出设备(比如键盘、显示器)为输入输出对象的。•C标准输入输出函数库stdio.h文件中在调用标准输入输出库函数时,文件开头应有以下预编译命令:#includestdio.h或#includestdio.hprintf输出•它的用途:将变量和信息显示在显示器上•它可输出文本、数值、符号等信息•它可按照你要求的格式,对数据信息进行特殊格式的显示•多种使用方法输出固定的内容printf(字符串);printf(“您好!欢迎你来到程序王国!);printf(“\n\t\t您好!欢迎你来到程序王国!\n);知识点•标准函数库stdio.h•字符串常量-固定不变的信息,用双引号引入•转义字符使用\n,\t—特殊符号显示案例2#includestdio.h#includemy.hintmain(){inti;printf(简单动画演示程序\n);system(pause);display_picture();//打印动画效果printf(\n\t\t\t恭喜!\n);system(pause);return0;}例2-1说明(1)输入输出函数(2)固定信息显示的实现(3)特殊字符-转义字符‘\n’,’\t’,’\’’,’\”’转义字符PDF知识点•自定义函数库my.h(display_picture,display_picture2)•动画效果-重复•尝试修改一下,做出自己的动画2.2.2信息录入红包程序分析•红包程序设计的数据信息?•如何输入?•如何显示?变量定义•在程序中如果要使用变量,必须先确定其数据类型和名称,即变量定义。变量定义语句的形式如下:数据类型名变量名1[,变量名2,…];•红包个数、红包金额。。。intnum,money;数据的格式化键盘输入格式scanf(格式控制字符串,地址表列);scanf(%d,%d,&a,&b);格式字符输出输入%d表示按十进制整型输出一个值以十进制有符号整数形式转换输入数据%f表示按十进制单精度小数类型输出一个值,默认显示小数后6位以十进制浮点数形式转换输入数据,输入数据时,可以输入整型常量、小数形式实型常量或指数形式实型常量%c表示输出单个字符将输入单个字符%s表示输出一个字符串将输入字符串,遇到第一个空格、TAB或换行符结束转换表2-1格式控制符对照表存储地址与&运算符•在程序运行过程中可以发生变化的量,称为变量,并给它取一个名字,也就是变量名。•定义完成后,计算机将在内存存储区域给它分配一定的空间,并对该空间进行相应编号,这个编号就是变量的内存存储地址•&运算输出红包信息•将输出项,以某种格式显示在标准输出设备控制台•语法格式:25printf(controlstring,argumentlist);控制字符串输出项参数列表格式命令的符号应与输出项参数列表在数量、类型和顺序上匹配需要由“”括起来。由普通字符(文本字符和空格)、格式命令和非打印字符组成2.3.2输入输出多样性printf(“%s”,“huanghua”);1字符串常量2宏定义P46(1)例2-7#defineName“huanghua”printf(“%s”,Name);金额输出格式说明引导符printf(“%d”,i);输出项printf(“金额=%d”,i);printf(“\ni=%d\n”,i);•#defineSQR(X)X*Xmain(){inta=16,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf(“%d”,a);}程序运行后a的值.笑脸单个字符输出%cprintf(“%c”,2);#includestdio.hintmain(){printf(“%s”,“huanghua”);printf(“%f”,i);printf(“%c”,2);return0;}多个信息在同一个printf中输出#includestdio.hmain(){inti=5;floatf=32.345;printf(“i=%d,f=%f\n\n”,i,f);printf(“End\n”);}例2-5P41(1)(2)printf(controlstring1controlstring2,argument1,argument2);常见错误inti=33;charch=‘b’;例如:printf(”i=%d,c=%c\n”,i);输出项个数应该与格式控制字符个数保持一致printf(”i=%f,c=%c\n”,i,ch);输出项数据类型应该与格式控制字符保持一致其他方式的输入与输出•是不是数据只有通过键盘输入?–电子穿戴设备的数据哪来?•是否结果只能输出在显示器上?–如何输出到打印机的?•为什么用文件?•文件的基本操作案例2-6#includestdio.hintmain(){intnumber,money,sum;charconfirm;FILE*fp;fp=fopen(hongbao.txt,w);printf(\n\t\t请输入您的红包个数:\t);scanf(%d,&number);printf(\n\t\t请输入您单个红包金额(元):\t);scanf(%d,&money);getchar();printf(\n\n\t\t确认(Y)\t\t取消(C)\n);scanf(%c,&confirm);printf(您出了%d个红包,单个红包金额%d(元)钱\n,number,money);fprintf(fp,您出了%d个红包,单个红包金额%d(元)钱\n,number,money);fclose(fp);return0;}文件使用•文件指针定义•打开fopen–打开文件路径–打开文件方式r/w•读取信息–fscanf–fprintf•关闭fclose强调P39页表2-1对应不同数据类型的输入和输出,需要实用不同的格式字符输入输出格式控制P51•信息如何进行更规范的输入和输出?比如报表式的显示•如何通过输入格式控制来保证有效数据的输入?输出格式控制符完整的格式:%-0m.n[h|l]格式字符指定输出的数据类型指定输出域宽及精度指定空位填0指定左对齐输出格式说明的引导符号输出双精度数据或短整型数据m表示数据占用的最小宽度数据宽度大于m,按实际宽度输出数据宽度小于m时,补空格n对实数表示输出n位小数对字符串表示最多输出的字符个数-改变输出内容的对齐方式默认为右对齐0用0填充空格[l]:输入长整型变量或者double型变量必加。[h]:输入短整型变量必加。printf()的格式修饰符案例9#includestdio.hintmain(){f=123.456;printf(“%f%10f%10.2f%.2f%-10.2f\n”,f,f,f,f,f);printf(“%s,%7.2s,%.4s,%-5.3s\n”,“china”,“china”,“china”,“china”);}123.456001--123.456001------123.46--123.46--123.46----china,-----ch,chin,chi--案例2-9#includestdio.hintmain(){printf(%-10s%10.2f\t%02d:%02d:%02d\n,紫苑,0.04,19,18,34);printf(%-10s%10.2f\t%02d:%02d:%02d%c%c手气最佳\n,夏在景,10.91,19,18,28,2,2);printf(%-10s%10.2f\t%02d:%02d:%02d\n,清清,1.50,19,28,4);return0;}输入格式控制符完整的格式:%[*][宽度][h|l]格式字符[*]:表示数据输入项要按指定格式进行转换,但不保存到变量中,即该%没有对应的变量。[l]:输入长整型变量或者double型变量必加。[h]:输入短整型变量必加。[宽度]:用来指定输入数据的转换宽度,它必须是一个十进制非负整型常量数据输入格式控制学生成绩显示中涉及的输入数据•请同学们完成下列数据的输入:–年龄(小于100岁)–三门课程成绩年龄的有效性控制scanf(“%2d”,&age);输入12则获得12输入123则获得12P51%*c用法多个值连续输入scanf(%f%f%f,&pc,&eng,&maths);问题:1如何正确输入?2连续输入的有效分隔符是什么?综合案例•2-11•2-12键盘缓冲区•flushall();可以清除缓冲区#includestdio.hmain(){chara;a=getchar();/*hello*/putchar(a);a=getchar();printf(%3c,a);flushall();scanf(%c,&a);/*hello*/putchar(a);scanf(%c,&a);putchar(a);}#includestdio.hintmain(){floatcomp_s,eng_s,maths_s,sum;FILE*fp;fp=fopen(list.txt,r);printf(\t\t\t成绩报表\t\n\n);printf(|计算机|英语|高数|总分|\n);printf(------------------------------------------------\n);while(fscanf(fp,%f,%f,%f,&comp_s,&eng_s,&maths_s)!=-1){sum=comp_s+eng_s+maths_s;printf(|%12.1f|%12.1f|%12.1f|%12.1f\n,comp_s,eng_s,maths_s,sum);printf(---------------------------------------------\n);}fclose(fp);return0;}例2-11,2-12完成课后习题2