1、2023-8-2022023-8-203l一个人一个人N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?l一个班一个班N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?.2023-8-204C语言语言数据类型数据类型 数组名数组名常量表达式常量表达式;2023-8-2052023-8-206score0score1score2score3score491.534.567.572.084.0低地址低地址高地址高地址score数组数组2023-8-2072023-8-208 下标从下标从0开始(下界为开始(下界为0),数组的最大下标),数组的最大下标(上界)是数组长度减(上界)是数组长度减
2、1。例如:例如:int a10;scanf(%d,&a10);/*下标越界下标越界*/C编译系统不做越界检查,如果引用的数组元素编译系统不做越界检查,如果引用的数组元素超出数组范围会破坏其他变量的值。超出数组范围会破坏其他变量的值。2023-8-209 是是引用引用数组元素数组元素时,时,VC+系统根据数系统根据数组的组的和和数,计算出该元素数,计算出该元素的实际地址,取出的实际地址,取出该该地址地址的的进行进行操作。操作。如引用如引用 score2:(1)计算计算 2000+2*4=2008(2)取出取出2008的内容的内容2000H2004H2008H200CH218CHscore0sco
3、re1score2score3score491.534.567.572.084.02023-8-2010初始化:在定义数组时给数组元素赋初值。初始化:在定义数组时给数组元素赋初值。1在定义数组时,对全部数组元素赋初值在定义数组时,对全部数组元素赋初值 例如:例如:int a5=0,1,2,3,4;此时可以省略数组长度,例如:此时可以省略数组长度,例如:int a=0,1,2,3,4;2在定义数组时,对部分数组元素赋初值在定义数组时,对部分数组元素赋初值 例如:例如:int a5=1,2,3;系统为其余元素赋系统为其余元素赋 0。3当初值的个数多于数组元素的个数时,编译出错当初值的个数多于数组元
4、素的个数时,编译出错 例如:例如:int a5=0,1,2,3,4,5;2023-8-2011【例例】#define N 10main()int i;float scoreN;for(i=0;i=0;i-)printf(%6.1f,scorei);运行情况如下:运行情况如下:67 74 89 92 34 67 83 95 73 78 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.02023-8-2012l求最大求最大/小值采用打擂台的方法。小值采用打擂台的方法。l定义一维数组定义一维数组a存放被比较的数。存放被比较的数。l定义变量定义变量max
5、:最大值,:最大值,min:最小值,:最小值,k:最大值下标:最大值下标,j:最小值下标:最小值下标。l各数依次与擂主进行比较,各数依次与擂主进行比较,若若aimax 则则:max=ai;k=i;否则判断否则判断:若若aimin 则则:min=ai;j=i;l当所有的数都比较完之后,将当所有的数都比较完之后,将aj=max;k=min;l输出输出a数组。数组。2023-8-2013程序运行情况如下:程序运行情况如下:5 7 2 3 1 5 1 2 3 72023-8-2014 2023-8-20152023-8-2016 冒泡法排序冒泡法排序for(i=0;iN;i+)输入输入ai for(j
6、=1;jN;j+)for(i=0;iai+1 T F ai与与ai+1交换交换输出输出a0aN-12023-8-2017/*控制比较的趟数控制比较的趟数*/*两两比较的次数两两比较的次数*/程序运行情况如下:程序运行情况如下:3 7 5 6 8 0 0 3 5 6 7 82023-8-20182023-8-2019for(i=0;iN-1;i+)/*确定基准位置确定基准位置*/for(j=i+1;jN;j+)if(ajai)t=aj;aj=ai;ai=t;程序运行情况如下:程序运行情况如下:96 78 65 86 40 The sorted numbers:40 65 78 86 962023
7、-8-20202023-8-2021数据类型数据类型 数组名常量表达式数组名常量表达式1常量表达式常量表达式2;的定义的定义2023-8-2022x00 x01x02x10 x11x12元素元素的的2023-8-2023x0是数组名,是元素是数组名,是元素x00的地址的地址x1是数组名,是数组名,是元素是元素x10的地址的地址二维数组可看作是一种特殊的一维数组二维数组可看作是一种特殊的一维数组2023-8-2024a34=3;/*下标越界下标越界*/a1,2=1;/*应写成应写成 a12=1;*/例:例:int a34;a00=3;a01=a00+10;2023-8-2025例:例:int a
8、23=1,2,3,4,5,6例例:int a23=1,2,3,4,5,6;例:例:int a23=1,4;初始化后结果:初始化后结果:1 0 0 4 0 02023-8-20262023-8-20272023-8-2028main()int a43,i,j,k;for(i=0;i4;i+)for(j=0;j3;j+)scanf(%d,&aij);for(i=0;i4;i+)printf(n);for(j=0;j3;j+)printf(%dt,aij);printf(n);程序运行情况如下:程序运行情况如下:1 2 3 4 5 6 7 8 9 10 11 12 1 2 34 5 67 8 910
9、 11 122023-8-2029max=|a00|,row=0,colum=0 for(i=0;iN;i+)for(j=0;jmax T F max=|aij|row=i colum=j输出绝对值输出绝对值最大的元素及行列下标最大的元素及行列下标2023-8-2030程序运行情况如下:程序运行情况如下:34 56 12 67 23 12 67 43 98 54 65 45 66 16 24 37 83 25 64 19 max=98,row=1,colum=32023-8-20316.3 字符数组与字符串字符数组与字符串6.3.1 6.3.1 基本概念基本概念不是字符串不是字符串2023-8
10、-20322023-8-2033不是字符串不是字符串2023-8-20342023-8-2035s10s113思考:哪个数组存放的是字符串思考:哪个数组存放的是字符串2023-8-2036【例例】对字符数组对字符数组c1赋赋 09,对字符数,对字符数组组c2赋赋 AZ,然后输出,然后输出c1和和c2数组中的数组中的数据。数据。可以为可以为数组元素数组元素赋值,也可以输入赋值,也可以输入/输出输出元元素的值。素的值。2023-8-2037main()char c110,c226;int i;for(i=0;i10;i+)c1i=i+48;for(i=0;i26;i+)c2i=i+A;for(i=
11、0;i10;i+)printf(%c,c1i);printf(n);for(i=0;i0)printf(s1s2);else printf(s1s2);思考:若有语句if(s1=s2)printf(s1=s2);比较的是什么?2023-8-2048测试字符串长度。函数值就是测试字符串长度。函数值就是strstr中字符的中字符的个数。个数。思考:字符串China和str数组在内存中各占几个字节?char str10=China;printf(%d,strlen(str);或或printf(%d,strlen(China);2023-8-20492023/8/20C语言程序设计教程49#inclu
12、de#includemain()int len1,len2 char s180,s280;gets(s1);gets(s2);if(strcmp(s1,s2)!=0)if(strlen(s1)strlen(s2)strcat(s1,s2);puts(s1);else strcat(s2,s1);puts(s2);2023-8-2050用用gets()函数读字符串,然后判断每一个字符函数读字符串,然后判断每一个字符是否是是否是数字数字、空格空格、大小写字母大小写字母或或其他字符其他字符,用循,用循环实现。环实现。此题要求此题要求分别分别统计统计每个数字每个数字出现的次数,而出现的次数,而不是统计
13、数字出现的总次数。不是统计数字出现的总次数。用一个一维整型数组存放每个数字出现的次数。用一个一维整型数组存放每个数字出现的次数。2023-8-2051 char s80;int i,sp=0,oth=0,lett=0;int dig10=0;gets(s);for(i=0;si!=0;i+)if(si=0&si=A&si=a&si=z)lett+;else oth+;for(i=0;i10;i+)printf(%d:%d个个 ,i,digi);printf(nspace:%d letter:%d other:%dn,sp,lett,oth);程序运行情况如下程序运行情况如下:China 194
14、9.10.12004.10.10:4个 1:5个 2:2个 3:0个 4:1个 5:0个 6:0个 7:0个 8:0个 9:2个space:1 letter:5 other:52023-8-20522023/8/20C语言程序设计教程52将数将数n按位对按位对10求模,求出每一位数字并按顺序求模,求出每一位数字并按顺序保存在数组保存在数组digit中;中;根据回文数的特点,将分解出的数字序列的左、根据回文数的特点,将分解出的数字序列的左、右两端数字两两比较,并向中间靠拢;右两端数字两两比较,并向中间靠拢;用用i,k两个变量记录两端数字序号,若直到位置重两个变量记录两端数字序号,若直到位置重叠时
15、各位数字都相等,则为回文数,否则,不是。叠时各位数字都相等,则为回文数,否则,不是。2023-8-2053#include stdio.h#include string.hmain()int i,k,digit10;long n,m;puts(输入一个正整数输入一个正整数:);scanf(%ld,&n);m=n;k=0;do digitk+=m%10;m/=10;while(m!=0);k-;for(i=0;ik;i+,k-)if(digiti!=digitk)break;if(ik)printf(%ld 不是一个回文数不是一个回文数,n);else printf(%ld 是一个回文数是一个回
16、文数,n);2023-8-2054Illegalm onth.0Decen m ber 0将将1212个英文月份以字符串的形式存放到个英文月份以字符串的形式存放到month1315month1315中,一行存放一个字符串。中,一行存放一个字符串。2023-8-2055main()char month 15=Illegal month.,January,February,March,April,May,June,July,August,September,October,Novenber,December;int m;printf(nInput month:);scanf(%d,&m);prin
17、tf(%d:%sn,m,(m12)?month0:monthm);2023-8-2056从键盘输入从键盘输入N N个国家名称存放到一个二维个国家名称存放到一个二维字符数组中,然后用字符数组中,然后用选择法选择法对这对这N N个字符串个字符串排序排序。:2023-8-2057选择法排序选择法排序2023-8-2058例例:输入一串字符,统计其中有多少个单词,单词之间输入一串字符,统计其中有多少个单词,单词之间用空格分隔开。用空格分隔开。_ _ _ _ t h i s_i s_a _t e s t _ _ _ O K空格空格 没有单词没有单词 word=0 记数记数 num=0空格空格 没有单词没
18、有单词 word=0 记数记数 num=0空格空格 没有单词没有单词 word=0 记数记数 num=0空格空格 没有单词没有单词 word=0 记数记数 num=0t 有单词有单词 word=1 记数记数 num=1h 有单词有单词 word=1 记数记数 num=1i 有单词有单词 word=1 记数记数 num=1s 有单词有单词 word=1 记数记数 num=1空格空格 已有单词已有单词 word=0 记数记数 num=1i 有单词有单词 word=1 记数记数 num=2s 有单词有单词 word=1 记数记数 num=2空格空格 已有单词已有单词 word=0 记数记数 num=
19、2a 有单词有单词 word=1 记数记数 num=3空格空格 已有单词已有单词 word=0 记数记数 num=3t 有单词有单词 word=1 记数记数 num=4e 有单词有单词 word=1 记数记数 num=4s 有单词有单词 word=1 记数记数 num=4t 有单词有单词 word=1 记数记数 num=4空格空格 已有单词已有单词 word=0 记数记数 num=4空格空格 已有单词已有单词 word=0 记数记数 num=4空格空格 已有单词已有单词 word=0 记数记数 num=4O 有单词有单词 word=1 记数记数 num=5K 有单词有单词 word=1 记数记
20、数 num=50 结束。有单词结束。有单词 word=1 记数记数 num=5 main()char str81;int i,num=0,word=0;gets(str);for(i=0;str i!=0;i+)if(str i=)word=0;else if(word=0)word=1;num+;printf(“There are%d words in the line.n”,num);Str字符数组长度要足够长字符数组长度要足够长gets(str);for(i=0;str i!=0;i+)if(str i=)word=0;else if(word=0)word=1;num+;2023-8-20592023-8-2060【例例】人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。