C语言零基础--数据类型--系统学习2day

目录

1.整型int

2.整型修饰符short、long、unsigned

3.符号位

4.格式控制符%d

5.浮点型float

6.字符char+ASCII码表

7.字符串char *s1+char s2[]+指针和数组

8.布尔型数据bool

9.常量和变量

 10.标准输入 scanf+fgets+stdin

11.练习2day

第一题:指出下列常量的类型

第二题:

第三题:


1.整型int

        概念:表达整数类型的数据

        语法:

int a = 520; // 定义了一个专门用来存储整数的变量a 

        注意:int 的本意是 integer,即整数的意思 int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量。 变量a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节。 变量 a有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647。
 

2.整型修饰符short、long、unsigned

        short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为短整型
        long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长整型
        long long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长长整型
       unsigned:用来去除整型变量的符号位,使得整型变量只能表达非负整数
       short int a; // 短整型
        long int b; // 长整型
        long long int c; // 长长整型
        ==unsigned int e; ==// 无符号整型
        unsigned short int f; // 无符号短整型
        unsigned long int g; // 无符号长整型
        unsigned long long int h; // 无符号长长整型

使用整型修饰符后,关键字 int 可以被省略:

short a; // 短整型
long b;  // 长整型
long long c; // 长长整型
unsigned e;  // 无符号整型
unsigned short f; // 无符号短整型
unsigned long g;  // 无符号长整型
unsigned long long h; // 无符号长长整型

3.符号位

        定义:有符号的整型数据,首位为符号位,0表示正数,1表示负数。 无符号的整形数据,没有符号位。

        编码形式:

        原码:正数直接使用二进制来表达,比如a=100,在内存中是 00…001100100。
        补码:负数用绝对值取反加一来表达,比如a=-3,在内存中是11…1111111101 注意负数的补码在取反加一的时候,符号位是不动的。
        溢出:超过数据所能表达的范围,称为溢出,就像汽车里程表,最大值和最小值是相邻的。

         进制:源码中可以使用八进制、十进制或十六进制,但实际数据在内存中一律是二进制
        十进制(默认),比如1099
        八进制,比如013
        十六进制,比如0x6FF0A

4.格式控制符%d

int 整型:%d
short 整型:%hd, h代表half,即一半的存储字节
long 整型:%ld
long long 整型:%lld
显示不同进制的前缀: %#o、 %#x

%d:用来输出有符号的十进制整数(包括char类型)

%u:用来输出无符号的十进制整数(包括char类型)

%o:用来输出无符号的八进制整数

%x:用来输出无符号的十六进制整数

%c:用来输出单个字符

%s:用来输出一个字符串

%f:用来输出小数形式的十进制浮点数(输入时小数形式和指数形式都可以识别)

%e:用来输出指数形式的十进制浮点数(输入时小数形式和指数形式都可以识别)

%g:用来输出指数形式和小数形式两者中较短的十进制浮点数(输入时小数形式和指数形式都可以识别)

5.浮点型float

        概念:用来表达实数的数据类型

        分类:单精度浮点型(float),典型尺寸是4字节
                   双精度浮点型(double),典型尺寸是8字节
                   长双精度浮点型(long double),典型尺寸是16字节 占用内存越多能表达的精度越高

float f1; // 单精度
double f2; // 双精度
long double f3; // 长双精度

6.字符char+ASCII码表

char ch1 = 'a';  // 'a'是字符常量,代表字母a
char ch2 = '\n'; // '\n'是不可见字符常量,代表回车

         计算机中存储的都是1和0,因此各种字符都必须被映射为某个数字才能存储到计算机中,这种映射关系形成的表称为 ASCII 码表。如下:

         字符本质上就是一个单字节的整型,支持整型所有的运算。比如:

#include <stdio.h>
int main(){
    char c1 = 20;
    char c2 = c1 + 'a'; // 等价于 char c2 = 20 + 97;

    printf("%c\n", c2); // 以字符形式输出117,即 'u'
    printf("%d\n", c2); // 以整型形式输出117

}

 

7.字符串char *s1+char s2[]+指针和数组

        定义:字符串定义可以使用两种:指针or数组

char *s1 = "abcd"; // 使用字符指针来表示字符串
char s2[]= "abcd"; // 使用字符数组来表示字符串

        注意:使用数组来定义字符串时,方括号[]里面的数字可以省略不省略也可以,但必须必字符串实际占用的内存字节数要大。

8.布尔型数据bool

        概念:布尔型数据只有真、假两种取值,非零为真,零为假。

bool a = 1; // 逻辑真,此处1可以取其他任何非零数值
bool b = 0; // 逻辑假 

        注意: 逻辑真除了 1 之外,其他任何非零数值都表示逻辑真,等价于 1。 使用布尔型 bool 定义变量时需要包含系统头文件stdbool.h。 布尔型数据常用语逻辑判断、循环控制等场合。

