栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

常量&变量,存储类型&数据类型,取余&取模,c语言输入输出函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

常量&变量,存储类型&数据类型,取余&取模,c语言输入输出函数

一、常量 – 不可改变的量
1、整型常量
    十进制数:eg:99
    二进制数:eg:0b0110
    八进制数:eg:076
    十六进制数:eg:0x2134

2、浮点型常量
    小数 1.123
    指数 -0.00123 --> -1.23e^(-3)

3、字符常量 -- 单个字符,用''括起来
    'a' 'A' '0' 'n' '+'
    '141' --> 141(八进制) --> 97(十进制) --> 'a'

4、字符串常量 -- 一串字符,用" "括起来,以''结束
    "zhangsan"  "张三"  "028 - 7777777"

5、宏(宏只能大写) -- 标识常量
    #define MAX 250
二、变量
定义一个变量:
<存储类型><数据类型><变量名/标识符>;
	eg:(auto) int a;

1、存储类型 -- 想要把这个数据存到哪里去
    4个存储类型:auto  static  extern  register
注意:
    1、在程序运行的时候,变量占据了一定大小的内存空间
    2、变量存储空间的大小,由数据类型决定
    3、变量的内存空间首地址,就是变量的地址
    
2、数据类型 -- 变量要装什么类型的数据(小数、字符、整数)
    必须定义为相应的数据类型
    变量的初始化:定义的时候赋值
        int a = 10;
	
3、变量的分类
    C语言中{}就是一个模块
    (1)全局变量
    	定义的位置:在所有的模块外
    	有效范围:从定义开始,到整个程序结束
    	生命周期:从定义开始,到整个程序结束
    	特点:如果没有初始化,默认为0
    (2)局部变量
        定义的位置:在模块内部
    	有效范围:从定义开始,到整个模块结束
    	生命周期:从定义开始,到整个模块结束
    	特点:如果没有初始化,默认为0   
三、存储类型
1、auto -- 自动类型(系统自动分配区域)
    普通局部栈变量,这种对象会自动创建和销毁
    一般隐藏auto的存储类型为自动存储类型,程序中大部分都是这种自动变量
    int b = 1; ==>  auto int b = 1;

2、register -- 寄存器类型
    特点:提升运行效率,cpu上寄存器特别少
    register float pi = 3.14;
	可能会申请失败,失败后会自动转化为auto类型
        
3、extern - 引用、声明全局变量、函数等
   (1)extern 可以在一个文件中去扩展全局变量的作用范围
eg:
#include 
int Max(int ,int);
int main(int argc, char *argv[])
{
    extern a,b;
    scanf("%d %d",&a,&b);
    printf("Max = %d",Max(a,b));
    return 0;
} 
int a,b;
int Max(int a,int b)
{
    return (a > b)?a:b;
}

	(2)将全局变量的作用范围扩展到其他文件
eg:

第一个文件夹demo.c:

int b = 2;
extern c = 5;

第二个文件夹main.c:

#include 
extern b;
int c;
int main(int argc, char *argv[])
{
    printf("b = %dn",b);
    printf("c = %dn",c);
    return 0;
} 

(3)extern 修饰函数 此函数就成为了外部函数,可供其他文件调用
eg:
第一个文件fun1.c:

#include 
void fun1()
{   
    printf("fun1.....n");
}

第二个文件fun2.c:

#include 

extern void fun2()
{   
    printf("fun2.....n");
}

第三个文件main.c:

#include 
extern void fun1();
void fun2();
int main(int argc, char *argv[])
{ 
    fun1();
    fun2();
    return 0;
} 

4、static -- 静态类型
    数据存放在全局数据区,但作用域只能在本文件或本函数中使用
    所以可以在两个不同文件 或 函数中,同时申明同名的两个static变量
    	但是它们两个是不同的变量
    (1)修饰全局变量,将这个全局变量作用域限制在本文件中
    (2)修饰函数,限制函数作用域只能在本文件中使用
    (3)修饰局部变量,改变局部变量的生命周期 -- 一直到程序结束
    
