IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言入门-关键字,整形变量,数据的输入输出 -> 正文阅读

[C++知识库]c语言入门-关键字,整形变量,数据的输入输出

一、整形数据

整形变量在储存单元的储存方式是按照二进制位的补码形式存放。

正数的补码反码原码相同,负数的反码:二进制的原码除了最高位的符号位不变外其它位按位取反,补码为反码+1。

当整形数据分布四个字节时,一个字节为8个比特位

5的原码:

00000000000000000000000000000101

?5的反码

00000000000000000000000000000101

?5的补码

00000000000000000000000000000101

-5的原码

10000000000000000000000000000101

最高位代表符号位: 1表示负数,0表示正数?

-5的反码

11111111111111111111111111111010

-5的补码

11111111111111111111111111111011

?整形变量的符号属性

在实际应用中,有的整数数据只有正数,为了充分利用变量的取值范围,可以将变量定义为“无符号”类型。

(unsigned)无符号型,存储单元中没有符号来表示正负,只能存放不带有符号的整数。例如-1,-6等不能存放,而23可以。取值范围由0开始,比正常有符号同类型的数据范围扩大一倍。

(signed)有符号型,存储单元的最高位表示符号(0为正,1为负),我们通常使用的便是有符号类型。

说明:1.只有整形(包括字符型)数据可以加signed,unsigned来修饰。

? 2.无符号整形数据使用“u%”来打印,“u%”表示用无符号十进制的格式来输出。

#include<stdio.h>
int main()
{
	int a = -1;
	int arr[3] = { 1,2,3 };
	if (a > sizeof(arr))
		printf("ok");
	else
		printf("no");
	return 0;
}

打印结果为ok

sizeof()的返回值类型为无符号类型整数,在比较时,会将-1也转换为无符号类型整数,转换后的值很大。

#include<stdio.h>
int main()
{
	unsigned int a = -1;
	unsigned short  int b = -1;
	printf("%u\n", a);
	printf("%u", b);
	return 0;
}

打印结果:4294967295? ? 65535

字符和数字的不同

字符'1'和数字1的不同概念:字符’1‘在内存中以ASCII码形式存储,占据1个字节。而整数1按照补码的形式存储。

'1'=1+'0'

二、关键字

c语言有32个关键字

程序之中使用到变量,有着不同的储存形式。存储类别分为静态存储和动态存储,可以通过存储类修饰符来告诉编译器要处理哪一种类型的变量。具体有auto(自动),static(静态),register(寄存器),extern(外部)。

动态存储和静态存储:从变量的产生时间上可以分为静态存储和动态存储。有些变量在程序运行的整个过程中都存在,而有些变量在被调用函数时才会临时分布储存单元,调用结束之后该存储单元就被释放了,故而静态存储就是指程序运行分配的固定的存储方式,而动态存储则是在程序运行期间根据需要动态的分配存储空间。

1.static关键字
1、static修饰局部变量(静态局部变量):static存储类指示编译器在程序的生命周期内保持局部变量的存在,不需要在每次进入和离开作用域时进行创建和销毁。使用static修饰的函数的局部变量,在调用结束之后不会消失,即使得它的存储单元不释放,在下一次调用此函数的时候,此局部变量的值延续了之前的值。

int Fun(int a)
{
	static s = 2;     //int s=2;
	s = s + 1;
	return s;
}
#include<stdio.h>
int main()
{
	int i = 1;
	printf("%d\n", Fun(i));
	printf("%d\n", Fun(i));
	return 0;
}

?结果:s使用static修饰时,输出3 4??

s使用int修饰时,输出3 3

结果分析:stctic修饰s时,第一次调用Fun()函数时,s=2+1 返回3 ,?调用第一次结束之后s=3,第二次调用Fun()函数时,由于s被static修饰,s保留了第一次调用之后的值,s=3,执行s=s+1,s=4,返回4。

没有stctic修饰s时,第一次调用Fun()函数时,s=2+1 返回3? ,调用第一次结束之后s=3,由于s没有被static修饰,s的存储空间释放,第二次调用Fun()函数时,s被重新分布空间,s=2,执行s=s+1,s=3,返回3。

2、static修饰局部变量在编译时赋初值,且只赋初值一次,再次调用时,保留上一次运行后的值,如果说没有赋初值时,静态局部变量会自动初始化为0或者'\0',其他的局部变量的值就是不确定的。

#include<stdio.h>
//int count;          //局部变量没有初始化时,自动初始化0
int main()
{
	static count;   //int count;
	printf("%d",count);
}

结果:使用static修饰局部变量时,没有初始化时,自动初始化为0,结果为0

使用 int修饰时,程序报错:使用了未初始化的局部变量“count”

全局变量没有初始化时,自动初始化为0,结果为0

2.static修饰全局变量

static修饰全局变量时,会使得变量的作用域限制在声明它的文件内。

?结果:报错,无法识别的count?

分析:全局变量本身具有外部链接属性,如果使用static修饰,使得全局变量具有了内部链接属性,使得变量的作用域限制在声明它的文件内

3.static修饰函数

static修饰函数时,会使得函数的作用域限制在声明它的文件内。

应用:使用static修饰局部变量来计算阶乘。

#include<stdio.h>
int fac(int i)
{
	static f = 1;
	f = f * i;
	return f;
}
int main()
{
	int n = 0;
	int i = 0;
	scanf("%d", &n);
	for (i = 1; i < n; i++)
		fac(i);
	printf("%d", fac(i));
	
}

2.auto关键字

