C++蓝桥等考导学/三级:算术运算/之四:数据类型转换(12数据类型转换)(三级附加)

一、观看视频

01】数据类型转换【02】大小写字母的转换【03】求平均分

04】求小数

二、研读学生讲义

【学生讲义】01】数据类型转换【学生讲义】02】大小写字母的转换【学生讲义】03】求平均分

【学生讲义】04】求小数

三、练习题(不清楚回头查看有关视频或讲义)

01】判定对错:整型、实型和字符型数据可以在同一个表达式(不含赋值符)进行运算,不一致的数据类型系统会自动进行转换一致的数据类型,储存长度较长(即字节数多)的类型会被转换成储存长度较短(即字节数少)的类型。
02】判定对错:在混合运算中,如果数据类型不同,储存长度较短(即字节数少)的类型一定会被转换成式子中储存长度较长(即字节数多)的类型。
03】判定对错:在混合运算中,只要数据的储存长度相同,就无需进行类型转换。【04】判定对错:在两操作数的算术运算中,若两个操作数的类型的储存长度相同,一个有符号,一个无符号,则转换成有符号类型(最高位不表示数而是表示正或负符号)。
05】运行下面的程序,说一说使用无符号整数时要注意什么问题?

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>using namespace std;//混合运算 int main(){    char c1 = 127;    short s1 = 32767;    short s2 = -32768;    unsigned u1 = 32767;    unsigned u2 = 32768;    float f1 = 3276.7;    float f2 = -3276.8;    cout << sizeof(c1+c1+c1) << ":" << c1+c1+c1 << endl;    cout << sizeof(s1+s2) << ":" << s1+s2 << endl;    cout << sizeof(s1+c1) << ":" << s1+c1 << endl;    cout << sizeof(s1+u1) << ":" << s1+u1 << endl;    cout << sizeof(s2+u1) << ":" << s2 + u1 << endl;    cout << sizeof(u1+u2) << ":" << u1 + u2 << endl;    cout << sizeof(u2-u1) << ":" << u2 - u1 << endl;    cout << sizeof(u1-u2) << ":" << u1 - u2 << endl;    cout << sizeof(f1+f2) << ":" << f1 + f2 << endl;  return 0;}

06】判定对错:不同的数据类型可以赋值,左边的数据类型会自动转换为右边的数据类型。
07】有关赋值时的数据类型转换的描述,错误的是:①数值范围较小的整数赋值给数值范围较大的整数不会出现转换问题。②数值范围较小的无符号整数赋值给数值范围较大的无符号整数不会出现转换问题③数值范围较小的整数赋值给数值范围较大或相等的无符号整数不会出现转换问题
④数值范围较小的无符号整数赋值给数值范围较大的整数不会出现转换问题。⑤数值范围较小的浮点数赋值给数值范围较大的浮点数不会出现转换问题。
⑥数值范围较大的数赋值给数值范围较小的数可能出现溢出。⑦整数类型赋值给浮点数类型可能出现精度降低,也可能出现溢出。
08】写出下面程序的输出,然后运行验证,强制类型转换可以永久改变变量的数据类型吗?

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>using namespace std;//强制转换 int main(){    float x = 3.5;    cout << (int) x  << " " << x << endl;  return 0;}

09】写出下面程序的输出,然后运行验证。

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>using namespace std;//带强制转换的运算 int main(){    int b =10;    double a=2.5, c=4.7;    cout << a+(int)(b/3*(int)(a+c)/2.0)%4 << endl;  return 0;}

10】写出下面程序的输出,然后运行验证。

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>using namespace std;int main(){    char c1 = 'q';    char c2 = 'Q';    cout << c1 << "  " << c2 << endl;    c1 = c1 - 'a' + 'A';    c2 = c2 - 'A' + 'a';     cout << c1 << "  " << c2 << endl;  return 0;}

11】已知某班有男同学x人,女同学y人,男生平均分是87分,女生平均分是85分,问全体同学的平均分是多少分?小明的代码如下,他的代码有问题吗?

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>using namespace std;//平均分 int main(){    int x, y;    cin >> x >> y;    cout << (x * 87 + y * 85)/(double)(x + y) << endl;  return 0;}

12】下面的代码能得到两个正整数相除的小数部分吗(保留小数点后9位)?

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>#include<iomanip>using namespace std;//求小数 int main(){    int a, b;    cin >> a >> b;    double d = (a - a / b * b)/(double)b;    cout << fixed << setprecision(9) << d << endl;  return 0;}

13】OpenJudge练习
OpenJudge-1.2-06】浮点数向零舍入OpenJudge-1.2-07】打印ASCII码【OpenJudge-1.2-08】打印字符【OpenJudge-1.2-09】整型与布尔型转换【洛谷1421】小玉买文具