逗号运算符和逗号表达式(续DAY3)
15级 ”作用:顺序求值运算符 结合方向:自左向右
当存在连续“,”时 eg:t=(1+5,6-2,3*7);中结果为最后一个表达式结果(即3*7) 【原因:逗号运算符结合方向为自左向右】
一、顺序程序设计
1.1 函数内部可分为两部分:
1)首部:int main(void)
包含三个信息:①函数返回值 ②函数函数名 ③形参列表
2)函数体:{···}“中内容
包含:①函数声明 ②语句
1.2 具体重要函数
①putchar函数:向终端输出一个字符
调用时: eg:putchar(65) // (实参) 实参与形参必须个数相同、类型匹配(此处为int型)
②getchar函数:输入一个单字符
int getchar(void);
调用时:eg:getchar(); getchar表达式为int型的右值
格式化输入与输出
(一)printf函数 (输出)
printf内部 ①代码咋写咋输出 eg:printf(“Hello\n”);输出Hello
②%d(占位符)由下一个参数决定 eg:printf(“%d\n”,c) 则输出c的值
注:①占位符的个数与其后的参数的个数应该是一一对应的
参数个数 > 占位符个数:多余参数丢失
占位符个数 > 参数个数:多余占位符取随机数输出
在printf函数中指定宽度: eg:printf(“%10d\n”,i);输出i值。 i值不到10格在其前用空格补齐。也可写为“%010d\n”则将空格换为0 注:只可用空格/0补齐
在八/十六进制中要求输出加前缀(i=1234)
八进制:printf(“%#0\n”,i);输出02322(表示八进制)
同理 十六进制:printf(“%#X\n”,i);输出DX4D2
其中①%后写0、u、x、X按无符号整型来解释
②%后写e、E表示为小数的科学记数法形式(e.E都可统一按double处理)
③%后写f、F都可输出小数(十进制表示法)
可用 %m.nf 指定输出的宽度和小数点后的有效位数,其中
m:输出数据的总宽度占几个字符(总宽度包含小数点本身)
n:小数点后保留的有效数字的数输出时
当 m < 实际宽度 则正常输出,因此,书写时m可省略,记为 eg: “ %.2f ”
注:计算机输出会 自动四舍五入
④%后写g,G时同样可表示浮点数。当采用g/G时(因为%e,E和%f,F都可表示小数),计算机将选择e/f中较短的一种方式来输出
⑤%后写C表示输出字符型%后写S表示输出the const char*<字符串常量>
⑥%后写P表示输出地址
⑦%后写%表示区分占位符%和实际输出%
注:默认情况下使用%d会被认为占用4个字节
(二)scanf函数(输入)
与printf用法类似。eg:scanf(“%d\n”,i);参数要取地址!
当输入数据有2个/2个以上时,在实际输入中,数和数之间的间隔符可以为:空格、tab、换行三种情况
注:①scanf函数中参数一定要取地址!!!否则会出现断错误(崩溃)
②除了占位符外最好不要加入其它当scanf输入小数时,输入float型和double型时,所用的占位符不同,分别为“%f”和“%lf”。
二者之间不可替换原因:scanf需要取地址。导到scanf无法通过所传地址窥探f到底占几个字节。
输入short型占位符为“%hd”;输入long型占位符为“%ld”。
scanf函数也可以指定宽度。但仅适用于int型。在用scanf输入浮点型时,禁止使用指定的精度/宽度的做法!
另:sqrt——平方根函数
注:①使用sqrt时,需#include ②编译时加“-lm”,即gce main.c-lm
pow—计算x的外次幂double pow(double x,double y);eg:52可写为double pow(2,0,5);
scanf函数底层逻辑:
结果会一直持续输出 error! 可用getchar函数来进行修正!如下图:
修正后结果示例:
以上问题考虑了用户是否输入正确的问题。
例题:
程序示例:
结果:
该程序未考虑:①输入是否正确问题,如考虑,可将上题用getchar进行修正后的程序部分套用
②三角形是否满足构成三角形的条件问题,在后续学习选择结构中将考虑。