初学者3.C语言数值数组与字符数组 作者留言:本篇文章可以用来给初入C语言的初学者进行参考,也可以用来备考专升本,考研,二级C语言的考试,当作复习资料巩固复习。如有问题之处可与我联系进行修改,编辑不易,请勿放收藏夹吃灰谢谢!
思维导图:数值数组与字符数组 本课重要知识点: 1.知识点:一维数组的定义 例1:下列选项中,能正确定义数组的语句是(D) A)int num[0…2008]; B)int num[]; C)int N=2008; D)#define N 2008 int num[N]; int num[N]; 【解析】数组的长度必须是一个整型常量、整型常量表达式,故A项错误。定义数组时,不能省略数组长度,B项错误。数组的长度不能是变量,C项错误。数组的长度可以是符号常量,D项正确。 例2:若要定义一个具有5个素的整型数组,以下错误的定义语句是(D) A)int a[5]={0}; B)int b[]={0,0,0,0,0}; C)int c[2+3]; D)int i=5,d[i]; 【解析】可以只给数组的前面一部分素设定初值,A项正确。对全部数组素赋初值时,可以不指定数组素的个数,B项正确。数组的长度可以是一个整型常量表达式,C项正确。数组的长度不能是变量,D项错误。 2.知识点:一维数组素的引用 例1:若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组素的引用中错误的是 (C) A)m[–i] B)m[2*2] C)m[m[0]] D)m[m[i]] 【解析】m数组素的引用的下限为0,上限为4。i=4,–i的值为3,A项正确。B项没有越界,正确。m[0]=5,超过上限,已经越界,故C项错误。m[4]=1,没有越界,故D项正确。 例2:以下程序运行后的输出结果是 13715 main() { int i,n[5]={0}; for(i=1;i<=4;i++) { n[i]==n[i-1]*2+1; printf(“%d”,n[i]); } printf(“\n”); } 【解析】:n[1]=1,n[2]=1*2+1=3,n[3]=3*2+1=7,n[4]=7*2+1=15 3.知识点:一维数组的初始化 顺序列出数组素的全部初值,例如int a[5]={1,2,3,4,5};只给数组的前面一部分素设定初值,未赋初值的素自动取0值。例如,int a[5]={1,2};对全部数组素赋初值时,可以不指定数组素的个数。例如,int a[]={1,2,3,4,5}; 4.知识点:二维数组的初始化 按行分段给二维数组赋初值按行连续赋值对部分素赋初值,未赋初值的素自动取0值若对全部素赋初值,则第一维的长度可以不指定 例1:以下数组定义中错误的是(B) A) int x[][3]={0}; B) int x[2][3]={{1,2},{3,4},{5,6}}; C) int x[][3]={{1,2,3},{4,5,6}}; D) int x[2][3]={1,2,3,4,5,6}; 【解析】若对全部素赋初值,则第一维的长度可以不指定,C项正确。二维数组的初始化可以按行连续赋值,D项正确。C项二维数组的初始化超过第一维度长度,故错误。 5.知识点:二维数组和for语句 例1:有以下程序 #include <stdio.h> main() {int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i;j<3;j++) printf(“%d”,a[i][j]); printf(“\n”); }程序运行后的输出结果是 。 6.知识点:字符串 定义:由“”引起来的,由若干个字符所组成的序列。 字符串的结束标志:’\0’ 如字符串“china”,在内存中存储形式是china\0 该字符串的长度为5字节,所占的存储空间为6字节。 7.知识点:字符数组的定义及初始化 字符数组名是地址常量,不能赋值给数组名。 例1:以下选项中正确的语句组是(D) A)char s[];s=”BOOK!”; B)char *s;s={“BOOK!”}; C)char s[10];s=”BOOK!”; D)char *s;s=”BOOK!”; 【解析】字符数组名是地址常量,不能赋值给数组名,故A、C项错误,D项指针s是个变量,将字符串常量赋值给s,是正确的。B项中给s赋值时不能用花括号将字符串括起来。 例2:下面是有关C语言字符数组的描述,其中错误的是(D) A)不可以用赋值语句给字符数组名赋字符串 B)可以用输入语句把字符串整体输入给字符数组 C)字符数组中的内容不一定是字符串 D)字符数组只能存放字符串 8.知识点:字符数组的输入与输出 例1:有以下程序 #include <stdio.h> main() {char a[20]=”How are you?”,b[20]; scanf(“%s”,b);printf(“%s %s\n”,a,b); }程序运行时从键盘输入:How are you?<回车> 则输出结果为How are you? How 【解析】scanf函数输入,以空格作为字符串输入结束的标志,故字符数组b只接收到字符串”How”。 例2:有以下程序 main() { char a[30],b[30]; scanf(“%s”,a); gets(b); printf(“%s\n %s\n”,a,b); } 程序运行时若输入:how are you? I am fine<回车>则输出结果是(B) A)how are you? B)how I am fine are you? I am fine C)how are you? I am fine D)row are you? 【解析】:scanf以空格作为字符串输入结束的标志,而gets(s)不会。所以a得到的是“how”,b得到的是剩下的“are you? I am fine”。故选择B。 例3:有以下程序 main() { char s[]=”012xy\08s34f4w2″; int i, n=0; for(i=0;s[i]!=0;i++) if(s[i]>=’0’&&s[i]<=’9′) n++; printf(“%d\n”,n); } 程序运行后的输出结果是 (B) A)0 B)3 C)7 D)8 【解析】:for循环读取字符数组s中的字符,当读到0时退出循环,注意0和‘0’的区别,字符‘0’的ASCII码为48,‘\0’的ASCII 码才是0,所以读取的字符为“012xy”中的字符,for循环读取到字符后判断是不是数字字符,如果是n自增1,“012xy”中的数字字符只有三个,所以选择B。 9.知识点:字符串处理函数 例1:有以下程序: #include<stdio.h> #include<string.h> main() { char a[5][10]={“china”,”beijing”,”you”,”tiananmen”,”welcome”}; int i,j; char t[10]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(strcmp(a[i],a[j])>0) { strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[i],t);} puts(a[3]); }程序运行后的输出结果是 (C) A.beijing B.china C.welcome D.tiananmen 【解析】双层for循环部分是典型的排序方法,通过strcmp比较两个字符串的大小,然后借助t数组作为中转数组,通过strcpy函数完成a[i]和a[j]两个字符串的交换,使a数组按从小到大排序,即{”beijing” , “china” , ”tiananmen”,”welcome” ,”you” } 例1:有以下程序 #include <stdio.h> #include <string.h> main() {char x[]=”STRING”; x[0]=0;x[1]=’\0’;x[2]=’0’; printf(“%d %d\n”,sizeof(x),strlen(x)); }程序运行后的输出结果是(B) A)6 1 B)7 0 C)6 3 D)7 1 【解析】经过x[0]=0;x[1]=’\0’;x[2]=’0’;后,x[]=”0\00ING”。strlen测字符串的实际长度,不含字符串结束标志’\0’,故strlen(x)为0。sizeof测字符串所占的存储空间,包含字符串结束标志,故sizeof(x)为7。 例2:有以下程序 #include <stdio.h> #include <string.h> main() {char a[20]=”ABCD\0EFG\0”,b[]=”IJK”; strcat(a,b); printf(“%s\n”,a); }程序运行后的输出结果是(B) A)ABCDE\0FG\0IJK B)ABCDIJK C)IJK D)EFGIJK 【解析】把字符数组b中的字符串连接到字符数组a中字符串的后面,并删去字符串a后的第一个字符串结束标志’\0’。故输出结果为ABCDIJK。 例3:下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST”要求的是 (A) A)if(strcmp(s2,s1)==0)ST; B)if(s1==s2)ST; C)if(strcpy(s1,s2)==1)ST; D)if(s1-s2==0)ST; 【解析】若字符串s1等于字符串s2,strcmp(s2,s1)==0,故答案是A。 以上资料来源于网上整理,如有侵权请与我联系,文章中出现问题可以在下面评论区指出,后期会做修改。 另外主页还有后续C语言程序设计基础复习题,有需要的同学可以去看看
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/74425.html