#include 
void test()
{
    static int m = 1;
    printf("m = %dn",m);
    ++m;
}
int main(int argc, char *argv[])
{ 
    test();
    test();
    test();
    return 0;
} 
四、输入输出
1、格式输入输出函数
    printf()
    功能:按照指定的格式向显示器输出数据
    格式:printf("格式控制串",输出表);
	%d -- 十进制
    %x -- 十六进制
    %o -- 八进制
        
    %c -- 打印字符
    %s -- 打印字符串
    %p -- 打印地址
    %f -- 打印浮点数
    %u -- 打印无符号int
    %e -- 打印指数

    scanf() -- 格式输入函数
    功能:按照指定格式,从键盘读入数据存入到地址表中待定
    格式:scanf("格式控制串",地址表);
	注意:
		1、遇到空格 TAB  回车代表结束
        2、格式控制串里面有什么,就必须要输入什么符号
        3、如果遇到非法输入也会结束
        
 #include 
int main(int argc, char *argv[])
{
    int a,b,c;
    int i;
    i = scanf("%d %d %d",&a,&b,&c);
    printf("%dn",i);
    return 0;
} 

2、字符输入输出函数
   getchar() -- 从键盘读入一个字符(返回值是输入的那个字符)
        用法:
		char ch;
		ch = getchar();
   putchar() -- 在终端打印一个字符
        putchar(ch);
		putchar('a');
		putchar('n');

3、字符串输入输出函数
    gets() -- 输入
    	gets(字符串存入的首地址);
	只是以回车作为输入结束
    puts() -- 输出
        puts(字符串的首地址)
    会自动换行
        
    char a[20] = {0};
	gets(a);
	puts(a);

#include 
int main(int argc, char *argv[])
{
    char a[20];
#if 0
    scanf("%s",a);
    printf("%s",a);
#else
    gets(a);
    puts(a);
#endif
    return 0;
} 
五、数据类型的转换
1、显式转换 -- 强制性转换(使用空类型指针必须强转)
    (int)a
    (void *)p
    
 eg:
int main()
{
    int sum = 17,count = 5;
    double mean;
    mean = (double)sum / count;
    printf("%dn",sum);
    printf("mean = %fn",mean);
    return 0;
}

注意:
(1)强制性转换后面的表达式比较复杂,一定要注意使用小括号
(2)强制性转换是一种不安全的转换,一般都是高级的转换成低级的,所以会导致数据丢失
(3)强制性转换不能实际的去改变变量的 值  和 数据类型

2、隐式转换 -- 自动转换
    char short --> int --> unsigned --> long --> double <-- float
    有符号与无符号 --> 都转换为无符号
    
    隐式转换有三种类型:算术转换、赋值转换、输出转换
    (1)算术转换:必须要转换成同一个类型才能运算,在进行运算的过程中,以表达式中最长的类型为主,其他类型都会转换成该类型
        char ch;
		int i,result;
		float f;
		double d;
		result = ch / i + (f * d - i);
	(2)赋值转换:等号右边的数据类型会自动转换为左边的数据类型
        如果左边的数据类型比右边的小,则会导致数据的丢失,会进行截断
    (3)输出转换:以printf为主,printf()以指定的格式输出,如果输出的数据类型与输出的格式不同,会自动转换
        注意:
		a.较长类型的数据转换成较短类型的数据输出,值不能超过较短类型允许的范围,否则就会出错
        b.输出的数据类型 与 输出格式不符合时,经常发生错误
            int d = 9;
			printf("%fn",d);

#include 
int main(int argc, char *argv[])
{
    int a = 267;
    int d = 27;
    printf("%c",a);
    printf("%fn",(float)d);
    return 0;
} 
六、取余 & 取模

对取余和取模定义不同的语言中,两者的不同点只有一个

  • 取余运算在计算商值向0方向舍弃小数位
  • 取模运算在计算商值向负无穷方向舍弃小数位

也就是:取余,遵循尽可能让商大的原则

​ 取模,遵循尽可能让商小的原则

取余(rem)和取模(mod)在被除数、除数同号时,结果是等同的,异号时会有区别,所以要特别注意异号的情况

eg:
取模
5 mod 3 = 2 % 除数是正,余数就是正的
-5 mod 3 = 1
5 mod -3 = -1 % 除数是负,余数就是负
-5 mod -3 = -2

取余 % 用 rem 时,不管除数是正是负,余数的符号与被除数的符号相同
5 rem 3 = 2 % 被除数是正,余数就是正
5 rem -3 = 2
-5 rem 3 = -2 % 被除数是负, 余数就是负
-5 rem -3 = -2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号