大一寒假c语言笔记

本文档涵盖了C语言的基础知识,如数据类型、变量声明、字符串处理等,并深入探讨了高级主题,包括动态内存管理、函数指针和变元列表等。

 寒假c语言笔记回顾

1“void main()”等效于”int main(void)”;

2:“Don’t ”在编译环境下输入方式应该为“Don/’t;(/’序列称为转义序列(escape sequence))

3:注释说明代码的作者及版权所有(格式):/*

                                                           * Written by liuning

                                                          * Copyright 2010

                                                           */ 

4“#include<stdio.h>”:#”表示这是一个预处理命令(preprocessor directive);

5:使用转义序列“/a”可以发出声音,并且不会输出;

6 longlong double)类型的数值后面应该加大写字母L或小写l

eg:long Big_number=10L(或者 10l); unsigned long类型的数值后加“UL

7:将整数常量指定为long long 类型时,应添加两个“L

   Eg:longl long ready_big_number=-123456789LL;

8:将常量指定为无符号类型时,应添加“U

   Eg:unsigned int count=100U;

9:编写一个float常量,需要在数值的末尾加上一个f,以区别double类型。 Eg: float Radius=2.5f;   double Biggest=123E30;

10:                读取数据的格式指定符(表)

操作

需要的控制字符串

读取short类型的数值

%hd

读取int类型的数值

%d

读取long类型的数值

%ld

读取float类型的数值

%f%e

读取double类型的数值

%lf%le

11: #define PI 3.14159f  等效于:const float pi=3.14159f;

12:隐式类型转换:

(1)    如果一个操作数的类型是long double,就把另一个操作数转换为long double类型。

(2)    否则。如果一个操作数的类型是 double,就把另一个操作数转换为double类型。

(3)    否则。如果一个操作数的类型是 float,就把另一个操作数转换为float类型。

(4)    否则。如果两个操作数的类型都是带符号的整数或无符号的整数,就把级别较低的操作数转换为另一个操作数的类型,无符号整数类型的级别从低到高为:signed char, short,int ,long,long long。每个无符号整数类型的级别都与对应的带符号的整数类型相同,所以unsigned int类型的级别与int类型相同。

(5)    否则。如果带符号的整数类型的操作数级别低于无符号整数类型的级别,就把带符号整数类型的操作数转换为无符号整数类型。

(6)    否则。如果带符号整数类型的值域包含了无符号整数类型所表示的值,就把无符号整数类型转换为带符号的整数类型。

(7)    否则。两个操作数都转换为带符号整数类型对应的无符号整数类型。

13:宽字符类型:wchar_t类型的变量存储多字节字符码;并且在标准标准头文件<stddef.h>中定义。在char 类型的字符常量前面添加修饰符“L”就可以定义一个宽字符。  wchar_t  wch=L'A'; 如果要把一个字符读入wchar_t类型变量,可以使用%lc格式指定符。如果要使用printf()将字符串输出到屏幕上,则必须用%S(大写S)格式指定符。

 14:布尔变量的使用时需要包含<stdbool.h>头文件。

15               测试字符的函数(表)

     

     

islower()

小写字母

Isalpha()

大写或小写字母

Isupper()

大写字母

Isalnum()

大写或小写字母,或数字

Iscntrl()

控制字符

Isprint()

可打印字符,包括空格

Isgraph()

可打印字符,不包括空格

Isdigit()

