版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Date:04May2023C语言程序设计案例教程(三)Date:04五月2023第三章结构化程序设计授课要点循环的嵌套结构问题:打印如以下图案123456789123456789123456789123456789123456789112123123412345问题解答1#include<stdio.h>voidmain(){ inti,j; for(i=1;i<=5;i++) { for(j=1;j<=9;j++) printf("%d",j); printf("\n"); } }问题解答2#include<stdio.h>voidmain(){ inti,j; for(i=1;i<=5;i++) { for(j=1;j<=i;j++) printf("%d",j); printf("\n"); } }问题:打印如以下图案******************************问题解答3#include<stdio.h>voidmain(){ inti,j; for(i=1;i<=5;i++) { for(j=1;j<=i;j++) printf(“*"); printf("\n"); } }问题解答4#include<stdio.h>voidmain(){ inti,j; for(i=1;i<=5;i++) { for(j=1;j<=5-i;j++) printf(""); for(j=1;j<=i;j++) printf("*"); printf("\n"); } }问题:打印如以下图案*************************问题解答5#include<stdio.h>voidmain(){ inti,j; for(i=1;i<=5;i++) { for(j=1;j<=5-i;j++) printf(""); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } }模仿练习*******************************************************小组讨论并总结循环嵌套的执行过程“控制流程〞编码中的常见错误。结论1——循环嵌套的执行过程执行顺序:1、语句12、判断表达式:如果为假,执行语句5;如果为真执行另一个循环语句块3、执行语句24、判断表达式2:如果为假,执行语句4,转回表达式1;如果为真,循环执行语句3结论2——“控制流程〞中常见错误if…else不配对switch中表达式类型与case语句的值不匹配无结束条件,死循环循环次数不清楚误用break和continue学以致用寻找你身边的一个实际问题,构造出解决问题的表达式,描述解决问题的算法,以及编写解决问题的程序。例如:假设你在某公司工作,老板要你打印一张表,买主可以用它来购置多个特定部件的费用。单个部件的价格从1元到9元不等。N件东西的费用就是单价与数量相乘得出。因此,你要打印一张像下面这样的数字表: 某公司部件费用明细表1234567892468101214161836912151821242748121620242832362007年4月7日作业【练习1】将1、2、3、…、9打印15行。【练习2】打印如以下图案: * *** ***** ****************【练习3】打印九九乘法表,如下图Date:04五月2023第三章结构化程序设计授课要点循环的嵌套结构嵌套结构的转换问题:输入一个数n,求其阶乘分析规律:1!=12!=2*1 =2*1!3!=3*2*1 =3*2!4!=4*3*2*1 =4*3!… …n!=n*(n-1)*(n-2)*…*3*2*1 =n*(n-1)!利用循环结构来实现编程思路〔1〕用变量n保存待计算阶乘数的数据,用p保存逐项累乘的结果,初值为1;〔2〕循环变量i的初值为1;〔3〕如果i超过n值,循环结束,转〔6〕;〔4〕每次循环,将变量i与p相乘,结果保存到p中;〔5〕循环变量i增加1,转回到〔3〕;〔6〕输出累乘结果p,结束运行。流程图及代码intn; /*存储计算阶乘的n值*/scanf(“%d〞,&n);/*取得输入值n*/intj; /*循环变量j*/intp; /*累乘结果p*/for(j=1;j<=n;j++){ p=p*j;/*累乘,结果放到p中*/}printf(“%d〞,p);/*输入累乘结果*/问题:求1!+2!+3!+…+20!的值分析:1、1-20分别求阶乘(p1,p2,…,p20),然后求各个阶乘的和。2、两重循环解决问题
内重循环:n!=1×2×3×…×n的实现 外重循环:p1+p2+p3+p4+…+p20的实现嵌套循环流程图循环嵌套——双重循环两个while循环嵌套while(…){while(…){
语句;}}内重循环外重循环两个for循环嵌套for(…){for(…){
语句;}}双重循环代码分解/*内重循环代码*/intj;/*循环变量*/p=1;for(j=1;j<=i;j++) p*=j;/*外重循环代码*/inti; /*循环变量*/intsum=0;/*求和结果*/for(i=1;i<=20;i++){ sum=sum+p;/*累加*/}printf(“%d〞,sum);给出一个个i值得到p值双重循环代码块while双重循环 inti=1; intsum=0; while(i<=20) { intj=1; intp=1; while(j<=i) { p=p*j;/*累乘积*/ j++; } i=i+1; sum=sum+p; }相应的for双重循环 inti,j,sum=0; intp=1; for(inti=1;i<=20;i++) { for(intj=1;j<=i;j++) { p=p*j;/*累乘积*/ } sum=sum+p; }问题扩展在问题中,采用的是两个while和for循环的嵌套。能不能换成两个do…while循环的嵌套?能不能换成for、do…while、while的混合型嵌套?for循环和do…while循环互换inti=1;intp=1;while(i<=20){
intj=1;for(intj=1;j<=i;j++){p=p*j;}
i=i+1;sum=sum+p;}inti=p=1;while(i<=20){ intj=1;
do { p=p*j; j++; }while(j<=i); i=i+1; sum=sum+p; }问题:搬运砖块假设有36块砖,共需36个人搬,男人可搬4块,女人可搬3块,小孩两人搬1块,要求一次全部搬完,问男、女、小孩人数的可能组合。思路:男人的可能值是0~8;女人的可能值是0~11;小孩的取值是〔36-男人-女人〕。问题:求100~200之间的全部素数什么是素数?如何判断m是否是素数?思路:让m被2到根号m除,如果m能被其中任何一个整数整除,那么m不是素数。小组讨论并总结循环主菜单是如何跳出循环的?结论3——循环主菜单如何跳出循环?voidmain(){intinput;scanf(“%d〞,&input);switch(input){case1: /*语句*/ break;/*跳出循环*/case2: /*语句*/ break;/*跳出循环*/ …}}使用break语句Date:04五月2023第四章模块化程序设计授课要点什么是结构化程序设计函数的定义、声明、调用无参无返回值的函数无参有返回值的函数什么是结构化程序设计? 自上而下逐步细化的模块化程序设计方法结构化程序设计的好处是什么? 复杂问题简单化 便于多人协作完成一个大的任务 提高程序可维护性、可读性 模块复用C语言中如何实现结构化程序设计? 模块化在C语言中用函数实现结构化程序设计#include<stdio.h>#include<math.h>main()//主函数{ intiNo,b; printf(“inputanumber:\n〞);//输出函数 scanf(“%d〞,&iNo);//输入函数 b=sqrt(iNo);//求平方根函数 printf(“%d〞,b);//输出函数}初识函数1/*从键盘输入3个数,求和并输出。*/#include<math.h>#include<stdio.h>intmyAdd(intx,inty,intz){ ints; s=x+y+z; returns;}main()//主函数{ intiNo1,iNo2,iNo3,sum; printf("input3numbers:\n");//输出函数
scanf("%d%d%d",&iNo1,&iNo2,&iNo3);//输入函数
sum=myAdd(iNo1,iNo2,iNo3);//用户自定义函数
printf("sum=%d",sum);//输出函数}初识函数2函数: 一段函数就是一段实现一定功能的代码,就像一台具有某种功能机器。因此函数的调用就类似启动一台机器来完成某个任务。C语言中,函数是实现模块化的工具。什么是函数?用函数解决问题 输入假设干个学生的学号、某门课程的平时成绩和期末成绩,计算出总评成绩。其中, 总评成绩=50%*平时成绩+50%*期末成绩 最后,从键盘输入一个学生的学号,查询该生的平时成绩、期末成绩和总评成绩。用函数解决的思路 定义假设干具有不同功能的函数,在main函数中分别调用它们,用以解决这个问题。如:main(){//定义必要的变量inputScore();//输入学生学号及成绩信息computeTotalScore();//计算每个学生的总成绩searchByNo();//按学号查找某个学生的信息printSearchInfo();//输出查找到的学生信息}main函数只负责解决问题的流程;具体子问题的实现交给不同的函数去处理。函数的定义除了系统提供的函数外,我们都需要对函数进行定义。函数定义的通用形式为:返回值数据类型函数名称([参数数据类型参数1[,参数数据类型参数2,…]])
{
…}函数首部函数体函数定义例如(1)无参数无返回值的函数如:定义printStar函数,用以在屏幕上输出5个*符号。voidprintStar(){intstar;for(star=1;star<=5;star++) printf("*");printf("\n");}函数无返回值时使用的数据类型函数的调用无参的调用形式:函数名();无参数无返回值的函数的调用#include<stdio.h>main(){
printStar();//函数调用}voidprintStar(){intstar;for(star=1;star<=5;star++) printf("*");printf("\n");}自定义函数的声明 在程序的开头加上对应函数的声明,就不会出现函数未定义(或重复定义)的错误。函数声明的形式:返回值类型函数名称([参数类型参数1,…]);其中前面的与函数定义时的首部完全一样,但末尾必须加“;〞。如对printStar函数的声明为:voidprintStar();无参数无返回值的函数的声明#include<stdio.h>voidprintStar();//函数声明main(){printStar();//函数调用}voidprintStar()//函数定义(首部){intstar;for(star=1;star<=5;star++) printf("*");printf("\n");}问题:过年回家,车票难买,到处托人。假设你先把车票钱给帮你买车票的朋友,那么返回给你的应该是一张车票〔当然要顺利的话〕。同理,在C语言中,函数的调用有时候也是有返回值的,那么如何理解?分析
对应到函数上,你的朋友就是函数,车票钱是函数输入,车票就是函数的返回值,而你就是调用函数的主程序。
函数的返回值函数的返回值返回语句形式:return(表达式);或return表达式;或return;功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数函数定义例如(2)无参数有返回值的函数 如定义函数sum_100,用以求1+2+3+…+100的和,并将结果返回给调用它的函数。
intsum_100(){ints=0,i;for(i=1;i<=100;i++) s=s+i;
returns;
//用return返回一个值给主调函数
}无参数有返回值的函数例如
#include<stdio.h>
intsum_100();
//函数声明
main(){ints1;
s1=sum_100();
//函数调用
printf("和值为:%d\n",s1);}intsum_100()//函数定义(首部){ints=0,i;for(i=1;i<=100;i++) s=s+i;
returns;
//返回值给主调函数
}模仿练习无参无返回值函数编写:1、自定义函数myPrint1(),在屏幕上输出如以下图形(每行10个$符号),并在主函数中调用myPrint1()函数。$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$模仿练习无参无返回值函数编写:2、自定义函数myPrint2(),在屏幕上输出如以下图形,并在主函数中调用myPrint2()函数。@@@@@@@@@@@@@@@@@@@@@@@@@模仿练习无参有返回值函数编写:3、自定义函数myFac(),计算10!,将计算结果返回给调用者。然后在主函数中调用myFac()函数,输出该结果。4、自定义函数myMax(),实现功能:从键盘输入3个数,求最大数并在主函数中调用myMax()函数,输出该结果。小组讨论并总结1、为什么使用函数?2、如何理解函数调用与函数定义的不同?3、空函数在程序结构设计中有什么作用?学以致用寻找你身边的一个实际问题,编写解决问题的程序,用到函数定义和调用。例、电视是我们日常生活中所熟悉的,我们通过遥控器选择不同的频道,就可以播放相应的频道。请定义一个函数tvPlay(intchannel),模拟根据遥控器的输入的频道号码,播放相应的频道。然后给出调用的例子,比方,遥控器上选择5,那么播放CCTV-5体育频道。作业——每人必做1、编写一个函数sum(n),计算1+2…+n之和,根据n值的不同,得到不同的值。要求分别计算n=50,n=80,n=100的情况。2、将自己的“学生成绩管理系统〞〔循环菜单〕以模块化的形式进行处理,具体实施方案:主菜单的显示和选择局部可定义函数menu_select〔〕来调用,“编辑子菜单〞可定义editmenu〔〕来调用,“查找〞可定义serachmenu〔〕来调用。作业——小组必做寻找你身边的一个实际问题,构造出解决问题的表达式,描述解决问题的算法,以及编写解决问题的程序。例如,MP3可以播放不同的歌曲,请编写一个MP3模拟函数,根据输入不同的歌曲代号,可以显示相应的歌曲名。然后,调用该函数。Date:04五月2023第四章模块化程序设计授课要点有参无返回值的函数有参有返回值的函数函数定义例如(3)有参数无返回值的函数如定义printStar_n()函数,用以在屏幕的一行上输出n个*号。其中n的值是由调用该函数的函数传递过来的。
voidprintStar_n(intn){ intstar;for(star=1;star<=n;star++) printf("*"); printf("\n");}函数参数(称为形参)函数调用有参函数的调用形式: 函数名〔实参〕;实参与形参:个数相等类型一致按顺序一一对应有参数无返回值的函数调用
#include<stdio.h>
voidprintStar2(intn);//函数声明
main(){intstarNum;scanf("%d",&starNum);printStar_n(starNum);//函数调用
}
voidprintStar_n(intn)//函数定义(首部){intstar;for(star=1;star<=n;star++) printf("*"); printf("\n");}函数参数(称为形参)调用时传递的参数(称为实参)函数定义例如(4)有参数有返回值的函数如定义函数sum_n(),用以求1+2+3+…+n的和,并将结果返回给调用它的函数。
intsum_n(intn){ ints=0,i;for(i=1;i<=n;i++) s=s+i;
returns;
//通过return返回一个值
}函数参数(称为形参)
#include<stdio.h>
intsum_n(intn);//函数声明
main(){ints1,n;scanf("%d",&n);
s1=sum_n(
n);
//函数调用
printf("和值为:%d\n",s1);}
intsum_n(n)//函数定义(首部){ints=0,i;for(i=1;i<=n;i++) s=s+i;
returns;
//返回一个值给主调函数
}有参数有返回值的函数调用函数的调用1、语句调用方式2、函数表达式3、函数参数函数的调用调用方式语句调用:例printmsg();printf(“打印成功!\n〞);函数表达式调用:例result=aver(totalscore,stuno);函数参数调用:例printf(“%f〞,aver(totalscore,stuno));
随堂实践有参无返回值函数编写:1、自定义函数myprint_n(),在屏幕的一行上输出n个$符号。在主函数中调用myprint_n()函数,输出如以下图形(每行上的符号个数由调用它的函数传递过来)。函数首部为:voidmyprint_n(intn)$$$$$(5个$)$$$$$$$$$$(10个)$$$$$$$$$$$$$$$(15个)$$$$$$$$$$$$$$$$$$$$(20个)2、修改以上程序,实现以下功能:打印个数由用户输入决定,支持用户循环输入,当用户输入0时结束程序。有参有返回值函数编写:3、自定义函数myfac_n(),求n!,并在主函数中调用myfac_n()函数,输出结果。函数首部为:intmyfac_n(intn)4、自定义函数mypower(),求x的y次幂,并在主函数中调用mypower()函数,输出结果。函数首部为:doublemypower(doublex,inty)5、自定义函数circleArea(),用于计算圆的面积,其中半径作为参数传入。然后在主函数中调用它,并输出结果。函数首部为:doublecircleArea(doubleradius)
随堂实践小组讨论并总结1、函数的功能应该尽量保持相对独立还是依赖函数外的数据为好?2、怎样使一个函数具有更大的通用性?3、函数参数的值传递有哪些特点?学以致用寻找你身边的一个实际问题,编写解决问题的程序,要求用到函数调用、参数传递。例如:踢足球的时候,裁判要求换人,比方要用8号换下18号,请用函数模拟换人,并在主函数中调用。作业——每人必做将“控制流程〞阶段完成的“小型计算器〞功能改写为函数,并在主函数中调用,注意参数的类型定义及传参过程。Date:04五月2023第四章模块化程序设计授课要点复习,评讲模拟练习参数的值传递实训函数的值传递方式#include<stdio.h>voidmain(){voidswap(inta,intb);/*swap函数的声明*/intx=7,y=11;printf("x=%d,\ty=%d\n",x,y);printf("swapped:\n");swap(x,y);/*调用swap函数*/printf("x=%d,\ty=%d\n",x,y);}voidswap(inta,intb)/*定义swap函数*/{inttemp;temp=a;a=b;b=temp;输出结果:x=7,y=11}swapped:x=7,y=11结论:值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保存并维持原值特点:形参与实参占用不同的内存单元单向传递结论:函数参数的传递方式还有另一种---地址传递方式其传递的参数为地址而不是值,具体内容将在数组章节中学习.Date:04五月2023第四章模块化程序设计授课要点作业评讲变量的存储类别问题#include<stdio.h>voidprt();main(){intx;for(x=1;x<=5;x++) prt();}voidprt(){ staticinty=0;y++; printf("%d",y);}输出结果:12345去掉static后的结果为多少?问题分析动态存储变量和静态存储变量动态变量:用auto关键字表示如autointp,f;//p,f为两个动态变量在C中,默认的变量定义就是定义为动态变量即上述的p,f变量定义与intp,f;是完全等价的。静态变量:在程序生存期内一直有效。注意,如果静态变量出现在函数中,不会因为函数的调用结束而丧失这个变量的值变量的生存期inta,b,c;//外部变量定义main(){intx,y;//内部变量
floatf;//内部变量
//其他语句…}intsum(intn){ints=0,i;//内部变量
//语句}x,y,f的有效区域s,i的有效区域a,b,c的有效区域内部变量与外部变量的作用区域是不一样的。1.变量的存储类型计算机的存储器分为内存和外存。还有一个小小的临时存储器称为存放器,用以存储一些反复被加工的数据。C语言允许程序员区分是在主存还是在存放器中开辟变量的存储空间。2.变量的生存期〔1〕在编译时分配存储单元。这种变量的生存期为程序执行的整个过程,在该过程中占有固定的存储空间,称为永久存储。〔2〕只在程序执行的某一段时间内存在。比方在函数的执行过程中存在。这种存储方式称为动态存储。小结小结3.变量的可用域变量的可用域也分为全局可用和局部可用。C语言中,用“存储属性〞来表示以上三个方面的属性,如表所示。名称寄存器变量自动变量静态变量外部变量存储属性registerautostaticextern存储位置寄存器主存生存期动态生存期永久生存期作用域局部局部或全局全局模仿练习1、写出以下程序的运行结果:int
fun(inta) /*a为形参,自动型局部变量*/{autointb=0; /*b是自动型局部变量*/staticintc=3; /*c是静态型局部变量,初始化仅进行一次*/b+=1;c=c+1;returna+b+c;}main(){inta=2,i; /*a和i都是自动型局部变量*/for(i=0;i<3;i++)printf("%d\t",fun(a));}模仿练习2、写出以下程序的运行结果:intsum(intn);//函数声明inta=4,b=5,c=6;//外部变量定义main(){intx=1,y=2;floatf=3.0;x=sum(10);printf("x=%d,y=%d,f=%f\n",x,y,f); printf("a=%d,b=%d,c=%d\n",a,b,c);//printf("s=%d,i=%d\n",s,i);}intsum(intn){ints=0,i;for(i=1;i<=n;i++)s=s+i;printf("s=%d,i=%d\n",s,i);printf("a=%d,b=%d,c=%d\n",a,b,c);//printf("x=%d,y=%d,f=%f\n",x,y,f);returns;}Date:04五月2023第四章模块化程序设计授课要点函数的嵌套调用函数的递归调用函数的嵌套调用f1(){…f2();…}f2(){…f3();…}f3(){………}函数的嵌套调用举例1main(){inta=3,b=5,s;s=cal(a,b);printf(“%d〞,s);}intcal(intx,inty){intresult,s1,s2;s1=powl(x,y);s2=pow(y,x);result=s1+s2;returnresult;}intpow(intm,intn){inti,res=1;for(i=0;i<n;i++)res*=m;returnres;}求3+5。53函数的嵌套调用举例2自定义函数mymax2(),求出2个参数的最大值,然后定义函数mymax3(),调用mymax2()求出3个参数中的最大值,将值返回给主函数,输出该结果。函数首部为:floatmymax3(floatx,floaty,floatz)
模仿练习1、自定义函数mymax(),求出3个参数的最大值;自定义函数mymin(),求出3个参数的最小值;自定义函数mysub(),调用mymax()和mymin()求出3个参数的最大值与最小值的差;在主函数中调用mysub(),输出结果。 函数首部为:floatmymax(floatx,floaty,floatz) floatmymin(floatx,floaty,floatz)floatmysub(floatx,floaty,floatz)2、计算s=1k+2k+3k+……+Nk函数首部为:longf1(intn,intk) /*计算n的k次方*/
longf2(intn,intk) /*计算1到n的k次方之累加和*/
案例解答#defineK4#defineN5longf1(intn,intk) /*计算n的k次方*/{longpower=n;inti;for(i=1;i<k;i++)power*=n;returnpower;}longf2(intn,intk) /*计算1到n的k次方之累加和*/{longsum=0; inti;for(i=1;i<=n;i++)sum+=f1(i,k);returnsum;}main(){printf("Sumof%dpowersofintegersfrom1to%ld=",K,N);printf("%d\n",f2(N,K));}函数的递归调用C语言的函数调用允许直接或间接地调用该函数本身,称为函数的递归调用。含有直接或间接调用自己的函数称为递归函数。函数f调用函数f函数f1调用函数f2调用函数f1函数f2直接调用本身间接调用本身函数的递归调用举例用递归函数求4!4!=4*3!;3!=3*2!;2!=2*1!;1!=1;n!=n*(n-1)!1!=1函数的递归调用举例例:用递归函数求n!n!=n*(n-1)!intmyFac(intn){if(n==1)return1;//递归的结束条件
returnn*myFac(n-1);}myFac(n)就是求n!myFac(n-1)就是求(n-1)!函数的递归调用举例fac(3)*4fac(2)*3fac(1)*2reutrn(1)reutrn(1*2)reutrn(2*3)return(6*4)调用过程返回过程fac(4)reutrn(24)用递归函数求4!函数的递归调用举例例:用递归函数求n!的完整程序#include<stdio.h>intmyFac(intn);main(){ intf,n; scanf("%d",&n); f=myFac(n); printf("%d!=%d\n",n,f);}intmyFac(intn){ ints;if(n==1) s=1;//递归的结束条件
elses=n*myFac(n-1);returns;}单步调试,理解递归程序的执行流程函数的递归调用举例递归算法的组成:递归终止条件:当满足一定条件时,递归调用必须可以结束,否那么会无限地递归调用而导致程序无法结束。例如n!中当n=1时,令结果为1那么可以结束递归调用,否那么它将继续调用(0)!而无限继续下去。对于由多个通项表示的情况,那么需要给出最后一个递归调用的所有项的值。如an=an-1+an-2,要给出n=1时的结果以及n=2时结果才可以结束递归调用。递归表达式,如fac(n)=n*fac(n-1)函数的递归调用举例求下数列的第20项的值。1,2,3,5,8,13,21,34……a1=1;a2=2;a3=a1+a2;…an=an-1+an-2;
函数的递归调用举例求下数列的第20项的值。1,2,3,5,8,13,21,34……f(1)=1;f(2)=2;f(n)=f(n-1)+f(n-2);
函数的递归调用举例main(){inta;a=f(20);printf(“%d〞,a);}intf(intn){ints;if(n==1)s=1;elseif(n==2)s=2;elses=f(n-1)+f(n-2);returns;}
模仿练习递归函数的编写:1、用递归方法编写函数求n!。函数定义如下:intrecFac(intn)2、用递归函数的方法编写函数求斐波纳契〔Fibonacci〕数列的第20项的值。函数定义如下:intFib(intn)其中n为该数列中的第n项。1,1,2,3,5,8,13……模仿练习递归函数的编写:3、用递归算法,计算:1+2+3+…+n2222Date:04五月2023第四章模块化程序设计授课要点数组的概念一维数组的定义和引用一维数组的初始化和赋值数组元素的遍历
这样做好吗? 如果题目改为10个数、100个数该怎么做?
问题1:从键盘输入5个整数,逆序输出这5个数。main(){ inta0,a1,a2,a3,a4; scanf(“%d〞,&a0); scanf(“%d〞,&a1); scanf(“%d〞,&a2); scanf(“%d〞,&a3); scanf(“%d〞,&a4); printf(“%d\n〞,a4); printf(“%d\n〞,a3); printf(“%d\n〞,a2); printf(“%d\n〞,a1); printf(“%d\n〞,a0);}在“学生成绩管理系统〞中,我们需要对多个学生进行处理,比方100个学生,是否必须定义100个变量呢? Studentstu1; Studentstu2; Studentstu3; … Studentstu100;定义多个变量,在定义、输入、输出、处理的时候非常不方便。如果需要处理5000个学生的成绩,情况就更糟。问题2以上两个例子有什么共同之处?问题2具有相同的数据类型!数组的概念数组是一组变量,满足以下条件:
〔1〕具有相同的名字
〔2〕具有相同的数据类型
〔3〕在存储器中连续存放每个变量名字相同下标不同,称为“数组元素〞“数组名〞代表整个数组,其值是这组变量在内存中所占连续存储空间的首地址。数组要先定义后使用。数组名不能与相同作用域的其他变量名重名问题如何定义数组?如何为数组元素赋值?如何引用数组元素?一维数组的定义一维数组:只有一个下标的数组定义形式为:类型说明符数组名[常量表达式]例如:inta[10];说明数组名为a数组中每个元素的数据类型为int类型10个数组元素[]内是常量表达式,不能为变量1、定义100个整型变量2、定义50个浮点型变量3、定义1000个“学生〞变量,“学生〞类型定义如下:typedefstruct{ characNum[10]; characName[15]; ……}Student;模仿练习以下一维数组的定义是否正确?
inta[];#defineSIZE100floatb[SIZE];intn=10;charc[n];int2a[10];错误,没有指明数组的大小inta[10];正确,SIZE是常量,相当于floatb[100];错误,数组的大小不能是变量,应为inta[10];错误,数组名2a不符合标识符的命名规则数组元素的引用数组就是一组变量的集合,每个数组元素相当于是一个变量数组元素的表示:数组名[下标]如:inta[5];所定义的数组就是五个变量的集合,分别是: a[0],a[1],a[2],a[3],a[4]inta[N];下标的取值范围:0~N-1,其中N为数组的大小下标是整型值,可以是整型常量、整型变量或整型表达式如:a[i]a[3+1]a[2*i-1]注意:下标不能越界,否那么可能覆盖其他数据,造成严重后果定义数组之后,与普通变量一样,数组是沒有初始值的,各存储单元的值都是不定的。初始化:定义数组的同时赋初值语法:数据类型说明符数组名[长度]={数值1,数值2,…};
如:intdata[10]={0,1,2,3,4,5,6,7,8,9};一维数组的初始化1、定义并初始化一个float型数组,包含5个元素。2、定义并初始化一个字符型数组,包含6个元素。3、定义一个全0的整形数组,包含15个元素。模仿练习初始化本卷须知:(1)允许初始化一局部元素,其他没有赋初值的元素初值为0;inta[10]={0,1,2,3,4,5};相当于inta[10]={0,1,2,3,4,5,0,0,0,0};(2)允许初始化时省略数组的长度,数组的长度
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度特许连锁加盟合同:国内知名餐饮品牌加盟店拓展3篇
- 2024年度智能制造生产线建设与改造合同
- 二零二四年度水电并网项目工程设计合同2篇
- 二零二四年度水电施工质量检测合同2篇
- 二零二四年度光明区版权许可合同3篇
- 2024年度农产品供需采购合同2篇
- 2024年居间服务合同及报酬支付协议
- 二零二四年度保险合同保险责任及除外责任3篇
- 二零二四年度深圳净水器租赁合同3篇
- 二零二四年度房地产经纪合同标的详细阐述2篇
- 《1.3.2 第1课时 有理数的减法法则》课件(两套)
- 大学生职业规划大赛新能源汽车专业
- 含氟药物的特点通用课件
- 人力资源专员职位说明
- 《新版COSO框架》课件
- SHL在线测评题库顺丰
- 铁矿采选工程项目实施方案
- ESG领域的未来预测及机遇与挑战
- 某煤矿双轨运输水平大巷断面及爆破设计
- 《旅客运输心理学》期末试题及答案
- 3D打印在脊柱肿瘤应用
评论
0/150
提交评论