@yy0518
2016-02-19T15:21:23.000000Z
字数 2404
阅读 675
C语言学习笔记
1 什么是常量?
程序执行过程中值不能发生改变的,称为常量;其值可变的,称为变量。
常量可分为直接常量和符号常量。直接常量就是显而易见的如3、-0.5这样的常量。符号常量是用标识符来表示一个常量,需要先定义才能使用,定义方式为:#define 标识符 常量
2 讲述c语言中处理空格的方法。
空格是个字符,ASCII码为32(十进制),不同于空字符(ASCII码为0)。
首先看输入,常用的scanf()函数在读取输入时,在遇到空格时会停止读取,也就是说不能用scanf()函数来读取空格。相似的还有制表符、换行符。因此,要读取包含空格、制表符、换行符的字符串时不能用scanf()函数,可以用gets()函数(代表get string)。【错误:gets函数也不能读取含有换行符的字符串。因为对gets函数来说,换行符就代表着输入结束。函读取换行符之前的内容,不包括换行符,并自动在最后加上空字符\0】
至于输出,譬如printf(),就是把空格当做普通字符输出,显示出来就是一个空格。
3 输入以下字符串“Even now, you don't konw HOW MUCH I LOVE YOU!”,按照原样显示,并计算其中单词数,字母数和大写字母数。
程序如:
int main()
{
char dis[50];
int str_len,words=0,big_w=0,i=0,a=0,b=0;
gets(dis);
str_len = strlen(dis);
printf("%s\n",dis);
for(i=0;i<=str_len;i++)
{
if((dis[i]<=90)&&(dis[i]>=65))
{ big_w++;
words++;
}
else if((dis[i]>=97)&&(dis[i]<=122)) words++;
else if(dis[i]==39) b++;//b表示单引号的数量,突然发现其实计算这个变量并没有什么用,但是这个条件语句还是要用到的
else a++;//a表示除了字母、单引号之外的其它符号的数量,包括字符串输入完了之后按的回车\n
}
printf("There are %d words\n",words);
printf("There are %d big words\n",big_w);
printf("There are %d danci",a-1);//a-1是因为输入最后按回车时也被记入字符串,所以要减去一个\n的字符。
return 0;
}
按照标准格式书写的字符串中含有的单词个数应该等于标点符号数(不包括单引号)和空格数之和。
1 字符常量居然被当作int型存储,如'cute'则可以作为 一个字符,赋值给一个字符型变量,char Mr.Qu ='cute';赋值后a的值为'e';
明明一个字节就能存储的结果花4个字节,为神马要这么浪费呢???
2 转义字符
人类简直太有智慧了!一方面那些不能用单引号就能表示的动作或声音,可以通过转义字符来实现;另一方面又避免了编译器printf()打印时出错。如\用\来表示,“用\”来表示。在printf输出时,出现第一个\代表既然出现的是转义字符,所以只能用\来表示,或者是\134(134为‘\’的八进制ASCII码),C90开始还可以使用十六进制的\x5c,即printf("\x5c");
3 八进制和十六进制输出
在用printf输出时,用%o代替%d,即用八进制形式显示整数;用%x代替%d即用十六进制显示整数;
如果要显示前缀,则用%#o,%#x,%#X则可分别显示前缀0、0x、0X。
为什么八进制的前缀是0(数字),但要用%o(字母o)?
4 int 和unsigned int
int为有符号类型,如果计算机系统默认int型为32位的,则取值范围为-2147483648~2147483647。则unsigned int 取值范围为0~4294967295.
unsigned int a=4294967295;
printf(“%u”,,a+1);
输出结果为:0.相当于到达最大值时,溢出回到起点0.
int b=2147483647;
printf("%d%d",b+1,b+2);
输出结果为:-2147483648 -2147483647.相当于超过最大值溢出后回到的起点是-2147483648
5 浮点数一般有两种表示方法:科学计数法和指数法。
C99中,浮点常量还可以用十六进制来表示。一般也会加个前缀0x,如0x1.a2p5,这里的.a2表示10/16+2/256,p表示2的指数,p5则表示的是2的5次方。
6 对于浮点数a,b:b=a+1; b-a的值不一定为1.
这与浮点数的精度有关,因为浮点数用小数部分和指数部分来表示,小数部分的精度有限,所以当浮点数较小,在浮点数精度范围内时,b-a值为1;当超过浮点数精度时,则值为0或者其他结果.
7 strlen()与sizeof()
在使用一些字符串处理函数(如strlen())时,记得加上头文件#include"string.h"
对于字符串常量如“You are so cute!”strlen()所得的长度为16,而sizeof()得出的结果则为17,也就是说占用了17个存储单元;因为是在处理字符串时,系统默认在字符串末尾加上一个空字符‘\0’,表示字符串在此结束,因此实际占用的存储单元比字符串长度多一个。
对于字符串变量如 char yy[50]="You are so cute!",则strlen(yy)值为16,sizeof(name)值为50.strlen总是表示的是实际字符的长度,name的size则为50,因为它是长度为50的字符组啊
1 如果scanf()比如要输入%d的数字,如果输入的数字范围超过了int型的范围怎么办?
2 如何打印转义字符的ASCII码?譬如单引号