C基础

2020-04-07  本文已影响0人  晓晓桑

编译工具我用的:CLion,因为inteliji和webstorm用的他家的,所以也选择了他家的CLion。对比上学时候的编译软件,发现很多东西CLion给处理了,使用蛮方便的。
官网下载(https://www.jetbrains.com/clion/

一.内建函数

编译器内部实现的函数。跟关键字一样,可以直接使用,无须像标准库函数那样,要 #include 对应的头文件才能使用。

C 标准库的内建函数

内存相关的函数:memcpy 、memset、memcmp
数学函数:log、cos、abs、exp
字符串处理函数:strcat、strcmp、strcpy、strlen
打印函数:printf、scanf、putchar、puts

二.数据类型

1.基本数据类型
2.构造类型
3.指针
4.空类型void

如果在百16位计算机系统(如Turbo C)中,short类型和int类型都是占2个字节的内存空间,所以其取值范度围都是-215~215-1。
如果在32位计算机系统(如Visual C++)中,short类型占2个字节,而知int类型占4个字节,因此它道们的取值范围会不一致,此时,short的取值范围为:-215~215-1;而int的取值范围为:-231~231-1

三.格式化输出符/转义字符

%d :十进制
%o:八进制
%x:十六进制
\n:换行

//将十进制12以 十进制、八进制、十六进制显示
  printf("%d\n%o\n%x\n%X\n"", 12, 12, 12);

结果是

12
14
 c
 C

http://c.biancheng.net/view/159.html

四.输出 %d \ ""

printf("%%d\n");
    printf("\\\n");
    printf("\"\"\n");

结果:

%d
\
""

五.转义字符

转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011
\ 代表一个反斜线字符''' 092
' 代表一个单引号(撇号)字符 039
" 代表一个双引号字符 034
\0 空字符(NULL) 000
\ddd 1到3位八进制数所代表的任意字符 三位八进制
\xhh 1到2位十六进制所代表的任意字符 二位十六进制

六.int内存大小

一个int是4字节。
字节是计算机常用的存储数据。位是计算机最小的存储单位。1字节=8个2进制位。一个2进制位只有0和1。4个字节就是32个2进制位。

int a;
 printf("int 数据类型所占字节数:%d\n", sizeof(int)); // 4

    printf("char 数据类型所占字节数:%d\n", sizeof(char)); // 1
    printf("short 数据类型所占字节数:%d\n", sizeof(short));// 2
    printf("int 数据类型所占字节数:%d\n" , sizeof(int));  // 4
    printf("long 数据类型所占字节数:%d\n", sizeof(long));// 4
    printf("float 数据类型所占字节数:%d\n", sizeof(float));// 4
    printf("double 数据类型所占字节数:%d\n", sizeof(double));// 8

int表示数的个数:2^32:4294967296个

int main(void) {
    12;//默认int类型
    int a=2147483649;
//十进制无符号输出
    printf("%u\n",a); //2147483649
//十进制有符号输出
    printf("%d\n",a); //-2147483647
    return 0;
}

short 短整型

全称:short int
字节数:2字节
有符号:signed short 范围:-215~215-1 / -32768~32767
无符号:unsigned short 范围:0~-2^16-1 / 0~65535
输出格式符:%hd(有符号)、%hu(无符号)、%ho(八进制) %hx(十六进制)
注意:只规定int不小于short的长度,也就是说int字节长度>=short的字节长度

long 长整型

全称:long int
字节数:4
有符号:-231~231-1 :-2147483648~-2147483647
无符号:0~2^32-1: 0~4294967295
输出符号:%ld(有符号)、%lu(无符号)、%lo(八进制) %lx(十六进制)
注意:只规定long不小于int的长度,也就是说long字节长度>=int的字节长度

long long (vc++ 6.0 不支持这个)

全称:long long int
字节数:8
有符号:-263~263-1
无符号:0~2^64-1
输出符号:%lld(有符号)、%llu(无符号)、%llo(八进制) %llx(十六进制)

变量的地址

取地址
int main(void) {
    int a=12;
    //%p用来输出指针的值、输出地址符。指针,是一个无符号整数/(unsigned int),
    // 它是一个以当前系统寻址范围为取值范围的整数。而%x, %X 输出无符号以[十六进制]表示的整数。
    printf("%p\n",&a);
    printf("%#p\n",&a);
    return 0;
}

结果

0x7ffeeac92938
0x7ffeeac92938

七.Scanf

从键盘修改一个变量的值

int main(void) {
    int a=15;
    printf("修改前:%d\n",a);
    //注意:输入的时候是a的取地址,%d前面加文字,修改见下面
    scanf("%d",&a);
    printf("修改后:%d\n",a);
    return 0;
}

运行结果


image.png

%d前面加文字,修改

int main(void) {
    int a=15;
    printf("修改前:%d\n",a);
    //注意:输入的时候是a的取地址,%d前面加文字,修改不成功
    scanf("修改:%d",&a);
    printf("修改后:%d\n",a);
    return 0;
}

要把文字一起打进去才行哦


image.png
多个输入
int main(void) {
    int a, b, c, d;
    printf("请输入b c:");
    scanf("%d %d", &b, &c);
    printf("请输入a d:");
    scanf("%d,%d", &a, &d);
    printf("%d-%d-%d-%d", a, b, c, d);
    return 0;
}
image.png

注意:转义字符之间啥也没有,每个数输入之间要有空格。scanf里面的转义字符有什么符号,输入的时候就要按他的格式来输入,要不然输入不成功。

浮点型 :float、double、long double

float:输出:%f 默认保留小数点后6位
double:输出:%lf
long double:输出:%ld

int main(void) {
    float a = 12.3456789074;
    double b = 13.4;
    printf("a:%f \n b:%lf\n",a,b);
    printf("a:%e \n b:%e\n",a,b);
    return 0;
}

运行结果
1.230000e+01 表示1.230000✖️10的正1次方

a:12.345679 
 b:13.400000
a:1.234568e+01 
 b:1.340000e+01
区别
image.png

代码获取数值范围

#include <stdio.h>
#include <float.h>
int main(void) {
    printf("float最小值获取%e\n",FLT_MIN);
    printf("float最大值获取%e\n",FLT_MAX);
    printf("double最小值获取%e\n",DBL_MIN);
    printf("double最大值获取%e\n",DBL_MAX);
    printf("long double最小值获取%e\n",LDBL_MIN);
    printf("long double最大值获取%e\n",LDBL_MAX);
    return 0;
}

运行结果:

float最小值获取1.175494e-38
float最大值获取3.402823e+38
double最小值获取2.225074e-308
double最大值获取1.797693e+308
long double最小值获取1.797693e+308
long double最大值获取1.797693e+308

精度测试,double为例

int main(void) {
    double d = 233.456809642313457859421234;
    printf("%lf\n", d); //默认打印小数点后6位,第六位四舍五入。其他俩个也一样。
    printf("%.20lf\n", d); //打印小数点后20位
    printf("%.30lf\n", d); //打印小数点后20位
    return 0;
}
233.456810
233.45680964231345910775
233.456809642313459107754169963300

浮点型后缀

image.png
image.png

系统计算,只对同类型的计算,不同类型的会转化成同类型之后再计算,后续会讲。

浮点型输出

%10.3f表示:一共输出10个字符,保留小数点后3位。如果不够10个字符,就会在数值前面加空格来补充。
%-10.3 负号表示左对齐,正好是右对齐。

int main(void) {
    float f = 293.4356f;
    printf("%f\n", f);
    printf("%.3f\n", f);
    printf("%10.3f\n", f);
    printf("%20.3f\n", f);
    printf("%-20.3f\n", f); //-
    return 0;
}
image.png

浮点型的内存存储

上一篇下一篇

猜你喜欢

热点阅读