admin管理员组文章数量:1530842
一、数据类型
将数据以特殊的数据类型保存在计算机中,作用在于统一操作,节约空间,访问速度快。
一般数据类型分为四大类(部分书中也将指针类型分到基本类型下)
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"
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
版权声明:本文标题:基于Linux学习 C语言——基础 DAY5 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1725925657a1049335.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论