C语言排序学生成绩_第1页
C语言排序学生成绩_第2页
C语言排序学生成绩_第3页
C语言排序学生成绩_第4页
C语言排序学生成绩_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

项目四项目要点:数组的定义和使用数组的存储结构数组的输入输出

字符串处理函数学习目标:使用数组处理同一类型的大批数据使用字符数组处理字符串使用二维数组处理字符串

C语言程序设计C语言排序学生成绩共57页,您现在浏览的是第1页!工作任务导入工作任务一个班上50位学生参与考试,考了3门课程,现要求按总成绩的高低输出成绩单引导问题1、课程的成绩如何存储2、学生信息如何存储3、如何对成绩进行排序?C语言排序学生成绩共57页,您现在浏览的是第2页!任务1输入/输出多个学生一门课程的成绩main(){inti,x,s=0;

for(i=0;i<50;i++){scanf(“%d”,&x); s+=x;}printf(“%f\n”,s/50.0);}只用了三个变量就解决了问题,但数据没有保存。如果需要把成绩按从高到低的顺序全部打印出来,怎么办?计算50个学生成绩的平均分C语言排序学生成绩共57页,您现在浏览的是第3页!数组相同类型数据的集合。让一组同一类型的数据共用一个变量名,而不需要为每一个数据都定义一个名字。任务1输入/输出多个学生一门课程的成绩C语言排序学生成绩共57页,您现在浏览的是第4页!说明:常量表达式表示元素的个数,即数组长度。常量表达式中可以包括常量和符合常量,不能包含变量。任务1输入/输出多个学生一门课程的成绩4.1.1一维数组inti=5;inta[i]; /*数组长度为变量*/C语言排序学生成绩共57页,您现在浏览的是第5页!任务1输入/输出多个学生一门课程的成绩4.1.2一维数组的引用表示引用数组a中的第2个元素数组名[下标表达式];Exampleintn=5,a[20];a[1]a[n]a[3*n]表示引用数组a中的第6个元素表示引用数组a中的第16个元素若一个数组长度为n,其下标值范围是0~(n-1)C语言规定只能逐个引用数组元素而不能一次引用整个数组。C语言排序学生成绩共57页,您现在浏览的是第6页!任务1输入/输出多个学生一门课程的成绩4.1.2一维数组1、上例中,语句 average=sum/5.0;修改为 average=sum/5;结果如何?2、练习:从键盘输入5个学生的成绩,求出并输出分数最高的学生序号及最高成绩。。 C语言排序学生成绩共57页,您现在浏览的是第7页!inta[5]={0,1,2,3,4};inta[]={0,1,2,3,4};(1)在定义数组时,对全部数组元素赋初值此时可以省略数组的长度Example任务1输入/输出多个学生一门课程的成绩4.1.3一维数组的初始化C语言程序设计C语言排序学生成绩共57页,您现在浏览的是第8页!任务1输入/输出多个学生一门课程的成绩4.1.3一维数组的初始化(3)当初值的个数多于数组元素的个数时,编译出错inta[5]={1,2,3,4,5,6,7};ExampleC语言排序学生成绩共57页,您现在浏览的是第9页!任务1输入/输出多个学生一门课程的成绩4.1.3一维数组练习:一个班50位同学参加了一次C语言程序设计考试,现要输入全班同学的成绩,并按逆序输出。 C语言排序学生成绩共57页,您现在浏览的是第10页!两层循环结构外层循环每次把操作范围内最大的数放到最后位置内层循环每次把较大的数放到靠后的位置715693156739156379153679135679135569_____715693175693157693156793156793156739任务2排序学生成绩C语言排序学生成绩共57页,您现在浏览的是第11页!任务2排序学生成绩4.2.1冒泡法排序1、上例中,如果要按从大到小的顺序排序,该如何修改程序呢?2、练习:一个班50位同学参加了一次C语言程序设计考试,现要输入全班同学的成绩,并按从低到高排序并输出。 C语言排序学生成绩共57页,您现在浏览的是第12页!x[0][0]x[0][1]x[0][2]x[1][0]x[1][1]x[1][2]数据类型数组名[常量表达式1][常量表达式2];Examplefloatx[2][3];行列inta[3,4],b(3,4);intc[][],d(3)(4);任务3处理多位学生多门课程的成绩4.3.1二维数组二维数组的定义C语言排序学生成绩共57页,您现在浏览的是第13页!任务3处理多位学生多门课程的成绩练习:输入5个同学三门课程的成绩并输出,计算各门课的总分及平均分,并输出

