您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 函数参数与结构体练习PPT
ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China12.为什么会出现if-else不匹配?这种错误的原因可能比较复杂;总的原则是:(1)有一个else必有一个if,所以首先在数量上要匹配(2)逻辑关系要合理;若执行的是复合语句,不要漏掉复合语句标志{}。例如:if(xy)t=a;a=b;b=t;elset=m;编译时就会提示出错信息,正确的写法:if(xy){t=a;a=b;b=t;}elset=m;(3)若条件不成立时要求执行的语句有多条,else后必须为复合语句。例如:if(xy){t=a;a=b;b=t;}else{t=m;m=n;n=t;}C程序中常见问题-if语句ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China2C程序中常见问题-定长数组与变长数组定义定长数组:inta[5];变长数组:intn;inta[n];定义数组并初始化数组元素:inta[5]={1,2,3,4,5};访问数组元素(写、读):for(i=0;i5;i++)a[i]=i*2;for(i=0;i5;i++)printf(%d,a[i]);变长数组:intn=20;inta[n];C99标准规定:定义数组时,其尺寸可以不确定,但不是所有的编译器都支持该特性ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China3关于函数函数是具有名字的语句序列,使用函数可改善程序的结构,也用于将多处重复使用的代码编写为函数,减少代码量函数定义和函数调用形式参数与实际参数参数传递实际参数向形式参数传值实参与形参个数相等,类型一致,按顺序一一对应函数的返回值局部变量与全局变量变量的作用域与生存期staticextern#includestdio.hlongsum(inta,intb);longfactorial(intn);voidmain(){intn1,n2;longa;scanf(%d,%d,&n1,&n2);a=sum(n1,n2);printf(a=%1d,a);}longsum(inta,intb){longc1,c2;c1=factorial(a);c2=factorial(b);return(c1+c2);}longfactorial(intn){longrtn=1;inti;for(i=1;i=n;i++)rtn*=i;return(rtn);}longsum(inta,intb);longfactorial(intn);文件包含编译预处理命令函数原型说明函数定义函数调用函数调用函数返回值形参实参ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China5函数参数数组作为函数参数结构体数据作为函数参数ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China6传值调用函数调用执行时,将实际参数的值传递给形式参数,这个传递过程是单向的voidswap(intx,inty){intt;t=x;x=y;y=t;}intmain(){inta,b,c;a=3;b=8;c=2;if(ab)swap(a,b);if(ac)swap(a,c);if(bc)swap(b,c);printf(%d%d%d,a,b,c);return0;}ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China7传值调用函数调用执行时,将实际参数变量的地址传递给形式参数voidswap(int*x,int*y){intt;t=*x;*x=*y;*y=t;}main(){inta,b,c;a=3;b=8;c=2;if(ab)swap(&a,&b);if(ac)swap(&a,&c);if(bc)swap(&b,&c);printf(%d%d%d,a,b,c);}ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China8数组作为函数参数数组作为参数有两种形式数组元素作为实参,与一般变量相同;形参为数组,实参为数组名intnum[5]={79,11,27,26,43};num[4]num[2]num[3]num[0]num[1]7911272643数组元素是一个变量ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China9数组元素作为函数参数数组元素等同于一个一般变量,作为实参时,是将数组元素的值传给形参voidchange(intx){printf(before:%d\n,x);x=x+10;printf(after:%d\n,x);}intmain(){inti;intnum[6]={43,18,9,13,55,7};change(num[2]);for(i=0;i6;i++)printf(%d\t,num[i]);return0;}ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China10数组名作为函数参数数组名可以作为实参,传递的是数组空间的首地址inti,j,temp,a[5]={43,18,9,13,55};for(i=0;i4;i++){for(j=0;j4-i;j++)if(a[j]a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}/*endif*/}/*endfori*/voidsort(inta[],intn)/*数组a的尺寸为n*/{inti,j,temp;for(i=0;in-1;i++){for(j=0;jn-1-i;j++)if(a[j]a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}/*endif*/}/*endfori*/}intmain(){inti;intnum[6]={43,18,9,13,55,7};sort(num,6);for(i=0;i6;i++)printf(%d\t,num[i]);return0;}ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China11数组名作为函数参数(续)多维数组作为实参和形参intmax_Value_Matrix(inta[][4],intm,intn){inti,j,line,col;max=a[0][0];line=0;col=0;for(i=0;im;i++)for(j=0;jn;j++)if(a[i][j]max){max=a[i][j];line=i;col=j;}printf(%d,%d,,line,col);returnmax;}例如:找出二维数组中的最大元素,输出其下标voidmain(){inti,j,max,num[3][4];for(i=0;i3;i++){for(j=0;j4;j++){num[i][j]=rand();printf(%d\t,num[i][j]);}printf(\n);}max=max_Value_Matrix(num,3,4);printf(%d\t,max);}ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China12结构体变量作为函数参数(续)结构体变量作为函数的实参和形参intGetDateId(DATEdate){staticunsignedintday_of_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};inti,date_id=0;for(i=0;idate.month;i++)date_id+=day_of_month[i];date_id+=date.day;if(date.month2&&IsLeapYear(date.year))date_id++;returndate_id;}typedefstruct{intyear,month,day;}DATE;voidmain(){DATEnew_date;intdays;intGetDateId(DATEdate);new_date.year=2008;new_date.month=11;new_date.day=26;days=GetDateId(new_date);printf(%d,days);printf(\n);}ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China13结构体数组•编写一程序,对于某班的50名学生,输入各学生的姓名、学号、高数、英语和程序设计课程成绩(都是百分制成绩),并按照总分降序排列输出成绩表。1.定义描述每个学生信息的结构体类型2.定义存储所有学生信息的结构体数组3.输入4.排序5.输出ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China14内存布局代码区静态数据区栈区(stack)堆区(heap)代码区静态数据区(变量)栈区(stack)堆区(heap)文字常量区ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China15•变量的属性–数据类型:变量所持有的数据的性质(操作属性)–存储类型»存储器类型:寄存器、静态存储区、动态存储区»生存期:变量在某一时刻存在-------静态变量与动态变量»作用域:变量在某区域内有效-------局部变量与全局变量•变量的存储类型–auto-----自动型–register-----寄存器型–static------静态型–extern-----全局型•变量定义格式:[存储类型]数据类型变量表;–变量是对程序中数据的存储空间的抽象如:intsum;autointa,b,c;registerinti;staticfloatx,y;变量的属性ProgramminginC西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China16变量的作用域是指在程序的哪个范围内这个变量是有效的,即可以引用和赋值。•根据作用域可以将变量分为:全局变量和局部变量–外部变量(全局变量)•定义在函数体外,可以在源程序的任何位置定义(必须保证不在任何一个函数体内)•作用域从源文件定义位置开始之后的所有函数•外部变量通常在程序开始处所有函数前定义,以便所有函数都能使用•若在本程序中使用别的文件中定义的外部变量,则在程
本文标题:函数参数与结构体练习PPT
链接地址:https://www.777doc.com/doc-4724777 .html