学习方法:见专题系列的第一篇。
温馨提示:自己之前学过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;
}
代码分析()
这一章相对简单,代码容易,就不写了
|