1、C语言输入输出输入输出:英文是Input/Output简称IO。C语言标准函数库中,提供了关于以下几种输出函数:(所有标准输入输出函数在调用前,必须先包含头文件stdio.h)一)简单字符输出:a)putchar函数:将指定的(表达式的值所对应的)字符输出到标准输出终端(屏幕)上。格式:int putchar(int c);例如:putchar(a+3);打印的结果是d,是一个字符而不是数值。a的ASCII码是97,加3是ASCII码表中100对应的字符就是d。例如:putchar(99);打印的结果是c,代入一个数字打印出的是一个字符。就如同代入的是学号,打印出来的是姓名一样。b)putc函
2、数:将指定的字符输出到指定标准输出流(屏幕或一个文件)中。格式:int putc(int c,FILE*stream);c)等价关系:putc的功能中包含putchar的功能。putchar(c)等价于putc(c,stdout)。例如:putc(A,stdout)等价于putchar(A)1C语言输入输出新建一个控制台工程编写以下测试代码:#include int main()putchar(A+5);putc(x,stdout);/等价于putchar(x);putc(61,stdout);putc(8,stdout);putchar(59);putchar(n);return 0;新建一
3、个控制台工程测试以下代码:#include int main()FILE*pf=fopen(C:1.txx,w);putc(A+5,pf);putc(x,pf);putc(61,pf);putc(8,pf);putc(59,pf);putc(n,pf);fclose(pf);return 0;2C语言输入输出二)多种格式输出:printf函数:c语言中格式化输出的函数,用于向终端(屏幕)要输出的的各种类型的数据的常量或变量,除了可以输出字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。格式:int printf(const char*format,argument.);
4、printf(control string,argument list);控制字符串参数列表 需要由“”括起来。由文本字符和空格、格式命令和非打印字符组成控制字符串内的每个%后面必须跟一个控制字符,参数列表中的参数都必须与控制字符的个数和类型相匹配。3C语言输入输出#include void main()int nNumb;char sName20;float fSalary=0;printf(请输入一个员工的工号、姓名和工资【以空格间隔】n);scanf(%d%s%f,&nNumb,sName,&fSalary);printf(你输入的工号:%dt姓名:%st工资:%fn,nNumb,sNa
5、me,fSalary);printf(请再输入一个员工的工号、姓名和工资【以空格间隔】n);scanf(%d%s%f,&nNumb,sName,&fSalary);printf(你输入的工号:%dt姓名:%st工资:%fn,nNumb,sName,fSalary);4C语言输入输出三)多种格式输入:scanf函数:格式化输入函数,即按控制字符串内指定的各种格式,从键盘上把数据输入到指定的变量之中。格式:int scanf(const char*format,argument.);a)与printf相同之处是:控制字符串内的每个%后面必须跟一个控制字符,参数列表中的参数都必须与控制字符的个数和类
6、型相匹配b)与printf的不同之处是:scanf的参数列表中,每一个变量之前都必须要带上取地址符号(&)。代表要将参数列表中所有变量的地址一一传递给系统,操作系统要按照给定变量的地址,将用户输入的数据传递给参数列表中每一个对应的变量。(只有数组变量可以不用取地址,因为数组变量自身就是一个内存地址。而printf的参数列表中,所有变量是不用取地址直接代入的。如果scanf函数像直接代入变量不取地址,执行时会因数据送错地址造成整个程序崩溃。c)另外一点与printf不同之处是:scanf的控制字符串内除了控制字符以外,只能指定间隔符空格或逗号。不能像printf函数那样,随意在控制字符之间夹杂其
7、他的文字。5C语言输入输出格式printf()scanf()单字符%c%c 字符串%s%s 有符号的十进制整数%d%d 单精度浮点数(十进制记数法)%f%f双精度浮点数(十进制记数法)%lf%lf 无符号的十进制整数%u%u 无符号的十六进制整数(使用“ABCDEF”)%x%x 无符号的八进制整数%o%o 以下这种写法是大错特错的,因为scanf是只负责输入不负责输出的:scanf(“请输入工号%d,姓名%s和工资%f:”,&nNumb,sName,&fSalary);printf和scanf的常用格式化符号:6C语言输入输出四)简单字符输入:a)getchar函数:从stdio流中读字符,它
8、从标准输入里读取下一个字符。格式:int getchar(void);int c=getchar();b)等价于:int c=getc(stdin)c)也等价于:int c;scanf(“%c”,&c);以上三中形式单独调用时,最好在之前调用一个函数来清理输入流:fflush(stdin);否则,可能获取不到新输入的内容,而是获得了上一次输入时的回车符。五:简单串输入输出函数:gets函数:从stdin流中读取字符串,类似于scanf(“%s”,&x);。puts函数:用来向标准输出设备写字符串并换行,类似于printf(“%sn”,x);7C语言输入输出#include int main(i
9、nt argc,char*argv)int nNumb;char sex;char sName20;printf(请输入工号,姓名(以空格间隔);scanf(%d%s,&nNumb,sName);/fflush(stdin);puts(请输入性别(m或f):);scanf(%c,&sex);printf(工号:%-8d姓名:%-10s,性别:%cn,nNumb,sName,sex);return 0;8C语言输入输出四)printf函数打印时的占位控制:a)在printf函数的控制串内,%符号与控制符之间的数字是用来控制占位的。例如:printf(“%8.3f”,34.678f);8代表包括小
10、数点总共占用8个空位,.3代表保留3位小数打印。b)%之后带-符号代表在所占用的空间内左对齐,缺省不带-符号是右对齐。例如:printf(“价格=%-8.3f”,34.67f);还是占用8个空位但是,与前面不同之处是左对齐。c)如果%后面是0.x代表不占用多余空位,只控制保留的小数位。例如:printf(“价格=%0.3f”,34.6f);以上是printf函数对于浮点数的占位和对其管理。d)对于整数和字符串输出只有占位控制和对齐控制,没有小数点后面的控制。例如:printf(“学号:%-8d姓名:%-10sn”);8和10代表的是占位管理,-符号代表左对齐,缺省不带-符号是右对齐。9C语言输
11、入输出小结C语言输入输出包括:a)单字符输入输出:getchar、getc函数:c=getchar();等价于scanf(“%c”,&c);putchar、putc函数:putchar(c);等价于printf(“%c”,c);b)单行输入输出:gets函数:gets(str);等价于scanf(“%s”,str);puts函数:puts(str);等价于printf(“%sn”,str);c)格式化输入输出:printf包括:%d、%u、%x、%c、%s等等。scanf包括:%d、%u、%x、%c、%s等等。d)占位控制:对于整数和字符串在%和控制符之间的数字代表占位,负号代表左对齐。对于浮
12、点数除了用数字代表占位,负号代表左对齐,还有小数位数的管理。10分支语句C语言中的条件分支语句,分为if语句和switch语句两类分支语句。一)if条件语句可以有三种用法:a)if.单分支条件语句:例:公司的员工销的提成工资为每销售一件提成20元,如果销售额大于100件,则奖励500元。int main(int argc,char*argv)int n=0,sal=0;puts(请输入你本月的销售量:);scanf(%d,&n);sal=n*20;if(n100)sal+=500;printf(你本月的销售提成为:%dn,sal);return 0;11分支语句b)if.else.双分支条件语
13、句:例:公司的员工销的提成工资为:若每月销售额小于100件,每销售一件提成20元;如果每月销售额大于等于100件,每销售一件提成30元。int main(int argc,char*argv)int n=0,sal=0;puts(请输入你本月的销售量:);scanf(%d,&n);if(n100)sal=n*20;elsesal=n*30;printf(你本月的销售提成为:%dn,sal);return 0;12分支语句c)if.else if.else.多分支条件语句:例如多级分成制度int main(int argc,char*argv)int n=0,sal=0;puts(请输入你本月的
14、销售量:);scanf(%d,&n);if(n=100&n=200&n 300)sal=n*30;/销售200-300件,每件按30元提成elsesal=n*40;/若能销售300件以上每件按40元提成printf(“你本月的销售提成为:%d元n,sal);return 0;13分支语句puts(请输入你的学分:(A-D));char c=getchar();switch(c)case A:puts(你的成绩优秀!);break;case B:puts(你的成绩良好!);break;case C:puts(你的成绩中等!);break;case D:puts(你的成绩较差!);break;de
15、fault:puts(你输入的是无效的学分!);break;二)switch(.)case.分支语句:a)switch语句只适合于小范围内的独立(无重复)数值进行判断,不能对无限集合判断,对于大的集合也难于判断。b)每个case管辖的语句到break为止,使用switch最容易犯错是漏写break;c)case 错误:C2196:case value xx already usedC2051:case expression not constantd)if语句能实现所有switch语句的功能,但是switch语句不能实现所有if语句能表达的功能。e)可以将两个条件合并为一个条件:case B:
16、case C:puts(你的成绩中等!);break;.142024/2/26 周一15循环语句C语言中的循环语句,分为while语句和for语句两类分支语句。a)所有while语句能表达的功能for语句全都能实现,反之亦然。while层次清晰,for方便。(老外多爱用while,中国人多爱用for)b)每个循环语句都由三个框架区域构成:a)初始化区,条件判断区,递增区一)while循环语句:初始化区;while(条件判断区)核心运算区;。递增区;例如:求60到100之间所有数字的加和。int main()int i=60,sum=0;while(i=100)sum+=i;+i;printf(
17、结果是:%dn,sum);return 0;16循环语句二)do.while循环语句:特点是先执行再判断,核心运算区无条件地执行一次。初始化区;do核心运算区;。递增区;while(条件判断区);注意语句尾部要带有分号;int main()int sum=0,i=6;dosum=sum+i;+i;while(i=10);printf(结果是:%dn,sum);return 0;17循环语句三)for循环语句:完全可以和while语句或do.while语句互相替代。a)for语句相当于将while语句的三个区域,用分号间隔全放在循环头部的小括号里:for(初始化区;条件判断区;递增区)核心运算区
18、;b)递增区是在每次循环结束时执行:第一次进入循环之前,递增区并不执行c)当条件区为空时代表无条件循环:例如:for(初始化区;递增区)等价于for(初始化区;1;递增区)d)for的括号内3个区全都可为以空:初始化区;for(;)核心运算区;递增区;例如:求60到100之间所有数字的加和。int main()int i,sum;for(i=60,sum=0;i=100;+i)sum+=i;printf(结果是:%dn,sum);return 0;18条件和循环语句小结一)条件分支语句包括:if语句和switch语句两大类。a)if语句有3种形式:单分支条件语句、双分支条件语句和多分支条件语句
19、。b)switch语句:开关语句,只能对小范围的数值型开关管理。if语句能实现所有switch语句的功能,但是switch语句不能实现所有if语句能表达的功能。二)循环语句包括:while语句和for语句两大类。a)while语句:初始化区,条件判断区,递增区三个条件框架区独立分布,层次清晰。b)for语句:初始化区,条件判断区,递增区三个条件框架区混合在语句头部,方便灵活。三)while和for语句对比:a)while语句还包括一种do.while格式,当第一次必须无条件执行时使用。b)所有while语句能表达的功能for语句全都能实现,反之亦然。19循环语句四)循环语句中的三个重要关键字:
20、break,continue,returna)break是结束整个循环体:例如:找出20到50之间,第一个19的整数倍的数字。int main()int i=20;while(i50)if(i%19=0)break;+i;printf(i=%dn,i);return 0;实际上凡是break语句的条件,都可以提取到while语句的条件区。但是break语句使循环体看上去更清晰,便于阅读和代码维护。等价写法:int main()int i=20;while(i50&i%19!=0)+i;printf(i=%dn,i);return 0;20循环语句b)return是比break还强的中断:直接退
21、出中断该函数,return后面所有语句,包括循环体之外的语句全都不执行。例如:找出20到50之间,第一个19的整数倍的数字。int main()int i=20;while(i50)if(i%19=0)printf(i=%dn,i);return 1;+i;printf(很抱歉,没有找到匹配的数字n,i);return 0;直接跳出函数,连循环体外的printf函数也未被执行。21循环语句c)continue是结束本次循环进入下一次循环:如果是while语句,递增区必须放在continue之前;continue经常跟for语句连用效果更好,因为for语句的递增区是每次循环后自动执行。int m
22、ain()/求20到70之间13的整数倍的数字及个数int i=20,sum=0;while(i70)+i;if(i%13)continue;+sum;printf(i=%dn,i);printf(总共%d个n,sum);return 0;int main()/等价写法:int i=20,sum=0;for(;i、=、和=、=例如:int i=10;i=10与i!=10是互为补集的关系。i=10与i=n)与 if(xn)是补集关系。if(xn)是补集关系。c)复合逻辑的补集关系:if(xm&x=n)与 if(xn)是补集关系。if(x=m&xn)与 if(xm|xm&xn)与 if(x=n)是
23、补集关系。if(x=m&x=n)与 if(xn)是补集关系。25符号的优先级1级优先级 左结合 ()圆括号 下标运算符-指向结构体成员运算符.结构体成员运算符2级优先级 右结合 !逻辑非运算符 按位取反运算符+自增运算符-自减运算符-负号运算符 (类型)类型转换运算符*指针运算符&地址与运算符 sizeof 长度运算符3级优先级 左结合*乘法运算符/除法运算符%取余运算符4级优先级 左结合+加法运算符-减法运算符5级优先级 左结合 右移运算符6级优先级 左结合、=关系运算符7级优先级 左结合=等于运算符!=不等于运算符26符号的优先级8级优先级 左结合&按位与运算符9级优先级 左结合 按位异或运算符10级优先级 左结合|按位或运算符11级优先级 左结合&逻辑与运算符12级优先级 左结合|逻辑或运算符13级优先级 右结合?:条件运算符14级优先级 右结合+=-=*=/=%=&=|=全为赋值运算符15级优先级 左结合,逗号运算符272024/2/26 周一28