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

来源:互联网 发布:语音助手软件下载 编辑:程序博客网 时间:2024/06/05 10:10

先上一张知识结构图

这里写图片描述

一:类型转换

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在原有基础上增加1i --; 表示变量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 = 10n = 12m = 22n = 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);
0 0