十进制数字(09

Isxdigit()

十六进制数字(’0’~’9’’A’~’F’’a’~’f’

Isblank()

标准空白字符(空格,’/t’

Isspace()

空位字符(空格,’/n’’/t’’/v’’/r’’/f’

Ispunct()

Isspace()isalnum()返回false的可打印字符

16c中的字符串总是由/0字符结束,所以字符串的长度永远比字符串的字符数多1.

17printf()函数在遇到第一个空字符/0时就停止输出。

18strcpy()函数的参数是char 数组名    strcpy(string1,string2).

作用:将第二个参数指定的字符串复制到第一个参数指定的字符串中。(注:只有string2数组长度小于等于string1数组长度时 才执行该函数)

可以用以下方法检查:

If(sizeof(string2)<= sizeof(string1))

strcpy(string1,string2);

19:strncpy()函数的参数是char的数组名         strncpy(a,b,n).

作用:将一个字符串中的前n个字符复制到另一个字符串中,第一个参数是目标字符串,第二个参数是源字符串,第三个参数是一个size_t类型的整数。Eg:

char a[]=”This string will be repolaced”;

char b[]=”This string will be copied in part”;

size_t  n=26;

strncpy(a,b,n);    运行结果是在数组a后面包含字符串“This string will be copied”(b数组中的前26个字符)

20:类型size_t在标准库头文件<stddef.h>中定义。(如果要输入size_t类型的变量,则应该为:scanf(“%u”,&**);

21strcat()函数        strcat(string1,string2).作用:将string2复制到string1的末尾,并删除string1后的串标志”/0”.(注:strncat()函数的使用方法是与19中的strncpy()函数的作用一样,作用也类似)

22strcmp()函数    strcmp(tring1,string2),作用:按照ASCII码顺序比较两个数组中字符串(逐字符比较)eg:

char str1[]=”The quick brown fox”;

char str2[]=”The quick black fox”;

if(strcmp(str1,str2)<0)

printf(“str1 is less than str2 ”);   (注:strncmp()函数的使用方法与19类似,但作用是比较两个字符串前n个字符)

23sizeof运算符可以计算出制定类型的变量所占字节数,siezof运算符后类型名称外的括号是必须的。少了则不会编译

eg:printf(“/nThe size of a variable of type long is %d bytes”, sizeof(long));

(注:但其应用于变量时,不需要使用括号:eg:

alues)/sizeof(values[0]);

printf(“The size of the array is %d bytes”,sizeof(values));

printf(“and there are %d elements of %d bytes each”,avi,sizeof(values[0]));

输出如下语句int  avi=sizeof(v

The size of the array is 40 bytes and there are 5 elements of 8 bytes each  .

24:strchr()函数作用:在一个字符串中查找给定字符第一个匹配之处Eg

char str[15];

char *ptr,c=’r’;(int c=’r’;也可)

 strcpy(str,”this is a string”);

ptr=strchr(str,c);

25:strrchr()函数则是在一个字符串中查找给定字符最后一个匹配之处

26:strstr()函数则是在字符串中查找指定字符串的第一次出现Eg:

char text[]=”Ever dog has his day”;

char word[]=”dog”;

char *pfound=NULL;

pfound=strstr(text,word);

27gets()函数与fgtes()函数的区别:前者在字符串末尾自动附加‘/0;

后者会附加‘/n/0; 后者在读取字符串时比前者多一个字符;前者不能检查是否有足够的空间存储该字符串,后者可以应用于任意种类的输入字符串。

28

     

       

atof()

从字符串参数中生成的double类型值

atoi()

从字符串参数中生成的int类型值

atol()

从字符串参数中生成的 long 类型值

atoll()

从字符串参数中生成的long long类型值

使用方法:eg:

Char value_str[]=”98.4”;

Double value=0;

Value=atof(value_str);   数组value_str含有double类型值的字符串,将数组名作为参数传给atof()函数,就可以把它转化成double类型,其余函数用法一致。

29<wchar.h>头文件声明了函数来操作宽字符;

                     宽字符分类函数

     

     

iswlower()

小写字母

Iswupper()

大写字母

Iswalnum()

大写或小写字母

Iswcntrl()

控制字符

Iswprint()

可打印字符,包括空格

Iswgraph()

可打印字符,不包括空格

Iswdigit()

十进制数字(L’0’L’9’

Iswxdigit()

十六进制数字(L’0’~L’9’L’A’~L’F’L’a’~L’f’

Iswblank()

标准空白字符(空格,L’/t’

Iswspace()

空位字符(空格,L’/n’L’/t’L’/v’L’/r’L’/f’

Iswpunct()

Isspace()isalnum()返回false的可打印字符

30char类型值的指针指向占有一个字节的值,而long类型值的指针通常指向占有4个字节的值。

 31:间接运算符*可以访问指针所指的变量值,该运算符也称为取消引用运算符(dereferencing operator)。

32           访问数组元素的指针表达式

board

0

1

2

 

0

bard[0][0]

*board[0]

**board]

board[0][1]

*(board[0]+1)

*(*board+1)

board[0][2]

*(board[0]+2)

*(*board+2)

 

          1   

bard[1][0]

*(board[0]+3)

*board[1]

*(*board+3)

bard[1][1]

*(board[0]+4)

*(board[1]+1)

*(*bard+4)

bard[1][2]

*(board[0]+5)

*(board[1]+2)

*(*board+5)

 

 

2

bard[2][0]

*(board[0]+6)

*board[2]

*(*board+6)

*(board[1]+3)

bard[2][1]

*(board[0]+7)

*(board[1]+4)

*(*board+7)

*(board[1]+4)

bard[2][2]

*(board[0]+8)

*(board[1]+5)

*(*board+8)

*(board[1]+5)

33:动态内存分配:malloc()函数:使用方法及格式:

Eg1:  int  *pnumber=(int *)malloc(100);   请求100个字节的内存,并将内存块地址赋予pnumber.

Eg2: pNumber=(int *)malloc(75*sizeof(int)); 请求分配足以存储75int数据项的内存。

34calloc()函数分配内存:在<stdlib.h>头文件中声明calloc()函数与malloc()函数相比有两个优点,一是,它把内存分配为给定大小的数组,二是,初始化了所分配的内存,所有的位都是0;(使用calloc()函数需要两个参数:数组元素个数和数组元素所占字节数且两参数类型都是:size_t。) 使用格式及方法:

Eg1:  int  *pNumber=(int *)calloc(75,sizeof(int));

Eg2: primes=(unsigned long *)calloc(total,sizeof(unsigned long));

35:释放动态分配的内存:用 free()函数;eg:  free(primes),(primesmalloc()calloc()函数给其分配的内存)用于程序结尾。

36:重新分配内存:realloc()函数可以重用前面通过malloc()calloc()(realloc())分配的内存。该函数需要两个参数 一个是指针,它包含前面调用malloc()calloc()realloc()返回的地址;另一个是要分配的新内存的字节数。

使用方法及格式:eg: long  *pData=NULL;

                   size_t  count=0;

                   pData=(long *)realloc(pData,sizeof(long)*count)

37:没有返回值的函数必须将返回值的类型指定为void,而返回值类型不是void 的函数都在函数体中有个return语句,返回一个指定返回类型的值。

38:静态变量:在退出一个函数函数调用后,该调用中的数据可以在程序其他函数中使用。例如下面语句声明一个静态变量count: static int count=0; staticC的关键字,该句声明的变量和自动变量有两个不同点:一是:虽然它在函数的作用域类定义,但当的退出执行该函数后,这个静态变量不会被删除;二是:自动变量每次进入作用域,都会初始化一次,但是声明为static的变量只在程序开始时初始化一次;(见program103

注:静态变量只能在包含其声明的函数中可见,但它是一个全局变量,可以用全局变量的方式使用它。

39:长度可变的变元列表的基本规则:(实现变元个数可变的函数时,必须同时使用三个宏:va_atart(),va_arg(),va_end()

1在变元数目可变的函数中,至少要有一个固定变元。

2必须调用va_start()初始化函数中可变变元列表指针的值,变元指针的类型必须声明为va_list类型。

3必须有确定每个变元类型的机制。可以假设默认的类型或用一个参数来指定变元类型。

4必须有确定何时终止变元列表的方法。

5va_arg()的第二个变元指定了变元值的类型,这个指针类型可以在类型名的后面加上*来指定。

6在退出变元数目可变的函数前,必须调用va_end(),否则函数将不会正常工作。

(标注库函数<stdarg.h>提供了编写该种函数的例程见program106

40:                            转换字符及其含义                

转换字符

              

d

将输入转换为int

i

将输入转换为int,如果加了前缀o,就输入八进制,如果前加了oxoX,就输出十六进制,

o

将输入转换为Int,并假定所有的数字都是八进制数

u

将输入转换为unsigned int

x

将输入转换为int,并假定所有的数字都是十六进制

c

将下一个字符读入为char 类型(包括空白),如果在读入单个字符时要忽略空白,就在格式指定符的前面加上一个空白字符

s

从下一个非空白字符开始,输入一串连续的非空白字符

e, fg

将输入转换为float类型,输入中的小数点和指数是可选的

n

不读入任何输入,但前面读到此处为止的数字字符存储在对应的int*类型参数中。

41                    转换指定符应用

指定符

   

%lf

将下一个值读取为double类型

%*d

读入下一个整数值。但不存储它

%lc

将下一个字符取读为wchar_t类型

%/nc

将下一个字符取读为char类型,并忽略空白字符

%10lld

将接下来的10个字符取读为long long类型整数值

%5d

将接下来的5个字符读取为一个整数

%hu

将下一个值读取为unsigned short类型

%Lf

将下一个值读取为long double类型的浮点数

42”->”运算符是一个负号后跟一个大于符号,该运算符称为:成员指针运算符,

Printf(“/nThe name is %s.”,(*phorse).name);可以改写为:

Printf(“/nThe name is %s.”,phorse->name);这个表示法几乎可用于取代通常的取消引用指针表示法。(广泛用于结构指针)

43:强制转换:float c;  int a,b;

                          

C=float(a)/float(b);c=(float)a/(float)b;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值