Download presentation
Presentation is loading. Please wait.
1
晏文靖 yanwenjing@wxic.edu.cn
第三单元 数据的输入、赋值处理与输出 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。 本章将讲述类型、变量、常量、数组等。这些概念的建立是进行进一步C语言学习的必要条件。同时,这些概念也是各种高级语言的共通概念。 晏文靖
2
算术运算符 +,-,*,/ 加、减、乘、除运算 四则混合运算中,先算乘除,后算加减, 按从左向右的顺序计算,左结合 % 求余运算
只能整数求余
3
现场编程 编程将1000分钟转换成小时和分钟进行输出。
4
常用的标准数学函数 函数名 功 能 sqrt(x) 计算x的平方根,x应大于等于0 exp(x) 计算ex的值 fabs(x)
功 能 sqrt(x) 计算x的平方根,x应大于等于0 exp(x) 计算ex的值 fabs(x) 计算x的绝对值 pow(x,y) 计算xy的值 log(x) 计算lnx的值 sin(x) 计算sinx的值,x为弧度值 log10(x) 计算lgx的值 cos(x) 计算cosx的值,x为弧度值
5
现场编程 已知三角形的三边长 a=5,b=6,c=7 要求用下述公式计算三角形的面积: sqrt(s(s-a)(s-b)(s-c))
其中 s=(a+b+c)/2
6
增一和减一运算符 n++,n--,++n,--n ++让参与运算的变量加1,--让参与运算的变量减1
m = n++; 等价于 m=n; n++; m = ++n; 等价于
7
5 6 已知 n=5 (1)m=n++; m=? n=? (2)m=++n; m=? n=? 6 6
8
赋值运算符 简单的赋值就是把一个表达式的值赋给一个变量。 例如: i = 5 i = j + 1
9
赋值运算符 在赋值符“=”之前加上其它运算符,可以构成复合的运算符。 下面两个语句是等价的 +、-、*、/、%运算符都可以按此种方式处理
i = i + 2; i += 2; +、-、*、/、%运算符都可以按此种方式处理
10
逗号运算符 表达式1, 表达式2, ….., 表达式n 例如 整个逗号表达式的值为29。
a=4*6,b=a+5 整个逗号表达式的值为29。 多数情况下,并不使用整个逗号表达式的值,更常见的情况是要分别得到各表达式的值 主要用在循环语句中,同时对多个变量赋初值等 for (i = 0 , j = 0; i < j; i++, j++)
11
类型转换 高 double float long unsigned 低 int char, short 在进行赋值操作时,会发生类型转换
在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。 高 double float long unsigned 低 int char, short
12
自动类型转换 同种数据类型的运算结果,还是该类型 不同种数据类型的运算结果,是两种类型中取值范围更大的那种
long double > double > float > long > int > short > char 把数据赋值给另外一种类型变量也会发生自动类型转换 从小到大,顺利转换 从大到小,可能丢失信息(好的编译器会发出警告)
13
类型转换 将取值范围小的类型转为取值范围大的类型是安全的 反之是不安全的
14
类型强转(Casting) 可以通过“(类型)表达式”的方式把表达式的值转为任意类型 若x原为实型变量且值为2.6,在执行 i=(int)x
后得到一个整数2,并把它赋给整型变量i,但x仍为实型,值为2.6。
15
优先级 ( ) * / % + - = += -= *= /= %= ,
16
优先级 能背下优先级表的人凤毛麟角 用括号来控制运算顺序更直观、方便,并减少出错的概率
17
结合性 多数运算符为左结合 少数为右结合: 一元运算符 赋值运算符 条件运算符
18
输入输出函数 如何进行数据的输入输出? 输入:从标准输入设备上输入数据到计算机内存 输出:将计算机内存中的数据送到标准输出设备
C语言中输入输出操作通过调用标准库函数来实现
19
格式输出函数 输 函数名 出 表 列 格式说明 普通字符 格式输出函数 printf(格式控制字符串, 输出项表列);
输出若干个任意类型的数据 printf("a=%d b=%d", a, b); 格式说明 输 出 表 列 函数名 普通字符
20
printf格式字符 d 以带符号十进制整数输出 o 以八进制无符号整数输出(无前导0) x 以十六进制无符号整数输出(无前导0x)
u 以十进制无符号整数输出 c 以字符形式输出单个字符 f 以小数形式输出浮点数(6位小数) e 以标准指数形式输出(6位小数) g 选用%f,%e中输出宽度较小的一种格式 s 输出一个字符串
21
printf附加格式说明符 l 长整型整数,加在d、o、x、u前 L long double型数,加在f、e、g前
m 表示数据占用的最小宽度 数据宽度大于m,按实际宽度输出 数据宽度小于m时,补空格 n 对实数表示输出n位小数 对字符串表示最多输出的字符个数 - 改变输出内容的对齐方式 缺省为右对齐
22
例 #include <stdio.h> main() {
float f1 = , f2 = 12.55, f3 = 1.7; int n1 = 123, n2 = 45, n3 = 6; printf("printf WITHOUT width or precision specifications:\n"); printf("%f\n%f\n%f\n", f1, f2, f3); printf("%d\n%d\n%d\n", n1, n2, n3); printf("printf WITH width and precision printf("%5.2f\n%6.1f\n%3.0f\n", f1, f2, f3); printf("%5d\n%6d\n%3d\n\n", n1, n2, n3); }
23
格式输入函数 scanf("%d,%d”, &a,&b); 格式输入函数 scanf(格式控制字符串, 地址表列); 非格式字符 格式说明
24
scanf格式字符 d 以带符号十进制形式输入整型数据 o 以八进制无符号形式输入(无前导0) x 以十六进制无符号形式输入(无前导0x)
e 以标准指数形式输入 s 输入字符串,以非空字符开始,遇第一个 空白字符结束
25
scanf附加格式说明符 l 加在d、o、x、u前:输入长整型 加在f、e 前:输入双精度型
L 加在f、e 前:输入long double型 h 加在d、o、x 前:输入短整型 m 表示数据占用的宽度 * 本输入项在读入后不赋给相应的变量
26
格式输入函数 输入数据时,遇以下情况时该数据认为结束 遇空格、回车、TAB 键 遇宽度 :%3d 遇非法输入
27
输入数据的格式控制 12 34↙ 问题1:当要求程序输出结果为 a = 12, b = 34 时,用户应该如何输入数据?
#include <stdio.h> main() { int a, b; scanf("%d %d", &a, &b); printf("a = %d, b = %d\n", a, b); } 12 34↙ 问题1:当要求程序输出结果为 a = 12, b = 34 时,用户应该如何输入数据?
28
输入数据的格式控制 问题2:当限定用户输入数据以逗号为分隔符,即输入数据格式为: 12, 34↙ 时,应修改程序中的哪条语句?怎样修改?
#include <stdio.h> main() { int a, b; scanf("%d %d", &a, &b); printf("a = %d, b = %d\n", a, b); } scanf("%d,%d", &a, &b); 问题2:当限定用户输入数据以逗号为分隔符,即输入数据格式为: , 34↙ 时,应修改程序中的哪条语句?怎样修改?
29
输入数据的格式控制 #include <stdio.h> main() { int a, b; a = 12, b = 34↙
scanf("%d %d", &a, &b); printf("a = %d, b = %d\n", a, b); } a = 12, b = 34↙ 问题3:语句scanf("%d %d", &a, &b);修改为scanf("a = %d, b = %d", &a, &b); 时,用户应该如何输入数据?
30
输入数据的格式控制 #include <stdio.h> main() { int a, b;
scanf("%d %d", &a, &b); printf("a = %d, b = %d\n", a, b); } scanf("%d%*c%d", &a, &b); 问题4:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其它)作为分隔符进行数据的输入
31
例 #include <stdio.h> main() { int a, b;
printf("Please input a and b:"); scanf("%2d%*2d%2d", &a, &b); printf("a=%d, b=%d, a+b=%d\n",a,b,a+b); } Please input a and b: 123456↙ a=12, b=56, a+b = 68
32
例 #include <stdio.h> main() { int a, b;
printf("Please input a and b:"); scanf("%2d%*2d%2d", &a, &b); printf("a=%d, b=%d, a+b=%d\n",a,b,a+b); } Please input a and b: 12345a↙ a=12, b=5, a+b = 17
33
这一章我们学习了 格式输入函数scanf() 运算符 算术运算符、增一/减一运算符、赋值运算符、类型强转运算符、逗号运算符
格式输出函数printf() 格式输入函数scanf() 格式控制问题——难点
34
练习题 若变量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是 A)read(a,b,c);
B)scanf(“ %d%d%d” ,a,b,c); C)scanf(“ %D%D%D” ,&a,%b,%c); D)scanf(“ %d%d%d”,&a,&b,&c); 若变量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是 scanf(“ %f %f %f” ,&a,&b,&c); A)10 B)10.0,22.0, C) D) 33 若从终端输入以下数据,要给变量c赋以283.19,则正确的输入语句是 A)scanf(“ %f”,c); B)scanf(“ %8.4f”,&c); scanf(“ %6.2f”,&c); D)scanf(“ %f”,&c);
35
练习题 C语言中运算对象必需是整型的运算符是 A)% B)/ C)! D)* 对以下数学式 a.b c
int c1=1,c2=2,c3; c3=c1/c2; A) B)1/2 C) D)1
36
为表示关系x>=y>=z, 应使用的C语言表达式是
A) (x>=y)&&(y>=z) B) (x>=y)AND (y>=z) C) (x>=y>=z) D) (x>=y)&(y>=z) 设 a、b 和c 都是int 型变量,且a =3,b=4, c=5;则以下的表达式中,值为0的表达式是 A)a&&b B)a<=b C)a||b+c&&b-c D)!((a<b)&&!c||1) 将下列数学式改写成C语言的关系表达式或逻辑表达式A)______________和 B)__________ A) a=b 或 a<c B) |x|>4 请写出与以下表达式等价的表达式A)_________B)__________. A) !(x>0) B) !0
37
若有以下程序段,其输出结果是 int a=0,b=0,c=0; c=(a-=a-5),(a=b,b+3); A)3,0, B)0,0,5 C)-10,3, D)3,0,3
Similar presentations