C语言程序设计C语言程序设计-6-1课件_第1页
C语言程序设计C语言程序设计-6-1课件_第2页
C语言程序设计C语言程序设计-6-1课件_第3页
C语言程序设计C语言程序设计-6-1课件_第4页
C语言程序设计C语言程序设计-6-1课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计项目三成绩排排坐任务1:成绩统计及菜单设计要求:一个班中有多名同学,每位同学每学期有多门课程的成绩,分别完成对每位同学和多门课程的成绩统计工作,比如说求取总分和平均分,然后排序,并以矩阵的行列方式打印出来。解决问题需要的知识点:学生成绩排名、菜单设计——一维数组应用引例:某位同学大学期间成绩平均分。1数据排序(冒泡法排序、选择法排序)2引例1:成绩平均分。问题分析及解决方案:假设某位同学共有10门课程成绩,则需要将成绩进行累加后即可求其平均分。要求最后输出10门课程成绩及平均分。项目三成绩排排坐任务1:成绩统计及菜单设计

——

第6章数组章节主要内容6.1一维数组6.2二维数组6.3字符数组和字符串提出问题:在体育课上,20个学生正在测试100米,老师把学生成绩一一记录下来。现在将学生由快到慢排序,你能帮忙排一排?6.1一维数组

只有一个下标的数组元素组成的数组通常称为一维数组1、一维数组的定义定义方式:

数据类型数组名[常量表达式];元素的数据类型合法标识符表示元素个数下标从0开始例:inta[6];定义了一个名为a的一维数组。a有6个元素,分别为a[0],a[1],a[2],……,a[5]。每个元素只能放int型数据。系统为此数组分配6个连续的存储单元(整型,每2单元字节)。它们是a[0],a[1],a[2],……,a[5],以后可以按此名字引用这些单元(即使用这些变量)。数组名表示内存首地址,是地址常量a[0]0145a[1]a[2]a[3]a[4]a[5]23a例:实例。#include<stdio.h>voidmain(void){ inti; inta[10];/*定义一个一维数组a*/ for(i=0;i<10;i++)/*通过循环对数组a的10个元素赋值*/ a[i]=2*i;/*数组的引用*/ for(i=0;i<10;i++)/*通过循环输出10个元素的值*/ printf("%4d",a[i]);/*数组的引用*/}2、一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式:数组名[下标]其中:下标可以是C任意合法的有确定值的表达式,但其值必须是整数下标的范围应在不小于下界,不大于上界,否则操作是非常危险的例:inti=15;intdata[i];/*×不能用变量定义数组维数*/例:intdata[5];data[5]=10;/*×C语言对数组不作越界检查*/例:分析下面程序的运行结果。运行结果:001123344#include<stdio.h>voidmain(){inti; inta[10]; for(i=0;i<5;i++) {a[2*i]=i;/*数组元素的引用*/ a[2*i+1]=a[2*i];/*数组元素的引用*/ } for(i=0;i<10;i++) printf("%4d",a[i]);/*数组元素的引用*/}说明:数组不初始化,其元素值为随机数对static数组元素不赋初值,系统会自动赋以0值3、一维数组的初始化初始化:在定义数组的同时,为数组元素赋初值(在编译阶段使之得到初值)例:inta[5]={1,2,3,4,5};等价于:inta[5];a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;当给全部数组元素赋初值时,可不指定数组长度例:inta[5]={6,2,3};等价于:inta[5];a[0]=6;a[1]=2;a[2]=3;a[3]=0;a[4]=0;例:inta[3]={6,2,3,5,1};/*×元素的个数不能大于数组长度*/例:

staticinta[5];等价于:inta[5];a[0]=0;a[1]=0;a[2]=0;a[3]=0;a[4]=0;只给部分数组元素赋初值例:

inta[6]={1,2,3,4,5,6};例:

inta[]={1,2,3,4,5,6};/*编译时系统根据初值个数确定数组长度*/未赋值的部分数组元素系统自动赋0值4、一维数组的应用例:现有10个员工的当月奖金,分别是100,200.6,300,120,480.2,20,310,80.5,90,210,编程求出最高奖金与平均奖。#include<stdio.h>voidmain(void){floata[10]={100,200.6,300,120,480.2,20,310,80.5,90,210};floatmax,average,sum;inti;max=a[0];sum=0;for(i=0;i<10;i++){if(a[i]>max)max=a[i];sum=sum+a[i];}average=sum/10;printf("max=%6.2f,average=%6.2f",max,average);}sum=480.20,average=191.13运行结果:例:用数组来处理求Fibonacci数列问题。Fibonacci数列的前两项都为1,以后各项是前两项之和,编程求出Fibonacci数列的前20项。#include<stdio.h>main(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%10d",f[i]);}}f[0]f[1]f[2]f[3]f[4]f[5]f[19]……...1101452319……...……...000001122123332355项目三成绩排排坐任务1:成绩统计及菜单设计要求:一个班中有多名同学,每位同学每学期有多门课程的成绩,分别完成对每位同学和多门课程的成绩统计工作,比如说求取总分和平均分,然后排序,并以矩阵的行列方式打印出来。解决问题需要的知识点:学生及课程成绩统计——二维数组应用引例:数据统计。112461579

