重新学习C语言(《c primer plus》)(数据和c)(c的基本数据类型及书写)

学习方法:见专题系列的第一篇。

温馨提示:自己之前学过c语言,这篇文章的内容不具有总体性和一般性。不建议初学c的人来看,免得误入歧途(大佬随意)。只适用学过c语言并且想快速抓住重点,想快速过一遍经典书籍。希望本文可以抛砖引玉

今日学习内容

c primer plus的第三章(数据和c)

这是书中概括的主要内容(可以不看)

● 关键字——int、short、long、unsigned、char、float、double、_Bool、_Complex、_Imaginary;

● 运算符——sizeof();

● 函数——scanf();

● 整数类型和浮点数类型的区别;

● 如何书写整型和浮点型常数,如何声明这些类型的变量;

● 如何使用printf()和scanf()函数读写不同类型的值

C有多种的数据类型。基本数据类型分为两大类:整数类型和浮点数类型。通过为类型分配的存储量以及是有符号还是无符号,区分不同的整数类型。最小的整数类型是char,因实现不同,可以是有符号的char或无符号的char,即unsigned char或signed char。但是,通常用char类型表示小整数时才这样显式说明。其他整数类型有short、int、long和long long类型。C规定,后面的类型不能小于前面的类型。上述都是有符号类型,但也可以使用unsigned关键字创建相应的无符号类型:unsigned short、unsigned int、unsigned long和unsigned long long。或者,在类型名前加上signed修饰符显式表明该类型是有符号类型。最后,_Bool类型是一种无符号类型,可存储0或1,分别代表false和true

浮点类型有3种:float、double和C90新增的long double。后面的类型应大于或等于前面的类型。有些实现可选择支持复数类型和虚数类型,通过关键字_Complex和_Imaginary与浮点类型的关键字组合(如,double _Complex类型和float _Imaginary类型)来表示这些类型。

整数可以表示为十进制、八进制或十六进制。0前缀表示八进制数,0x或0X前缀表示十六进制数。例如,32、040、0x20分别以十进制、八进制、十六进制表示同一个值。l或L后缀表明该值是long类型,ll或LL后缀表明该值是longlong类型。

在C语言中,直接表示一个字符常量的方法是:把该字符用单引号括起来,如'Q'、'8'和'$'。C语言的转义序列(如,'\n')表示某些非打印字符。另外,还可以在八进制或十六进制数前加上一个反斜杠(如,'\007'),表示ASCII码中的一个字符。

浮点数可写成固定小数点的形式(如,9393.912)或指数形式(如,7.38E10)。C99和C11提供了第3种指数表示法,即用十六进制数和2的幂来表示(如,0xa.1fp10)。

printf()函数根据转换说明打印各种类型的值。转换说明最简单的形式由一个百分号(%)和一个转换字符组成,如%d或%f。

剥离的精华(上面的内容可以不看)

1.总体内容概括(只讲怎么用)

就讲了四个对象(1.整数类型2.浮点数类型3.转义字符4.字符类型)

1.整数类型(就看这一个程序就行)

#include <stdio.h>
int main(void)
{
	int y;//1基本使用这个 
	unsigned int x;//2会使用到这个。 
	long long z;//3实在不行了,就用这个表示实数。 从1到3值越来越大 
	x=100;
	y=100;
	z=5555555555555555; 
	printf("请输入y的值\n");
	scanf("%d",&y);//输入的时候。
	printf("以下三行都是x的十进制八进制和十六进制\n");
	printf("decimal=%d,octal=%o,hex=%x\n",x,x,x);
	printf("decimal=%d,octal=%#o,hex=%#x\n",x,x,x);
	printf("decimal=%#d,octal=%#o,hex=%#x\n",x,x,x);//输出整数十进制的时候%d,八进制的时候%o.十六进制的时候%x 
	printf("y的值为%d\n",y);
	printf("z的值为%lld\n",z); //lld 
	
	
	return 0;
 } 

下面的程序是为了更好比较范围大小。

