【文档说明】C语言程序设计技术(下)课件.ppt,共(207)页,267.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44512.html
以下为本文档部分文字说明:
C语言程序设计技术2022/11/24C语言程序设计技术(下)第11讲函数(1)C语言程序设计技术2022/11/24一.函数的定义与调用1.函数的定义<函数类型标识符><函数名>(<虚参>){〈函数体〉}C语言程序设计技术2022/11/24
2.函数值非void型函数的函数值必须用return语句返回。C语言程序设计技术2022/11/243.函数调用<函数名>(<实参>);例如:c=2*max(13,25)m=max(a,max(b,c))C语言程序设计技术2022/11/2
4说明:(1)调用函数前,应对函数原型进行声明(2)实参的个数必须与虚参个数相同,类型必须匹配(3)实参可以是一个表达式,虚参只能是变量(4)当虚参是一个指针或数组时,实参与虚参的值双向传递C语言程序设计技术2
022/11/24(5)函数不能嵌套定义,但可嵌套调用(6)函数的实参类型与虚参类型不相同时将实参转换为虚参的类型(7)函数的返回值与函数类型不相同时将返回值转换为函数值的类型。C语言程序设计技术2022/11/24例1(P106例4-2).已知a=2,b=3,求a+b的值。C语言程
序设计技术2022/11/24#include<stdio.h>#include<conio.h>voidmain(void){intadd(intx,inty);inta=2,b=3,c;clrscr();
c=add(a,b);printf("%d+%d=%d\n",a,b,c);getch();}C语言程序设计技术2022/11/24/*求和*/intadd(intx,inty){intt;printf("x和y的值分别
是:%d,%d\n",x,y);t=x+y;x=2*x;y=2*y;printf("改变后的x和y的值分别是:%d,%d\n",x,y);returnt;}C语言程序设计技术2022/11/24二.函数嵌套调用在一个子函数中调用另一
个函数称为函数嵌套调用C语言程序设计技术2022/11/24例2(P125例4-14).从键盘输入一正整数limit(limit>=6),验证从6到n之间的所有偶数都可以分解为两个奇素数之和。例如98=19+79C语言程序设计技术2022/11/24#include
<stdio.h>#include<conio.h>#include<math.h>voidmain(void){intprime(intm);intn,a,b,limit;C语言程序设计技术2022/11/24clrscr();while(1){printf
("\nInput1number(>=6):\n");scanf("%d",&limit);if(limit>=6)break;}C语言程序设计技术2022/11/24for(n=6;n<=limit;n+=2)for(a=3;a<=n/2;a+=2)
if(prime(a)){b=n-a;if(prime(b)){printf("%d=%d+%d\n",n,a,b);break;}}getch();}C语言程序设计技术2022/11/24/*判断一个数是
否为素数*/intprime(intm){inti,k;k=sqrt(m)+1;for(i=2;i<k;i++)if(m%i==0)return0;return1;}C语言程序设计技术2022/11/24C语言程序设
计技术2022/11/24第12讲函数(2)C语言程序设计技术2022/11/24一.函数递归调用在一个函数中,如果直接或间接调用自己,则称为递归调用。如:intf(intn){if(n<1)retur
n0;returnf(n-1)+n;}C语言程序设计技术2022/11/24例1.逆序输出一个整数的各位数字。C语言程序设计技术2022/11/24#include<stdio.h>voidmain(voi
d){voidprintd(longn);longn;scanf("%ld",&n);printd(n);}C语言程序设计技术2022/11/24voidprintd(longn){if(n<0){putchar('-');
n=-n;}putchar(n%10+'0');if(n/10)printd(n/10);}C语言程序设计技术2022/11/24二.局部变量和全局变量1.在函数内部定义的变量称为局部变量。2.在函数外部定义的变量称为全局变量。C语言程序设计技术2022/11/24
说明:(1)局部变量只在函数内部起作用,函数结束时,所占内存空间被释放(2)全局变量在定义它的后面任一个函数中都起作用C语言程序设计技术2022/11/24(3)全局变量与局部变量同名时,使用局部变量。(4)函数的虚
参视同局部变量C语言程序设计技术2022/11/24例2(P113例4-7).分析程序运行结果。C语言程序设计技术2022/11/24#include<stdio.h>inty,z;voidmain(void){voidabc(intx)
;intx;x=10;y=20;z=30;printf("ok1:x=%dy=%dz=%d\n",x,y,z);abc(x);printf("ok2:x=%dy=%dz=%d\n",x,y,z);}C语言程序设计技术2022/11/24voidabc(intx){inty;printf("o
k3:x=%dy=%dz=%d\n",x,y,z);x=100;y=200;z=300;printf("ok4:x=%dy=%dz=%d\n",x,y,z);}C语言程序设计技术2022/11/24例3(P126例4-15).输入100个整型
数,寻找其最大值和最小值。C语言程序设计技术2022/11/24#include<stdio.h>#include<conio.h>intMax,Min;voidmain(void){voidfind(inta[],intn);intdata[10
0],i;C语言程序设计技术2022/11/24clrscr();for(i=0;i<100;i++)scanf("%d",&data[i]);find(data,100);printf("Max=%d,Min=%d",Max,Min);getch();}C语言程序设计技术2022/11/
24/*查找数组中的最大值和最小值*/voidfind(inta[],intn){inti;Max=Min=a[0];for(i=1;i<n;i++){if(a[i]>Max)Max=a[i];if(a[i]<Min)Min=a[i];
}}C语言程序设计技术2022/11/24C语言程序设计技术2022/11/24第13讲指针(1)C语言程序设计技术2022/11/24一.指针变量1.指针概念与定义表示某个变量所在内存地址的变量称为
指针变量,简称为指针。指针变量的说明方法:<类型名>*<指针变量名>;C语言程序设计技术2022/11/24例:inta,*p,*p1=&a,*p2=p1;p,p1,p2都是指向整型数据变量的指针变量,其中p1,p2已指向变
量a。例:char*s;s是指向字符型数据变量的指针。C语言程序设计技术2022/11/242.指针运算符(1)&取变量的地址例p=&aC语言程序设计技术2022/11/24(2)*取出或改变指针所指向的变量之值。例int*p,a;a=10;p=&a;*p=*p+2
;printf("%d",a);C语言程序设计技术2022/11/24(3)+指针可以加上一个整型量,以便指向另一个变量。例:intd[11],*p=&d[4],*q;p+=3,q=p-2;C语言程序设计技术2022/11/24(4)-两个同类型的指针可以进行减法运算。例:i
ntd[100],*p1,*p2,m;p1=d;p2=&d[8];m=p2-p1;m的值等于p1与p2相距的整型变量的个数,即m=8。C语言程序设计技术2022/11/243.说明(1)指针的类型与其代表的变量的类型必须相同。例:int*p,i;float*pf,f;p=&i是
合法的而p=&f是非法的C语言程序设计技术2022/11/24(2)指针必须先赋值后使用。例如:int*p;*p=*p+2;是非法的。C语言程序设计技术2022/11/24(3)数组名及函数名可代表其所在内存的开始地址。(4)函数调用中的虚参使用指针时,将
双向传递变量的值。C语言程序设计技术2022/11/24例1(P146例5-11).交换两个变量的值。C语言程序设计技术2022/11/24#include<stdio.h>voidmain(void){voidswap(int*x,i
nt*y);inti,j;printf("输入两个整数:");scanf("%d%d",&i,&j);swap(&i,&j);printf("i=%dj=%d",i,j);}C语言程序设计技术2022/11/24voidswap(int*x,int*y){in
tp;p=*x;*x=*y;*y=p;}C语言程序设计技术2022/11/24例2.将三个数排序。C语言程序设计技术2022/11/24#include<stdio.h>voidmain(void){voidsort(int*q1,int*q2,int*q3);inta,b,
c;printf("输入三个整数:");scanf("%d%d%d",&a,&b,&c);sort(&a,&b,&c);printf("%d,%d,%d",a,b,c);}C语言程序设计技术2022/11/24voidsort(int*q1,int*q2,int*q3){voidswa
p(int*x,int*y);if(*q1>*q2)swap(q1,q2);if(*q1>*q3)swap(q1,q3);if(*q2>*q3)swap(q2,q3);}C语言程序设计技术2022/11/24voidswap(int*x,int*y){intp;p=*x;*x=*y;
*y=p;}C语言程序设计技术2022/11/24C语言程序设计技术2022/11/24第14讲指针(2)C语言程序设计技术2022/11/24一.指针与一维数组设有定义:inta[100],*p指针赋值方法:p=&a[0]或p=a元素a[i]引用方法:*(p+i)或p[i]C
语言程序设计技术2022/11/24例1(P139例5-5).用四种方法打印数组中的元素。C语言程序设计技术2022/11/24#include<stdio.h>#include<conio.h>voidmain(void){inti,c[]={10,20,
30,40};int*cp=c;clrscr();C语言程序设计技术2022/11/24for(i=0;i<=3;i++)printf(“%d”c[i]);printf(“\n”);for(i=0;i<=3;i++)printf(“%d”,*(c+i));printf(
“\n”);C语言程序设计技术2022/11/24for(i=0;i<=3;i++)printf(“%d”,cp[i]);printf(“\n”);for(i=0;i<=3;i++)printf(“%d”,i,*(cp+i));printf(“\n”);getch();}C语言程序设
计技术2022/11/24二.指针与二维数组设二维数组为inta[m][n],指针变量为p1.指针变量指向二维数组首地址指针说明方法:int*p;指针赋值方法:p=&a[0][0];元素a[i][j]引用方法:*(p+n*i+j)C语言程序设计技术2022/11/2
4例2C语言程序设计技术2022/11/24#include<stdio.h>voidmain(void){inta[2][3],*p;inti,j;p=&a[0][0];for(i=0;i<2;i++)for(j=0;
j<3;j++)scanf(“%d”,p+3*i+j);C语言程序设计技术2022/11/24for(i=0;i<2;i++){for(j=0;j<3;j++)printf(“%4d”,*(p+3*i+j));printf(“\n”);}}C语言程序设
计技术2022/11/242.指向数组的行指针变量(1)指针说明方法int(*p)[n];(2)指针赋值方法p=a;C语言程序设计技术2022/11/24(3)第i行元素的首地址(即a[i][0]的地址)*(p+i)或p[i](4)元素a[i][j]引用方法*(*(p+
i)+j)或*(p[i]+j)或p[i][j]或(*(p+i))[j]C语言程序设计技术2022/11/24例3(P141例5-7).用二维数组指针变量输出二维数组中的每个元素。C语言程序设计技术2022/11/24#include
<conio.h>#include<stdio.h>voidmain(void){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int(*p)[4];inti,j;clrscr();p=a;C语言程序设计技术2022/1
1/24for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%2d",*(*(p+i)+j));printf("\n");}getch();}C语言程序设计技术2022/11/24三.指针数组相同类型指针的集合称为指针数组。C语言程序设计技术
2022/11/24例4(P144例5-10).输出数组的值。C语言程序设计技术2022/11/24#include<stdio.h>voidmain(void){inta[2][3]={1,2,3,4,5,6},*p[2];inti,j;p[0]=a[0];p[1]=a[1];for(i=0;
i<2;i++){for(j=0;j<3;j++)printf(“%4d”,p[i][j]);printf(“\n”);}}C语言程序设计技术2022/11/24元素a[i][j]引用方法:*(*(p+i)+j)或*(p[i]+j)
或p[i][j]或(*(p+i))[j]C语言程序设计技术2022/11/24C语言程序设计技术2022/11/24第15讲指针(3)C语言程序设计技术2022/11/24一.指针与字符数组C语言程序设计技术2
022/11/24例1(P143例5-9).不断输入字符串a,直到它与已知字符串p相等为止。若不相等,则提示是比p大还是小。C语言程序设计技术2022/11/24#include<stdio.h>#inc
lude<conio.h>voidmain(void){char*p="12345678",a[10],*pa,*pp,flag;clrscr();C语言程序设计技术2022/11/24while(1){gets(a);pp=p;pa=a
;flag='m';while(*pp!='\0'){if(*pa>*pp){flag='g';break;}if(*pa<*pp){flag='l';break;}pa++,pp++;}C语言程序设计技术2022/11/24if(flag=
='m'&&*pa!='\0')flag='g';if(flag=='m')break;if(flag=='g')printf("a>p\n");elseprintf("a<p\n");}printf("%s==%s\n",p,a);getch();}C语言程序设计
技术2022/11/24二.函数与指针一个函数可以返回一个指针值。C语言程序设计技术2022/11/24例2(P147例5-12).求字符串的左子串。C语言程序设计技术2022/11/24#include<stdlib.h>#include<stdio.h>#include<string.h
>#include<alloc.h>voidmain(void){char*left(char*s,intn);char*p,s[100],s1[10];intn;strcpy(s,"123456789
0");gets(s1);n=atoi(s1);C语言程序设计技术2022/11/24p=left(s,n);gotoxy(1,1);printf("%s\n%s",s,p);free(p);}C语言程序设计技术2022/11/24char*left(char*s
,intn){char*t;intl;l=strlen(s)+1;t=malloc(l);strcpy(t,s);if(n<l)t[n]=0;returnt;}C语言程序设计技术2022/11/24例3将字符
串中的每一个字符循环向右移动若干位。C语言程序设计技术2022/11/24#include<stdio.h>#include<stdlib.h>#include<string.h>voidmain(void){voidMoveSt
r(char*s,intn);chars[101];intn;C语言程序设计技术2022/11/24printf("source:");gets(s);printf("Howmanycolumnyouwanttomove?");scanf("%d"
,&n);MoveStr(s,n);printf("result:%s",s);}C语言程序设计技术2022/11/24voidMoveStr(char*s,intn){chard,*p;intLenth;Lenth=strlen(s);p=s+Lenth-1;d=*p;for
(;p>s;p--)*p=*(p-1);*p=d;n--;if(n)MoveStr(s,n);}C语言程序设计技术2022/11/24C语言程序设计技术2022/11/24第16讲结构与联合C语言程序设计技术2022/11/24一.结构1.结构体定
义struct[<结构类型名>]{<成员定义表>}[<结构变量表>[={<初值>}]];C语言程序设计技术2022/11/24例:structdate{intyear,month,day;};C语言程序设计技术2022/11/24例:structstudent{charname
[9],sex[3];intage;structdatebirthday;};C语言程序设计技术2022/11/242.结构体变量说明(1)structdate{intyear,moth,day;};structdated1,d2;
C语言程序设计技术2022/11/24(2)structdate{intyear,moth,day;}d1,d2;C语言程序设计技术2022/11/24(3)struct{intyear,month,day;}d1,d2;C语言程
序设计技术2022/11/243.结构体成员访问<结构变量名>.<成员名>C语言程序设计技术2022/11/24例1(P159例6-1).结构体在程序中的使用。C语言程序设计技术2022/11/24#include<string
.h>#include<stdio.h>#include<conio.h>structstudent{longnum;charname[20];charsex;floatscore;};C语言程序设计技术2022/11/24voidmain(void){structstude
ntstu1;clrscr();stu1.num=200402L;strcpy(stu1.name,“ZhangHong”);stu1.sex=’f’;C语言程序设计技术2022/11/24stu1.score=92.5f;printf(“
num=%ldname=%s\n”,stu1.num,stu1.name);printf(“sex=%cscore=%5.2f”,stu1.sex,stu1.score);getch();}C语言程序设计技术2022/11/24二.结构体与指针1.结构型指针变量说明struct<结构类型名>*<指
针名>如:structstudent*p;C语言程序设计技术2022/11/242.成员引用(*指针变量).成员名或指针变量->成员名C语言程序设计技术2022/11/24例2(P167例6-7).计算一组学生的平均成绩和不及格人数。C语言程序设计
技术2022/11/24#include<stdio.h>#include<conio.h>structstudent{longnum;char*name;charsex;floatscore;};C语言
程序设计技术2022/11/24structstudentstu[5]={{200401L,"Zhouping",'M',65.4},{200402L,"Zhangping",'M',72.5},{200403L,"Liufang",'F',95.5},{200404L,"Chengling"
,'F',87},{200405L,"Wangming",'M',58.2},};C语言程序设计技术2022/11/24voidmain(void){structstudent*ps;voidave(structstudent*ps);c
lrscr();ps=stu;ave(ps);getch();}C语言程序设计技术2022/11/24voidave(structstudent*ps){intcount=0,i;floatave,sum=0;for(i=0;i<5;i++,ps++){sum+=ps->sco
re;if(ps->score<60)count+=1;}C语言程序设计技术2022/11/24printf("s=%f\n",sum);ave=sum/5;printf("ave=%f\ncount=%d\n",ave,count);}C语言程序设计技术2022/11/24三.联合
定义方法:union[<共用体类型名>]{<成员定义表>}[<变量名列表>[={<变量初值>}]];C语言程序设计技术2022/11/24如:unionabc{inti;chara,b;};C语言程序设计技术2022/11/24例3(P1
72例6-9).分析程序运行结果。C语言程序设计技术2022/11/24#include<stdio.h>voidmain(void){union{longi;intk;charc,s[10];}x;C语言程序设计技术2022/11/24x.i=0x12345678L;printf("k=
%x\n",x.k);printf("c=%c\n",x.c);printf("s=%x\t%x\t",x.s[0],x.s[1]);printf("%x\t%x\n",x.s[2],x.s[3]);}C语言程序设计技术2022/11/24C语言程序设计技术2022/11/24第17
讲顺序文件C语言程序设计技术2022/11/24一.文件分类1.按存取方式分类(1)顺序文件只能按顺序读取、改写文件中的数据。若按读方式打开文件,则只能读取数据,而不能修改数据。反之,若按写方式打开文件,则只能写数据,而不能读数据。C语言程序设
计技术2022/11/24(2)随机文件无论按何种方式打开文件,既能读取数据,也能修改数据。C语言程序设计技术2022/11/242.按存储格式分类(1)文本文件这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:ASCII码:00110101
001101100011011100111000↓↓↓↓十进制码:5678C语言程序设计技术2022/11/24(2)二进制文件二进制的编码方式来存放数据。例如,数5678的存储形式为:0001011000101110只占二个字节。C语言程序设计技术2022/11/24二.
顺序文件存取方法1.定义文件指针变量FILE*fpfp为文件型指针。C语言程序设计技术2022/11/242.打开文件FILE*fopen(char*fname,char*mode)mode常用值:w:写文本文件r:读文本文件wb写二进制
文件rb读二进制文件wb+随机读、写二进制文件rb+随机读、写二进制文件C语言程序设计技术2022/11/243.关闭文件fclose(fp);C语言程序设计技术2022/11/244.输出字符串fputs(char*s,FILE*fp)将串
s输出到文件fp中C语言程序设计技术2022/11/245.读取字符串fgets(char*s,intn,FILE*fp)从文件fp中读取n-1个字符送到s中。读到换行符(ASC码为10)时,将自动结束读取。C语
言程序设计技术2022/11/246.格式化输入与输出(1)fscanf(fp,格式串,数据)(2)fprintf(fp,格式串,数据)C语言程序设计技术2022/11/247.检测文件是否结束int
feof(FILE*fp)文件结束时返回1,否则返回0。C语言程序设计技术2022/11/24例1.生成若干随机数并存储到磁盘中。C语言程序设计技术2022/11/24#include<stdlib.h>#
include<stdio.h>#include<string.h>intGetData(intd[]);voidDisplayData(intd[],intn);voidSaveData(intd[],intn,char*fname);intLoadDat
a(int*p,char*fname);C语言程序设计技术2022/11/24voidmain(void){intn,d[101];chars[41];n=GetData(d);DisplayData(d,n);gets(s);SaveData(d,n,s)
;n=LoadData(d,s);if(n)DisplayData(d,n);}C语言程序设计技术2022/11/24intGetData(intd[]){intn,i;do{printf("Inputnumberofdata:");sca
nf("%d",&n);}while(n<1);for(i=1;i<n+1;i++)d[i]=random(1000);returnn;}C语言程序设计技术2022/11/24voidSaveData(intd[],intn,char*fname){
FILE*fp;inti;fp=fopen(fname,"w");if(!fp){printf("savefail");return;}C语言程序设计技术2022/11/24for(i=1;i<n+1;i++
)fprintf(fp,"%d",d[i]);fclose(fp);}C语言程序设计技术2022/11/24intLoadData(int*p,char*fname){FILE*fp;intn;fp=fopen(fname,"r");if(!fp)
{printf("readfail");return0;}C语言程序设计技术2022/11/24n=0;while(!feof(fp)){fscanf(fp,"%d",++p);n++;}fclose
(fp);returnn;}C语言程序设计技术2022/11/24voidDisplayData(intd[],intn){inti;for(i=1;i<n+1;i++){printf("%-6d",d[i]);if(i%10==0)printf("\n");}puts("\n");}
C语言程序设计技术2022/11/24C语言程序设计技术2022/11/24第18讲随机文件C语言程序设计技术2022/11/24一.二进制文件存取函数1.读取数据原型:longfread(void*p,longs
ize,longn,FILE*fp)功能:按照二进制数据格式读取n项数据(每项数据占size个字节),存储到由指针p指向的存储区中。函数返回实际读取的数据项数。C语言程序设计技术2022/11/242.存储数据原型:longfread(void*p,longsize,longn
,FILE*fp)功能:按照二进制数据格式将指针p指向的存储区中n的n项数据存储到文件中。函数返回实际存储的数据项数。C语言程序设计技术2022/11/24例1.生成一个二进制文件,然后修改其中的某一项。C语言程序设计技术2
022/11/24#include<stdlib.h>#include<stdio.h>intGetData(intd[]);voidDisplayData(intd[],intn);voidSave(intd[],intn,char*fname);intLoadData(
int*p,char*fname);intCorrectData(char*fname);voidmain(void){intn,d[10001];chars[41];C语言程序设计技术2022/11/24n=GetData(d)
;DisplayData(d,n);printf(“Filename:");gets(s);Save(d,n,s);if(!CorrectData(s))return;n=LoadData(d,s);if(n)DisplayDat
a(d,n);}C语言程序设计技术2022/11/24intGetData(intd[]){intn,i;scanf("%d",&n);for(i=1;i<n+1;i++)d[i]=random(1000);returnn;}C语言程序设计技术2022/11/
24voidDisplayData(intd[],intn){inti;for(i=1;i<n+1;i++)printf("%d",d[i]);puts("\n");}C语言程序设计技术2022/11/24voidSave(intd[],intn,char*fname){FILE*fp;
inti;fp=fopen(fname,"wb");if(!fp)return;fwrite(&n,2,1,fp);for(i=1;i<n+1;i++)fwrite(&d[i],2,1,fp);fclos
e(fp);}C语言程序设计技术2022/11/24intCorrectData(char*fname){chars[21]="Temp.txt";FILE*fpr,*fpw;inti,n,p,data,x;fpr=fopen(fname,"rb");if(!fpr)ret
urn0;fread(&n,2,1,fpr);C语言程序设计技术2022/11/24fpw=fopen(s,"wb");if(!fpw){fclose(fpr);return0;}printf("correctwhichitem,newdata=");scanf("
%d%d",&p,&data);if(p<1||p>n){fcloseall();return0;}C语言程序设计技术2022/11/24fwrite(&n,2,1,fpw);for(i=1;i<p&
&!feof(fpr);i++){fread(&x,2,1,fpr);fwrite(&x,2,1,fpw);}fread(&x,2,1,fpr);fwrite(&data,2,1,fpw);C语言程序设计技术2022/11/2
4for(i=p+1;i<n+1&&!feof(fpr);i++){fread(&x,2,1,fpr);fwrite(&x,2,1,fpw);}fclose(fpr);fclose(fpw);C语言程序设计技术2022/11/24fpr=fopen
(s,"rb");if(!fpr)return0;fpw=fopen(fname,"wb");if(!fpw){fclose(fpr);return0;}while(!feof(fpr)){fread(&x,2,1,fpr);f
write(&x,2,1,fpw);}C语言程序设计技术2022/11/24fclose(fpr);fclose(fpw);return1;}C语言程序设计技术2022/11/24intLoadData(int*p,char*fname)
{FILE*fp;inti,n;fp=fopen(fname,"rb");if(!fp)return0;fread(&n,2,1,fp);for(i=1;i<n+1&&!feof(fp);i++)fread(++p,2,1,fp);C语言程序设计技术
2022/11/24n=i-1;fclose(fp);returnn;}C语言程序设计技术2022/11/24二.随机文件1.文件指针定位原型:intfseek(FILE*fp,longoffset,intwhence)功能:将文件指针移到由w
hence所确定的位置开始,偏移offset个字节的位置处。定位成功时函数返回0,否则返回非0值。C语言程序设计技术2022/11/24whence:0(或SEEK_SET):文件首1(或SEEK_CUR):当前位置2(或SEEK_END):文件末尾C语言程序设计技术2022/11/24
例2.修改二进制文件中的某一项。C语言程序设计技术2022/11/24intCorrectData(char*fname){FILE*fpr;intoffset,n,p,data;fpr=fopen(fname,"rb+");if(!fpr)return0;fread(&n,
2,1,fpr);C语言程序设计技术2022/11/24printf("whichitem,newdata=");scanf("%d%d",&p,&data);if(p<1||p>n){fcloseall();return0;}C语言程序设计技术20
22/11/24offset=(p-1)*2;fseek(fpr,offset,SEEK_SET);fwrite(&data,2,1,fpr);fclose(fpr);return1;}C语言程序设计技术2022/11/24例3.分析下面程序的功能C语言程序设
计技术2022/11/24#include<stdio.h>#include<stdlib.h>voidmain(void){FILE*fp;inti,x;C语言程序设计技术2022/11/24if((fp=fopen("d:\\intb1.dat","rb"))==NUL
L){printf("filecannotopen!\n");exit(0);}for(i=0;i<3;i++){fseek(fp,2*i*sizeof(int),0);fread(&x,sizeof(int),1,fp);}C语言程序设计技术2022/11/24fseek(fp,-2L
*sizeof(int),SEEK_END);fread(&x,sizeof(int),1,fp);fseek(fp,-1L*sizeof(int),SEEK_END);fread(&x,sizeof(int),1,fp);fclos
e(fp);}C语言程序设计技术2022/11/24C语言程序设计技术2022/11/24第19讲位运算与预处理命令C语言程序设计技术2022/11/24一.位运算1.按位或运算符为|运算规则:0|0=0,0|1=1,1|0=1,1|1=1C语言程序设计技术
2022/11/24例1(P220例9-1).设字符变量a=3,b=5,求a|b。00000011|00000101────────────00000111C语言程序设计技术2022/11/242.按位与运算符为&运算规则:0&0=0,0&1=0,1&0=0,1&1=1C语言
程序设计技术2022/11/24例2(P221例9-2).设字符变量a=3,b=5,求a&b。00000011&00000101────────────00000001C语言程序设计技术2022/11/243.按位异或运算符为:^运算规则:0^0=0,0
^1=1,1^0=1,1^1=0C语言程序设计技术2022/11/24例3(P222例9-5).设字符变量a=57,b=42,求a^b。00111001^00101010────────────00010011C语言程序设计技术2022/11/24
4.位取反运算符:~运算规则:~1=0,~0=1C语言程序设计技术2022/11/24例4(P223例9-8).对有符号整型变量i=100和无符号整型变量j=100分别进行取反操作。~000000000110010
0—————————————————1111111110011011~i=-101,~j=65435C语言程序设计技术2022/11/245.移位运算符:<<运算规则:将二进制数向左移位,右边补0。C语言程序设计技术2022/11/24例5.设a=60,b=135求a
<<2,b<<1。a<<2=(00111100)2<<2=(11110000)2=240b<<1=(10000111)2<<1=(00001110)2=14C语言程序设计技术2022/11/246.右移位运算符:>>运算规则:将二进制数位向右移动,最高位为0时左边补0
,最高位为1时补1。C语言程序设计技术2022/11/24例6.设a=60,b=135求a>>2,b>>1。a>>2=(00111100)2>>2=(00001111)2=15b>>1=(10000111)2>>1=(11000011)2=195C语言程序设计技术2022/1
1/24例7(P225例9-13).从键盘输入一个正整数,输出由8~11位构成的数。C语言程序设计技术2022/11/24#include<stdio.h>voidmain(void){intnum,mask,x;printf("Inputaintegernumber:");scan
f("%d",&num);C语言程序设计技术2022/11/24num>>=8;mask=15;x=num&mask;printf("result=%d\n",x);}C语言程序设计技术2022/11/24二.预处理命令2.文件包含(1)绝对路径查
找#include<文件名>该命令表示在TC\INCLUDE中去查找指定的文件,并将该文件添加到源文件中。C语言程序设计技术2022/11/24(2)相对路径查找#include”文件名”先在当前目录中查找文件,未
找到时再到TC\INCLUDE中去查找。C语言程序设计技术2022/11/242.宏定义(1)无参宏语法:#define<宏名>字符串如:#definePI3.14C语言程序设计技术2022/11/24(2
)有参宏#define<宏名>(<参数表>)字符串C语言程序设计技术2022/11/24如:#defineM(x)x+1#defineS(y)((y)*(y))#definemax(a,b)((a)>(b)?(a):(b))C语言程序设计技术2022/11/24例
8(P236例10-6).分析下面的程序。C语言程序设计技术2022/11/24#include<stdio.h>#defineSWAP(type,a,b){typet;t=a;a=b;b=t;}voidmain(void){charch1='A',ch2='B';floatf1=1.2
,f2=2.3;SWAP(char,ch1,ch2);printf("%c,%c",ch1,ch2);SWAP(float,f1,f2);printf("%f,%f",f1,f2);}C语言程序设计技术2022/11/24C语言程序设计技术2022/11/24第2
0讲向C++过渡C语言程序设计技术2022/11/24一.注释//<注释内容>设置单行注释。C语言程序设计技术2022/11/24二.变量说明在C++中,变量说明语句可以出现在程序的任何地方。如:if(i>1){inta;a=2;in
tb;b=a++;}C语言程序设计技术2022/11/24例1intsum(intn){ints;s=0;for(inti=1;i<n+1;i++)s+=i;returns;}C语言程序设计技术2022/11/24三.强制类型转换<类型名>(<表达
式>);如:inti=4;floatf1,f2;f1=(float)i/3+43.5;f2=float(i)/3+43.5;C语言程序设计技术2022/11/24四.变量的作用域当全局变量与程序块中的局部变
量同名时,将自动使用局部变量。但可使用::来引用全局变量。C语言程序设计技术2022/11/24例2#include<stdio>inty=100;voidmain(void){inty=200;pri
ntf(“%d%d“,y,::y);}C语言程序设计技术2022/11/24五.变量赋初值<类型名><变量名>(<初值>)如:inti(10)C语言程序设计技术2022/11/24六.输入输出1.输入函数cin>><表达式>2.输出函数cout<<<表达式>C语言程序设计技术2
022/11/243.换行cout<<endl4.函数原型iostream.hC语言程序设计技术2022/11/24七.结构变量说明与赋值1.变量说明方法不需要使用关键字struct。如:Structdate{intyear,month,d
ay;};dated1,d2;C语言程序设计技术2022/11/242.赋值运算同类型的结构变量可以直接用等号赋值。如:d1=d2;C语言程序设计技术2022/11/24八.函数的默认参数值函数可以含有默认值。如:IntLeft(chars[],intn=0
){.........}C语言程序设计技术2022/11/24九.引用变量<类型名>&<变量名>=<已定义的同类型的变量名>如:intx=10,&y=x;cout<<x<<’,’<<y<<endl;y=100;cout<<x<<’,’<<y<<endl;C语言程序设计技术2022/11/
24十.程序编译步骤1.工作空间与项目在VC++中开发软件时必须创建一个工作区,每个工作区可以管理一个应用软件系统。每个工作区由若干个项目组成,每个项目管理一个独立的可执行程序。每个项目可由若干个源文件及其它库文件组成。C语言程序设计技术2022
/11/242.操作步骤(1)关闭已打开的所有工作区:单击“File|CloseWorkspace”(2)为工作区新建一个文件夹(3)单击“File|New|Files|C++SourceFile”C语言程序设计技术2022/11/24(4)在“Location文本输
入框”中输入工作区路径(5)在“File文本输入框“中输入源程序文件名(6)单击“OK”C语言程序设计技术2022/11/24(7)输入源程序并存盘(8)单击“Build|Build|是”(9)运行程序:单击“Build|ExecuteC语言程序设计技术2022/11/24例3#inc
lude<iostream.h>inty=100;voidmain(){inty=200;cout<<y<<","<<::y<<endl;}C语言程序设计技术2022/11/24