8233

2517124622157931

823334

25172437

39

35

111

for(i=0;i<5;i++){for(j=0;j<4;j++)printf("%5d\t",x[i][j]);printf("\n");}}引例1:二维数组的数据求和。#include<stdio.h>voidmain(){intx[5][4],i,j;for(i=0;i<4;i++)for(j=0;j<3;j++)scanf("%d",&x[i][j]);for(i=0;i<3;i++)x[4][i]=0;for(j=0;j<5;j++)x[j][3]=0;for(i=0;i<4;i++)for(j=0;j<3;j++){x[i][3]+=x[i][j];x[4][j]+=x[i][j];x[4][3]+=x[i][j];}为前4行前3列元素赋值为第5行清0为第4列清0输出全部元素每4个一行求数组每行元素之和,并存入新数组相应行的最后一个元素中求原数组每列元素之和,并存入新数组相应列的最后一个元素中求原数组所有元素之和,并存入新数组的最后一个元素中项目三成绩排排坐任务1:成绩统计及菜单

——

第6章数组章节主要内容6.1一维数组6.2二维数组6.3字符数组和字符串6.2二维数组

有两个下标的数组元素组成的数组称为二维数组1、二维数组的定义定义形式:

数据类型数组名[常量表达式1][常量表达式2];数组元素的存放顺序二维数组:按行序优先例inta[3][4];floatb[2][5];inta[3,4];

(×)a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]行数元素个数=行数*列数例:inta[3][2]理解成矩阵存储形式a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]a[0][0]014523列数例:inta[3][4];a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[0]a[1]a[2]行名014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]67101189a[0]a[1]a[2]二维数组理解二维数组a是由3个元素组成每个元素a[i]由包含4个元素的一维数组组成a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]引用形式为:

