第25卷 C语言-C语言卷12——字符串与字符数组——江苏省计算机类——考纲百套卷

2026-06-30
| 2份
| 22页
| 5人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 题集-专项训练
知识点 C语言概述
使用场景 中职复习-中职高考
学年 2027-2028
地区(省份) 江苏省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 94 KB
发布时间 2026-06-30
更新时间 2026-06-30
作者 xy06893
品牌系列 学易金卷·考纲百套卷
审核时间 2026-06-30
下载链接 https://m.zxxk.com/soft/58571359.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。 本试卷是第25卷为专业核心模块训练卷,按《C语言》中"C语言卷12——字符串与字符数组"范围和要求编写。具体内容为:掌握字符串与字符数组。 江苏省对口招生职业技能考试 C语言 试卷 (C语言卷12——字符串与字符数组) 考试时间:90分钟 满分:100分 一、单项选择题(共20题,每题2分,共40分) 1. 下列关于字符数组,正确的是( ) A.字符数组就是字符串 B.字符数组可以不以\0结束 C.字符串必须用字符数组存储 D.字符数组不能存储字符串 【答案】B 【解析】字符数组可以不包含\0,只有当它用作字符串时才需要\0结束。 2. 下列字符数组初始化正确的是( ) A.char s[ ] = "Hello";(正确,自动添加\0) B.char s[ ] = {'H','e','l','l','o'};(无\0) C.char s[6] = "Hello";(正确,\0占一位) D.以上都正确 【答案】D 【解析】A和B语法都正确,但B存储的不是字符串(没有\0)。C中"Hello"自动包含\0,需要6个字节。 3. 字符串"ABC"在内存中占用____个字节 A.3 B.4(包含\0) C.不确定 D.编译错误 【答案】B 【解析】字符串"ABC"包含'A','B','C','\0'共4个字符。 4. 下列关于字符串输入,正确的是( ) A.scanf("%s",s); 可以读取包含空格的字符串 B.gets(s); 可以读取包含空格的字符串(但不安全) C.fgets(s,size,stdin); 可以读取包含空格的字符串 D.B和C都可以 【答案】D 【解析】gets可以读入整行(含空格)但已废弃不安全;fgets可以读入指定长度的整行(含空格)。 5. 下列关于字符串输出,正确的是( ) A.printf("%s",s); 输出字符串 B.puts(s); 输出字符串并自动换行 C.两者都可以输出字符串 D.两者都不能输出字符串 【答案】C 【解析】printf("%s",s)和puts(s)都可以输出字符串,puts会自动添加换行。 6. 想要计算字符串长度(不含\0),应该使用( ) A.sizeof(s) B.strlen(s) C.length(s) D.len(s) 【答案】B 【解析】strlen(s)返回字符串长度(不含\0),需要包含<string.h>。 7. 想要复制字符串,应该使用( ) A.s1 = s2;(数组不能整体赋值) B.strcpy(s1,s2) C.strcopy(s1,s2) D.copy(s1,s2) 【答案】B 【解析】strcpy(dest,src)用于复制字符串,需要包含<string.h>。 8. 想要连接两个字符串,应该使用( ) A.strcat(s1,s2) B.strconnect(s1,s2) C.strjoin(s1,s2) D.strmerge(s1,s2) 【答案】A 【解析】strcat(dest,src)用于将src连接到dest后面,需要包含<string.h>。 9. 想要比较两个整数的大小应该使用( ) A.strcmp(s1,s2) B.比较两个字符串应该用strcmp C.strcm(s1,s2) D.比较字符串用compare 【答案】A 【解析】strcmp(s1,s2)比较字符串,返回0表示相等,<0表示s1<s2,>0表示s1>s2。 10. 下列关于char s[10] = "Hello"; 正确的是( ) A.s的长度是5 B.s的长度是10 C.strlen(s)返回5 D.sizeof(s)返回5 【答案】C 【解析】strlen(s)返回字符串实际长度(不含\0)为5,sizeof(s)返回数组大小为10。 11. 想要从键盘读取一个不含空格的字符串,可以使用( ) A.gets(s)(读取整行,含空格) B.scanf("%s",s)(读取不含空格的字符串) C.fgets(s,size,stdin)(读取整行,含空格) D.B和C都可以 【答案】B 【解析】scanf("%s",s)读取到空格为止,不含空格;fgets读取整行(含空格)。 12. char s[ ] = "Hello"; 则sizeof(s)的值是( ) A.5 B.6(包含\0) C.不确定 D.编译错误 【答案】B 【解析】"Hello"包含6个字符(含\0),sizeof(s)=6。 13. char s[10] = "Hi"; 则s的内容是( ) A.'H','i' B.'H','i','\0',其余为0 C.'H','i',其余不确定 D.编译错误 【答案】B 【解析】部分初始化时,未初始化的元素自动置0(即\0)。 14. 下列关于字符串和字符数组,正确的是( ) A.所有字符数组都是字符串 B.字符串一定以\0结束 C.字符数组一定不能以\0结束 D.字符串不能用字符数组存储 【答案】B 【解析】字符串定义上就是以\0结束的字符序列。 15. 想要判断两个字符串是否相等,应该使用( ) A.if(s1==s2)(比较的是地址) B.if(strcmp(s1,s2)==0)(正确) C.if(s1 equals s2) D.if(strcmp(s1,s2))(非0表示不相等) 【答案】B 【解析】字符串比较必须用strcmp函数,==比较的是指针地址。 16. char s[5] = "Hello"; 正确的是( ) A.正确,刚好容纳 B.错误,需要6个字节(含\0),这里会越界 C.正确,\0可以省略 D.不确定 【答案】B 【解析】"Hello"需要6个字节(含\0),但s只有5个字节,会导致越界。 17. 想要将字符串s2复制到s1,应该使用( ) A.s1 = s2; B.strcpy(s1,s2); C.strcat(s1,s2); D.strcmp(s1,s2); 【答案】B 【解析】strcpy(dest,src)用于复制字符串。 18. 下列关于fgets,正确的是( ) A.fgets会丢弃换行符 B.fgets保留换行符在字符串中 C.fgets不包含换行符 D.fgets已废弃不安全 【答案】B 【解析】fgets会将换行符 读入字符串中(如果缓冲区够大)。 19. char s[ ] = "C Program"; 则strlen(s)的值是( ) A.8 B.9(C+空格+Program) C.10(包含\0) D.11 【答案】B 【解析】"C Program"包含'C',' ','P','r','o','g','r','a','m'共9个字符,不含\0。 20. 想要在字符串s后面追加字符串t,应该使用( ) A.strcpy(s,t) B.strcat(s,t) C.strcmp(s,t) D.strlen(s,t) 【答案】B 【解析】strcat(dest,src)将src连接到dest后面。 二、判断题(共10题,每题1分,共10分) 21. 字符串以\0字符作为结束标志( ) 【答案】√ 【解析】字符串以空字符\0作为结束标志。 22. 字符数组就是字符串( ) 【答案】× 【解析】字符数组可以不包含\0,只有当它用作字符串时才需要\0结束。 23. strlen函数返回字符串长度(含\0)( ) 【答案】× 【解析】strlen返回字符串长度,不含\0。 24. sizeof(数组名)返回数组总字节数( ) 【答案】√ 【解析】sizeof(数组名)返回数组在内存中占用的总字节数。 25. scanf("%s",s)可以读取包含空格的字符串( ) 【答案】× 【解析】scanf("%s")读取到空格为止,不含空格;需用fgets读取含空格的整行。 26. 字符串比较必须使用strcmp函数( ) 【答案】√ 【解析】C语言中字符串不能直接用==比较,必须用strcmp函数。 27. gets函数已废弃,不推荐使用( ) 【答案】√ 【解析】gets函数不检查缓冲区大小,已废弃,推荐使用fgets。 28. fgets会将换行符 读入字符串中( ) 【答案】√ 【解析】fgets将换行符 读入字符串中(如果缓冲区允许)。 29. strcpy可以安全地复制任意长度的字符串( ) 【答案】× 【解析】strcpy不检查目标缓冲区大小,可能越界,应使用strncpy或确保目标足够大。 30. 字符串字面量如"Hello"在内存中自动包含\0( ) 【答案】√ 【解析】字符串字面量在内存中以\0自动结束。 三、填空题(共10空,每空2分,共20分) 31. 字符串以____字符作为结束标志。 【答案】\0(空字符) 【解析】字符串以空字符\0作为结束标志。 32. 想要计算字符串长度(不含\0),应该使用函数____。 【答案】strlen 【解析】strlen(s)返回字符串长度(不含\0)。 33. 想要复制字符串,应该使用函数____。 【答案】strcpy 【解析】strcpy(dest,src)用于复制字符串。 34. 想要连接两个字符串,应该使用函数____。 【答案】strcat 【解析】strcat(dest,src)将src连接到dest后面。 35. 想要比较两个字符串,应该使用函数____。 【答案】strcmp 【解析】strcmp(s1,s2)比较字符串,返回0表示相等。 36. 从键盘读取一个不含空格的字符串,可以使用scanf("____",s)。 【答案】%s 【解析】scanf("%s",s)读取不含空格的字符串。 37. 从键盘读取一整行(含空格),应该使用函数____。 【答案】fgets 【解析】fgets(s,size,stdin)读取整行(含空格)。 38. 字符串"Hi"在内存中占用____个字节(含\0)。 【答案】3 【解析】'H','i','\0'共3个字节。 39. char s[ ] = "Hello"; 则sizeof(s)的值是____。 【答案】6 【解析】"Hello"包含6个字符(含\0),sizeof(s)=6。 40. char s[10] = "Hi"; 则未初始化的元素自动置____。 【答案】0(\0) 【解析】部分初始化时,未初始化的元素自动置0。 四、程序综合题(共3题,每题10分,共30分) 41. 程序阅读题:阅读下列程序,写出运行结果。 #include <stdio.h> #include <string.h> int main() { char s[]="abc123XYZ"; int i,la=0,ln=0,lo=0; for(i=0;s[i]!='\0';i++) { if(s[i]>='a'&&s[i]<='z') la++; else if(s[i]>='0'&&s[i]<='9') ln++; else if(s[i]>='A'&&s[i]<='Z') lo++; } printf("la=%d,ln=%d,lo=%d ",la,ln,lo); printf("len=%d ",strlen(s)); return 0; } 【答案】 la=3,ln=3,lo=3 len=9 【解析】 1.字符串abc123XYZ包含 3 个小写字母、3 个数字、3 个大写字母,对应 la=3,ln=3,lo=3; 2.字符串总长度为 9,strlen(s)计算结果为 9,输出 len=9。 42.文件survey.dat存储问卷编号和问题选项(1-5)。统计每个选项出现的次数,按次数降序输出,次数相同按选项升序。请完善程序。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 300 void sort_count(int opt[],int cnt[],int n); int main() { FILE *fp; int i=0,n,j; int choice[N],count[6]={0}; fp=fopen("survey.dat","r"); while(!feof(fp)) { fscanf(fp,"%d",&choice[i]); if(choice[i]>=1&&choice[i]<=5) ①; i++; } n=i; fclose(fp); for(i=1;i<=5;i++) count[i]=0; for(i=0;i<n;i++) count[choice[i]]++; sort_count(choice,count,6); for(i=1;i<=5;i++) if(count[i]>0) printf("%d:%d ",i,count[i]); return 0; } void sort_count(int opt[],int cnt[],int n) { int i,j,t; for(i=1;i<n-1;i++) for(j=i+1;j<n;j++) if(cnt[i]<cnt[j]||(cnt[i]==cnt[j]&&opt[i]>opt[j])) { ②; } } 【答案】 ①空语句(不填代码 / 无需操作) 或 理解题意最优填空:无有效执行语句 ② t=cnt[i];cnt[i]=cnt[j];cnt[j]=t;t=opt[i];opt[i]=opt[j];opt[j]=t; 【解析】 1. 关于①空: 程序逻辑分为两步:先循环读取所有有效选项存入 choice 数组、统计总个数;读取完毕后统一清零count数组,再二次遍历 choice 数组批量统计次数。因此while循环内仅需筛选合法选项,不需要做计数操作,原答案计数属于多余无效代码,会被后续清零覆盖。 2. 关于②空: 排序规则:次数降序,次数相等则选项升序。判断条件同时使用了 cnt[i]/cnt[j](次数)和 opt[i]/opt[j](选项编号),因此交换时必须同步交换计数值cnt和选项值opt,保证下标对应的选项、次数一一对应,否则排序错乱、结果错误。 43.文件ip.dat存储IP地址字符串。按IP地址的数值大小升序排列后输出(相同IP保留一条)。请完善程序。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 200 long ip_to_num(char ip[]); void sort_ip(char ip[][20],int n); int main() { FILE *fp; int i=0,n; char ip[N][20],tmp[N][20]; fp=fopen("ip.dat","r"); while(!feof(fp)) { fscanf(fp,"%s",ip[i]); ①; } n=i; fclose(fp); sort_ip(ip,n); printf("%s ",ip[0]); for(i=1;i<n;i++) if(strcmp(ip[i],ip[i-1])!=0) printf("%s ",ip[i]); return 0; } long ip_to_num(char ip[]) { long num=0; char *p=strtok(ip,"."); while(p) { num=num*256+atoi(p); p=strtok(NULL,"."); } return num; } void sort_ip(char ip[][20],int n) { int i,j,p; char tip[20]; for(i=0;i<n-1;i++) { p=i; for(j=i+1;j<n;j++) if(②) p=j; if(p!=i) { strcpy(tip,ip[p]);strcpy(ip[p],ip[i]);strcpy(ip[i],tip); } } } 【答案】① i++ ② ip_to_num (ip [p]) > ip_to_num (ip [j]) 【解析】 ① 每读取一条 IP 地址,数组下标 i 自增 1,统计总记录数; ② 将 IP 转为数值后比较,按数值升序排序,满足条件则更新位置。 学科网(北京)股份有限公司 $ 编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。 本试卷是第25卷为专业核心模块训练卷,按《C语言》中"C语言卷12——字符串与字符数组"范围和要求编写。具体内容为:掌握字符串与字符数组。 江苏省对口招生职业技能考试 C语言 试卷 (C语言卷12——字符串与字符数组) 考试时间:90分钟 满分:100分 一、单项选择题(共20题,每题2分,共40分) 1. 下列关于字符数组,正确的是( ) A.字符数组就是字符串 B.字符数组可以不以\0结束 C.字符串必须用字符数组存储 D.字符数组不能存储字符串 2. 下列字符数组初始化正确的是( ) A.char s[ ] = "Hello"; B.char s[ ] = {'H','e','l','l','o'}; C.char s[6] = "Hello"; D.以上都正确 3. 字符串"ABC"在内存中占用____个字节 A.3 B.4(包含\0) C.不确定 D.编译错误 4. 下列关于字符串输入,正确的是( ) A.scanf("%s",s); 可以读取包含空格的字符串 B.gets(s); 可以读取包含空格的字符串 C.fgets(s,size,stdin); 可以读取包含空格的字符串 D.B和C都可以 5. 下列关于字符串输出,正确的是( ) A.printf("%s",s); B.puts(s); C.两者都可以输出字符串 D.两者都不能输出字符串 6. 想要计算字符串长度(不含\0),应该使用( ) A.sizeof(s) B.strlen(s) C.length(s) D.len(s) 7. 想要复制字符串,应该使用( ) A.s1 = s2; B.strcpy(s1,s2) C.strcopy(s1,s2) D.copy(s1,s2) 8. 想要连接两个字符串,应该使用( ) A.strcat(s1,s2) B.strconnect(s1,s2) C.strjoin(s1,s2) D.strmerge(s1,s2) 9. 想要比较两个整数的大小应该使用( ) A.strcmp(s1,s2) B.比较两个字符串应该用strcmp C.strcm(s1,s2) D.比较字符串用compare 10. 下列关于char s[10] = "Hello"; 正确的是( ) A.s的长度是5 B.s的长度是10 C.strlen(s)返回5 D.sizeof(s)返回5 11. 想要从键盘读取一个不含空格的字符串,可以使用( ) A.gets(s) B.scanf("%s",s) C.fgets(s,size,stdin) D.B和C都可以 12. char s[ ] = "Hello"; 则sizeof(s)的值是( ) A.5 B.6 C.不确定 D.编译错误 13. char s[10] = "Hi"; 则s的内容是( ) A.'H','i' B.'H','i','\0',其余为0 C.'H','i',其余不确定 D.编译错误 14. 下列关于字符串和字符数组,正确的是( ) A.所有字符数组都是字符串 B.字符串一定以\0结束 C.字符数组一定不能以\0结束 D.字符串不能用字符数组存储 15. 想要判断两个字符串是否相等,应该使用( ) A.if(s1==s2) B.if(strcmp(s1,s2)==0) C.if(s1 equals s2) D.if(strcmp(s1,s2)) 16. char s[5] = "Hello"; 正确的是( ) A.正确,刚好容纳 B.错误,需要6个字节(含\0),这里会越界 C.正确,\0可以省略 D.不确定 17. 想要将字符串s2复制到s1,应该使用( ) A.s1 = s2; B.strcpy(s1,s2); C.strcat(s1,s2); D.strcmp(s1,s2); 18. 下列关于fgets,正确的是( ) A.fgets会丢弃换行符 B.fgets保留换行符在字符串中 C.fgets不包含换行符 D.fgets已废弃不安全 19. char s[ ] = "C Program"; 则strlen(s)的值是( ) A.8 B.9(C+空格+Program) C.10(包含\0) D.11 20. 想要在字符串s后面追加字符串t,应该使用( ) A.strcpy(s,t) B.strcat(s,t) C.strcmp(s,t) D.strlen(s,t) 二、判断题(共10题,每题1分,共10分) 21. 字符串以\0字符作为结束标志( ) 22. 字符数组就是字符串( ) 23. strlen函数返回字符串长度(含\0)( ) 24. sizeof(数组名)返回数组总字节数( ) 25. scanf("%s",s)可以读取包含空格的字符串( ) 26. 字符串比较必须使用strcmp函数( ) 27. gets函数已废弃,不推荐使用( ) 28. fgets会将换行符 读入字符串中( ) 29. strcpy可以安全地复制任意长度的字符串( ) 30. 字符串字面量如"Hello"在内存中自动包含\0( ) 三、填空题(共10空,每空2分,共20分) 31. 字符串以____字符作为结束标志。 32. 想要计算字符串长度(不含\0),应该使用函数____。 33. 想要复制字符串,应该使用函数____。 34. 想要连接两个字符串,应该使用函数____。 35. 想要比较两个字符串,应该使用函数____。 36. 从键盘读取一个不含空格的字符串,可以使用scanf("____",s)。 37. 从键盘读取一整行(含空格),应该使用函数____。 38. 字符串"Hi"在内存中占用____个字节(含\0)。 39. char s[ ] = "Hello"; 则sizeof(s)的值是____。 40. char s[10] = "Hi"; 则未初始化的元素自动置____。 四、程序综合题(共3题,每题10分,共30分) 41. 程序阅读题:阅读下列程序,写出运行结果。 #include <stdio.h> #include <string.h> int main() { char s[]="abc123XYZ"; int i,la=0,ln=0,lo=0; for(i=0;s[i]!='\0';i++) { if(s[i]>='a'&&s[i]<='z') la++; else if(s[i]>='0'&&s[i]<='9') ln++; else if(s[i]>='A'&&s[i]<='Z') lo++; } printf("la=%d,ln=%d,lo=%d ",la,ln,lo); printf("len=%d ",strlen(s)); return 0; } 42.文件survey.dat存储问卷编号和问题选项(1-5)。统计每个选项出现的次数,按次数降序输出,次数相同按选项升序。请完善程序。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 300 void sort_count(int opt[],int cnt[],int n); int main() { FILE *fp; int i=0,n,j; int choice[N],count[6]={0}; fp=fopen("survey.dat","r"); while(!feof(fp)) { fscanf(fp,"%d",&choice[i]); if(choice[i]>=1&&choice[i]<=5) ①; i++; } n=i; fclose(fp); for(i=1;i<=5;i++) count[i]=0; for(i=0;i<n;i++) count[choice[i]]++; sort_count(choice,count,6); for(i=1;i<=5;i++) if(count[i]>0) printf("%d:%d ",i,count[i]); return 0; } void sort_count(int opt[],int cnt[],int n) { int i,j,t; for(i=1;i<n-1;i++) for(j=i+1;j<n;j++) if(cnt[i]<cnt[j]||(cnt[i]==cnt[j]&&opt[i]>opt[j])) { ②; } } 43.文件ip.dat存储IP地址字符串。按IP地址的数值大小升序排列后输出(相同IP保留一条)。请完善程序。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 200 long ip_to_num(char ip[]); void sort_ip(char ip[][20],int n); int main() { FILE *fp; int i=0,n; char ip[N][20],tmp[N][20]; fp=fopen("ip.dat","r"); while(!feof(fp)) { fscanf(fp,"%s",ip[i]); ①; } n=i; fclose(fp); sort_ip(ip,n); printf("%s ",ip[0]); for(i=1;i<n;i++) if(strcmp(ip[i],ip[i-1])!=0) printf("%s ",ip[i]); return 0; } long ip_to_num(char ip[]) { long num=0; char *p=strtok(ip,"."); while(p) { num=num*256+atoi(p); p=strtok(NULL,"."); } return num; } void sort_ip(char ip[][20],int n) { int i,j,p; char tip[20]; for(i=0;i<n-1;i++) { p=i; for(j=i+1;j<n;j++) if(②) p=j; if(p!=i) { strcpy(tip,ip[p]);strcpy(ip[p],ip[i]);strcpy(ip[i],tip); } } } 学科网(北京)股份有限公司 $

资源预览图

第25卷 C语言-C语言卷12——字符串与字符数组——江苏省计算机类——考纲百套卷
1
第25卷 C语言-C语言卷12——字符串与字符数组——江苏省计算机类——考纲百套卷
2
第25卷 C语言-C语言卷12——字符串与字符数组——江苏省计算机类——考纲百套卷
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。