C语言学习第二课:数据处理与交互式输入

先上一张知识结构图

C语言学习第二课:数据处理与交互式输入_第1张图片

一:类型转换

1、隐式类型转换(系统自动进行类型转换)

当赋值发生时,如果两边数据类型不一致,C语言中会将等号右边的数据自动转换为等号左边变量的数据类型
double d = 40; 
//整型数据赋给双精度浮点型变量
//C系统将整型数据转变为double型数据然后赋值给变量
int i = 3.14;
 //double型数据赋给int型变量
//C系统将double数据转变为int型数据然后赋值给变量
//这个转变过程会造成double型数据小数部分的丢失

2、显式类型转换(强制转换)

强制类型转换也叫显式转换
需要转换的数据前面,添加一个括号,括号里面填写目标数据类型
(转换后类型) 表达式 
    printf(”%d”,(int) 3.5); 
    printf("%d\n",(int)(3.5+2+4.5));

3、类型转换注意点

(1)从较高精度数据类型转换为较低精度数据类型时,一般会发生数据的丢失
 如:int a = 3.14  结果:a 为 3;
(2)低精度数据转化为高精度数据不会发生数据的丢失
 如:double d = 3   结果:d 为 3.000000;
(3)多个不同类型精度相结合。结果为最高精度值
如:
    int a1 = 10;
    float b1 = 20;
    double c1 = 30;
    char d1 = 40;
    printf("%f",a1+b1+c1+d1);

二、复合赋值运算符

sum = sum + 20; 
等价与
sum += 20; 
+=就是一个复合赋值运算符,含义为使用sum原来的值加上20然后再赋值给sum变量
另外还有-=、*=、/=、%= 复合赋值运算符
a *= b + 20; //等价于a = a * (b + 20); 

三、自增自减运算符

i++;
表示变量i在原有基础上增加1
i --; 
表示变量i在原有基础上减去1
另一个写法:
++i,--i;

1、前(左)自增自减与后(右)自增自减区别点

(1)符号在变量左边表示先将变量自增或自减1之后再使用其自增1或自减1后的值
(2)符号在变量右边表示首先使用变量中已有的值,然后再对变量进行自增1或自减1

    int i=10,j=10;
    i++; printf("%d\n", i);//11
    ++i; printf("%d\n", i);//12
    j--; printf("%d\n", j);//9
    --j; printf("%d\n", j);//8
   int i=10,j=10,w,x,y,z;
    w = i++; printf("%d\n", w);//w=10,i=11
    x = ++i; printf("%d\n", x);//x=12,i=12
    y = j--; printf("%d\n", y);//y=10,j=9
    z = --j; printf("%d\n", z);//z=8, j=8;

2、括号无法改变自增自减优先级

i = 10;
m = (i++); printf(“m = %d\n”, m);
n = (++i); printf(“n = %d\n”, n);
m = (i++) + 10; printf(“m = %d\n”, m);
n = (++i) + 10; printf(“n = %d\n", n);

结果为:
m = 10
n = 12
m = 22
n = 24 

四:scanf() 输入函数

scanf(“控制字符串”,&变量1,&变量2,…&变量n);
— 注意接收数据的变量需要使用&号,表示该变量的地址
控制字符串:
%d int
%f float
%lf double
%c char

1、多个输入情况

(1)数字输入

一次输入多个数字时,控制字符串有无空格均可,但输入时需要空格隔开每个数字

scanf("%f %f", &f1,&f2);
scanf("%d%d%d%d%d", &d1,&d2,&d3,&d4,&d5);  
(2)字符输入

(1)c语言中,使用scanf()进行字符数据的输入时,回车、Control、Escape等控制字符都被当做字符被放入缓冲区
连续使用scanf()时下一次的输入会直接从缓冲区读入字符型数据

(2)输入字符数据时,控制字符串和实际输入都需要使用空格隔开每个字符

scanf("%c %c %c", &c1, &c2, &c3);

代码练习示例:

/**
 *  某一个星期,周一到周日气温分别为:30℃、32℃、29℃、34℃、31℃、27℃、31℃
 为了研究天气情况,需要得到这个星期的平均气温
 */
    int t1=30,t2=32,t3=29,t4=34,t5=31,t6=27,t7=31;
    int sum = 0;
    double avg;//平均温度
    int day = 7;
    sum += t1;
    sum += t2;
    sum += t3;
    sum += t4;
    sum += t5;
    sum += t6;
    sum += t7;
    avg = sum * 1.0 / day;
    printf("sum == %d\navg == %g\n",sum,avg);
//交互式输入
/**
 *  输入购买数量及单价,然后计算出总金额
 */
    int count;//数量
    double price;//单价
    double sum;//总价
    printf("请输入商品数量\n");
    //做输入操作
    scanf("%d",&count);
    printf("请输入商品单价\n");
    scanf("%lf",&price);
    sum = count * price;
    printf("总价格为:%g",sum);
幻影回车符
    char firstChar;
    char secondChar;
    printf("请输入第一个字符\n");
    //先用第二个字符,接收回车字符
    scanf("%c%c",&firstChar,&secondChar);
    printf("请输入第二个字符\n");
    scanf("%c",&secondChar);
    printf("firstChar = %c--secondChar = %c\n",firstChar,secondChar);
    printf("firstChar = %d--secondChar = %d",firstChar,secondChar);
/**
 *  编写一个C程序,输入两个点的坐标(x坐标以及y坐标),计算并且打印两个连接点的中点坐标。假设两个连接点坐标为(x1,y2)和(x2,y2),两个点的连接线中点坐标为(x1+x2)/2和(y1+y2)/2
 */
    double x1,x2,y1,y2,x3,y3;
    printf("请输入第一个点:\n");
    scanf("%lf%lf",&x1,&y1);
    printf("请输入第二个点:\n");
    scanf("%lf%lf",&x2,&y2);
    x3 = (x1+x2) / 2;
    y3 = (y1+y2) / 2;
    printf("两点的中点坐标为(%g,%g)",x3,y3);

你可能感兴趣的:(c-语言)