linux学习记录_day4

一. 类型转换

1.1 简介

    在语言中,只有相同类型的数据才可以进行计算的。

1.2 隐式类型转换

    隐式类型转换原则:小类型向大类型转换:相同类型--》有符号向无符号类型的转换。
double

float : 科学计数法

unsigned long

long

unsigned int

int

-------------------类型 由下向上进行转换。

char + short : 统一做整型提升,提升成为int类型然后进行计算。

1.3 隐式类型转换发生场景

1.3.1 赋值发生隐式类型转换

// 定义一个变量

char ch = 100;        // 100是一个整型 4个字节 赋值给ch,ch是char类型所以会进行隐式类型转换。

eg:如果直接写浮点数据,默认就是double类型,3.14f-->表示是一个float类型。

float f = 3.14'        // 3.14属于double类型,-->将3.14转换为float类,然后赋值给f。

1.3.2 在运算时发生隐式类型转换

#include 

int main()

{

        int x = 9;

        float y = 2;

        float ret = x / y;        // 9->int         2->float         9.0 / 2.0 = 4.5

        printf("%f\n",ret);        //打印浮点类型,后面要有六位数字

}

demo.c

#include 

int main()

{

        int number = -1;

        // -1 计算机的补码形式存储的

        // 源码 1000 0000 0000 0000 0000 0000 0000 0001

        // 反码 1111 1111 1111 1111 1111 1111 1111 1110

        // 补码 1111 1111 1111 1111 1111 1111 1111 1111

        // 避免 有符号和无符号之间的计算

        printf("%u\n",number)

        int x =-20;

        unsigned int y =10;

        if(x + y > 0)

        {

                printf("true\n");

        }

        else

        {

                printf("false\n");

        }

}

1.3.3 printf函数会发生隐式类型转换

float 类型数据的存储
	float类型的数据存储是通过科学计数法。3.14e10
float类型的数据中:最高位是符号位 31位。
								指数位:30 ~ 238位(256)
								小数位:22 ~ 023#include <stdio.h>

int main()
{
	char x= 9;
	printf("x = %d\n", x);	\\char类型 ,printf需要的是int类型,所以这个时候会将x隐式转换为int输出
	return 0}

1.4 强制类型转换(显示类型转换)

概念:强行将数据转换为其他类型
格式:
	(需要转换的类型)变量名。
	demo:
	#include <stdio.h>
	int main(int argc, const char *argv[])
{
    //float x = 9/2;  // 9-> int   2-> int    9/2 --> 4  
    // float x = (float)9/2; // 数字 9被强制转换为 float 类型,  数字2->int  隐士类型转换为 float类型。
    int a = 9;
    int b = 2;
    float x = (float)a/b; // question : a 本身有没有做类型的改变。
    
    printf("a = %d \n",a); // a 本身没有发生类型转换。

    printf("x = %f\n",x);
    return 0;
}

二 . 输入输出

	输入输出一共有三组:printf & scanf,putchar & getchar,gets & puts
	输入输出必须要带头文件#include <stdio.h>

2.1 putcahr & getchar

putchar函数
函数功能:
	向终端输出一个字符
函数原型:
	int putchar(int c);
函数参数:
	@c : 需要输出的字符。
	int main(int argc, const char *argv[])
{
    //float x = 9/2;  // 9-> int   2-> int    9/2 --> 4  
    // float x = (float)9/2; // 数字 9被强制转换为 float 类型,  数字2->int  隐士类型转换为 float类型。
    int a = 9;
    int b = 2;
    float x = (float)a/b; // question : a 本身有没有做类型的改变。
    
    printf("a = %d \n",a); // a 本身没有发生类型转换。

    printf("x = %f\n",x);
    return 0;
}

2.2 gets & puts

int main(int argc, const char *argv[])
{
    //float x = 9/2;  // 9-> int   2-> int    9/2 --> 4  
    // float x = (float)9/2; // 数字 9被强制转换为 float 类型,  数字2->int  隐士类型转换为 float类型。
    int a = 9;
    int b = 2;
    float x = (float)a/b; // question : a 本身有没有做类型的改变。
    
    printf("a = %d \n",a); // a 本身没有发生类型转换。

    printf("x = %f\n",x);
    return 0;
}

2.3 printf & scanf

printf函数
函数功能: 
    向终端中格式化输出内容. 
函数原型: 
    int printf(const char *format, ...);
函数参数:
    @format: 格式控制串. 
        %c     :     字符
        %d     :     有符号的十进制
        %u     :     无符号的十进制
        %o     :     八进制数字 
        %#o    :     带前缀的八进制数字
        %x     :     十六进制数字
        %#x    :     带前缀的十六进制数字      
        %s     :     字符串. 
        %f     :     浮点类型的数据
        %.nf   :     n是一个数字,保留几位小数,n就是几
        %e     :     指数的形式输出.               
     
demo: 
#include <stdio.h>


int main(int argc, const char *argv[])
{
    int number = 97;  

    printf("字符输出: %c\n", number);
    printf("有符号的十进制输出: %d\n", number);
    printf("无符号的十进制输出: %u\n", number);
    printf("不带前缀的八进制: %o\n", number);
    printf("带前缀的八进制:  %#o\n", number);
    printf("不带前缀的十六进制: %x\n", number);
    printf("带前缀的十六进制:  %#x\n", number);

    float number1 = 3.1415; 
    printf("float类型数据输出 %f\n", number1);
    printf("float类型数据输出 %.2f\n", number1);
    
    float  number2 = 100000000;
    printf("科学计数法输出: %e\n", number2);
    return 0;
}

