基于Linux学习 C语言——基础 DAY5

一、数据类型

        将数据以特殊的数据类型保存在计算机中,作用在于统一操作,节约空间,访问速度快。

        一般数据类型分为四大类(部分书中也将指针类型分到基本类型下)

 

 

 

1.1数据类型

i)整型int \short\long(64位系统中)

类型占位符字节大小取值范围

int默认是有符号

%i %d

4字节

-2^31 ---+2^31-1        [-2147483647,2147483647]

unsigned int

%u

4字节

0----2^32-1                 [0,4294967295]

short 短整型

%d

2字节

-2^15 ---+2^15-1        [-32768,32767]

unsigned short

%u

2字节

0--2^16-1                    [0,65535]

long 长整型

%ld

8字节

-2^63----+2^63-1        

unsigned long

%lu

8字节

0-----2^64-1

ii)小数\浮点型\实型float\double

类型小数位数字节大小有效位数占位符

float 单精度浮点型

默认有6位小数

4字节

有效位7位

%f

double双精度浮点型

默认有6位小数

8字节

有效位16位

%lf

注意:unsigned不可以修饰小数

iii)单字符类型char

        以‘’将字符括起来如:‘A’、'0'、'\0'、'\n'...

类型占位符字节大小取值范围

char 默认是有符号

%c:是字符 %d:是整数

1字节

-128----+127

unsigned char

%u %d

1字节

0---255

二、定义变量

        格式:存储类型 数据类型 变量名;

        以这种格式定义一个可改变的值,存储数据的容器

  • 存储类型

  •  数据类型(同一)
  • 变量名

满足命名规范【由数字、字母、下划线组成、不能是关键字,不能以数字开头,见名知意,区分大小写】

int __√

int _2√

int 2_×

int float × int sizeof×

int FLOAT√

工作中的变量名尽量和它运用的方向相关,一般用小写,如

int temp;

int arr[5]={0};

...

i)整型变量short\int\long

  • 定义单个变量        int num;//如果变量没有初始化 里面存的都是 随机值
  • 同时定义多个变量  int a,b,c;
  • 定义变量并给变量赋值 int d=20;
  • 可以常量给变量赋值,也可以变量给变量赋值
  • 当存储的数值超越了数据类型的取值范围是会循环到最值

 ii)浮点型变量float\double

        虽然其他和整型定义变量方式一样,但指的注意的是,浮点型定义的变量都是近似值,在printf中确定精度 %.2f 、%.3lf等方法控制小数点后小数位数,只能在printf函数使用。

iii)单字符char

        字符:就是我们前面说的一个非数值型数据

        形式:如果是字符常量必须用单引号 ‘ 引起来,且单引号中只能引一个字符

        如:’M ’ 'h' '8' '\n' '\0'

#include <stdio.h>

int main(){
	char v1='A';
	printf("v1=[%d] [%c]\n",v1,v1);//65 A
	
	char v2='8';
	printf("v2=[%d] [%c]\n",v2,v2);//56 8
	
	char v3=66;
	printf("v3=[%d] [%c]\n",v3,v3);//66 B
	
	char v4=10;
	printf("v4=[%d] [%c]\n",v4,v4);//10 换行符
	
	//思考 如何将'M'转换成'm'
	char v5='M';
	//v5=v5+32;//字符参与运算 本质就是对应的ascii码参与运算
	v5=v5+('a'-'A');//和上面的写法 本质是一样的
	printf("v5=%c\n",v5);//m
	
	
	
	//思考 如何将'8'转换成整数8
	char v6='8';
 	//v6=v6-48
 	v6=v6-'0';//和上面的写法 本质是一样的
	printf("v6=%d\n",v6);//8
	
	return 0;
	}

二、类型转换  

i)自动类型转换

自动转换:低字节转换到高字节

char ---> short int float long double

short ----> int float long double

int -----> float long double

float ---> double

小转大一般没有问题,因为能存储下

ii)强制类型转换

使用格式:(强制转换的数据类型)表达式

强制转换:高字节转换到低字节

long int short float double---->char

long int float double---->short

long float double--->int

double ----> float

#include <stdio.h>