auto是所有局部变量默认的存储类。auto关键字就是修饰一个局部变量为自动的,这意味着每次执行到定义该变量的时候,都会产生一个新的变量,重新对其初始化。

auto只能用于修饰局部变量,没有特别指定时,局部变量默认为auto修饰的局部变量,auto int a=1和int a=1 没有区别,故而auto经常被省略。

3.register关键字

一般情况下,变量(包括静态存储方式和动态存储变量)的值是存储于内存中。当程序需要用到哪一个变量时,控制器发出指令将内存之中该变量的值运送到运算器中,如果要存入数据,则由运算器将数据送到内存之中。如果说一些变量需要频繁使用,那么太浪费时间了。cpu主要是负责计算的硬件单元,为了方便运算和提高效率,一般第一步都要把数据从内存读取到cpu里,那就需要cpu具有一定的数据临时存储能力,所以现代cpu内,都集成了一组叫做寄存器的硬件,用于临时变量的保存。

? ? ? ? ? ? ? ? ? ??

?那么什么变量可以使用register呢:1、局部变量 2、不会被写入的 3、高频率被读取的?

register修饰的变量不能被取地址

4.extern关键字

extern变量称为外部存储变量,extern声明了程序中的全局变量。

将另一个文件的全局变量的作用域扩展到另外一个文件

一个c程序可以由一个或者多个源程序文件组成。例如如果一个程序有两个文件,在两个文件中,都要用到同一个全局变量global,但是不能在两个文件中都定义global,但是如果这样就会报错,所以说这时候就需要extern来定义global。

?这样就可以在一个文件中使用另外文件的全局变量。打印90。

三、数据的输入输出

printf()和scanf()?

#include<stdio.h>
#include<math.h>
//求一个方程的根  ax2+bx+c=0
int main()
{
	float a, b, c;
	float p, q, x1, x2;
	scanf("%f%f%f", &a, &b, &c);
	float dis = b * b - 4 * a * c;
	if (dis >= 0)
	{
		p = -b / 2.0 / a;
		q = sqrt(dis) / 2.0 / a;

		x1 = p + q;
		x2 = p - q;
		printf("x1=%7.2f,x2=%7.2f", x1, x2);
	}
	if (dis < 0)
		printf("没有实根");

	return 0;
}

1、scanf()输入a,b,c数据时,前面加上取地址符,printf()在格式符f前加了”7.2”,表示指定数据占据7列,其中小数占据2列。

2、c语言本身不提供输入输出语句,而是由c语言标准函数库提供,故而printf,scanf不是关键字。

3.scanf()在读取单个字符时,空格或者转义字符都会被读取,输入时应当连续输入

#include<stdio.h>
int main()
{
	char a, b, c;
	scanf("%c%c%c", &a, &b, &c);
	printf("%c%c%c", a, b, c);
	return 0;
}

?由于读取了空格,打印结果:a空格b

4,如果在格式控制字符中除了格式声明外还存在别的字符,则应该按照格式输入

如:scanf("a=%d",&a); 输入1错误,应该输入a=1。

5.输入数值数据时,如果说输入空格,Tab键或者非法字符,认为该数据输入结束,如有需要,接下来继续输入,直到遇到enter键停止读入。

#include<stdio.h>
int main()
{
	char a, c;
	int b;
	scanf("%c%d%c", &a, &b, &c);
	printf("%c%d%c", a, b, c);
	return 0;
}

?

输入a空格1空格c后,"%c"读取了字符a,"%d"不会读取空格,读取了1,”%c"读取了空格,字符c不会被读取。

#include<stdio.h>
int main()
{
	char arr[10] = { 0 };
		scanf("%s", arr);
	printf("%s", arr);
	return 0;
}

?输入:qwer qwe? ? 打印:qwer? ? ? ? ? ?

分析:scanf()遇到空格停止读取,所以说scanf()不可以输入包含有空格的字符串,需要使用gets()。?

字符输入输出函数

1 putchar()字符输出函数:输出一个字符

?2.getchar()字符输入函数:输入一个字符

#include<stdio.h>
int main()
{
	char ch = 0;char  a=0;
	ch=getchar();
	a=getchar();
	putchar(ch);
	putchar(a);
	return 0;
}

getchar()可以读取转义字符

#include<stdio.h>
int main()
{
	char ch = 0;
	int arr[100] = { 0 };
	int i = 0;
	while (ch != '\n')
	{
		scanf("%d", &arr[i]);
		ch=getchar();
		i++;
	}
	printf("%d", i);
	return 0;
}

读取输入的数字长度

分析:输入11 2 打印2

输入11后,输入空格,scanf读入11,遇到空格停止读入,缓冲区留空格字符,getchar()先读取缓冲区字符空格,i=1,循环继续

输入2后,输入换行,scanf读入2后停止读入,缓冲区留下换行字符,getchar()先读取缓冲区字符,i=2循环停止

字符串输入输出

1、puts()输出字符串

2、gets()输入字符串

#include<stdio.h>
int main()
{
	puts("hi");
	puts("he");
	return 0;
}

puts()会在字符串中找到'\0',遇到'\0'打印字符串并换行。没有结束标志时,编译器会自动在字符串末端添加'\0'

#include<stdio.h>
int main()
{
	char ch[10] = { 0 };
	gets(ch);
	puts(ch);
	return 0;
}

输入ab c,打印ab c并换行? ? ??puts()可以输出空格并换行

gets()可以读取空格,遇到enter键结束。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:00:48  更:2021-08-04 11:02:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 22:22:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码