scanf函数: 
函数功能: 
    从终端中获取指定格式的数据. 
函数原型: 
    int scanf(const char *format, ...);
函数参数: 
    format: 输入的格式控制;    
        %c     :     字符
        %d     :     有符号的十进制
        %u     :     无符号的十进制
        %o     :     八进制数字 
        %#o    :     带前缀的八进制数字
        %x     :     十六进制数字
        %#x    :     带前缀的十六进制数字      
        %s     :     字符串. 
        %f     :     浮点类型的数据
        %.nf   :     n是一个数字,保留几位小数,n就是几
        %e     :     指数的形式输出.  
        %[^\n]s:     带有空格的字符串.  
        
        
使用方式: 
    scanf("%d", &变量);      
 
课堂练习: 
#include <stdio.h>


int main(int argc, const char *argv[])
{ 
    // 模拟银行取钱的过程: 
    printf("please input your password: >>");

    // 定义一个数字,用来保存密码
    int number = 0;  
    
    scanf("%d", &number);
    printf("您输入的数字number = %d\n", number);
    
    // scanf 支持同时处理接受多个数字
    int number1, number2, number3; 
    printf("please input 3 number >> ");
    scanf("%d%d%d", &number1, &number2, &number3);  // scanf 里面格式控制串,不要写空格。
    // scanf 格式控制串中,如果有\n 或者空格 ,则会出现i
    // 输入完数字之后,按回车并不会结束,需要输入任意的一个字符再按回车才可以结束。
    printf("number1 = %d, number2 = %d, number3 = %d\n", number1, number2, number3); 
    
    // 输入完数字以后输入的是回车。 会被下面的内容捕捉
    // 吃掉回车字符
    getchar();

    char name[20];
    char age[20];
    printf("请输入字符串>>");
    // scanf("%s", name);  // scanf 输入的时候会以 空格 or 回车 作为结束标识,所以 %s 不支持输入带有空格的字符串。 
    scanf("%[^\n]s", name); //  scanf只认 \n作为结束的表示。
    printf("name : %s\n",name);



    return 0;
}

三. 语言结构

	C语言中的语句有三种结构:顺序结构 分支结构 循环语句

判断语句

概念: 判断条件是否成立. 来决定走哪一个分支的代码. 
语句结构: 
单分支结构: if 
    if (condition)
    {    
        // 代码语句; 
        code;                        
    }
含义: 判断condition是否成立,如果成立,则执行 code的语句代码. 
demo: 

#include <stdio.h>


int main(int argc, const char *argv[])
{
    // target: 从键盘中输入一个年龄, 如果年龄 > 18岁, 就输出哥,网吧您随便进。 
    
    printf("please input your age : >> ");

    // 定义一个变量
    int age = 0; 

    // 从键盘中输入一个年龄 
    scanf("%d", &age); 


    // 3. 对年龄进行判断。 
    if (age > 18)
    {
        printf("哥, 网吧您随便进, 兄弟这就给你煮方便面\n");
    }



    return 0;
}

双分支结构: if / else 语句
格式: 
    if (condition)
    {
        code1;    
    }
    else 
    {                    
        code2;
    }
执行方式:
    判断condition 条件是否成立, 成立,执行code1, 不成立,执行code2.
    
#include <stdio.h>


int main(int argc, const char *argv[])
{
    // target: 从键盘中输入一个年龄, 如果年龄 > 18岁, 就输出哥,网吧您随便进。 
    
    printf("please input your age : >> ");

    // 定义一个变量
    int age = 0; 

    // 从键盘中输入一个年龄 
    scanf("%d", &age); 


    // 3. 对年龄进行判断。 
    if (age > 18)
    {
        printf("哥, 网吧您随便进, 兄弟这就给你煮方便面\n");
    }
    else 
    {
        printf("小朋友,你再不走,我给给你一份暑假作业\n");
    }
    

    return 0;
}


多分支结构: if / else if / else 结构 
语法结构: 
    if (condition1)
    {
        code1;            
    }
    else if (conditIon2) 
    {
         code2;       
    }
    .......
    else if (conditionN)
    {
         codeN;       
    }
    else 
    {
        code;             
    }

执行语句:
    判断条件condition1成立则执行code1. 如果condition1不成立,则判断condition2.
条件condition2成立则执行code2.....如果condition都不成立,则执行code里面的代码

案例: 从键盘中输入一个成绩 score.  要求:  
85<= score <= 100  A
75<= score <  85   B
60<= score <  75   C
60 > score         D 

#include <stdio.h>


int main(int argc, const char *argv[])
{
    printf("please input your score >>>");
    int score; 
    scanf("%d", &score); 

    // 判断数据是否合法
    if (score < 0 || score > 100) 
    {
        printf("您输入的成绩有误\n"); 
        return -1;
    }

    // 判断
    if (score >= 85 && score <= 100)
    {
        putchar('A');
    }
    else if (score >= 75 && score < 85)
    {
        putchar('B');
    }
    else if (score >= 60 && score < 75)
    {
        putchar ('C');
    }
    else 
    {
        putchar ('D');
    }



    return 0;
}
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值