c语言处理数据组程序,C语言程序设计第七章利用数组处理数据

本文详细介绍了C语言中二维数组的基本概念、初始化及常见操作,同时深入探讨了字符数组的定义、初始化方法以及字符串处理函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

14、 int a34=1,5,6;相当于int a34=1,5,6,0;,二维数组的初始化,int a34=1,2,3,4,5,6,7,8,9,10,11,12; 等价于: int a 4=1,2,3,4,5,6,7,8,9,10,11,12; int a4=0,0,3, ,0,10;合法,二维数组程序举例,例:将一个二维数组行和列的元素互换,存到另一个二维数组中。,解题思路: 可以定义两个数组:数组a为2行3列,存放指定的6个数 数组b为3行2列,开始时未赋值 将a数组中的元素aij存放到b数组中的bji元素中 用嵌套的for循环完成,#include int main() int a23=1,。

15、2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i<=1;i+) for (j=0;j<=2;j+) printf(%5d,aij); bji=aij; printf(n); ,处理a的一行中各元素,处理a中某一列元素,输出a的各元素,a元素值赋给b相应元素,printf(array b:n); for (i=0;i<=2;i+) for(j=0;j<=1;j+) printf(%5d,bij); printf(n); return 0; ,输出b的各元素,一般二维数组的处理用二重循环来实现 用循环变量的值控制数组元素的下标,例: 有一个。

16、34的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。,解题思路:采用“打擂台算法” 先找出任一人站在台上,第2人上去与之比武,胜者留在台上 第3人与台上的人比武,胜者留台上,败者下台 以后每一个人都是与当时留在台上的人比武,直到所有人都上台比为止,最后留在台上的是冠军,先把a00的值赋给变量max max用来存放当前已知的最大值 a01与max比较,如果a01max,则表示a01是已经比过的数据中值最大的,把它的值赋给max,取代了max的原值 以后依此处理,最后max就是最大的值, int i,j,row=0,colum=0,max; int a34=1,2,3,4,。

17、9,8,7,6, -10,10,-5,2; max=a00; for (i=0;imax) max=aij; row=i; colum=j; printf(max=%dnrow=%dn colum=%dn,max,row,colum); ,记最大值,记行值,记列值,三、字符数组,定义字符数组,字符数组的初始化,引用字符数组的元素,字符串及其结束标志,字符数组的输入输出,使用字符串处理函数,字符数组应用举例,字符数组的定义,用来存放字符数据的数组是字符数组 字符数组中的一个元素存放一个字符 定义字符数组的方法与定义数值型数组的方法类似,char c10; c0=I; c1= ; c2=a; c3。

18、=m; c4= ; c5=h; c6=a; c7=p; c8=p; c9=y;,c0c1c2c3c4c5c6c7c8c9,char c10=I, ,a,m, ,h,a,p,p,y; char c10=c, ,p,r,o,g,r,a,m;,c0 c1 c2 c3 c4 c5 c6 c7 c8 c9,c0 c1 c2 c3 c4 c5 c6 c7 c8 c9,字符数组的初始化,1.按元素赋值:,char diamond55=, , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,* ;,2.使用字符串常量给字符数组赋初值:,char c10=“I am happy”;或,char。

19、 c10=“I am happy”; 或,char c =“I am happy”;,以字符串方式赋值时,必须保证数组元素个数=字符个数+1,字符数组元素的引用,例: 输出一个已知的字符串。 解题思路: 定义一个字符数组,并用“初始化列表”对其赋以初值 用循环逐个输出此字符数组中的字符,#include int main() char c15=I, ,a,m, ,a, ,s,t,u,d,e,n,t,.; int i; for(i=0;i<15;i+) printf(%c,ci); printf(n); return 0; ,例: 输出一个菱形图。 解题思路: 定义一个字符型的二维数组,用“初始。

20、化列表”进行初始化 用嵌套的for循环输出字符数组中的所有元素。,#include int main() char diamond5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j; for (i=0;i<5;i+) for (j=0;j<5;j+) printf(%c,diamondij); printf(n); return 0; ,字符串和字符串结束标志,在C语言中,是将字符串作为字符数组来处理的 关心的是字符串的有效长度而不是字符数组的长度 为了测定字符串的实际长度,C语言规定了字符串结束标志0,0代表ASCII码为0的字符 从ASCII码。

21、表可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不做 用它作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志,char c=”I am happy”;可写成char c=”I am happy”; 相当于 char c11=”I am happy”;,char c10=”China”;可写成char c10=”China”; 从c5开始,元素值均为0,字符数组的输入输出,字符数组的输入输出可以有两种方法: 逐个字符输入输出(%c) 整个字符串一次输入输出(%s) 输出的字符中不包括结束符0 用%s输出字符串时,printf函数中的。

