C语言期末考试复习资料2012_第1页
C语言期末考试复习资料2012_第2页
C语言期末考试复习资料2012_第3页
C语言期末考试复习资料2012_第4页
C语言期末考试复习资料2012_第5页
已阅读5页,还剩117页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2012级C语言期末复习大纲2012年12月为了同学们集中精力复习特编制了本大纲大纲包含了需要牢牢掌握的根本概念和重点内容.考试的主要题型和分数分布:1单项选择题(40小题,每题1.5分,共60分)2写出以下程序的运行结果〔6小题,每题4或5分,共25分〕3填空题(每空1.5分,共15分)第一章C语言概述

第1章C语言概述本章包含4工程重点内容:1简单的C语言程序#include<stdio.h>voidmain(){printf("ThisisaCprogram.\n");}

2VC++6.0环境:编辑C语言源程序后缀是.c或.cpp经过编译产生目标文件,后缀是.obj再经过连接成为可执行文件,后缀是.exe3C语言是结构化程序,有三种结构〔1〕顺序结构;〔2〕选择结构;〔3〕循环结构;4C语言是由函数组成的,其中必须有一个并且只有一个主函数main,程序的执行从main函数开始,到main函数结束.第二章数据类型、运算符与表达式

C的数据类型C语言提供了以下一些数据类型。

数据类型构造类型指针类型空类型〔无值类型〕void枚举类型enum数组类型结构类型struct联合类型

union基本类型整型int字符型char实型(浮点型)单精度实型

float双精度实型

double

常量与变量

常量和符号常量在程序运行过程中,其值不能被改变的量称为常量常量区分为不同的类型:整型100,125,-100,0实型3.14,0.125,-3.1e3字符型‘a’,’\057’,‘\x3c’字符串“a”,“ab”,”1232”定义常数:#definePI3.1415926#defineN20变量命名的规定:C语言规定标识符:1只能由字母、数字和下划线三种字符组成;(注意不要混淆下划线_和杠号(减号〕-)2第一个字符必须为字母或下划线;3不能使用关键字.例:sum,_123,m123,Student_name1

12a,Jo-hn,¥123,a#b,int

整型常量的表示方法整型常量即整常数。在C语言中,整常数可用以下三种形式表示:(1)十进制整数。如:123,-456(2)八进制整数。以0开头的数是八进制数。如:0123表示八进制数123,等于十进制数830129非法〔每位0-7合法)(3)十六进制整数。以0x开头的数是16进制数。如:0x123,代表16进制数123,等于十进制数291而0x12g非法〔每位0-f合法)

字符型数据

字符常量(1)用单引号包含的单个字符(2)用单引号包含的由\开始的转义字符例‘a’,’A’,‘1’,’\037’,’\x2d’‘abc’,“a”,’\082’,’\x5g’

字符串常量字符串常量是一对双引号括起来的字符序列.合法的字符串常量:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”可以输出一个字符串,如

printf(“Howdoyoudo.”);C运算符简介C的运算符有以下几类:(1)算术运算符〔+-*/%〕(2)关系运算符〔><==>=<=!=〕(3)逻辑运算符〔!&&||〕(4)位运算符〔<<>>~|∧&〕(5)赋值运算符〔=及其扩展赋值运算符〕(6)条件运算符〔?:〕算术运算符和算术表达式根本的算术运算符:+〔加法运算符或正值运算符如:3+5、+3〕-〔减法运算符或负值运算符,如:5-2、-3〕*〔乘法运算符。如:3*5〕/〔除法运算符,如果是两边是整数那么是求商〕%〔求余运算符,%两侧必须为整型数据)

自增、自减运算符作用是使变量的值增1或减1如:++i,--i〔在使用i之前,使i+1或-1)i++,i--〔在使用i之后,使i+1或-1)就是使用i的原值执行本条语句,而在执行下条语句前将i+1或-1intm=5,n=10;printf("%d,%d\n",m++,--n);显示5,9假设再有:printf(“%d\n”,m);显示6赋值运算符赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量,如a=5;〔单等号〕而a==5是判断a是否等于5;〔双等号〕如inta=3;if(a==2)为假,而if(a=5)为真。第三章最简单的c程序设计--顺序程序设计

