《C语言程序设计》(高等教育出版社)湖南省(对口升学)计算机类 高频考点冲刺卷(三)

2026-03-27
| 2份
| 37页
| 70人阅读
| 1人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 C语言程序设计高教版(第五版)全一册
年级 高一
章节 第3章 分支结构程序设计,第6章 函数,第8章 指针
类型 题集-专项训练
知识点 数据类型和简单程序设计,循环结构,数组,函数,指针
使用场景 中职复习
学年 2026-2027
地区(省份) 湖南省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 286 KB
发布时间 2026-03-27
更新时间 2026-03-27
作者 糖醋排骨009
品牌系列 学易金卷·阶段检测模拟卷
审核时间 2026-03-27
下载链接 https://m.zxxk.com/soft/57044324.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

编写说明:本冲刺卷严格依据湖南省计算机应用类高考考纲编写,依托《C语言程序设计》(高等教育出版社第5版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。 湖南省计算机应用类 《C语言程序设计》 高频考点冲刺卷(三)解析版 时间:60分钟 总分:100分 班级:_________ 姓名:________ 学号:________ 成绩:_________ 一、单选题(在本题的每一小题的备选答案中,只有一个答案是正确的。本大题共5小题,每小题2分,共10分) 1.若有定义int a=7;float x=2.5,y=4.7;则表达式x+a%4*(int)y%a/4的值为( ) A.2.500000 B.2.750000 C.3.500000 D.0.000000 2.22、若有定义:int a;float b;double c,程序运行时输入:a=1,b=2,c=3<回车>,能把值1输入给变量A、值2输入给变量B、值3输入给变量c的输入语句是( ) A.scanf("%d%f%lf", &a,&b, &c); B.scanf("a=%d, b=%f,c=%lf", &a,&b, &c); C.scanf("a=%d, b=%lf, c=%lf", &a,&b,&c); D.scanf("a=%d, b=%f,c=%f", &a, &b,&c); 3.设有定义:int x=3,y=4,z=5;,则下列表达中值为0的是( ) A.x&&y B.x<y C.x&&y-z D.(x<y)&&!z||0 4.若有定义语句:int a[2][3],*p[3];,则以下语句正确的是( ) A.p=a; B.p[0]=a; C.p[0]=&a[1][2]; D.p[1]=&a; 5.执行以下程序段后,w的值为( ) int w='A',x=14,y=15; w=((x||y)&&(w<'a')); A.-1 B.NULL C.1 D.0 二、程序分析题(本大题共3小题,共70分) 1.阅读程序,写出运行结果(每空2分,共14分) (1)下列程序的运行结果是_________________。 #include<stdio.h> main() { int i,j,x=5; for(i=0;i<2;i++) { x++; for(j=0;j<5;j++) { if(j%2) continue; x++;} x++;} printf("%d ",x); } (2)下列程序的运行结果是_________________。 #include <stdio.h> struct Node { int v; int id; }; main() { int i,j,sum; struct Node arr[] = {{30, 1}, {10, 2}, {20, 3}}; for (i = 0; i < 2; i++) { for (j = i + 1; j < 3; j++) { if (arr[i].v > arr[j].v) { struct Node t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } } sum = 0; for (i = 0; i < 3; i++) { sum += arr[i].id * (i + 1); } printf("%d ", sum); } (3)下列程序的运行结果是_________________。 #include <stdio.h> #include <string.h> typedef struct { char name[10]; char sex; int age; }STU; void fun(STU *t) { strcpy((*t).name,"Tong"); (*t).age++; } main() { STU s[2]={"Hua",'m', 18,"Qin",'f',19}; fun(s+1); printf("%s,%d,%s,%d ",s[0].name,s[0].age,s[1].name,s[1].age); } (4)下列程序的运行结果是_________________。 #include <stdio.h> int f(char * s,char *t){ int n=0,num=0;char*p,*r; while(*s) { p=s;r=t; while(*r) if(*r==*p) {r++;p++;} else break; if(*r=='\0')num+=1; n++;s++; } return num;} int main() {printf("the result is %d ",f("aabdabe","ab")); } (5)下列程序的运行结果是_________________。 #include <stdio.h> int main() { int i, j, k, result = 0,val; for(i = 0; i < 3; i++) { for(j = 0; j < 2; j++) { for(k = 0; k < 2; k++) { val = i * 10 + j * 5 + k; result += val; } } printf("%d ", result);} } (6)运行以下程序时,从键盘输入:abcdabcdef<回车>cde<回车>,下列程序的运行结果是_________________。 #include<stdio.h> int fun(char *p,char *q); main() { int a; char s[80],t[80]; gets(s); gets(t); a=fun(s,t); printf("a=%d ",a); } int fun(char *p,char *q) { int i; char *p1=p,*q1; for(i=0;*p!='\0';p++,i++) { p=p1+i; if(*p!=*q) continue; for(q1=q+1,p=p+1;*p!='\0'&&*q1!='\0';q1++,p++) if(*p!=*q1) break; if(*q1=='\0') return i;} return -1;} (7)下列程序的运行结果是_________________。 #include<stdio.h> void abc(char *p); int main() { char str[ ]="cdalb"; abc(str); puts(str); return(0); } void abc(char * p) { int i,j; for(i=j=0;*(p+i)!='\0';i++) if(*(p+i)>='d'){*(p+j)=*(p+i);j++;} *(p+j)='\0'; } 2.程序填空。按照题目要求,将正确内容填入程序空白处,使程序完整(每空2分,共36分)。 (1)在此程序中,函数fun()的功能是将s所指字符串中下标为偶数同时 ASCII值为奇数的字符删除,s所指字符串中剩余的字符形成的新字符串存放在t所指的数组中。例如,若s所指字符串中的内容为"ABCDEFG12345",最后t所指的数组中的内容应是"BDF12345"。(4空) #include <stdio.h> #include <string.h> void fun(char *s, char t[]) { int i,j=0; for(i =0;i <strlen(s);i++) if(__________①___________) t[j++]=s[i]; t[j]=0; } void NONO() { char s[100],t[100]; ________②_________; int i; rf = fopen("in.dat","r"); wf = fopen("out.dat",______③_______); for(i=0;i<10;i++){ fscanf(rf,"%s",s); _______④_________; fprintf(wf, "%s ",t); } fclose(rf); fclose(wf) ; } main() { char s[100], t[100];void NoNo (); printf(" Please enter string s:"); scanf("% s",s); fun(s,t); printf(" The result is:%s ",t); NONO(); } (2)人员的记录由编号和出生年,月,日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。(5空) #include <stdio.h> #include <string.h> #define N 8 _____①_______ { char num[10]; int year,month,day; }STU; STU fun(STU *std,char *num) { int i; STU a={"",9999,99,99}; for (i=0;i<N;i++) if(______②________)==0) return(std[i]); return ______③______; } void main() { STU std[N]={{"111111",1984,2,15},{"222222",1983,9,21}, {"333333",1984,9,1},{"444444",1983,7,15},{"555555",1984.9,28}, {"666666",1983,11,15},{"777777",1983,6,22},{"888888",1984,8,19}}; STU p; char n[10]="666666"; p=_______④________; if(________⑤________) printf(" Not found !n"); else { printf(" Succeed ! "); printf("%s %d-%d-%d ",p.num,p.year,p.month,p.day); } } (3)在此程序中,函数fun()的功能是将形参所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后将新字符串的首地址作为函数值返回。请在程序的下划线处填入正确的内容,使程序得出正确的结果。(4空) #include <stdio.h> #include <stdlib.h> #include <string.h> char *fun(char *s) { int i,j, k,n; char *p,*t; n=_______①________; t =(char *)malloc(n * sizeof(char)); P =(char *)malloc(n * sizeof(char)); j=0;k=0; for(i=0;i<n;i++) { if(_____________②_____________) { t[j]=s[i];j++;} else { p[k]=s[i];k++; } } for (i=0;i<_______③_______;i++) t[j+i]=p[i]; ______④_______; return t; } main() { char s[80]; printf("please input:"); scanf("%s",s); printf(" The result is:% s ",fun(s)); } (4)下列程序的功能是:打印所有不超过n(取n<1000) 的其平方具有对称性质的数(也称回文数)。(5空) #include <stdio.h> void GetDigit(int number, int arr[], int *length) { *length = 0; while (number != 0) { arr[*length] = _______①_______; number /= 10; ________②_________; } } int IsCircle(int arr[], int length) { int i, j; for (i = 0, j = length - 1; i <= j; i++, j--) { if (_________③_______) return 0; } return 1; } int main( ) { int digitArray[16] = {0}; int n, a, len; printf("No. number it's square(palindrome) "); for (n = 1; n < 1000; n++) { a = n * n; GetDigit(_______④________); if (__________⑤__________) { printf("%d %10d %10d ", n, n, a); } } return 0; } 3.阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构,请在作答处指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共20分)。 (1)下面程序中,调用fun函数求出所有满足条件的三位数,存放到形参n所指的组中,并返回这些数的个数。这些三位数等于它各个位上数字的立方和。请改正程序中的错误,使它能得出正确的结果。以下程序只允许修改三行。 L1 #include <stdio.h> L2 int cube(int n) { return n*n*n; } L3 int fun( int *n) L4 { int a,b,c,i,k=0; L5 for (i=100; i<1000; i++) L6 { L7 a = i % 100; L8 b = i / 10 % 10; L9 c = i % 10; L10 if(cube(a)+cube(b)+cube(c)=i) L11 { n[k]=i; k++;} L12 } L13 return k-1; L14 } L15 main() L16 { L17 int n[100],k,i; L18 k=fun(n); L19 for(i=0;i<k;i++) L20 printf("%d ", n[i]); L21 printf(" "); L22 } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ (2)在下列程序中,函数fun()的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。请改正程序中的错误,使它能得到正确结果。以下程序只允许修改两行。 L1 #include <stdio.h> L2 #define SIZE 20 L3 int fun(double *s, double *w) L4 { L5 int k,i; L6 double sum; L7 for(k=2,i=0;i<SIZE;i++) L8 { L9 s[i]=k; L10 k++; L11 } L12 sum=0.0; L13 for(k=0,i=0;i<SIZE;i++) L14 { L15 sum+=s[i]; L16 if(i+1%5==0) L17 { L18 w[k]=sum/5; L19 sum=1; L20 k++; L21 } L22 } L23 return k; L24 } L25 main() L26 { L27 double a[SIZE],b[SIZE/5]; L28 int i,k; L29 k=fun(a,b); L30 printf("The original data: "); L31 for(i=0;i<SIZE;i++) L32 { L33 if(i%5=0) L34 printf(" "); L35 printf("%4.0f",a[i]); L36 } L37 printf(" The result: "); L38 for(i=0; i<k;i++) L39 printf("%6.2f",b[i]); L40 printf(" "); L41 } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ ④___________________________________________________ (3)在下列程序中,函数fun的功能是用来删除字符串中的所有空格。例如,输入asdafaa z67,则输出为asdafaaz67。以下程序只允许修改三行。 L1 #include <stdio.h> L2 #include <ctype.h> L3 #include <conio.h> L4 void fun(char *str) L5 { L6 int i=0; L7 char *p=str; L8 while(p) L9 { L10 if(p!=' ') L11 { L12 str[i]=*p; L13 i++; L14 } L15 p++; L16 } L17 str[i]='\0'; L18 } L19 main() L20 { L21 char str[81]; L22 char Msg[]="Input a string:"; L23 int n; L24 printf(Msg); L25 gets(str); L26 puts(str); L27 fun(str); L28 printf("*** str:%d ",str); L29 } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 三、程序设计题(本大题共2小题,合计20分) 1.下列程序的功能是,使用插入排序法对链表进行升序排序,最后返回排序后的链表。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; struct ListNode* insertionSortList(struct ListNode* head) { struct ListNode dummy; struct ListNode* curr; struct ListNode* prev; struct ListNode* nextNode; if (____________①____________) return head; dummy.next = NULL; __________②__________; while (curr != NULL) { prev = &dummy; nextNode = curr->next; while (________________③_________________) { prev = prev->next; } curr->next = prev->next; ___________④____________; curr = nextNode; } return dummy.next; } struct ListNode* createList(int arr[], int n) { struct ListNode* head; struct ListNode* tail; int i; struct ListNode* node; head = NULL; tail = NULL; for (i = 0; i < n; i++) { node = (struct ListNode*)malloc(sizeof(struct ListNode)); node->val = arr[i]; node->next = NULL; if (head == NULL) { head = node; tail = node; } else { tail->next = node; tail = node; } } return head; } void printList(struct ListNode* head) { struct ListNode* curr; curr = head; while (curr != NULL) { printf("%d ", curr->val); curr = curr->next; } printf(" "); } main() { int arr[] = {4, 2, 1, 3}; int len; struct ListNode* head; struct ListNode* sorted; len = sizeof(arr) / sizeof(arr[0]); ____________⑤_____________; printf("原链表: "); printList(head); sorted = insertionSortList(head); printf("排序后: "); printList(sorted); } 2.下列程序得功能是:返回链表的中间节点。如果链表有偶数个节点,则返回第二个中间节点。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; struct ListNode* middleNode(struct ListNode* head) { struct ListNode* slow; struct ListNode* fast; ____________①____________; fast = head; while (____________②______________) { slow = slow->next; _____________③____________; } return slow; } struct ListNode* createList(int arr[], int n) { struct ListNode* head; struct ListNode* tail; int i; struct ListNode* node; head = NULL; tail = NULL; for (i = 0; i < n; i++) { node = (struct ListNode*)malloc(sizeof(struct ListNode)); _________④__________; node->next = NULL; if (head == NULL) { head = node; tail = node; } else { tail->next = node; tail = node; } } return head; } void printList(struct ListNode* head) { struct ListNode* curr; curr = head; while (curr != NULL) { printf("%d ", curr->val); curr = curr->next; } printf(" "); } main() { int len; int i; int* arr; struct ListNode* head; struct ListNode* mid; printf("请输入链表节点的个数:"); scanf("%d", &len); arr =______________⑤______________; printf("请输入 %d 个节点的值(用空格分隔): ", len); for (i = 0; i < len; i++) { scanf("%d", &arr[i]); } head = createList(arr, len); printf(" 你输入的链表:"); printList(head); mid = middleNode(head); printf("中间节点的值是:%d ", mid->val); free(arr); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 编写说明:本冲刺卷严格依据湖南省计算机应用类高考考纲编写,依托《C语言程序设计》(高等教育出版社第5版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。 湖南省计算机应用类 《C语言程序设计》 高频考点冲刺卷(三)解析版 时间:60分钟 总分:100分 班级:_________ 姓名:________ 学号:________ 成绩:_________ 一、单选题(在本题的每一小题的备选答案中,只有一个答案是正确的。本大题共5小题,每小题2分,共10分) 1.若有定义int a=7;float x=2.5,y=4.7;则表达式x+a%4*(int)y%a/4的值为( ) A.2.500000 B.2.750000 C.3.500000 D.0.000000 【答案】C 【解析】运算优先级从高到低为强制类型转换、乘除取模、加减,分步计算:(int) 4.7=4,7%4=3,3*4=12,12%7=5,5/4=1,2.5+1=3.500000。 2.22、若有定义:int a;float b;double c,程序运行时输入:a=1,b=2,c=3<回车>,能把值1输入给变量A、值2输入给变量B、值3输入给变量c的输入语句是( ) A.scanf("%d%f%lf", &a,&b, &c); B.scanf("a=%d, b=%f,c=%lf", &a,&b, &c); C.scanf("a=%d, b=%lf, c=%lf", &a,&b,&c); D.scanf("a=%d, b=%f,c=%f", &a, &b,&c); 【答案】B 【解析】scanf格式串需与输入格式严格匹配: 输入为a=1,b=2,c=3,格式串"a=%d, b=%f,c=%lf"可精准匹配; %d对应 int 型a,%f对应 float 型b,%lf对应 double 型c; 其他选项格式不匹配或类型错误。 3.设有定义:int x=3,y=4,z=5;,则下列表达中值为0的是( ) A.x&&y B.x<y C.x&&y-z D.(x<y)&&!z||0 【答案】D 【解析】运算符优先级为!> 算术运算 > 关系运算 > && > ||,x=3,y=4,z=5 均非 0。A 中 x&&y 结果为 1;B 中 x<y 结果为 1;C 中 y-z=-1,x&& 非 0 值结果为 1;D 中 x<y 为 1,!z 为 0,1&&0=0,0||0 结果为 0。 4.若有定义语句:int a[2][3],*p[3];,则以下语句正确的是( ) A.p=a; B.p[0]=a; C.p[0]=&a[1][2]; D.p[1]=&a; 【答案】C 【解析】本题定义了一个二维数组a和一个指针数组p。选项A中变量p是一个数组,它是一个地址常量,不能放在等号的左边,所以选项A错误;选项B中,a是一个指向int[]的地址常量,p[O]是一个int型地址,所以不能将a赋值给p[0],故选项B错误;选项D中将一个二维数组地址赋值给一个整型指针,是非法的。故本题答案为C 5.执行以下程序段后,w的值为( ) int w='A',x=14,y=15; w=((x||y)&&(w<'a')); A.-1 B.NULL C.1 D.0 【答案】C 【解析】当括号与逻辑运算符混合运算时,其运算优先级为先括号,后逻辑运算符。另外注意"&&'和"的'短路’运算。当运算符"&&"左边表达式的值为0时,则右边表达式就不再进行运算,整个表达式的值即为0;当运算符"左边表达式的值为非零时,则右边表达式就不再进行运算,整个表达式的值为1。本题先运算表达式”xly”,由于x=14、y=15均为非零,所以x||y=1。则对于与运算符"&&',还必须运算其右边的表达式'w<'a',由于A的ASCIl码是65,a的ASCIl码是97,所以w<'a'的值为1,故整个表达式的值为1。故本题答案为C 二、程序分析题(本大题共3小题,共70分) 1.阅读程序,写出运行结果(每空2分,共14分) (1)下列程序的运行结果是_________________。 #include<stdio.h> main() { int i,j,x=5; for(i=0;i<2;i++) { x++; for(j=0;j<5;j++) { if(j%2) continue; x++;} x++;} printf("%d ",x); } 【答案】15 (2)下列程序的运行结果是_________________。 #include <stdio.h> struct Node { int v; int id; }; main() { int i,j,sum; struct Node arr[] = {{30, 1}, {10, 2}, {20, 3}}; for (i = 0; i < 2; i++) { for (j = i + 1; j < 3; j++) { if (arr[i].v > arr[j].v) { struct Node t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } } sum = 0; for (i = 0; i < 3; i++) { sum += arr[i].id * (i + 1); } printf("%d ", sum); } 【答案】11 (3)下列程序的运行结果是_________________。 #include <stdio.h> #include <string.h> typedef struct { char name[10]; char sex; int age; }STU; void fun(STU *t) { strcpy((*t).name,"Tong"); (*t).age++; } main() { STU s[2]={"Hua",'m', 18,"Qin",'f',19}; fun(s+1); printf("%s,%d,%s,%d ",s[0].name,s[0].age,s[1].name,s[1].age); } 【答案】Hua,18,Tong,20 (4)下列程序的运行结果是_________________。 #include <stdio.h> int f(char * s,char *t){ int n=0,num=0;char*p,*r; while(*s) { p=s;r=t; while(*r) if(*r==*p) {r++;p++;} else break; if(*r=='\0')num+=1; n++;s++; } return num;} int main() {printf("the result is %d ",f("aabdabe","ab")); } 【答案】the result is 2 (5)下列程序的运行结果是_________________。 #include <stdio.h> int main() { int i, j, k, result = 0,val; for(i = 0; i < 3; i++) { for(j = 0; j < 2; j++) { for(k = 0; k < 2; k++) { val = i * 10 + j * 5 + k; result += val; } } printf("%d ", result);} } 【答案】12 64 156 (6)运行以下程序时,从键盘输入:abcdabcdef<回车>cde<回车>,下列程序的运行结果是_________________。 #include<stdio.h> int fun(char *p,char *q); main() { int a; char s[80],t[80]; gets(s); gets(t); a=fun(s,t); printf("a=%d ",a); } int fun(char *p,char *q) { int i; char *p1=p,*q1; for(i=0;*p!='\0';p++,i++) { p=p1+i; if(*p!=*q) continue; for(q1=q+1,p=p+1;*p!='\0'&&*q1!='\0';q1++,p++) if(*p!=*q1) break; if(*q1=='\0') return i;} return -1;} 【答案】a=6 (7)下列程序的运行结果是_________________。 #include<stdio.h> void abc(char *p); int main() { char str[ ]="cdalb"; abc(str); puts(str); return(0); } void abc(char * p) { int i,j; for(i=j=0;*(p+i)!='\0';i++) if(*(p+i)>='d'){*(p+j)=*(p+i);j++;} *(p+j)='\0'; } 【答案】dl 2.程序填空。按照题目要求,将正确内容填入程序空白处,使程序完整(每空2分,共36分)。 (1)在此程序中,函数fun()的功能是将s所指字符串中下标为偶数同时 ASCII值为奇数的字符删除,s所指字符串中剩余的字符形成的新字符串存放在t所指的数组中。例如,若s所指字符串中的内容为"ABCDEFG12345",最后t所指的数组中的内容应是"BDF12345"。(4空) #include <stdio.h> #include <string.h> void fun(char *s, char t[]) { int i,j=0; for(i =0;i <strlen(s);i++) if(__________①___________) t[j++]=s[i]; t[j]=0; } void NONO() { char s[100],t[100]; ________②_________; int i; rf = fopen("in.dat","r"); wf = fopen("out.dat",______③_______); for(i=0;i<10;i++){ fscanf(rf,"%s",s); _______④_________; fprintf(wf, "%s ",t); } fclose(rf); fclose(wf) ; } main() { char s[100], t[100];void NoNo (); printf(" Please enter string s:"); scanf("% s",s); fun(s,t); printf(" The result is:%s ",t); NONO(); } 【答案】①!((i%2)==0 && (s[i]%2)) ②FILE *rf,*wf ③"w" ④fun(s,t) (2)人员的记录由编号和出生年,月,日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。(5空) #include <stdio.h> #include <string.h> #define N 8 _____①_______ { char num[10]; int year,month,day; }STU; STU fun(STU *std,char *num) { int i; STU a={"",9999,99,99}; for (i=0;i<N;i++) if(______②________)==0) return(std[i]); return ______③______; } void main() { STU std[N]={{"111111",1984,2,15},{"222222",1983,9,21}, {"333333",1984,9,1},{"444444",1983,7,15},{"555555",1984.9,28}, {"666666",1983,11,15},{"777777",1983,6,22},{"888888",1984,8,19}}; STU p; char n[10]="666666"; p=_______④________; if(________⑤________) printf(" Not found !n"); else { printf(" Succeed ! "); printf("%s %d-%d-%d ",p.num,p.year,p.month,p.day); } } 【答案】①typedef struct ②strcmp(std[i].num,num ③a ④fun(std,n) ⑤p.num[0]==0 (3)在此程序中,函数fun()的功能是将形参所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后将新字符串的首地址作为函数值返回。请在程序的下划线处填入正确的内容,使程序得出正确的结果。(4空) #include <stdio.h> #include <stdlib.h> #include <string.h> char *fun(char *s) { int i,j, k,n; char *p,*t; n=_______①________; t =(char *)malloc(n * sizeof(char)); P =(char *)malloc(n * sizeof(char)); j=0;k=0; for(i=0;i<n;i++) { if(_____________②_____________) { t[j]=s[i];j++;} else { p[k]=s[i];k++; } } for (i=0;i<_______③_______;i++) t[j+i]=p[i]; ______④_______; return t; } main() { char s[80]; printf("please input:"); scanf("%s",s); printf(" The result is:% s ",fun(s)); } 【答案】①strlen(s)+1 ②((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='z')) ③k ④t[j+k]='\0' (4)下列程序的功能是:打印所有不超过n(取n<1000) 的其平方具有对称性质的数(也称回文数)。(5空) #include <stdio.h> void GetDigit(int number, int arr[], int *length) { *length = 0; while (number != 0) { arr[*length] = _______①_______; number /= 10; ________②_________; } } int IsCircle(int arr[], int length) { int i, j; for (i = 0, j = length - 1; i <= j; i++, j--) { if (_________③_______) return 0; } return 1; } int main( ) { int digitArray[16] = {0}; int n, a, len; printf("No. number it's square(palindrome) "); for (n = 1; n < 1000; n++) { a = n * n; GetDigit(_______④________); if (__________⑤__________) { printf("%d %10d %10d ", n, n, a); } } return 0; } 【答案】①number % 10 ②(*length)++ ③arr[i] != arr[j] ④a, digitArray, &len ⑤IsCircle(digitArray, len) 3.阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构,请在作答处指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共20分)。 (1)下面程序中,调用fun函数求出所有满足条件的三位数,存放到形参n所指的组中,并返回这些数的个数。这些三位数等于它各个位上数字的立方和。请改正程序中的错误,使它能得出正确的结果。以下程序只允许修改三行。 L1 #include <stdio.h> L2 int cube(int n) { return n*n*n; } L3 int fun( int *n) L4 { int a,b,c,i,k=0; L5 for (i=100; i<1000; i++) L6 { L7 a = i % 100; L8 b = i / 10 % 10; L9 c = i % 10; L10 if(cube(a)+cube(b)+cube(c)=i) L11 { n[k]=i; k++;} L12 } L13 return k-1; L14 } L15 main() L16 { L17 int n[100],k,i; L18 k=fun(n); L19 for(i=0;i<k;i++) L20 printf("%d ", n[i]); L21 printf(" "); L22 } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 【答案】①L7 a = i / 100; ②L10 if(cube(a)+cube(b)+cube(c)== i) ③L13 return k; (2)在下列程序中,函数fun()的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。请改正程序中的错误,使它能得到正确结果。以下程序只允许修改两行。 L1 #include <stdio.h> L2 #define SIZE 20 L3 int fun(double *s, double *w) L4 { L5 int k,i; L6 double sum; L7 for(k=2,i=0;i<SIZE;i++) L8 { L9 s[i]=k; L10 k++; L11 } L12 sum=0.0; L13 for(k=0,i=0;i<SIZE;i++) L14 { L15 sum+=s[i]; L16 if(i+1%5==0) L17 { L18 w[k]=sum/5; L19 sum=1; L20 k++; L21 } L22 } L23 return k; L24 } L25 main() L26 { L27 double a[SIZE],b[SIZE/5]; L28 int i,k; L29 k=fun(a,b); L30 printf("The original data: "); L31 for(i=0;i<SIZE;i++) L32 { L33 if(i%5=0) L34 printf(" "); L35 printf("%4.0f",a[i]); L36 } L37 printf(" The result: "); L38 for(i=0; i<k;i++) L39 printf("%6.2f",b[i]); L40 printf(" "); L41 } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ ④___________________________________________________ 【答案】①L10 k+=2; ②L16 if((i+1)%5==0) ③L19 sum=0; ④L33 if(i%5==0) (3)在下列程序中,函数fun的功能是用来删除字符串中的所有空格。例如,输入asdafaa z67,则输出为asdafaaz67。以下程序只允许修改三行。 L1 #include <stdio.h> L2 #include <ctype.h> L3 #include <conio.h> L4 void fun(char *str) L5 { L6 int i=0; L7 char *p=str; L8 while(p) L9 { L10 if(p!=' ') L11 { L12 str[i]=*p; L13 i++; L14 } L15 p++; L16 } L17 str[i]='\0'; L18 } L19 main() L20 { L21 char str[81]; L22 char Msg[]="Input a string:"; L23 int n; L24 printf(Msg); L25 gets(str); L26 puts(str); L27 fun(str); L28 printf("*** str:%d ",str); L29 } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 【答案】①L8 while(*p) ②L10 if(*p!=' ') ③L28 printf("*** str:%s ",str); 三、程序设计题(本大题共2小题,合计20分) 1.下列程序的功能是,使用插入排序法对链表进行升序排序,最后返回排序后的链表。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; struct ListNode* insertionSortList(struct ListNode* head) { struct ListNode dummy; struct ListNode* curr; struct ListNode* prev; struct ListNode* nextNode; if (____________①____________) return head; dummy.next = NULL; __________②__________; while (curr != NULL) { prev = &dummy; nextNode = curr->next; while (________________③_________________) { prev = prev->next; } curr->next = prev->next; ___________④____________; curr = nextNode; } return dummy.next; } struct ListNode* createList(int arr[], int n) { struct ListNode* head; struct ListNode* tail; int i; struct ListNode* node; head = NULL; tail = NULL; for (i = 0; i < n; i++) { node = (struct ListNode*)malloc(sizeof(struct ListNode)); node->val = arr[i]; node->next = NULL; if (head == NULL) { head = node; tail = node; } else { tail->next = node; tail = node; } } return head; } void printList(struct ListNode* head) { struct ListNode* curr; curr = head; while (curr != NULL) { printf("%d ", curr->val); curr = curr->next; } printf(" "); } main() { int arr[] = {4, 2, 1, 3}; int len; struct ListNode* head; struct ListNode* sorted; len = sizeof(arr) / sizeof(arr[0]); ____________⑤_____________; printf("原链表: "); printList(head); sorted = insertionSortList(head); printf("排序后: "); printList(sorted); } 【答案】①head == NULL || head->next == NULL ②curr = head ③prev->next != NULL && prev->next->val < curr->val ④prev->next = curr ⑤head = createList(arr, len) 2.下列程序得功能是:返回链表的中间节点。如果链表有偶数个节点,则返回第二个中间节点。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; struct ListNode* middleNode(struct ListNode* head) { struct ListNode* slow; struct ListNode* fast; ____________①____________; fast = head; while (____________②______________) { slow = slow->next; _____________③____________; } return slow; } struct ListNode* createList(int arr[], int n) { struct ListNode* head; struct ListNode* tail; int i; struct ListNode* node; head = NULL; tail = NULL; for (i = 0; i < n; i++) { node = (struct ListNode*)malloc(sizeof(struct ListNode)); _________④__________; node->next = NULL; if (head == NULL) { head = node; tail = node; } else { tail->next = node; tail = node; } } return head; } void printList(struct ListNode* head) { struct ListNode* curr; curr = head; while (curr != NULL) { printf("%d ", curr->val); curr = curr->next; } printf(" "); } main() { int len; int i; int* arr; struct ListNode* head; struct ListNode* mid; printf("请输入链表节点的个数:"); scanf("%d", &len); arr =______________⑤______________; printf("请输入 %d 个节点的值(用空格分隔): ", len); for (i = 0; i < len; i++) { scanf("%d", &arr[i]); } head = createList(arr, len); printf(" 你输入的链表:"); printList(head); mid = middleNode(head); printf("中间节点的值是:%d ", mid->val); free(arr); } 【答案】①slow = head ②fast != NULL && fast->next != NULL ③fast = fast->next->next ④node->val = arr[i] ⑤ (int*)malloc(len * sizeof(int)) 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

《C语言程序设计》(高等教育出版社)湖南省(对口升学)计算机类 高频考点冲刺卷(三)
1
《C语言程序设计》(高等教育出版社)湖南省(对口升学)计算机类 高频考点冲刺卷(三)
2
《C语言程序设计》(高等教育出版社)湖南省(对口升学)计算机类 高频考点冲刺卷(三)
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。