22、输出项是字符数组名,不是数组元素名,如果一个字符数组中包含多个0,则遇第一个0时输出就结束 可以用scanf函数输入一个字符串 scanf函数中的输入项c是已定义的字符数组名,输入的字符串应短于已定义的字符数组的长度,char c6; scanf(”%s”,c); China 系统自动在China后面加一个0,char str15,str25,str35; scanf(”%s%s%s”,str1,str2,str3); How are you? ,str1,str2,str3,使用字符串处理函数,在C函数库中提供了一些用来专门处理字符串的函数,使用方便,1.puts函数-输出字符串的函数 其一。

23、般形式为: puts (字符数组) 作用是将一个字符串输出到终端 char str20=”China”; puts(str); 输出China,2. gets函数-输入字符串的函数 其一般形式为: gets(字符数组) 作用是输入一个字符串到字符数组 char str20; gets(str); Computer,3. strcat函数-字符串连接函数 其一般形式为: strcat(字符数组1,字符数组2) 其作用是把两个字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,使用字符串函数时,在程序开头用#include ,4. strcpy和strncpy函数-字符串复制 st。

24、rcpy一般形式为: strcpy(字符数组1,字符串2) 作用是将字符串2复制到字符数组1中去 char str110,str2=”China”; strcpy(str1,str2);,str1,要足够大,数组名形式,数组名或字符串常量,char str110,str2=”China”; strcpy(str1,str2); 相当于strcpy(str1,”China”);,可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去 strncpy(str1,str2,2); 作用是将str2中最前面2个字符复制到str1中,取代str1中原有的最前面2个字符 复制的字符个数n不应。

25、多于str1中原有的字符,5. strcmp函数-字符串比较函数 其一般形式为 strcmp(字符串1,字符串2) 作用是比较字符串1和字符串2 strcmp(str1,str2); strcmp(”China”,”Korea”); strcmp(str1,”Beijing”);,字符串比较的规则是: 将两个字符串自左至右逐个字符相比,直到出现不同的字符或遇到0为止 如全部字符相同,认为两个字符串相等 若出现不相同的字符,则以第一对不相同的字符的比较结果为准,”A”A” ”computer”compare” ”these”that” ”1A”$20” ”CHINA”CANADA” ”DOG”T。

26、SINGHUA”,比较的结果由函数值带回 如果字符串1=字符串2,则函数值为0 如果字符串1字符串2,则函数值为一个正整数 如果字符串1

27、len(”China”);,7. strlwr函数-转换为小写的函数 其一般形式为 strlwr (字符串) 函数的作用是将字符串中大写字母换成小写字母,8. strupr函数-转换为大写的函数 其一般形式为 strupr (字符串) 函数的作用是将字符串中小写字母换成大写字母,应用举例,例:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 解题思路: 问题的关键是怎样确定“出现一个新单词了”从第1个字符开始逐个字符进行检查,判断此字符是否是新单词的开头,如果是,就使变量num的值加1,最后得到的num的值就是单词总数,判断是否出现新单词,可以由是否有空格出现来决定(连续的若干个空格。

28、作为出现一次空格;一行开头的空格不统计在内) 如果测出某一个字符为非空格,而它的前面的字符是空格,则表示“新的单词开始了”,此时使num累加1 如果当前字符为非空格而其前面的字符也是非空格,则num不应再累加1,用变量word作为判别当前是否开始了一个新单词的标志,若word=0表示未出现新单词,如出现了新单词,就把word置成1 前面一个字符是否空格可以从word的值看出来,若word等于0,则表示前一个字符是空格;如果word等于1,意味着前一个字符为非空格,c=空格,N,word=0,Y,word=1 num+,Y,word=0,N,if(c= ) word=0; else if(wor。

29、d=0) word=1; num+; , char string81,c; int i,num=0,word=0; gets(string); for (i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; printf(“%d wordsn”,num); ,一定要设初始值,相当于c=stringi; c!=0,例: 有3个字符串,要求找出其中最大者。 解题思路: 设一个二维的字符数组str,大小为310。每一行存放一个字符串 char str310;,可以把str0,str1,str2看作3个一维字符数组,可。

30、以把它们如同一维数组那样进行处理,for (i=0;i<3;i+) gets (stri);,str0,str1,str2,经过三次两两比较,就可得到值最大者,把它放在一维字符数组string中 if (strcmp(str0,str1)0) strcpy(string,str0); else strcpy(string,str1); if (strcmp(str2,string)0) strcpy(string,str2);,#include #include int main ( ) char str310; char string10; int i; for (i=0;i0) strcpy(string,str0); else strcpy(string,str1); if (strcmp(str2,string)0) strcpy(string,str2); printf(nthe largest:n%sn,string); return 0;。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值