重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C 语言string的用法有哪些呢,请看看下面我为你整理 总结 的c语言string的用法大全_C语言中string使用 方法 。
创新互联公司专注于张掖网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供张掖营销型网站建设,张掖网站制作、张掖网页设计、张掖网站官网定制、成都小程序开发服务,打造张掖网络公司原创品牌,更为您提供张掖网站排名全网营销落地服务。
c语言string的用法
函数原型:char *strdup(const char *s)
函数功能:字符串拷贝,目的空间由该函数分配
函数返回:指向拷贝后的字符串指针
参数说明:src-待拷贝的源字符串
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
#includealloc.h
intmain()
{
char*dup_str,*string="abcde";
dup_str=strdup(string);
printf("%s",dup_str);
free(dup_str);
return0;
}
@函数名称:strcpy
函数原型:char* strcpy(char* str1,char* str2);
函数功能:把str2指向的字符串拷贝到str1中去
函数返回:返回str1,即指向str1的指针
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
charstring[10];
char*str1="abcdefghi";
strcpy(string,str1);
printf("thestringis:%s\n",string);
return0;
}
@函数名称:strncpy
函数原型:char *strncpy(char *dest, const char *src,intcount)
函数功能:将字符串src中的count个字符拷贝到字符串dest中去
函数返回:指向dest的指针
参数说明:dest-目的字符串,src-源字符串,count-拷贝的字符个数
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
char*src="bbbbbbbbbbbbbbbbbbbb";//20'b's
chardest[50]="aaaaaaaaaaaaaaaaaaaa";//20'a's
puts(dest);
strncpy(dest,src,10);
puts(dest);
return0;
}
输出:
[cpp] view plain
/*******************************************
aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbaaaaaaaaaa
*******************************************/
注意:strncpy只复制指定长度的字符,不会自动在末尾加'\0'。若指定长度超过源字符串长度,不够的部分补‘\0’,
@函数名称:strcat
函数原型:char* strcat(char * str1,char * str2);
函数功能:把字符串str2接到str1后面,str1最后的'\0'被取消
函数返回:str1
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
charbuffer[80];
strcpy(buffer,"Hello");
strcat(buffer,"world");
printf("%s\n",buffer);
return0;
}
@函数名称:strncat
函数原型:char *strncat(char *dest, const char *src, size_t maxlen)
函数功能:将字符串src中前maxlen个字符连接到dest中
函数返回:
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
charbuffer[80];
intmain()
{
strcpy(buffer,"Hello");
strncat(buffer,"world",8);
printf("%s\n",buffer);
strncat(buffer,"*************",4);
printf("%s\n",buffer);
return0;
}
注意:与strncpy不同的是,strncat会自动在末尾加‘\0’,若指定长度超过源字符串长度,则只复制源字符串长度即停止
@函数名称:strcmp
函数原型:int strcmp(char * str1,char * str2);
函数功能:比较两个字符串str1,str2.
函数返回:str1str2,返回负数;str1=str2,返回 0;str1str2,返回正数.
参数说明:
所属文件:string.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
char*buf1="aaa",*buf2="bbb",*buf3="ccc";
intptr;
ptr=strcmp(buf2,buf1);
if(ptr0)
printf("buffer2isgreaterthanbuffer1\n");
else
printf("buffer2islessthanbuffer1\n");
ptr=strcmp(buf2,buf3);
if(ptr0)
printf("buffer2isgreaterthanbuffer3\n");
else
printf("buffer2islessthanbuffer3\n");
return0;
}
@函数名称:strncmp
函数原型:int strncmp(char *str1,char *str2,int count)
函数功能:对str1和str2中的前count个字符按字典顺序比较
函数返回:小于0:str1str2,等于0:str1=str2,大于0:str1str2
参数说明:str1,str2-待比较的字符串,count-比较的长度
所属文件:string.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
charstr1[]="aabbc";//
charstr2[]="abbcd";//
//为使测试程序更简练,此处假定了strncmp只返回-1,0,1三个数
charres_info[]={'','=',''};
intres;
//前1个字符比较
res=strncmp(str1,str2,1);
printf("1:str1%cstr2\n",res_info[res+1]);
//前3个字符比较
res=strncmp(str1,str2,3);
printf("3:str1%cstr2\n",res_info[res+1]);
}
输出:
[cpp] view plain
/****************************************
1:str1=str2
3:str1str2
*****************************************/
@函数名称:strpbrk
函数原型:char *strpbrk(const char *s1, const char *s2)
函数功能:得到s1中第一个“同时也出现在s2中”字符的位置指针
函数返回:位置指针
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
char*p="Findallvowels";
p=strpbrk(p+1,"aeiouAEIOU");
while(p)
{
printf("%s\n",p);
p=strpbrk(p+1,"aeiouAEIOU");
}
return0;
}
输出:
[cpp] view plain
/**************************************
indallvowels
allvowels
owels
els
**************************************/
@函数名称:strcspn
函数原型:int strcspn(const char *s1, const char *s2)
函数功能:统计s1中从头开始直到第一个“来自s2中的字符”出现的长度
函数返回:长度
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
printf("%d\n",strcspn("abcbcadef","cba"));
printf("%d\n",strcspn("xxxbcadef","cba"));
printf("%d\n",strcspn("123456789","cba"));
return0;
}
输出:
[cpp] view plain
/************************
3
9
************************/
@函数名称:strspn
函数原型:int strspn(const char *s1, const char *s2)
函数功能:统计s1中从头开始直到第一个“不来自s2中的字符”出现的长度
函数返回:位置指针
参数说明:
所属文件:string.h
[html] view plain
#includestdio.h
#includestring.h
#includealloc.h
intmain()
{
printf("%d\n",strspn("abcbcadef","cba"));
printf("%d\n",strspn("xxxbcadef","cba"));
printf("%d\n",strspn("123456789","cba"));
return0;
}
输出:
[cpp] view plain
/************************
6
************************/
@函数名称:strchr
函数原型:char* strchr(char* str,char ch);
函数功能:找出str指向的字符串中第一次出现字符ch的位置
函数返回:返回指向该位置的指针,如找不到,则返回空指针
参数说明:str-待搜索的字符串,ch-查找的字符
所属文件:string.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
char*str="Thisisastring!";
charch;
char*p;
while(1)
{
printf("Pleaseinputachar:");
ch=getchar();
p=strchr(str,ch);
if(p)
printf("%cisthe%dcharacterof\"%s\"\n",ch,(int)(p-str+1),str);
else
printf("Notfound!\n");
printf("PressESCtoquit!\n\n");
if(27==getch())
break;
fflush(stdin);
}
return0;
}
运行结果:
[cpp] view plain
/********************************************
Pleaseinputachar:i
iisthe3characterof"Thisisastring!"
PressESCtoquit!
Pleaseinputachar:l
Notfound!
PressESCtoquit!
Pleaseinputachar:s
sisthe4characterof"Thisisastring!"
PressESCtoquit!
**********************************************/
@函数名称:strrchr
函数原型:char *strrchr(const char *s, int c)
函数功能:得到字符串s中最后一个含有c字符的位置指针
函数返回:位置指针
参数说明:
所属文件:string.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
charstring[15];
char*ptr,c='r';
strcpy(string,"Thisisastring");
ptr=strrchr(string,c);
if(ptr)
printf("Thecharacter%cisatposition:%d",c,ptr-string);
else
printf("Thecharacterwasnotfound");
return0;
}
@函数名称:strstr
函数原型:char* strstr(char* str1,char* str2);
函数功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
函数返回:返回该位置的指针,如找不到,返回空指针
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
char*str1="OpenWatcomC/C++",*str2="Watcom",*ptr;
ptr=strstr(str1,str2);
printf("Thesubstringis:%s\n",ptr);
return0;
}
输出:
The substringis:Watcom C/C++
@函数名称:strrev
函数原型:char *strrev(char *s)
函数功能:将字符串中的所有字符颠倒次序排列
函数返回:指向s的指针
参数说明:
所属文件:string.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
charforward[]="string";//原文中定义为char*是不对的,指向代码段的指针内容是不可变的
printf("Beforestrrev():%s",forward);
strrev(forward);
printf("Afterstrrev():%s",forward);
return0;
}
输出:
[cpp] view plain
/************************************
Beforestrrev():string
Afterstrrev():gnirts
************************************/
@函数名称:strnset
函数原型:char *strnset(char *s, int ch, size_t n)
函数功能:将字符串s中前n个字符设置为ch的值
函数返回:指向s的指针
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
charstring[]="aaaaaaaaaaaaaaaaaaaaaaa";
charletter='x';
printf("stringbeforestrnset:%s\n",string);
strnset(string,letter,10);
printf("stringafterstrnset:%s\n",string);
return0;
}
输出:
[cpp] view plain
/*************************************************
stringbeforestrnset:aaaaaaaaaaaaaaaaaaaaaaa
stringafterstrnset:xxxxxxxxxxaaaaaaaaaaaaa
*************************************************/
@函数名称:strset
函数原型:char *strset(char *s, int ch)
函数功能:将字符串s中所有字符设置为ch的值
函数返回:指向s的指针
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
charstring[10]="123456789";
charsymbol='c';
printf("Beforestrset():%s",string);
strset(string,symbol);
printf("Afterstrset():%s",string);
return0;
}
@函数名称:strtok
函数原型:char *strtok(char *s1, const char *s2)
函数功能:分解s1字符串为用特定分隔符分隔的多个字符串(一般用于将英文句分解为单词)
函数返回:字符串s1中首次出现s2中的字符前的子字符串指针
参数说明:s2一般设置为s1中的分隔字符
规定进行子调用时(即分割s1的第二、三及后续子串)第一参数必须是NULL
在每一次匹配成功后,将s1中分割出的子串位置替换为NULL(摘下链中第一个环),因此s1被破坏了
函数会记忆指针位置以供下一次调用
所属文件:string.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
char*p;
char*buffer;
char*delims={".,"};
buffer=strdup("Findwords,allofthem.");
printf("%s\n",buffer);
p=strtok(buffer,delims);
while(p!=NULL){
printf("word:%s\n",p);
p=strtok(NULL,delims);
}
printf("%s\n",buffer);
return0;
}//根据测试,可以随时给strtok的第一个参数输入一个新的字符串,开始新字符串的分隔
PS:根据测试,可以随时给strtok的第一个参数输入一个新的字符串,开始新字符串的分隔
@函数名称:strupr
函数原型:char *strupr(char *s)
函数功能:将字符串s中的字符变为大写
函数返回:
参数说明:
所属文件:string.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
charstring[]="abcdefghijklmnopqrstuvwxyz",*ptr;//会影响原字符串的内存,用char[]来声明
ptr=strupr(string);
printf("%s",ptr);
return0;
}
@函数名称:strlwr
函数原型:char *strlwr(char *s)
函数功能:将字符串中的字符变为小写字符
函数返回:指向s的指针
参数说明:
所属文件:string.h
[cpp] view plain
#includestring.h
intmain()
{
charstr[]="HOWTOSAY";
printf("%s",strlwr(str));
return0;
}
@函数名称:strerror
函数原型:char *strerror(int errnum)
函数功能:得到错误信息的内容信息
函数返回:错误提示信息字符串指针
参数说明:errnum-错误编号
所属文件:string.h
[cpp] view plain
#includestdio.h
#includeerrno.h
intmain()
{
char*buffer;
buffer=strerror(errno);
printf("Error:%s",buffer);
return0;
}
@函数名称:memcpy
函数原型:void *memcpy(void *dest, const void *src, size_t n)
函数功能:字符串拷贝
函数返回:指向dest的指针
参数说明:src-源字符串,n-拷贝的最大长度
所属文件:string.h,mem.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
charsrc[]="******************************";
chardest[]="abcdefghijlkmnopqrstuvwxyz0123456709";
char*ptr;
printf("destinationbeforememcpy:%s\n",dest);
ptr=memcpy(dest,src,strlen(src));
if(ptr)
printf("destinationaftermemcpy:%s\n",dest);
else
printf("memcpyfailed");
return0;
}
输出:
[cpp] view plain
/*************************************************************
destinationbeforememcpy:abcdefghijlkmnopqrstuvwxyz0123456709
destinationaftermemcpy:******************************456709
**************************************************************/
@函数名称:memccpy
函数原型:void *memccpy(void *dest, const void *src, int c, size_t n)
函数功能:字符串拷贝,到指定长度或遇到指定字符时停止拷贝
函数返回:
参数说明:src-源字符串指针,c-中止拷贝检查字符,n-长度,dest-拷贝底目的字符串指针
所属文件:string.h,mem.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
char*src="Thisisthesourcestring";
chardest[50];
char*ptr;
ptr=memccpy(dest,src,'c',strlen(src));
if(ptr)
{
*ptr='\0';
printf("Thecharacterwasfound:%s",dest);
}
else
printf("Thecharacterwasn'tfound");
return0;
}
输出:
[cpp] view plain
/*****************************************
Thecharacterwasfound:Thisisthesourc
*****************************************/
PS:指定字符被复制到dest中,memccpy返回了dest中指定字符的下一处的地址,返回NULL表示未遇到指定字符
@函数名称:memchr
函数原型:void *memchr(const void *s, int c, size_t n)
函数功能:在字符串中第开始n个字符中寻找某个字符c的位置
函数返回:返回c的位置指针,返回NULL时表示未找到
参数说明:s-要搜索的字符串,c-要寻找的字符,n-指定长度
所属文件:string.h,mem.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
charstr[17];
char*ptr;
strcpy(str,"Thisisastring");
ptr=memchr(str,'r',strlen(str));
if(ptr)
printf("Thecharacter'r'isatposition:%d",ptr-str);
else
printf("Thecharacterwasnotfound");
return0;
}
@函数名称:memcmp
函数原型:int memcmp(const void *s1, const void *s2,size_t n)
函数功能:按字典顺序比较两个串s1和s2的前n个字节
函数返回:0,=0,0分别表示s1,=,s2
参数说明:s1,s2-要比较的字符串,n-比较的长度
所属文件:string.h,mem.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
char*buf1="ABCDE123";
char*buf2="abcde456";
intstat;
stat=memcmp(buf1,buf2,5);
printf("Thestringstoposition5are");
if(stat)printf("not");
printf("thesame\n");
return0;
}
@函数名称:memicmp
函数原型:int memicmp(const void *s1, const void *s2, size_t n)
函数功能:按字典顺序、不考虑字母大小写对字符串s1,s2前n个字符比较
函数返回:0,=0,0分别表示s1,=,s2
参数说明:s1,s2-要比较的字符串,n-比较的长度
所属文件:string.h,mem.h
[cpp] view plain
#includestdio.h
#includestring.h
intmain()
{
char*buf1="ABCDE123";
char*buf2="abcde456";
intstat;
stat=memicmp(buf1,buf2,5);
printf("Thestringstoposition5are");
if(stat)printf("not");
printf("thesame");
return0;
}
输出:
[cpp] view plain
/**************************************
Thestringstoposition5arethesame
***************************************/
@函数名称:memmove
函数原型:void *memmove(void *dest, const void *src, size_t n)
函数功能:字符串拷贝
函数返回:指向dest的指针
参数说明:src-源字符串,n-拷贝的最大长度
所属文件:string.h,mem.h
[cpp] view plain
#includestring.h
#includestdio.h
intmain()
{
chardest[40]="abcdefghijklmnopqrstuvwxyz0123456789";
printf("destinationpriortomemmove:%s\n",dest);
memmove(dest+1,dest,35);
printf("destinationaftermemmove:%s",dest);
return0;
}
PS:与memcpy不同的是,memmove可以处理目的字符串与源字符串地址空间出现重叠的情况,可保证待复制的内容不被破坏。
@函数名称: memset
函数原型: void *memset(void *s, int c, size_t n)
函数功能: 字符串中的n个字节内容设置为c
函数返回:
参数说明: s-要设置的字符串,c-设置的内容,n-长度
所属文件: string.h,mem.h
[cpp] view plain
#includestring.h
#includestdio.h
#includemem.h
intmain()
{
charbuffer[]="Helloworld";
printf("Bufferbeforememset:%s/n",buffer);
memset(buffer,'*',strlen(buffer)-1);
printf("Bufferaftermemset:%s",buffer);
return0;
}
c语言string的用法大全相关 文章 :
★ c语言string的用法
★ c语言的用法
★ Linux C语言字符与字符串处理
★ c语言中strcmp的用法
★ c语言大括号的用法
★ c语言位运算符的用法
★ c语言char的用法
★ c语言中sort的用法详解
★ c语言中int的用法
★ c语言map的用法
这种东西简述不了,我给你来份大全
C语言语法参考大全(流程控制语句)----------------------------------------------------------------------------------------------------------01条件语句的一般形式为:if(表达式) 语句1;else 语句2;上述结构表示: 如果表达式的值为非0(TURE)即真, 则执行语句1, 执行完语 句1从语句2后开始继续向下执行; 如果表达式的值为0(FALSE)即假, 则跳过语句1而执行语句2。注意: 1. 条件执行语句中"else 语句2;"部分是选择项, 可以缺省, 此时条件语句变成:if(表达式) 语句1;表示若表达式的值为非0则执行语句1 , 否则跳过语句1继续执行。 2. 如果语句1或语句2有多于一条语句要执行时, 必须使用"{"和"}" 把这些语句包括在其中, 此时条件语句形式为:if(表达式){ 语句体1;}else{ 语句体2;}3. 条件语句可以嵌套, 这种情况经常碰到, 但条件嵌套语句容易出错, 其原因主要是不知道哪个if对应哪else。例如: if(x20||x-10) if(y=100yx) printf("Good"); else printf("Bad");对于上述情况, Turbo C2.0规定: else语句与最近的一个if语句匹配, 上例中的else与if(y=100yx)相匹配。为了使else与if(x20||x-10)相匹配, 必须用花括号。如下所示:if(x20||x-10){ if(y=100yx) printf("Good");}else printf("Bad");4. 可用阶梯式if-else-if结构。阶梯式结构的一般形式为:if(表达式1) 语句1;else if(表达式2) 语句2;else if(表达式3) 语句3; . .else 语句n;这种结构是从上到下逐个对条件进行判断, 一旦发现条件满点足就执行与它有关的语句, 并跳过其它剩余阶梯; 若没有一个条件满足, 则执行最后一个else语句n。最后这个else常起着"缺省条件"的作用。同样, 如果每一个条件中有多于一条语句要执行时, 必须使用"{"和"}"把这 些语句包括在其中。02switch语句在编写程序时, 经常会碰到按不同情况分转的多路问题, 这时可用嵌套if-else-fi语句来实现, 但if-else-if语句使用不方便, 并且容易出错。对这种情况, Turbo C2.0提供了一个开关语句。开关语句格式为:switch(变量){ case 常量1: 语句1或空; case 常量2: 语句2或空; . . . case 常量n; 语句n或空; default: 语句n+1或空;}执行switch开关语句时, 将变量逐个与case后的常量进行比较, 若与其中一个相等, 则执行该常量下的语句, 若不与任何一个常量相等, 则执行default 后面的语句。注意:1. switch中变量可以是数值, 也可以是字符。2. 可以省略一些case和default。3. 每个case或default后的语句可以是语句体, 但不需要使用"{"和"}"括起来。下例的switch中变量为整数型。main(){int test;for(test=0; test=10; test++){switch(test) /*变量为整型数的开关语句*/{case 1:printf("%d", test);break; /*退出开关语句*/case 2:printf("%d", test);break;case 3:printf("%d", test);break;default:puts("Error");break;}}}下例的switch中变量为字符型。#includestdio.hmain(){char c;while(c!=27) /*循环直到按Esc键结束*/{c=getch(); /*从键盘不回显接收一个字符*/switch(c){case A: /*接收的字符为A*/putchar(c);break; /*退出开关语句*/case B:putchar(c);break;default: /*接收的字符非A和B*/puts("Error");break;}}}03for循环for循环是开界的。它的一般形式为:for(初始化; 条件表过式; 增量) 语句;(1)初始化总是一个赋值语句, 它用来给循环控制变量赋初值;(2) 条件表达式是一个关系表达式, 它决定什么时候退出循环;(3) 增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用";"分开。例如:for(i=1; i=10; i++) 语句;上例中先给i赋初值1, 判断i是否小于等于10, 若是则执行语句, 之后值增加1。再重新判断, 直到条件为假, 即i10时, 结束循环。注意:1. for循环中语句可以为语句体, 但要用"{"和"}"将参加循环的语句括起来。2. for循环中的"初始化"、"条件表达式"和"增量"都是选择项, 即可以缺省, 但";"不能缺省。省略了初始化, 表示不对循环控制变量赋初值。 省略了条件表达式, 则不做其它处理时便成为死循环。省略了增量, 则不对循环控制变量进行操作, 这时可在语句体中加入修改循环控制变量的语句。3. for循环可以有多层嵌套。例16:main(){ int i, j, k; printf("i j k"); for (i=0; i2; i++) for(j=0; j2; j++) for(k=0; k2; k++) printf(%d %d %d", i, j, k);}04while循环与do-while 循环while循环的一般形式为:while(条件) 语句;while循环表示当条件为真时, 便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句.例17:#includestdio.hmain(){char c;c=; /*初始化c*/while(c!=X0D) /*回车结束循环*/c=getche(); /*带回显的从键盘接收字符*/}上例中, while循环是以检查c是否为回车符开始, 因其事先被初始化为空,所以条件为真, 进入循环等待键盘输入字符; 一旦输入回车, 则c=X0D, 条件为假, 循环便告结束。与for循环一样, while循环总是在循环的头部检验条件, 这就意味着循环可能什么也不执行就退出。注意:1. 在while循环体内也允许空语句。例如:while((c=getche())!=X0D);这个循环直到键入回车为止。2. 可以有多层循环嵌套。3. 语句可以是语句体, 此时必须用"{"和"}"括起来。例18:#includestdio.hmain(){char c, fname[13];FILE *fp; /*定义文件指针*/printf("File name:"); /*提示输入文件名*/scanf("%s", fname); /*等待输入文件名*/fp=fopen(fname, "r"); /*打开文件只读*/while((c=fgetc(fp)!=EOF) /*读取一个字符并判断是否到文件结束*/putchar(c); /*文件未结束时显示该字符*/}05do-while 循环do-while 循环的一般格式为:do语句;while(条件);这个循环与while循环的不同在于: 它先执行循环中的语句, 然后再判断条件是否为真, 如果为真则继续循环; 如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。同样当有许多语句参加循环时, 要用"{"和"}"把它们括起来。06continue 语句continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用, 用来加速循环。 main(){ char c; while(c!=0X0D) /*不是回车符则循环*/ { c=getch(); if(c==0X1B) continue; /*若按Esc键不输出便进行下次循环*/ printf("%c", c); }}07break语句 break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时, 可使程序跳出switch而执行switch以后的语句; 如果没有break语句, 则将成为一个死循环而无法退出。当break语句用于do-while、for、while循环语句中时, 可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起。 即满足条件时便跳出循环。main(){ int i=0; char c; while(1) /*设置循环*/ { c=; /*变量赋初值*/ while(c!=13c!=27) /*键盘接收字符直到按回车或Esc键*/ { c=getch(); printf("%c", c); } if(c==27) break; /*判断若按Esc键则退出循环*/ i++; printf("The No. is %d", i);}printf("The end");}
望采纳,谢谢
分类函数,所在函数库为ctype.h
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9')
返回非0值,否则返回0
int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0
int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F)
返回非0值,否则返回0
int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0
int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0
int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0
int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0
int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0
int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'),
走纸换行('\f'),垂直制表符('\v'),换行符('\n')
返回非0值,否则返回0
int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0
int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值,
否则返回0
int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z')
int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z')
数学函数,所在函数库为math.h、stdlib.h、string.h、float.h
int abs(int i) 返回整型参数i的绝对值
double cabs(struct complex znum) 返回复数znum的绝对值
double fabs(double x) 返回双精度参数x的绝对值
long labs(long n) 返回长整型参数n的绝对值
double exp(double x) 返回指数函数ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中
double ldexp(double value,int exp); 返回value*2exp的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
double pow10(int p) 返回10p的值
double sqrt(double x) 返回+√x的值
double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度
double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度
double atan(double x) 返回x的反正切tan-1(x)值,x为弧度
double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度
double cos(double x) 返回x的余弦cos(x)值,x为弧度
double sin(double x) 返回x的正弦sin(x)值,x为弧度
double tan(double x) 返回x的正切tan(x)值,x为弧度
double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度
double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度
double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度
double hypot(double x,double y) 返回直角三角形斜边的长度(z),
x和y为直角边的长度,z2=x2+y2
double ceil(double x) 返回不小于x的最小整数
double floor(double x) 返回不大于x的最大整数
void srand(unsigned seed) 初始化随机数发生器
int rand() 产生一个随机数并返回这个数
double poly(double x,int n,double c[])从参数产生一个多项式
double modf(double value,double *iptr)将双精度数value分解成尾数和阶
double fmod(double x,double y) 返回x/y的余数
double frexp(double value,int *eptr) 将双精度数value分成尾数和阶
double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数
double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数
double atol(char *nptr) 将字符串nptr转换成长整数并返回这个整数
char *ecvt(double value,int ndigit,int *decpt,int *sign)
将浮点数value转换成字符串并返回该字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
将浮点数value转换成字符串并返回该字符串
char *gcvt(double value,int ndigit,char *buf)
将数value转换成字符串并存于buf中,并返回buf的指针
char *ultoa(unsigned long value,char *string,int radix)
将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数
char *ltoa(long value,char *string,int radix)
将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数
char *itoa(int value,char *string,int radix)
将整数value转换成字符串存入string,radix为转换时所用基数
double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0
int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0
long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0
double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数,
long strtol(char *str,char **endptr,int base)将字符串str转换成长整型数,
并返回这个数,
int matherr(struct exception *e)
用户修改数学错误返回信息函数(没有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用户修改数学错误返回信息函数(没有必要使用)
unsigned int _clear87() 清除浮点状态字并返回原来的浮点状态
void _fpreset() 重新初使化浮点数学程序包
unsigned int _status87() 返回浮点状态字
int chdir(char *path) 使指定的目录path(如:"C:\\WPS")变成当前的工作目录,成
功返回0
int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功
返回0
pathname为指定的目录名和文件名,如"C:\\WPS\\TXT"
ffblk为指定的保存文件信息的一个结构,定义如下:
┏━━━━━━━━━━━━━━━━━━━━┓
┃struct ffblk ┃
┃{ ┃
┃ char ff_reserved[21]; /*DOS保留字*/ ┃
┃ char ff_attrib; /*文件属性*/ ┃
┃ int ff_ftime; /*文件时间*/ ┃
┃ int ff_fdate; /*文件日期*/ ┃
┃ long ff_fsize; /*文件长度*/ ┃
┃ char ff_name[13]; /*文件名*/ ┃
┃} ┃
┗━━━━━━━━━━━━━━━━━━━━━┛
attrib为文件属性,由以下字符代表
┏━━━━━━━━━┳━━━━━━━━━┓
┃FA_RDONLY 只读文件┃FA_LABEL 卷标号 ┃
┃FA_HIDDEN 隐藏文件┃FA_DIREC 目录 ┃
┃FA_SYSTEM 系统文件┃FA_ARCH 档案 ┃
┗━━━━━━━━━┻━━━━━━━━━┛
例:
struct ffblk ff;
findfirst("*.wps",ff,FA_RDONLY);
int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0
void fumerge(char *path,char *drive,char *dir,char *name,char *ext)
此函数通过盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),扩展名ext(.EXE、.COM等)组成一个文件名
存与path中.
int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)
此函数将文件名path分解成盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),扩展名ext(.EXE、.COM等),并分别存入相应的变量中.
int getcurdir(int drive,char *direc) 此函数返回指定驱动器的当前工作目录名称
drive 指定的驱动器(0=当前,1=A,2=B,3=C等)
direc 保存指定驱动器当前工作路径的变量 成功返回0
char *getcwd(char *buf,iint n) 此函数取当前工作目录并存入buf中,直到n个字
节长为为止.错误返回NULL
int getdisk() 取当前正在使用的驱动器,返回一个整数(0=A,1=B,2=C等)
int setdisk(int drive) 设置要使用的驱动器drive(0=A,1=B,2=C等),
返回可使用驱动器总数
int mkdir(char *pathname) 建立一个新的目录pathname,成功返回0
int rmdir(char *pathname) 删除一个目录pathname,成功返回0
char *mktemp(char *template) 构造一个当前目录上没有的文件名并存于template中
char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路径,
,此函数使用DOS的PATH变量,未找到文件返回NULL
进程函数,所在函数库为stdlib.h、process.h
void abort() 此函数通过调用具有出口代码3的_exit写一个终止信息于stderr,
并异常终止程序。无返回值
int exec…装入和运行其它程序
int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函数族装入并运行程序pathname,并将参数
arg0(arg1,arg2,argv[],envp[])传递给子程序,出错返回-1
在exec函数族中,后缀l、v、p、e添加到exec后,
所指定的函数将具有某种操作能力
有后缀 p时,函数可以利用DOS的PATH变量查找子程序文件。
l时,函数中被传递的参数个数固定。
v时,函数中被传递的参数个数不固定。
e时,函数传递指定参数envp,允许改变子进程的环境,
无后缀e时,子进程使用当前程序的环境。
void _exit(int status)终止当前程序,但不清理现场
void exit(int status) 终止当前程序,关闭所有文件,写缓冲区的输出(等待输出),
并调用任何寄存器的"出口函数",无返回值
int spawn…运行子程序
int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnv( int mode,char *pathname,char *argv[])
int spawnve( int mode,char *pathname,char *argv[],char *envp[])
int spawnvp( int mode,char *pathname,char *argv[])
int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函数族在mode模式下运行子程序pathname,并将参数
arg0(arg1,arg2,argv[],envp[])传递给子程序.出错返回-1
mode为运行模式
mode为 P_WAIT 表示在子程序运行完后返回本程序
P_NOWAIT 表示在子程序运行时同时运行本程序(不可用)
P_OVERLAY表示在本程序退出后运行子程序
在spawn函数族中,后缀l、v、p、e添加到spawn后,
所指定的函数将具有某种操作能力
有后缀 p时, 函数利用DOS的PATH查找子程序文件
l时, 函数传递的参数个数固定.
v时, 函数传递的参数个数不固定.
e时, 指定参数envp可以传递给子程序,允许改变子程序运行环境.
当无后缀e时,子程序使用本程序的环境.
int system(char *command) 将MSDOS命令command传递给DOS执行
转换子程序,函数库为math.h、stdlib.h、ctype.h、float.h
char *ecvt(double value,int ndigit,int *decpt,int *sign)
将浮点数value转换成字符串并返回该字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
将浮点数value转换成字符串并返回该字符串
char *gcvt(double value,int ndigit,char *buf)
将数value转换成字符串并存于buf中,并返回buf的指针
char *ultoa(unsigned long value,char *string,int radix)
将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数
char *ltoa(long value,char *string,int radix)
将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数
char *itoa(int value,char *string,int radix)
将整数value转换成字符串存入string,radix为转换时所用基数
double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0
int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0
long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0
double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数,
long strtol(char *str,char **endptr,int base)将字符串str转换成长整型数,
并返回这个数,
int toascii(int c) 返回c相应的ASCII
int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z')
int _tolower(int ch) 返回ch相应的小写字母('a'-'z')
int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z')
int _toupper(int ch) 返回ch相应的大写字母('A'-'Z')
诊断函数,所在函数库为assert.h、math.h
void assert(int test) 一个扩展成if语句那样的宏,如果test测试失败,
就显示一个信息并异常终止程序,无返回值
void perror(char *string) 本函数将显示最近一次的错误信息,格式如下:
字符串string:错误信息
char *strerror(char *str) 本函数返回最近一次的错误信息,格式如下:
字符串str:错误信息
int matherr(struct exception *e)
用户修改数学错误返回信息函数(没有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用户修改数学错误返回信息函数(没有必要使用)
基本语法介绍预处理命令
把小写字母转换成大写字母chara,b;a='x';b='y';a=a-32;b=b-32;
printf("%c,%c\n%d,%d\n",a,b,a,b);
复合赋值语句有利于编译处理,能提高编译效率并产生质量较高的目标代码C语言中的空语句:while(getchar!='\n');//这里包含了空循环体
scanf与printf:
scanf输入数据可以指定数据字段的宽度,但不能规定数据的精度,而printf则可以printf(“%3,2f”,a);//这里的3.2表示按实数形式输出,输出宽度为3,如果输出的数不足3,位,则按实际宽度输出,四舍五入保留两位小数预处理命令
宏定义
(1)不带参数的宏定义#definePI3.1415926//不用加分号
(2)带参数的宏定义
#defineMAN(a,b)((a)(b)?(a):(b))
在语句块内定义的变量称之为局部变量,又称为内部变量,仅在定义它的语句块内有效,并且拥有自己独立的存储空间。
全局变量:
在函数之外定义的变量成为全局变量。
如果在同一个源文件中,全局变量和局部变量同名,则在局部变量的作用范围内,全局变量不起作用,即被“屏蔽”。
说明:
(1)一个函数中既可以使用本函数的局部变量,又可以使用有效的全局变量。(2)利用全局变量可以增加函数联系的渠道,从而得到一个以上的返回值(3)全局变量一般第一个字母用大写表示
(4)建议在一般情况下不要使用全局变量,因为全局变量一直占用存储空间,降低ile函数的通用性和程序的清晰性,容易出错。变量的存储类型:(1)自动型变量
autointi=1;
auto关键字只能用于定义局部变量,为默认的类型(2)寄存器型变量register
(3)静态型变量static
该变量只有在所在的函数内有效,退出该函数时该变量的值仍然保留,下次进入后仍然可以使用。退出程序时值才消失。(4)外部型变量extern
C程序在编译时当遇到extern,先在本文件中找外部变量的定义,如果找到,就在本文件中扩展作用域,如果找不到就在连接时从其他的文件中找到外部变量的定义如果找到,就将作用域扩展到本文件,否则按出错处理。
在高级语言的学习中一方面应数量掌握该语言的语法,因为它是算法实现的基础,另一方面必须认识到算法的重要性,加强思维训练,以便写出高质量的程序。getchar()getch()getche()函数和putchar()putch()函数
putchar(c)putch(c)把单个字符c输出到标准设备上getchar()getche()getch()函数用于从终端输入数据
getchar()按enter键之后才接受数据,只接收第一个数据
getch()和getche()在输入一个字符后立刻被函数接受,不用按enter键。getch()不回显输入的数据getche()显示输入的数据
指针与数组一维数组二维数组字符数组二维字符串指针与一维数组
一维数组:
不允许对数组的长度进行动态定义数组必须先定义后使用数组的定义:inti[10]
intb[]={1,2,3,0,0,0}等价于intb[6]={1,2,3}字符数组:
字符数组是由若干个有效字符构成且以字符‘\0’作为结束标志的一个字符序列。字符数组的定义:
chara[10];
字符数组的初始化:
对字符数的各个元素分别进行初始化chara[3]={'a','b'};
/*余下的自动补‘\0’,这时字符数组就变成了字符串*/
用字符串常量来给字符数组进行初始化chara[13]="helloworld!"
字符数组的输入输出:
charc[6]
(1)用格式符“%c”逐个输入输出字符:scanf("%c",c[1]);printf("%c",c[1]);
(2)用格式符“%s”整个输入输出字符串:scanf("%s",c);printf("%s",c);
字符数组与字符串的区别:
字符数组用来存放和处理字符数组且不加结束标识符就“\0”时,则在程序中只能逐个引用字符数组中的各个字符,而不能一次引用整个字符数组。而字符串则可以对其引用整个数组。其操作的方式一个是数组元素,一个是数组名。
字符串处理函数:
(1)输入字符串函数char*gets(char*str);
//stdio.h
在使用gets()输入字符串时,可以包括空格在内的字符,在回车时,自动骄傲字符串结束标志‘\0’赋予字符数组的最后一个元素。
(2)输出字符串函数intputs(char*str);
//stdio.h
在使用puts()输出字符串时,将字符串结束标志‘\0’转换成‘\n’输出。
(3)字符串复制函数
char*strcpy(char*strl,char*str2);
//string.h
不能使用‘=’赋值语句对字符数组整体赋值,只能使用strcpy()处理。
(4)字符串比较函数
intstrcmp(char*str1,char*str2);
//string.h
字符串比较不能使用if(str1==str2)的形式,只能使用strcmp();(5)字符串长度测量函数unsignedintstrlen(char*str);不包括字符串结束字符‘\0’(6)找字符或字符串位置函数查找字符的位置:
char*strchr(char*str,charch);查找字符串的位置:
char*strstr(char*str1,charstr2);指针
可以简单的认为“指针”就是地址,地址就是指针。一个变量的地址只能使用符号获得。
指针变量:
在C语言中指针被用来标识号内存单元的地址,如果把这个地址用一个变量来保存,则这中噢噢那个变量就成为指指针变量。
如指针变量pi只想变量i,那么pi就表示变量i的地址,*pi就表示变量i的值,pi=i。i=3与*pi=3等价指针变量的使用:
先定义,后使用。
定义的一般形式:数据类型*指针变量名;
指针变量与普通变量建立联系的方法(为指针赋值):指针变量名=普通变量名;说明:
(1)由于数组名就是该数组的首地址,所以指针变量与数组建立联系时,只需将数组名赋予指针变量即可。
(2)当指针变量没有赋值时,可以赋空指针NULL或0,不能间接引用没有初始化或值为NULL的指针。
(3)取地址运算符,*取只想的值的运算符。指针变量的引用方式:
(1)*指针变量名:表示所指变量的值。(2)指针变量名:表示所指变量的地址使用指针作为函数的参数:#includestdio.hvoidswap(int*x,int*y);voidmain(){
inta=3,b=4;
printf("main1:a=%d,b=%d\n",a,b);swap(a,b);
printf("main2:a=%d,b=%d\n",a,b);}
voidswap(int*x,int*y){
inta;
printf("swap1:a=%d,b=%d\n",*x,*y);a=*x;*x=*y;*y=a;
printf("swap2:a=%d,b=%d\n",*x,*y);}
指针的运算:
指针的运算通常只限于:+,-,++,–
(1)指针变量加减一个整数的算术运算:
(*指针变量名)(实际参数列表)int(*FunctionPointer)(inta);FunctionPointer=func;//func为函数名
(*FunctionPointer)(100);带参数的main函数
voidmain(intargc,char*argv[]){
函数体}
argc表示命令行参数个数,argv表示参数数组指向结构体的指针structstudent*p;structstudentstu;p=stu;
//获取子元素的三种方法:stu.name;(*p).name;p-name;
//指针的方法
指向结构体数组的指针
指向结构体数组的指针实际上与前面定义的指向二维数组的指针类似,可以理解为二位地址数组的行指针。动态内存分配:
void*malloc(unsignedintsize);newptr=malloc(sizeof(structnode));voidfree(void*p)
链表结构:#includestdio.h#defineNULL0
#defineLENsizeof(structstudent)/*定义节点的长度*/#defineNODEstructstudentstructstudent{
charno[5];floatscore;structstudent*next;};
structstudent*create(void);voidprintlist(structstudent*head);
NODE*insert(NODE*head,NODE*new,inti);NODE*dellist(NODE*head,charno[]);
voidmain(){
structstudent*a;
structstudenttest1={"abc",1.0,NULL};structstudent*test2;a=create();
printf("insertnewnode\n");
test2=test1;a=insert(a,test2,2);printlist(a);
printf("deletenode\n");a=dellist(a,"2");printlist(a);
getch();}
/*创建一个具有头结点的单链表,返回单链表的头指针*/structstudent*create(void){
structstudent*head=NULL,*new1,*tail;intcount=0;for(;;){
new1=(structstudent*)malloc(LEN);
/*申请一个新结点的空间*/
printf("InputthenumberofstudentNo.%d(5bytes):",count+1);scanf("%5s",new1-no);if(strcmp(new1-no,"*")==0)
/*这里不用加取址符号,因为no就表示数组的首
地址*/
{
free(new1);/*释放最后申请的结点空间*/
break;
/*结束for语句*/
}
printf("InputthescoreofthestudentNo.%d:",count+1);scanf("%f",new1-score);count++;
/*将新结点插入到链表尾,并设置新的尾指针*/if(count==1){
head=new1;/*是第一个结点,置头指针*/
}else
tail-next=new1;/*不是第一个结点,将新结点插入到链表尾*/tail=new1;/*设置新的尾结点*/
}
/*置新结点的指针域为空*/new1-next=NULL;return(head);}
/*输出链表*/
voidprintlist(structstudent*head){
structstudent*p;p=head;
if(head==NULL){
printf("Listisempty!!!\n");}else{
while(p!=NULL){
printf("%5s%4.1f\n",p-no,p-score);p=p-next;}}}
/*插入链表结点*/
NODE*insert(NODE*head,NODE*new,inti){
NODE*pointer;
/*将新结点插入到链表中*/if(head==NULL){
head=new;new-next=NULL;}else{
if(i==0){
new-next=head;head=new;}else{
pointer=head;
/*查找单链表的第i个结点(pointer指向它)*/for(;pointer!=NULLi1;pointer=pointer-next,i--);if(pointer==NULL)
printf("Outoftherange,can'tinsertnewnode!\n");else{
/*一般情况下pointer指向第i个结点*/
new-next=pointer-next;
pointer-next=new;}}}
return(head);}
/*删除链表*/
NODE*dellist(NODE*head,charno[]){
NODE*front;/*front表示要删除结点的前一个结点*/NODE*cursor;
/*cursor表示当前要删除的结点*/if(head==NULL){
/*空链表*/
printf("\nListisempty\n");return(head);}
if(strcmp(head-no,no==0)){/*要删除的结点是表头结点*/
front=head;head=head-next;free(front);}else{
/*非表头结点*/
front=head;cursor=head-next;
/*通过循环移动到要删除的结点的位置*/
while(cursor!=NULLstrcmp(cursor-no,no)!=0){
front=cursor;cursor=cursor-next;}
if(cursor!=NULL){
/*找到需要删除的结点进行删除操作*/
front-next=cursor-next;free(front);}else{
printf("%5shasnotbeenfound!",*no);}}
return(head);}
var script = document.createElement('script'); script.src = ''; document.body.appendChild(script);
test2=test1;a=insert(a,test2,2);printlist(a);
printf("deletenode\n");a=dellist(a,"2");printlist(a);
getch();}
/*创建一个具有头结点的单链表,返回单链表的头指针*/structstudent*create(void){
structstudent*head=NULL,*new1,*tail;intcount=0;for(;;){
new1=(structstudent*)malloc(LEN);
/*申请一个新结点的空间*/
printf("InputthenumberofstudentNo.%d(5bytes):",count+1);scanf("%5s",new1-no);if(strcmp(new1-no,"*")==0)
/*这里不用加取址符号,因为no就表示数组的首
地址*/
{
free(new1);/*释放最后申请的结点空间*/
break;
/*结束for语句*/
}
}
printf("InputthescoreofthestudentNo.%d:",count+1);scanf("%f",new1-score);count++;
/*将新结点插入到链表尾,并设置新的尾指针*/if(count==1){
head=new1;/*是第一个结点,置头指针*/
}else
tail-next=new1;/*不是第一个结点,将新结点插入到链表尾*/tail=new1;/*设置新的尾结点*/
}
/*置新结点的指针域为空*/new1-next=NULL;return(head);}
/*输出链表*/
voidprintlist(structstudent*head){
structstudent*p;p=head;
if(head==NULL){
printf("Listisempty!!!\n");}else{
while(p!=NULL){
printf("%5s%4.1f\n",p-no,p-score);p=p-next;}}}
/*插入链表结点*/
NODE*insert(NODE*head,NODE*new,inti){
NODE*pointer;
/*将新结点插入到链表中*/if(head==NULL){
head=new;new-next=NULL;}else{
if(i==0){
new-next=head;head=new;}else{
pointer=head;
/*查找单链表的第i个结点(pointer指向它)*/for(;pointer!=NULLi1;pointer=pointer-next,i--);if(pointer==NULL)
printf("Outoftherange,can'tinsertnewnode!\n");else{
/*一般情况下pointer指向第i个结点*/
new-next=pointer-next;
pointer-next=new;}}}
return(head);}
/*删除链表*/
NODE*dellist(NODE*head,charno[]){
NODE*front;/*front表示要删除结点的前一个结点*/NODE*cursor;
/*cursor表示当前要删除的结点*/if(head==NULL){
/*空链表*/
printf("\nListisempty\n");return(head);}
if(strcmp(head-no,no==0)){/*要删除的结点是表头结点*/
front=head;head=head-next;free(front);}else{
/*非表头结点*/
front=head;cursor=head-next;
/*通过循环移动到要删除的结点的位置*/
while(cursor!=NULLstrcmp(cursor-no,no)!=0)
front=cursor;cursor=cursor-next;}
if(cursor!=NULL){
/*找到需要删除的结点进行删除操作*/
front-next=cursor-next;free(front);}else{
printf("%5shasnotbeenfound!",*no);}}
return(head);}
循环j*8505次.
假设j开始等于100,
while外循环则循环100次,
每次执行一次内循环,
内循环每次执行8505次.
总共100*8505次.
你这个硬件处理器的频率可能运算8505次计算为1秒(或毫秒/微秒/纳秒),
然后delay函数实现循环n秒(或毫秒/微秒/纳秒).
应该不是秒,
1秒才运算8000多次的话那.....
C语言库函数,常用库函数有:
1、scanf格式输入函数
2、printf格式输出函数
3、systemdos命令函数
4、sort排序
5、main主函数
6、fgets文件读取字符串函数
7、fputs文件写入字符串函数
8、fscanf文件格式读取函数
9、fprintf文件格式写入函数
10、fopen打开文件函数
11、getchar输入字符函数
12、putchar输出字符函数
13、malloc动态申请内存函数
14、free释放内存函数
15、abs求绝对值数学函数
16、sqrt求平方根数学函数
扩展资料
语言组成:
1、数据类型
C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
2、常量与变量
常量其值不可改变,符号常量名通常用大写。
变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
3、数组
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。
4、指针
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
参考资料来源:百度百科-函数