9.常量和变量

        概念:不可改变的内存称为常量,可以改变的内存称为变量

        eg:

int a = 100;    // a是变量,而100是常量
float f = 3.14; // f是变量,而3.14是常量
char s[] = "abcd"; // s是变量,"abcd"是常量

 10.标准输入 scanf+fgets+stdin

        概念:键盘是系统的标准输入设备,从键盘中输入数据被称为标准输入

scanf(); // 格式化输入函数
fgets(); // 字符串输入函数

int a;
float f;
scanf("%d", &a);   // 从键盘输入一个整型,放入指定的内存地址 &a 中
scanf("%f", &f);   // 从键盘输入一个浮点数,放入指定的内存地址 &f 中

scanf("%d%f", &a, &f); // 从键盘依次输入一个整型和一个浮点型数据,用空白符隔开

char c;
char s[10];
scanf("%c", &c);  // 从键盘输入一个字符,放入指定的内存地址 &f 中
scanf("%s", s );  // 从键盘输入一个单词,放入指定的数组 s 中(注意不是&s)

fgets(s, 10, stdin); // 从键盘输入一行字符串,放入数组 s 中

        注意: scanf() 与 printf() 不同,scanf() 的格式控制串不可乱写,尤其是结尾处的 \n 用户必须完全按照 scanf()中描述的输入格式控制串来输入数据,否则将出错。

// 此处输入时必须带逗号
scanf("%d,%d", &a, &b);

// 此处必须先输入a=,然后才能输入整数
scanf("a=%d", &a); 

// 此处结束输入时按下的回车符将被scanf()误以为格式控制符,无法正常结束输入
scanf("%d\n", &a); 

         注意:scanf() 的返回值,代表成功从键盘读取的数据的个数 无法匹配 scanf() 指定格式的数据,将被遗留在输入缓冲区中,不会消失 示例:

// scanf() 试图从键盘读取两个整数
// 返回值 n 代表成功读取的个数,比如:
// 输入100 200,则 n 将等于2
// 输入100 abc,则 n 将等于1
// 输入abc xyz,则 n 将等于0;输入abc 200,n也将等于0
int n = scanf("%d%d", &a, &b);

// 根据 scanf() 的返回值,判断用户是否输入了正确的格式
while(n != 2)
{
    // 需要清空缓冲区并提示用户重新输入
    char s[50];
    fgets(s, 50, stdin);
    printf("请重新输入两个整数\n");

    n = scanf("%d%d", &a, &b);
}

11.练习2day

  • 第一题:指出下列常量的类型


    ‘\b’
    1066
    99.44
    0XAA
    2.0e30
    0x00EEABCDUL

  • 解答:
'\b' : char字符型数据,代表退格键
1066 : int整型数据,十进制整数
99.44: float浮点型数据
0XAA : int整型数据,十六进制整数
2.0e30 : float浮点型数据,科学计数法,代表2乘以10的30次方
0x00EEABCDUL : unsigned long无符号整型数据,十六进制,末尾的UL代表无符号长整型

第二题:

        编程实现如下功能:

如果用户输入大小写字母,则输出字母对应的ASCII码值。
如果用户输入ASCII码值,则输出对应的大小写字母。

        解答:

#include <stdio.h>

int main(void){
    int ch;

    while(1){
        int n;
        printf("请输入一个ascll码或者一个字符:");
        n = scanf("%d", &ch);//判断输入的ch是否是一个整型

        // 输入了ASCII码值
        if(n == 1 && getchar() == '\n'){//输入一个值,并且敲了回车
            printf("%d  ascll码对应的字符:  %c\n",ch,ch);
        }//of if

        // 输入了非数字字符
        else if(n == 0){
            ch = getchar();

            if(ch>='A'&&ch<='Z' || ch>='a'&&ch<='z')
                printf("%c  对应的ascll码值:  %d\n", ch);
            else
                printf("letters only\n");
        }//of else if

        // 数字后面带有非法字符
        else{
            printf("只能输入整数或字母\n");
            while(getchar()!='\n');
        }//of else
    }//of while

    return 0;
}//of main

第三题:

         假设有如下程序,程序输出的结果是什么?

int main(void)
{
    unsigned char a, b, c;
    a = 0x3;
    b = a|0x8;
    c = b<<1;

    printf("%d  \n %d\n", b, c);
}

        解答:

        这是简单的位运算的题目,a在二进制中的数位是【0000 0011】,与十六进制数0x8的二进制数位是【0000
1000】,因此这两数数相或的结果是:【0000 1011】,所以 b 等于11。

        对上述二进制数据 b 进行左移 1 位操作,结果是【0001 0110】,所以 c 等于22. 最终输出的结果是:

                
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚小萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值