C语句概述C程序源程序文件1源程序文件2源程序文件n预处理命令函数n函数1数据声明函数首部函数体数据声明执行语句

C语句概述控制语句完成一定的控制功能

1if()~else条件语句6break间断语句

2for()~循环语句7switch()开关语句

3while()~循环语句8goto转向语句

4do~while();循环语句9return返回语句

5continue继续语句

格式输入与输出〔一〕.格式输出函数函数作用:向终端〔或系统隐含指定的输出设备〕输出假设干个任意类型的数据。一般格式:printf〔格式控制,输出表列〕%d:以带符号的十进制形式输出整数%o:以八进制无符号形式输出整数%x:以十六进制无符号形式输出整数

格式输入与输出%u:以无符号十进制形式输出整数%c:以字符形式输出,只输出一个字符%s:输出字符串%f:以小数形式输出单,双精度数,隐含输出六位小数%e:以指数形式输出实数%g:选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0

格式输入与输出

用printf和scanf函数输出和输入数据。

#include<stdio.h>

voidmain()

{

inta,b,c;

scanf(“%d,%d,%d”,&a,&b,&c);

printf(“%d,%d,%d\n”,a,b,c);

}

运行情况:

3,4,5(输入a,b,c的值)

3,4,5(输出a,b,c的值)a在内存中的地址&是地址运算符

在格式输入与输出中

格式控制是用双引号包括的,其中一般带有%d,%c,%f,%s等各种对数据类型的要求.第四章选择结构程序设计

关系运算符和关系表达式1.关系运算符及其优先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)优先级相同(高)优先级相同(低)说明:关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符

关系运算符和关系表达式2.关系表达式用关系运算符将两个表达式〔可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式〕接起来的式子,称关系表达式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)关系表达式的值是一个逻辑值,即“真”或“假”。例:关系表达式”a>b”的值为“真”,表达式的值为1。C语言中没有专用的逻辑值,1代表真,0代表假

逻辑运算符和逻辑表达式1.逻辑运算符及其优先次序(1)&&(逻辑与)(2)||(逻辑或)(3)!(逻辑非)

优先次序:逻辑非!

算术运算符关系运算符逻辑与或赋值运算符

或运算中有1,值为1,与运算中有0,值为0if语句2.If语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。形式:if()

if()语句1 else语句2else

if()语句3 else语句4内嵌ifif语句如inta=3,b=4,c=5;if(a<b)a=b;b=c;c=a;那么a,b,c是4,5,4if(a>b)a=b;b=c;c=a;那么a,b,c是3,5,3第1个,因为a<b,所以a=b;b=c;c=a;都执行,第2个,因为a不大于b,所以不执行a=b;只执行b=c;c=a;