数组名[下标][下标]几点说明:与一维数组一样,通过对二维数组元素的引用,二维数组元素就可以像普通数据一样进行赋值、运算、输入及输出操作。二维数组的两个下标可以是常量或有确定值的变量、表达式。在引用数组元素时,要注意下标的值应该在已定义的数组的范围内,不过超出范围没有语法错误,但可能会破坏数据,比较危险。2、二维数组元素的引用分行初始化(每行元素加花括号):对所有元素初始化对部分元素初始化按元素排列顺序初始化对所有元素初始化对部分元素初始化缺省第一维下标对所有元素初始化对部分元素初始化3、二维数组元素的初始化缺省第一维下标的计算方法:内有行括号时,第一维下标与括号的个数一致内无行括号时,拿元素的个数整除第二维下标,若余数不为0,第一维下标为商数加1,否则取商数初始化时,但凡未赋值的部分元素系统自动赋0值例:inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化例:inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化例:inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化例:inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化例:inta[][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456第一维长度省略全部初始化例:inta[][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456第一维长度省略分行全部初始化例:inta[][3]={{1},{4,5}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]100450第一维长度省略分行部分初始化例:inta[][3]={1,2,3,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123400第一维长度省略部分初始化4、二维数组的应用例:将一个二维数组行与列互换,存到另一个二维数组中。如,a=123456b=

456#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j;printf(“数组a是:\n”);for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%4d",a[i][j]);b[j][i]=a[i][j];}printf("\n");/*每输完一行进行换行*/}printf("数组b是:\n");for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%4d",b[i][j]);printf("\n");}}将a的i行j列元素值赋值给b的j行i列元素例:有一个3×4矩阵a(如下),编程求出最大的元素值及其所在的行号与列号。a=5122021

9221832

411627#include<stdio.h>voidmain(){inti,j,row=0,colum=0,max;inta[3][4]={{5,12,20,21},{9,22,18,32},{4,1,16,27}};max=a[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}printf("最大的元素值是:%d,行号为:%d,列号为:%d\n",max,row,colum);}运行结果:最大的元素值是:32,行号为:1,列号为:3项目三成绩排排坐任务1:成绩统计及菜单设计

——

第6章数组章节主要内容6.1一维数组6.2二维数组6.3字符数组和字符串引例:字符统计。1字符串操作。2引例1:随意输入15个字符,统计大写字母和小写字母的个数,并将这15个字符逆序输出。#include<stdio.h>voidmain(){charc[15];inti,m=0,n=0;printf("请任意输入15个字符:\n");

for(i=0;i<15;i++){scanf("%c",&c[i]);if(c[i]>=‘a’&&c[i]<=‘z’)m++;if(c[i]>=‘A’&&c[i]<=‘Z’)n++;}printf("小写字母有%d个,大写字母有%d个",m,n);

for(i=14;i>=0;i--)printf("%c",c[i]);}引例2:输入两个字符串(每个字符串长度不超过10),将两字符串连接起来并输出。#include<stdio.h>voidmain(){charstr1[21],str2[11];inti,j=0;printf("请输入第一个字符串:\n");gets(str1);printf("请输入第二个字符串:\n");gets(str2);i=strlen(str1);while(str2[j]!=‘\0’){str1[i]=str2[j];i++;j++;}str1[i]=‘\0’;puts(str1);}1、字符数组的定义用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符字符数组的定义方法与前面类似6.3字符数组和字符串2、字符数组的初始化逐个字符赋值用字符串常量例:charc[10],ch[3][4];例:charc[6]={'t','u','r','b','o','c'};c[0]c[1]c[2]c[3]c[4]c[5]turboc逐个字符赋值例:charc[6]={'c','+','+'};逐个字符赋值,不足部分系统自动赋空字符,即'\0'。c[0]c[1]c[2]c[3]c[4]c[5]c++\0\0\0例:charc[8]={"TurboC"};charc[8]="TurboC";用字符串时,要考虑字符串的结束标志'\0’。若字符串的字符数为N个,字符数组的元素个数最少需要N+1个c[0]c[1]c[2]c[3]c[4]c[5]Turboc[6]c[7]C\0例:charc[]="TurboC";字符数组的长度刚好满足字符串需要时,可以省去长度。c[0]c[1]c[2]c[3]c[4]c[5]Turboc[6]c[7]C\0例:charc[8]="C++";不足部分系统自动赋空字符,即'\0'。c[0]c[1]c[2]c[3]c[4]c[5]C++\0\0\0c[6]c[7]\0\0

可以用二维字符数组存储多个字符串,一行存放一个字符串。例如:charc[3][8]={"TruboC",“C++",“C#"};

或:charc[3][8]={{'T','r','u','b','o','','C'},{'C','+','+'},{'C','#'}};c[0][0]c[0][1]c[0][2]c[0][3]c[0][4]c[0][5]Turbo

c[0][6]c[0][7]C\0c[1][0]c[1][1]c[1][2]c[1][3]c[1][4]c[1][5]C++\0\0\0c[1][6]c[1][7]\0\0c[2][0]c[2][1]c[2][2]c[2][3]c[2][4]c[2][5]C#\0\0\0\0c[2][6]c[2][7]\0\0逐字符分行初始化分行用字符串初始化字符串字符串及其结束标志无字符串变量,用字符数组处理字符串字符串结束标志:‘\0’用字符串对字符数组初始化时,系统会自动添加结束标志‘\0’例:“hello”共5个字符,在内存占6个字节,字符串长度5

hello

\01041011081081110内存存放字符ASCII码与前面数值型数组引用相似,引用一个元素,得到一个字符例:任意输入10个英文字母,用大写字母输出。3、字符数组的引用#include<stdio.h>voidmain(){charc[10];inti;printf("请输入10个英文字母:\n");for(i=0;i<10;i++){scanf("%c",&c[i]);if(c[i]>=‘a’&&c[i]<=‘z’)c[i]=c[i]-32;}for(i=0;i<10;i++)printf("%c",c[i]);}逐个字符操作用循环逐个字符I/O:在scanf与printf函数中使用格式符“%c”#include<stdio.h>void

main(){charstr[5];inti;for(i=0;i<5;i++)scanf(“%c”,&str[i]);for(i=0;i<5;i++)printf(“%c”,str[i]);}逐个字符输入,遇回车结束,空格作为字符不会自动加‘\0’4、字符数组的输入输出逐个字符输出,循环控制结束逐个字符I/O:用getchar与putchar函数#include<stdio.h>void

main(){charstr[5];inti;for(i=0;i<5;i++)str[i]=getchar();for(i=0;i<5;i++)putchar(str[i]);}逐个字符输入,遇回车结束,空格作为字符不会自动加‘\0’逐个字符输出,循环控制结束整个字符串I/O:在scanf与printf函数中使用格式符“%s”例:用%s#include<stdio.h>voidmain(){charstr[5];scanf(“%s”,str);printf(“%s”,str);}用字符数组名,输出遇‘\0’结束用字符数组名,不要加&输入串长度<数组维数遇空格或回车结束自动加‘\0’常用的字符串处理函数包含在头文件

温馨提示

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

评论

0/150

提交评论