。4.3.2二维数组的引用C语言排序学生成绩共57页,您现在浏览的是第14页!Exampleinta[2][3]={1,2,3,4,5,6};初始化后:

123456(2)按数组排列的顺序初始化任务3处理多位学生多门课程的成绩4.3.3二维数组的初始化C语言排序学生成绩共57页,您现在浏览的是第15页!用二层循环语句处理数组,通常外循环控制行,内循环控制列。Examplefor(i=0;i<3;i++)for(j=0;j<4;j++)a[i][j]=i+j;二维数组的赋值0123234345任务3处理多位学生多门课程的成绩4.3.3二维数组的初始化C语言排序学生成绩共57页,您现在浏览的是第16页!任务3处理多位学生多门课程的成绩练习:用初始化方法,把5个同学三门课程成绩存储在二维数组中,计算每位同学的总成绩和平均分,输出总分最高的同学的总成绩。

4.3.3二维数组初始化C语言排序学生成绩共57页,您现在浏览的是第17页!练习下列程序有哪些错误?请解释错误原因。(2)

main(){inti,j,a[4][]=1,2,3,4,5,6,7,8;for(i=0;i<4;i++)for(j=0;j<2;j++)printf(“%d”,a[i][j]);

}inta[][2]={1,2,3,4,5,6,7,8};C语言排序学生成绩共57页,您现在浏览的是第18页!任务4输入/输出学生4.4.1字符数组char数组名[常量表达式];1一维字符数组2二维字符数组char数组名[常量表达式1][常量表达式2];一维字符数组strExamplecharstr[10];chars1[3][5];二维字符数组s1C语言排序学生成绩共57页,您现在浏览的是第19页!1一维字符数组的初始化任务4输入/输出学生4.4.1字符数组Examplecharc[]={“China”};charc[]=“China”;初始化后:\0anihC(2)直接用字符串常量初始化C语言排序学生成绩共57页,您现在浏览的是第20页!任务4输入/输出学生4.4.1字符数组2二维字符数组的初始化Examplechara[3][10]={"basic","pascal","c"};(2)直接用字符串常量初始化\0c\0lacsap\0cisabC语言排序学生成绩共57页,您现在浏览的是第21页!任务4输入/输出学生4.4.2字符串字符串是用双引号括起来的若干有效字符序列,字符串可以包括字母、数字、转义字符等,C语言中,将字符串作为字符数组来处理。Examplecharstr[10]="Happy";chars1[3][5]={{“abc”},{“def”},{“ghi”}};C语言排序学生成绩共57页,您现在浏览的是第22页!练习:1、分析以下程序,其运行结果是什么?

voidmain(){ charc[5]={’a’,’b’,’\0’,’c’,’\0’}; printf("%s\n",c);}

2、有字符串“abcAbcDEFDef”,把该字符串中的小写字母转换为大写字母后输出。

任务4输入/输出学生4.4.2字符串C语言排序学生成绩共57页,您现在浏览的是第23页!任务4输入/输出学生4.4.3字符串输入/输出2.字符数组整体输入和输出用格式输入输出函数scanf()和printf(),使用“%s”格式符,输入和输出字符串。(1)一维字符数组scanf(“%s”,字符数组名);printf(“%s”,字符数组名);Examplechars1[10];scanf(“%s”,s1);printf(“%s”,s1);不用加&C语言排序学生成绩共57页,您现在浏览的是第24页!任务4输入/输出学生4.4.3字符串输入/输出-举例main(){charss[3][10];inti; for(i=0;i<3;i++) scanf(“%s”,ss[i]); for(i=0;i<3;i++) printf(“%s”,ss[i]);}注意:在scanf()和printf的“%s”是直接控制字符串的,只要求某个字符串的起始地址作为参数。输入时,scanf()会自动把用户输入的回车符、空格或制表符转换成“\0”加在字符串的末尾,printf()则在遇到“\0”就结束输出,但不能自动换行。main(){

charstr[14];scanf(“%s”,str);printf(“\n%s”,str);printf(“string”);}

输入:Howareyou?↙输出:Howareyou?输入:Howareyou?↙输出:HowstringC语言排序学生成绩共57页,您现在浏览的是第25页!任务5任务拓展4.5.1字符串处理函数①程序中如果调用下面介绍的4个字符串处理函数,在程序的开始应该写预处理命令:

#include<string.h>

②在字符串处理函数中,凡是用数组名或字符串首地址作参数的地方,都可以用指针变量作参数。指针变量的概念在第6章介绍。说明:C语言排序学生成绩共57页,您现在浏览的是第26页!任务5任务拓展4.5.1字符串处理函数1.求字符串长度函数strlen()Examplecharstr[10]="China";printf("%d",strlen(str));或printf("%d",strlen("China"));输出结果:5C语言排序学生成绩共57页,您现在浏览的是第27页!任务5任务拓展4.5.1字符串处理函数2.字符串复制函数strcpy()Examplechars1[10],s2[]="Beijing";strcpy(s1,s2);或:strcpy(s1,"Beijing");Beijing\0s1的结果s1必须足够大strcpy(s1,s2,3);表示将s2中的前3个字符复制到s1中。C语言排序学生成绩共57页,您现在浏览的是第28页!任务5任务拓展4.5.1字符串处理函数3.字符串比较函数strcmp()

\0dcba\0edcbAstr1str2strcmp(str1,str2)>0

\0cba\0edcbastr1str2strcmp(str1,str2)<0C语言排序学生成绩共57页,您现在浏览的是第29页!任务5任务拓展4.5.1字符串处理函数4.字符串连接函数strcat()Examplecharstr1[21]="beijingand";charstr2[]="shanghai";printf("%s",strcat(str1,str2));输出结果:beijingandshanghai\0iahgnahsdnagnijiebstr1必须足够大C语言排序学生成绩共57页,您现在浏览的是第30页!一维数组的定义数据类型数组名[常量表达式];数组元素的数据类型遵循C语言标识符规则数组长度几个数组元素任务1输入/输出多个学生一门课程的成绩4.1.1一维数组例如:inta[5];C语言排序学生成绩共57页,您现在浏览的是第31页!任务1输入/输出多个学生一门课程的成绩4.1.1一维数组以下对一维整型数组a的正确定义的是:A、inta(10) B、intn=10,a[n]C、intn; inta[n];D、#defineSIZE10scanf(“%d”,%n);inta[SIZE];

C语言排序学生成绩共57页,您现在浏览的是第32页!任务1输入/输出多个学生一门课程的成绩4.1.2一维数组的引用输入5个学生的数学成绩,计算平均分,将平均分输出到屏幕上。voidmain(){ inti,mathScore[5],sum=0;floataverage; for(i=0;i<5;i++) { scanf("%d",&mathScore[i]); } for(i=0;i<5;i++) { sum=sum+mathScore[i]; } average=sum/5.0; printf("%f",average);}数组元素的地址也是通过“&”运算符得到的。C语言排序学生成绩共57页,您现在浏览的是第33页!数组的赋值只能逐个对数组元素赋值,不能直接对数组名赋值。因数组在内存占一片连续的存储空间,可用循环语句处理数组。for(i=0;i<5;i++)a[i]=(i+1)*100;Examplefor(i=0;i<100;i++)a[i]=i+1;Example任务1输入/输出多个学生一门课程的成绩4.1.2一维数组的引用C语言排序学生成绩共57页,您现在浏览的是第34页!任务1输入/输出多个学生一门课程的成绩4.1.3一维数组的初始化(2)在定义数组时,对部分数组元素赋初值inta[5]={1,2,3};系统为其余元素赋0ExampleC语言程序设计C语言排序学生成绩共57页,您现在浏览的是第35页!任务1输入/输出多个学生一门课程的成绩4.1.2一维数组的引用例:用初始化方法,把10个学生的数学成绩存储在数组中,再从键盘输入一个考分,查找该分数是否在数组中,如果是,则输出它是第几名学生的成绩。。voidmain(){ inti,a[10]={56,65,76,68,92,37,87,51,73,48}; intfind; printf("请输入要查找的分数:\n"); scanf("%d",&find); for(i=0;i<10;i++) { if(a[i]==find) /*查找到了*/ {printf("%d",i+1);break; }} }C语言排序学生成绩共57页,您现在浏览的是第36页!任务2排序学生成绩任务1中已经输入了50个同学的成绩到数组中,现在需要确定如何对学生成绩从低到高进行排序。C语言排序学生成绩共57页,您现在浏览的是第37页!有数组a,其元素值为7、1、5、6、9、3,现要把该数组按从小到大的顺序排列并输出。main(){inta[]={7,1,5,6,9,3};inti,j,t;printf(“thesortednembers:\n”);

for(i=0;i<6;i++)printf(“%5d\n”,x[i]);}for(i=0;i<6-1;i++) for(j=0;j<6-1-i;j++)if(x[j]>x[j+1]){t=x[j];x[j]=x[j+1];x[j+1]=t;}任务2排序学生成绩C语言排序学生成绩共57页,您现在浏览的是第38页!任务3处理多位学生多门课程的成绩一个班上50位学生参与考试,考了3门课程,现要求按总成绩的高低输出成绩单。如果仅仅使用一维数组进行上述处理,是很困难的,此时需要使用二维数组。C语言排序学生成绩共57页,您现在浏览的是第39页!数组名[行下标][列下标]Exampleinta[3][4];a[0][0]=3;a[0][1]=a[0][0]+10;a[3][4]=3;a[1,2]=1;引用:/*下标越界*//*a[1][2]=1;*/任务3处理多位学生多门课程的成绩4.3.2二维数组的引用C语言排序学生成绩共57页,您现在浏览的是第40页!(1)分行对二维数组初始化Exampleinta[2][3]={{1,2,3},{4,5,6}};初始化后:

123456任务3处理多位学生多门课程的成绩4.3.3二维数组的初始化C语言排序学生成绩共57页,您现在浏览的是第41页!任务3处理多位学生多门课程的成绩4.3.3二维数组的初始化(3)对全部数组元素初始化Exampleinta[][3]={1,2,3,4,5,6};初始化后:

123456省略行号C语言排序学生成绩共57页,您现在浏览的是第42页!二维数组的输入输出Exampleintb[3][4],i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(“%d”,&b[i][j]);for(i=0;i<3;i++)for(j=0;j<4;j++)printf(“%5d”,b[i][j]);任务3处理多位学生多门课程的成绩4.3.3二维数组的初始化C语言排序学生成绩共57页,您现在浏览的是第43页!练习下列程序有哪些错误?请解释错误原因。(1)

main(){intx,a[10];for(x=0;x<=10;x++)

scanf(“%d”,&a[x]);

}

x<10C语言排序学生成绩共57页,您现在浏览的是第44页!任务4输入/输出学生一个班上50位学生参与考试,需要输入/输出学生的姓名信息。这个任务需要解决多个字符的存放问题。C语言排序学生成绩共57页,您现在浏览的是第45页!(1)用字符常数初始化Examplecharc[]={‘C’,’h’,’i’,’n’,’a’,’\0’};初始化后:1一维字符数组的初始化\0anihC任务4输入/输出学生4.4.1字符数组C语言排序学生成绩共57页,您现在浏览的是第46页!任务4输入/输出学生4.4.1字符数组(1)用字符常数初始化ExamplecharLan[5][8]=

{{‘B’,‘A’,‘S’,‘I’,‘C’,‘\0’},{‘F’,‘O’,‘R’,‘T’,‘R’,‘A’,‘N’,‘\0’},{‘P’,‘A’,‘S’,‘C’,‘A’,‘L’,‘\0’},{‘C’,‘\0’},{‘J’,‘A’,‘V’,‘A’,‘\0’}};2二维字符数组的初始化每行存放一个字符串C语言排序学生成绩共57页,您现在浏览的是第47页!练习:1、给字符数组初始化为“Happy!”,并输出各个数组元素。2、输出一个钻石图形。如图所示。********

任务4输入/输出学生4.4.1字符数组C语言排序学生成绩共57页,您现在浏览的是第48页!任务4输入/输出学生4.4.2字符串C语言规定了一个“字符串结束标志”,以字符‘\0’代表。在处理字符数组的过程中,一旦遇到结束符‘\0’,就表示已达到字符串末尾。数组的长度是6,而不是5。

Examplecharstr[10]=“Happy”;注意:每个字符串末尾都有结束符“\0”,它要占1个字节的存储单元。C语言排序学生成绩共57页,您现在浏览的是第49页!任务4输入/输出学生4.4.3字符串输入/输出1.字符数组的元素逐个输入和输出用格式输入输出函数scanf()和printf(),使用“%c”格式符,或用字符输入输出函数getchar()和putchar()。每次输入或输出一个字符。for(i=0;i<10;i++)scanf(“%c”,&c[i]);for(i=0;i<10;i++)c[i]=getchar();注:getchar()和putchar()定义在标题文件“stdio.h”中,

温馨提示

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

最新文档

评论

0/150

提交评论