条件运算符格式:表达式1?表达式2∶表达式3功能:判断表达式1的值,如果成立就执行表达式2,否那么就执行表达式3max=(a>b?a:b;min=(a<b)a:b;if语句例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。

#include<stdio.h>

voidmain()

{charch;

scanf(“%c”,&ch);

ch=(‘A’<=ch&&ch<=‘Z’)?(ch+32):ch;

printf(“%c\n”,ch);

}

//注意:不能用‘A’<=ch<=‘Z’,它永远为真如果字符变量ch的值为大写字母,那么条件表达式的值为〔ch+32〕,即相应的小写字母。如果ch的值不是大写字母,那么条件表达式的值为ch,即不进行转换。几个典型的判断:判断大写字母:if(‘A’<=c&&c<=‘Z’)判断小写字母:if(‘a’<=c&&c<=‘z’)判断数字:if(‘0’<=c&&c<=‘9’)判断闰年:if((year%4==0&&year%100!=0)||year%400==0)注意:例如在判断数字中:if(‘0’<=c&&c<=‘9’)不可以没有&&,也不能没有’’即不能用if(‘0’<=c<=‘9’)也不能用if(0<=c&&c<=9)但可以用if(48<=c&&c<=57)〔想想为什么?〕第五章循环结构程序设计

用while语句实现循环while语句用来实现“当型”循环结构。一般形式:

while(表达式)语句当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。

求正整数m和n的最大公约数和最小公倍数:

#include<stdio.h>

voidmain()

{

intp,r,n,m;

printf("请输入两个正整数n,m:");

scanf("%d,%d,",&n,&m);

p=n*m;

while(m!=0)

{r=n%m;n=m;m=r;}

printf("它们的最大公约数为:%d\n",n);

printf("它们的最小公倍数为:%d\n",p/n);}其中用下面的辗转相除法求出最大公约数nwhile(m!=0){r=n%m;n=m;m=r;}

把它独立出来就是一个函数inthcf(intm,intn){intr;while(m!=0)

{r=n%m;n=m;m=r;}return(n);}用p/n得到最小公倍数

用do-while语句实现循环

do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:

do{循环体语句}while(表达式);执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。例如:为了保证输入成绩的正确,可以使用语句:printf("请输入学生成绩a(0-100):");scanf("%d",&a);while(a<0||a>100){printf("\n输入有误,请重输:");scanf("%d",&a);}

我们更简洁地用do-while语句do{printf(“请输入成绩a〔0-100〕:”);scanf(“%d”,&a);}while(a<0||a>100);

注意while(a<0||a>100);的含义和;号

用do-while语句计算10!i=1;s=1;do{s=s*i;i++;}while(i<=10);不是:i=1;s=0;do{s=s*i;i++;}while(i<=10);也不是:do{i=1;s=1;s=s*i;i++;}while(i<=10);do{i=1;s=0;s=s*i;i++;}while(i<=10);用switch语句实现(假设a是整数)按照考试成绩输出等级百分制分数段

switch((a/10)){case10: case9:grade='A';break; case8:grade='B';break; case7:grade='C';break; case6:grade='D';break; default:grade='E'; }while语句和用do-while语句的比较:while是先判断条件,再决定是否执行,所以可能一次也不执行;do-while是先执行再判断条件,决定是否还执行,所以至少执行一次.

用for语句实现循环C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。一般形式:

for(表达式1;表达式2;表达式3)语句注意:for中用两个分号隔开,不能省略;for只对其后第一个语句有效,如果要求对多条语句有效,必须用花括号括之成为复合语;for()后通常没有分号,有分号将不执行任何语句,只执行自己的循环;

下面是用for语句显示数组a中的最小值的程序#include<stdio.h>voidmain(){inta[5]={4,2,8,9,5},i,min;min=a[0];for(i=1;i<5;i++)if(min>a[i])min=a[i];printf("%d\n",min);}

break语句和continue语句

break语句

break语句可以用来从循环体内跳出循环体,即提前结束循环.

一般形式:

break;注意:break语句只能用于循环语句或switch语句中。

continue语句作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次循环的判定.一般形式:

continue;例把100~200之间的不能被3整除的数输出。

#include<stdio.h>

voidmain()

{intn;

for(n=100;n<=200;n++)

{if(n%3==0)continue;

printf(″%d″,n);

}

}

注意是把能被3整除的跳过.不能用n%3!=0

判断m是否素数。

#include<stdio.h>

#include<math.h>

voidmain()

{intm,i,k;

scanf(″%d″,&m);

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k)printf("%disaprimenumber\n″,m);

elseprintf("%disnotaprimenumber\n″,m);

}

也可以是:

#include<stdio.h>

#include<math.h>

voidmain()

{intm,I,k,flag=1;

scanf(″%d″,&m);

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0){flag=0;break;}

if(flag)printf("%disaprimenumber\n″,m);

elseprintf("%disnotaprimenumber\n″,m);

}第六章数组

一维数组

所谓数组就是一组具有相同数据类型的数据的有序集合。一维数组的定义格式为:例如:inta[10];或者是:#defineN10;inta[N];〔方括号中必须是常数〕注意:1此数组有10个元素.分别是a[0]-a[9]注意:从0开始编号,没有数组元素a[10]2元素个数必须是常量.所以不可以:intn=10,a[n];//这里n是变量不可以用圆括号:inta(n);也不可是:intn,a[n];scanf(“%d”,&n);

字符数组的定义例如:charc[10]={I’,'‘,’a’,’m’,’‘,’h’,’a’,’p’,’p’,’y’};c[0]=′I′;c[1]=′′;c[2]=′a′;c[3]=′m′;c[4]=′′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;对字符串初始化,最好的方法是:例如:Charc[]=“Iamaboy”;

字符串的初始化字符串和字符串结束标志

为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”——‘\0’。字符数组的输入输出

字符数组的输入输出可以有两种方法:逐个字符输入输出。用格式符“%c”输入或输出一个字符。将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。

如果利用一个scanf函数输入给多个字符串,那么在输入时以空格分隔。例如:charstrl[5],str2[5],str3[5];scanf(″%s%s%s″,str1,str2,str3);输入数据:Howareyou?数组中未被赋值的元素的值自动置′\0′。1.puts函数其一般形式为:puts(str);

字符串处理函数

2.gets函数其一般形式为:gets(str);说明:用scanf(“%s”,str);只能输入单词〔不包含空格),

而gets(str);可以输入句子〔即可以包含空格);

注意不是gets(“%s”,str);

也不是gets(&str);

3.strcat函数其一般形式为:strcat(字符数组1,字符数组2)Strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面4.strcpy函数其一般形式为:strcpy(字符数组1,字符串2)

strcpy是“字符串复制函数”。作用是将字符串2复制到字符数组1中去。例如:charstr1[10],str2[]={″China″};strcpy(str1,str2);

关于strcpy函数的几点说明〔1〕字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。〔2〕“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,也可以是一个字符串常量。如strcpy(str1,″China″);〔3〕复制时连同字符串后面的′\0′一起复制到字符数组1中。〔4〕不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如:str1=″China″;不合法str1=str2;不合法用strcpy函数只能将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量5.strcmp函数其一般形式为:strcmp(字符串1,字符串2)例如:strcmp(str1,str2);strcmp(″China″,″Korea″);strcmp(str1,″Beijing″);比较的结果由函数值返回(1)如果字符串1=字符串2,函数值为0。(2)如果字符串1>字符串2,函数值为1。(3)如果字符串1<字符串2,函数值为-1。注意:判断str1是否大于str2,不能用以下式:if(str1>str2)只能用if(strcmp(str1,str2)>0)6.strlen函数其一般形式为:strlen(字符数组)strlen是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)。例如:charstr[10]={″China″};printf(″%d″,strlen(str));输出结果不是10,也不是6,而是5,即有效字符数.strlwr(字符串)

strlwr函数7.strlwr函数其一般形式为:的作用是将字符串中大写字母换成小写字母。8.strupr函数其一般形式为:strupr(字符串)strupr函数的作用是将字符串中小写字母换成大写字母。

使用字符串函数时,必须包括字符串函数库:#include<string.h>我们可以不使用字符串函数编写程序:例如:不使用strcat连接两个字符串;不使用strcpy拷贝字符串;不使用strcmp比较字符串;不使用strcpy拷贝字符串:1用数组:For(i=0;i<=strlen(s2);i++)S1[i]=s2[i];2用指针:p1=s1;p2=s2;while(*p1++=*p2++);寻找字符串尾:while(s1[i])i++;i就是字符串尾的下标,再拷贝就是连接。第七章函数

简单的C语言函数#include<stdio.h>

/*文件包含*/void

main()

/*主函数*/{/*函数体开始*/

printf(“ThisisaCprogram.\n”);/*函数体语句*/}

/*函数体结束*/

说明:main是主函数名,void是函数类型每个C程序是由假设干函数组成的,其中必有一个并且只能有一个主函数main()每个C程序从main函数开始执行,到main函数结束,即执行的是主函数的函数体,与主函数main在程序中的位置无关;{}是函数开始和结束的标志,不可省略;每个C语句以分号结束;在主函数中直接或间接调用其他函数;使用标准输入出库函数时应写:

#include<stdio.h>使用数学库函数和字符串函数时应写:#include<math.h>#include<string.h>一个函数由两局部组成:函数的首部:例1.3中的max函数首部intmax(intx,inty)

函数体:花括号内的局部。假设一个函数有多个花括号,那么最外层的一对花括号为函数体的范围。

函数定义的一般形式

类型标识符函数名〔形式参数表列〕{声明局部语句局部}其中类型标识符是函数返回值的数据类型,如:int,charfloat,double等,也可以是无返回值,写为void.也可以没有形式参数表列,称为无参函数.例如:intmax〔intx,inty〕{intz;/*函数体中声明局部*/z=x>y?x∶y;/*函数体中语句局部*/return〔z〕;/*返回值*/}

函数参数和函数的值形式参数和实际参数

形式参数:函数名后面括弧中的变量名称为“形式参数”〔简称“形参”〕;实际参数:主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”〔简称“实参”〕;函数返回值:return后面的括弧中的值作为函数带回的值〔称函数返回值〕。说明:

1.函数的返回值是通过函数中的return语句获得的。一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。

函数的调用

对被调用函数的声明和函数原型在一个函数中调用另一函数(即被调用函数)需要具备哪些条件呢?1.首先被调用的函数必须是已经存在的函数〔是库函数或用户自己定义的函数〕。3.如果使用用户自己定义的函数,而该函数的位置在调用它的函数〔即主调函数〕的后面,应该在主调函数中对被调用的函数作声明,即写上函数的原型。用函数首部加上;号表示函数声明.2.如果使用库函数,还应该在本文件开头用#include命令将调用有关库函数时所需用到的信息“包含”到本文件中来。如#include<stdio.h>#include<math.h>#include<string.h>函数调用的实例〔求两整数的最大公约数〕:#include<stdio.h>voidmain(){inthcf(intu,intv);//函数声明intu,v,h;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("%d,%d的最大公约数是:%d\n",u,v,h);}//函数定义inthcf(intu,intv)//函数首部{intr;while(v!=0){r=u%v;u=v;v=r;}return(u);}

局部变量和全局变量局部变量

在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为“局部变量”。

全局变量在函内定义的变量是局部变量,而在函数外定义的变量称为外部变量,也称全局变量.静态局部变量是函数中保持最近值不释放的变量在函数中用下面方式定义:staticintc=7;考察静态局部变量的值#include<stdio.h>voidmain〔〕{intf〔inta〕;inta=2,i;for〔i=0;i<3;i++)printf〔″%d″,f〔a〕〕;}intf〔inta〕{intb=0;staticintc=3;b=b+3;c=c+2;return〔a+b+c〕;}3次调用函数f后,c的值是9第八章指针

地址和指针的概念内存区的每一个字节有一个编号,这就是“地址”。如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。一个变量的地址称为该变量的“指针”。例如,地址2000是变量i的指针。如果有一个变量专门用来存放另一变量的地址〔即指针〕,那么它称为“指针变量”。指针和指针变量的定义:

指针变量的引用

注意:指针变量中只能存放地址〔指针〕,不要将一个整数〔或任何其他非地址类型的数据〕赋给一个指针变量。例通过指针变量访问整型变量#include<stdio.h>void

main(){inta;

int*p;a=100;

p=&a;/*把变量a的地址赋给p*/printf(“%d,%d\n”,a,*p);}对“&”和“*”运算符说明:如果已执行了语句p=&a那么:那么a和*p是相同的值所以,如果a=3;Printf(“%d,%d”,a,*p);显示是3,3所以,如果*p=6;Printf(“%d,%d”,a,*p);显示是6,6

指针变量作为函数参数例10.3对输入的两个整数按大小顺序输出

#include<stdio.h>voidmain〔〕{voidswap〔int*p1,int*p2〕;inta,b;int*p1,*p2;scanf〔″%d,%d″,&a,&b〕;p1=&a;p2=&b;if〔a<b)swap〔p1,p2〕;printf〔″\n%d,%d\n″,a,b〕;}voidswap〔int*p1,int*p2〕{inttemp;temp=*p1;*p1=*p2;*p2=temp;}下面的函数:voidswap〔inta,intb〕{inttemp;temp=a;a=b;b=temp;/*只在函数中交换了局部变量*/}同样不可用函数:voidswap〔int*p,intb〕或voidswap〔inta,int*p〕只能用函数voidswap〔int*p1,int*p2〕处理主调用函数中的变量定义一个指向数组元素的指针变量的方法例如:inta[10],*p;

p=a;(a是数组的首地址,注意a前没有地址符)

或p=&a[0];虽然a和p都是地址,它们是不同的:a是数组的首地址,一旦由系统分配,就是一个固定的值;而p是指针变量,是可以改变的.所以a++是错误的,而p++是正确的.

指向数组元素的指针10.3.2通过指针引用数组元素如果inta[6],*p=a;引用一个数组元素,可以用:〔1〕下标法,如a[i]形式;〔2〕地址或指针法,如*(a+i)或*(p+i)注意:a[0]-a[5]合法,a[6]非法;*(a)-*(a+5)合法,*(a+6)非法;*(p)-*(p+5)合法,*(p+6)非法;

字符串与指针字符串的表示形式

例定义一个字符数组,对它初始化,然后输出该字符串

#include<stdio.h>voidmain〔〕{char*s=″abcdefg″;printf〔″%s\n″,s〕;}输出abcdefg(1)用字符数组存放一个字符串,然后输出该字符串。输出cdefg的语句是:printf〔″%s\n″,s+2〕;s+2是指针输出efg的语句是:printf〔″%s\n″,s+4〕;s+4是指针输出字符f的语句是:printf〔″%c\n″,*(s+5)〕;*(s+5)是字符注意:输出字符串用%s和指针;输出字符用%c和*(指针)指针运算与数据:#include<stdio.h>voidmain(){inta[5]={2,4,6,8,10},*p;p=a;printf("%d,",*(p+2));printf("%d,",*++p);printf("%d,",*p++);printf("%d\n",*++p);}显示6,4,4,8注意1p+2没有改变p的值;注意2++p,和p++的区别.调用函数实现数组的相反顺序存放:#include<stdio.h>voidmain(){voidinv(intx[],intn);//函数声明

inti,a[10]={3,7,9,11,0,6,7,5,4,2};printf("Theoriginalarray:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");inv(a,10);//调用函数

printf("Thearrayhasbeeninverted:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}//用数组元素:voidinv(intx[],intn){inttemp,i,j,m=(n-1)/2;for(i=0;i<=m;i++){j=n-1-i;temp=x[i];x[i]=x[j];x[j]=temp;}}//或用指针:voidinv(int*x,intn){int*p,temp,*i,*j,m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i<=p;i++,j--){temp=*i;*i=*j;*j=temp;}}这时函数声明要改成:voidinv(int*x,intn);用选择法实现数组从大到小排序的函数:voidsort(intx[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]>x[k])k=j;if(k!=i) {t=x[i];x[i]=x[k];x[k]=t;}}}第九章用户建立的数据类型--结构体问题定义:

有时需要将不同类型的数据组合成一个有机的整体,以便于引用。如:一个学生有学号/姓名/性别/年龄/地址等intnum;charname[20]; charsex;intage;charaddr[30];

声明一个结构体类型的一般形式为:

struct

结构体名{成员表列};如:struct

student{

int

num;char

name[20];char

sex;

int

age;float

score;char

addr[30];}

结构体名类型名成员名

定义结构体类型变量的方法

可以采取以下3种方法定义结构体类型变量:先声明结构体类型再定义变量名例如:structstudent

student1,student2;|||

结构体类型名结构体变量名

定义了student1和student2为structstudent类型的变量,即它们具有structstudent类型的结构.

图9-2student1100101ZhangXinM1990.5Shanghai100102WangLiF2098Beijingstudent2引用结构体变量中成员的方式为结构体变量名.成员名例如,

student1.num表示student1变量中的num成员,即student1的num(学号)项。可以对变量的成员赋值和运算

student1.num=10010但不能用以下语句整体读入结构体变量,例如:scanf〔″%d,%s,%c,%d,%f,%s″,&student1〕;

结构体变量的地址主要用作函数参数,传递结构体变量的地址。对结构体变量初始化.

#include<stdio.h>

voidmain〔〕

{structstudent

{longintnum;

charname[20];

charsex;

charaddr[20];

}a={10101,″LiLin″,′M′,″123BeijingRoad″};/*对结构体变量a赋初值*/

printf(″No.:%ld\nname:%s\nsex:%c\naddress:%s\n″,a.num,,a.sex,a.addr);

结构体数组一个结构体变量中可以存放一组数据〔如一个学生的学号、姓名、成绩等数据〕。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。定义结构体数组

和定义结构体变量的方法相仿,只需说明其为数组即可。例如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论