#include <stdio.h>
int main(void)
{
	unsigned int un=3000000000;
	short end=200;
	long big=65537;
	long long verybig=1234678945621;
	printf("un=%u and not %d\n",un,un);
	printf("end=%hd and %d\n",end,end);
	printf("big=%ld and not %hd\n",big,big);
	printf("verybig=%lld and not %ld\n",verybig,verybig);
	
	return 0;
	
}

2.浮点数类型

#include <stdio.h>
int main(void)
{
	float num;//1
	double num2;//2
	num2=2.2; 
	printf("enter a floating value:");
	scanf("%f",&num);
	printf("小数点形式为%f\n",num);
	printf("指数形式为%e\n",num); 
	printf("十六进制为%a\n",num);
	printf("num2的表示为%f\n",num2);
	
	
	
	return 0;
}

3.字符类型(转义字符被包括)

其实转义字符就很简单。如果是特殊字符的话,就在前面加上\即可,就可以在显示器上显示或者起作用了。

#include <stdio.h>
int main(void)
{
	char i;
	scanf("%c",&i);
	printf("%c is number is %d",i,i);
	
	
}
#include <stdio.h>
int main(void)
{
	char grade='\a';
	printf("%c",grade);
	//还真的可以实现蜂鸣,如果加上for 语句那这个电脑不是崩了 
	
	return 0;
}

2.一些重要的点但是容易让人忽略

1.计算机存储数据是以二进制的形式存储的,对于浮点数(小数)来说是估计的。对于一些算术运算,浮点数损失的精度比起整数来说更多。

2.声明为变量创建和标记存储空间,并为其指定初始值。

 3.两个变量相加减也是可以作为%d的对象。(可以运行一下下面的程序)

#include <stdio.h>
int main(void)
{
	
	int ten=10;
	int two=2;
	printf("doing it right\n");
	printf("%d minus %d is %d\n",ten ,2,ten-two);
	printf("doing it another\n");
	printf("%d minus %d id %d\n",10,2,10-2);
	return 0;
	
	
	
	
}

4.char类型实际存储的是整数而不是字符,计算机使用数字编码来处理字符。这也就说明了下面程序的正确性

#include<stdio.h>
int main(void)
{
	
	/*char item;
	item=66;
	printf("it's asc2值为%c",item);
	*///上面的代码练习告诉我们只要把具体的char字符赋值就可以表示相应的字符了 
	
	char item;
	scanf("%c",&item);
	printf("items form is %c",item); 
	
	
	
	
 } 

5.printf()函数中的转换说明决定了数据的显示方式,而不是数据的存储方式

 

 6

练习题(只写具有代表性的)(但是建议练习的时候建议全部来练习)

2.编写一个程序,要求提示输入一个ASCII码值(如,66),然后打印输入的字符

#include<stdio.h>
int main(void)
{
	
	/*char item;
	item=66;
	printf("it's asc2值为%c",item);
	*///上面的代码练习告诉我们只要把具体的char字符赋值就可以表示相应的字符了 
	
	char item;
	scanf("%c",&item);
	printf("items form is %c",item); 
	
	
	
	
 } 

4.编写一个程序,读取一个浮点数,先打印成小数点形式,再打印成指数形式。然后,如果系统支持,再打印成p记数法(即十六进制记数法)。按以下格式输出(实际显示的指数位数因系统而异)

#include <stdio.h>
int main(void)
{
	float num;
	double num2;
	num2=2.2; 
	printf("enter a floating value:");
	scanf("%f",&num);
	printf("小数点形式为%f\n",num);
	printf("指数形式为%e\n",num); 
	printf("十六进制为%a\n",num);
	printf("num2的表示为%f\n",num2);
	
	
	
	return 0;
}

5.一年大约有3.156×107秒。编写一个程序,提示用户输入年龄,然后显示该年龄对应的秒数。

#include <stdio.h>
int main(void)
{
	int age;
	float time;
	scanf("%d",&age);
	time=3.156e7*age;
	printf("%f\n",time);
	printf("%e\n",time);
	printf("%a\n",time);
	
	
	
	return 0;
}

代码分析()

这一章相对简单,代码容易,就不写了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

正在变秃的程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值