int main(){
    int m=5;
    int n=2;
    float ret1=m/n;
    printf("ret1=%f\n",ret1);//2.000000
    //原因是m和n都是int类型 所以运算的结果也是int 类型
    //会把小数部分舍弃 m/n的结果就已经是2了
    //再把他赋值给float类型的变量 结果就是2.000000
    
    float ret2=(float)m/(float)n;
    printf("ret2=%f\n",ret2);//2.500000
            
	//强制类型转换不会改变变量自身的类型
	printf("m=%d,n=%d\n",m,n);//5,2
            
  
    //这样写的话就不存在需要强制转换的问题,输出是2.500000
    float p=5;
    float o=2;
    float ret3=p/o;
    printf("ret3=%f\n",ret3);
return 0;

}

        而大转小在存储不下的情况下会发生截断,在这里先介绍一下大小端问题

         C语言本质是操作内存,我们通常使用的电脑都是小端存储,大型通信网络使用大端存储,在强转到小数据类型时,如果存储不下,会舍弃掉地址高位的

笔试题:请你写一个简单的程序,判断你所使用的主机是大段存储还是小端存储

#include<stdio.h>
int main(){
    int a=0x12345678;
	char p=(char)a;	
	if(0x78==p){
		printf("小端存储\n");
	}else if(0x12==p){
		printf("大端存储\n");
	}
	
    return 0;
}

具体实例如下:

 iii)有无符号数的转换(不常用,只需要了解)

 三、常量

        在整个程序运行的过程中,值不允许发生变化的量。

整型常量

前缀

输出时的占位符

例如

十进制

%d

1314

二进制

0b

0b1010

八进制

0

%o

0345

十六进制

0x

%x

0xAB12

浮点型常量

输出时的占位符

float

单精度浮点型

4字节

%f

double

双精度浮点型

8字节

%lf(小写的L)

指数常量 %e

字符常量 %c ‘M’

字符串常量 %s "www.hqyj.com"

3.1常量的定义/宏定义

格式:#define 宏名 字符串

宏:只做替换,不做计算,不做正确性的检查

宏不属于C语句,不加分号

例:

#define M 100    
#define PAI 3.1415926
#define CH 'A'

四、输入输出

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
int main(int argc, const char *argv[]) 
{ 
 //结束整个scanf需要使用回车 
 //元素输入是以空格,tab,回车表示一个元素的结束 
 //输入不要加\n   \t 
 //在使用scanf是格式控制串并不一定只能写格式控制符 
 //在输入小数时,不能确定精度 
 /*
	int num,a,b;
	scanf("num=%d,a=%d,b=%d",&num,&a,&b);
	printf("num=%d\n",num);
	printf("a=%d\n",a);
	printf("b=%d\n",b);
	float m;
	double n;
	printf("please enter m,n:");
	scanf("%.2f %.3lf",&m,&n);
	printf("m=%.2f\nn=%.3lf\n",m,n);*/
 
 //单字符输入格式 
 //空格:吸收垃圾字符,只能吸收空格\tab\回车 
 //吸收垃圾字符:%*c 
 char a,b,c; 
 /*
 //单字符的连续输入
	printf("please enter a,b,c:");
	scanf("%c%*c%c%*c%c",&a,&b,&c);
	printf("a=%d %c\n",a,a);
	printf("b=%d %c\n",b,b);
	printf("c=%d %c\n",c,c);*/
//单字符的单个输入
 printf("please enter a:"); 
 scanf("%c",&a); 
 printf("please enter b:"); 
 scanf("%*c%c",&b); 
 printf("please enter c:"); 
 scanf("%*c%c",&c); 
 printf("a=%d %c\n",a,a); 
 printf("b=%d %c\n",b,b); 
 printf("c=%d %c\n",c,c); 
 return 0; 
} 

练习题目:

1.#include <file.h> 和  #include “file.h” 有什么区别?

#include <file.h>是先在标准库中搜索有没有file.h,而 #include “file.h”是从当前工作路径中搜索有没有file.h

2.c

3.请回答输出结果

15

4.请回答输出结果

5*4+1*2+4+1+4+1*2+4+1*4+1/2=20+2+4+1+4+2+4+4+0=41

结果为41

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值