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

2026-03-27
| 2份
| 44页
| 46人阅读
| 1人下载

资源信息

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

内容正文:

编写说明:本冲刺卷严格依据湖南省计算机应用类高考考纲编写,依托《C语言程序设计》(高等教育出版社第5版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。 湖南省计算机应用类 《C语言程序设计》 高频考点冲刺卷(九)解析版 时间:60分钟 总分:100分 班级:_________ 姓名:________ 学号:________ 成绩:_________ 一、单选题(在本题的每一小题的备选答案中,只有一个答案是正确的。本大题共5小题,每小题2分,共10分) 1.若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是( ) A.i=*p; B.*p=*&j; C.i=&j; D.i=**p; 【答案】B 【解析】p 是指向 i 的指针,*p 等价于变量 i;*&j 等价于变量 j(&j 取 j 的地址,* 解引用得到 j 的值)。选项 B 中 *p=*&j 等价于 i=j,完成赋值功能。 2.以下选项中,当x的绝对值在1至6范围内表达式值为"真"的是( ) A.(x>=1)&&(x<=6)&&(x>=-6)&&(x<=-1) B.(x>=-6)&&(x<=-1)||(x>=1)&&(x<=6) C.(x>=-6)||(x<=-1)||(x>=1)||(x<=6) D.(x>=1)&&(x<=6)||(x>=-1)&&(x<=-6) 【答案】B 【解析】根据题目要求可知x的取值范围是[-1,-6]和[1,6].,B选项中只需要或的两个表达式中有一个为真,结果为真。当x取[-1,-6]时,X>=-6)&e(x(=-1)为真,故表达式为真;当x取[1,6]时,(x>=1)&&(x<=6)为真,故表达式为真,符合题意,故选项B正确。所以本题答案选B。 3.设有以下定义和输入语句,若要求给c1输入字母M,给c2输入字母N,则以下输入形式中正确的是( )(注:£代表空格,输入从第一列开始) char c1, c2; scanf("%3c%3c", &c1,&c2); A.M£N££<回车> B.££M££N<回车> C.M<回车>N<回车> D.££M<回车>££N<回车> 【答案】A 【解析】scanf函数的般调用形式如下:scanf(格式控制,输入项1,输入项2....)。可以在格式字符前加入一个正整数指定输入数据所占的宽度,本题中的格式控制是%3c,每个变量所占的宽度应为3个字符,故选项A正确。 4.设有以下程序代码。则程序运行后的输出结果是( ) #include<stdio.h> int new_div(double a,double b) {return a/b+0.5;} main() {printf("%d", new_div(7.8,3.1));} A.0 B.1 C.2 D.3 【答案】D 【解析】ew div函数被定义为int类型,所以返回值a/B、+0.5也是int类型,a/b+0.5=8/3+0.5=2+0.5=2.5,转换为整型后,四舍五入,经计算得出,返回值为3,故D选项正确。 5.设有定义:int x[10],*p=x,i,若要为数组x读入数据,以下选项正确的是( ) A. for(i=0;i<10;i++) scanf("%d", p+i); B. for(i=0;i<10;i++) scanf("%d", *p+i); C. for(i=0;i<10;i++) scanf("%d",*(p+i); D. for(i=0;i<10;i++) scanf("%d" ,x[i]); 【答案】A 【解析】指针p一开始指向的是数组x的首地址。p+1表示指针p指向存储单元x[1],以此类推,故选项A正确。 二、程序分析题(本大题共3小题,共70分) 1.阅读程序,写出运行结果(每空2分,共14分) (1)下列程序的运行结果是_________________。 #include <stdio.h> main() { int arr[ ]={77,25,64,22,1}; int n=sizeof(arr)/sizeof(arr[0]),i,j,min_index,temp; for(i=0;i<n-1;i++) { min_index=i; for(j=i+1;j<n;j++) { if(arr[j]<arr[min_index]) { min_index=j; } } if(min_index!=i) { temp=arr[i]; arr[i]=arr[min_index]; arr[min_index]=temp; } } for(i=0;i<n;i++) { printf("%d ",arr[i]); } } 【答案】1 22 25 64 77 (2)下列程序的运行结果是_________________。 #include <stdio.h> int mystery(int n) { static int cache = 1; static int calls = 0; calls++; if (n == 0) return cache; if (calls % 2 == 0) { cache = cache * n;} else { cache = cache + n; } return mystery(n - 1) + cache; } main() { int result = mystery(3); printf("%d ", result); } 【答案】36 (3)下列程序的运行结果是_________________。 #include <stdio.h> int main() { char s[] = "AABBCDDAE"; char *p = s, *q = s,*k; int found; while (*q) { found = 0; for (k = s; k < p; k++) { if (*k == *q) { found = 1; break; } } if (!found) *p++ = *q; q++; } *p = '\0'; printf("%s,%d ", s, p - s); } 【答案】ABCDE,5 (4)下列程序的运行结果是_________________。 #include<stdio.h> void f(char *from,char *to) { while(*to) to++; while((*to++=*from++)!='\0'); } main() { char s1[80]="abc"; char s2[80]="123"; f(s2,s1); printf("s1=%s ",s1); printf("s2=%s ",s2); } 【答案】 s1=abc123 s2=123 (5)下列程序的运行结果是_________________。 #include <stdio.h> int f(int x) { static int y = 0; y += x; return y; } int g(int *a, int n) { int sum = 0,i; for(i = 0; i < n; i++) { if(a[i] > 3) { sum += f(a[i]);} else { sum -= f(a[i] - 1); } } return sum;} main() { int arr[] = {2, 5, 1, 4, 3}; int result = 0,i; for(i = 0; i < 3; i++) { result += g(arr + i, 3); } printf("%d ", result); } 【答案】-3 (6)程序运行时输入58,则下列程序的运行结果是_________________。 #include<stdio.h> main() { int a[6]={34,23,45,67,19}; int i,j,t,x; for(i=0;i<5-1;i++) for(j=i+1;j<5;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;} scanf("%d",&x); i=4; while(i>=0&&a[i]<x) {a[i+1]=a[i];i--;} a[i+1]=x; for(i=0;i<6;i++) printf("%5d",a[i]); printf(" "); } 【答案】 67 58 45 34 23 19 (7)下列程序的运行结果是_________________。 #include<stdio.h> int fun2(int x,int y) {int z; z=x*y%3; return z;} int fun1(int x,int y) {int z;x+=x;y+=y; z=fun2(x,y); return z*z;} main() { int x=11,y=19; printf("%d ",fun1(x,y)); } 【答案】4 2.程序填空。按照题目要求,将正确内容填入程序空白处,使程序完整(每空2分,共36分)。 (1)在此程序中,函数fun()的功能是在3x4的矩阵中找出在行上最大,在列上最小的元素,若没有符合条件的元素则输出相应信息。 例如,有下列矩阵: 1 2 13 4 7 8 10 6 3 5 9 7 程序执行结果为find:a[2][2]=9. 请在程序的下划线处填入正确的内容,使程序得出正确的结果。(4空) #include <stdio.h> #define M 3 #define N 4 void fun(int (*a)[N]) {int i=0,j,find=0,rmax,c,k; while(_______①_______) { rmax=a[i][0];c=0; for(j=1;j<N;j++) if(_______②_______) { rmax=a[i][j]; c=j;} find=1;k=0; while(k<M && find) { if (__________③_________) find=0; k++; } if(________④________) printf("find:a[%d][%d]=% d ",i,c,a[i][c]); i++; } if(! find) printf("Not found! "); } main() {int x[M][N],i,j; printf("Enter number for array: "); for(i=0;i<M;i++) for(j=0;j<N;j++) scanf("%d",&x[i][j]); printf("The array: "); for(i=0;i<M;i++) {for(j=0;j<N;j++) printf("% 3d",x[i][j]); printf(" "); } fun(x); } 【答案】①(i<M) &&(!find) ②rmax<a[i][j] ③k!=i&&a[k][c]<=rmax ④find (2)某商场有若干个种商品,每种商品的信息包括编号,名称,每季度的营业额(单位:万元)。从键盘输入每种商品的信息,计算每种商品的年平均营业额,将原有数据和平均值存入二进制文件 yye.bin中,再从文件 yye.bin中将数据读出并显示在屏幕上。(5空) #include <stdio.h> #define N 3 //N个商品 #define M 4 //M个季度 struct gs { char bh[6]; //商品编号 char mc[10]; //商品名称 float yue[M]; //季度营业额 float ave; //平均营业额 }goods[N]; void main() { FILE *fp; int i,j; float sum; for(i=0;i<N;i++) { printf("请输入第%d商品的信息: ",i+1); printf("编号:"); scanf("%s",__________①_________); printf("名称:"); scanf("%s",goods[i].mc); sum=0.0; for(j=0;j<M;j++) { printf("输入%d个季度的营业额:",j+1); scanf("%f",&goods[i].yue[j]); __________②___________; } goods[i].ave=_______③______; } if((fp=fopen("yye.bin",______④_____))==NULL) { printf("不能打开文件,写文件失败! "); return; } fwrite(goods,sizeof(struct gs),N,fp); _________⑤___________; printf("编号\t名称\t1季度\t2季度\t3季度\t4季度\t平均额 "); for(i=0;i<N;i++) { fread(&goods[i],sizeof(struct gs),1,fp); printf("%s\t%s\t%7.2f\t%7.2f\t%7.2f\t%7.2\t%7.2f ",goods[i].bh, goods[i].mc,goods[i].yue[0],goods[i].yue[1], goods[i].yue[2],goods[i].yue[3],goods[i].ave); } fclose(fp); } 【答案】①goods[i].bh ②sum=sum+goods[i].yue[j] ③sum/M ④"wb+" ⑤rewind(fp) (3)下列程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号,姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a,请在程序的下划线处填入正确的内容,使程序得出正确的结果。(4空) #include <stdio.h> #include <string.h> typedef struct { int num; char name[9]; float score[3]; }STU; void show(STU tt) { int i; printf("%d %s:",_______①__________); for(i=0;i<3;i++) printf("%5.1f ",tt.score[i]); printf(" "); } void modify(_______②______,float a) { int i; for(i=0;i<3;i++) ss->score[i]=________③__________ } main() { STU std={1,"Zhang",76.5,78.0,82.0}; float a; printf("n The original number and name and scores: "); show(std); printf(" Input a number:"); scanf("%f",&a); ________④_________; printf(" A result of modifying: "); show(std); } 【答案】①tt.num,tt.name ②STU *ss ③ss->score[i]*a; ④modify(&std,a) (4)以下程序的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依次类推,把100岁(含100岁)以上年龄的人数放在d[10]中。(5空) #include <stdio.h> #define N 50 #define M 11 void fun(int *a, int *b) { int i,j; for (j=0;j<M;j++) b[j]=0; for (i=0;i<N;i++) { switch (_______①________) { case 0:b[0]++; break; case 1:b[1]++; break; case 2:b[2]++;break; case 3:b[3]++;break; case 4:b[4]++; break; case 5:b[5]++; break; case 6:b[6]++; break; case 7:b[7]++; break; case 8:b[8]++; break; case 9:b[9]++; break; default:b[10]++;break; } } } double rnd( ) {static int t=29,c=217,m=1024,r=0; r=________②_________; return((double)r/m); } main() { int age[N],i,d[M]; for(i=0;i< N;i++) age [i]=(int)(115*rnd()); printf ("The original data: "); for(i=0;i< N;i++) printf(______③_______?"%4d ":"%4d",age[i]); printf(" "); _________④__________; for(i=0; i< 10;i++) printf("%4d---%4d:%4d ",________⑤_______); printf("Over 100:%4d ",d[10]); } 【答案】①a[i]/10 ②(r*t+c)%m ③(i+1)%10==0 ④fun(age,d) ⑤i*10,i*10+9,d[i] 3.阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构,请在作答处指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共20分)。 (1)在此程序中,函数fun()的功能是找出一个大于给定整数m且紧随m的素数,并将其作为函数值返回。请改正程序中的错误,使它能得出正确的结果。以下程序只允许修改两行。 L1 #include <stdlib.h> L2 #include <stdio.h> L3 int fun(int m) L4 { int i,k; L5 for(i=m+1;;i++) L6 { for (k=2;k<i;k++) L7 if (i%k!=0) L8 break; L9 if (k<i) L10 return(i); L11 } L12 } L13 void main() L14 { L15 int n; L16 system("CLS"); L17 printf(" Please enter n:"); L18 scanf("%d",&n); L19 printf ("%d ",fun(n)); L20 } ①___________________________________________________ ②___________________________________________________ 【答案】①L7 if(i%k==0) ②L9 if(k==i) (2)在下列程序中,函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后 s所指串中的字符按正序连接到t所指串的后面。请改正程序中的错误,使它能得出正确的结果。以下程序只允许修改三行。 L1 #include <stdio.h> L2 #include <string.h> L3 void fun(char *s, char *t) L4 { L5 int i,s1; L6 i=0; L7 s1=strlen(s); L8 for(;i<s1;i++) L9 t[i]=s[s1-i]; L10 for(i=0;i<s1;i++) L11 t[s1]=s[i]; L12 t[2*s1]='\0'; L13 } L14 main() L15 { L16 char s[100],t[100]; L17 printf(" Please enter string s: "); L18 scanf("%c",s); L19 fun(s,t); L20 printf("The result is:%s ",t); L21 } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 【答案】①L9 t[i]=s[s1-i-1]; ②L11 t[s1+i]=s[i]; ③L18 scanf("%s",s); (3)中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何,下列程序的功能是求出翁、母、雏各有多少只。以下程序只允许修改两行。 L1 #include<stdio.h> L2 int main() L3 { L4 int x,y,z,j=0; L5printf("Folleing are possible plans to buy 100 fowls with 100 Yuan. "); L6 for(x=0;x<=20;x++) L7 for(y=0;y<=33;y++) L8 { L9 z=100-x; L10 if(z%3==0||5*x+3*y+z/3==100) L11 printf("%2d:cock=%2d hen=%2d chicken=%2d ",++j,x,y,z); L12 } L13 } ①___________________________________________________ ②___________________________________________________ 【答案】①L9 z=100-x-y; ②L10 if(z%3==0&&5*x+3*y+z/3==100) (4)下面程序的功能是:求四位的可逆素数。可逆素数指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。以下程序只允许修改三行。 L1 #include<stdio.h> L2 #include<math.h> L3 int num(int number); L4 int ok(int number); L5 int main() L6 {int i,count; L7 printf("There are invertable primes with 4 digits: "); L8 for(count=0,i=1001;i<9999;i+=2) L9 {if(num(i)) L10 printf(count%9 ? "%3d:%d" : "%3d:%d ",++count,i); } L11 return 0; } L12 int num(int number) L13 { int i,j; L14 if(ok(number))return 0; L15 for(i=number,j=0;i>0;i%=10) L16 { j=j*10 + i%10; } L17 if(number>j) L18 { if(!ok(i)) L19 { return 0; } L20 else L21 { return 1; } L22 } L23 else L24 { return 0; } L25 getchar(); L26 return 0; } L27 int ok(int number) L28 { int i,j; L29 if(number%2 ==0) L30 return 0; L31 j= sqrt((double)number) +1 ; L32 for(i=3;i<j;i+=2) L33 { if(number %i ==0) L34 return 0; } L35 return 1; } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 【答案】①L14 if(!ok(number))return 0; ②L15 for(i=number,j=0;i>0;i/=10) ③L17 if(number<j) 三、程序设计题(本大题共2小题,合计20分) 1.下列程序的功能是:给定链表头结点head,列表中的每个节点都有一个唯一的整数值。同时给定列表G,该列表是链表值的一个子集。返回列表中组件的个数。程序运行结果如下图所示。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; int numComponents(_________________①___________________) { int hash[10000] = {0}; int i; int components; struct ListNode* curr; int in_component; for (i = 0; i < GSize; i++) { ___________②_________; } components = 0; curr = head; in_component = 0; while (curr != NULL) { if (__________③__________) { if (!in_component) { components++; in_component = 1; } } else { in_component = 0; } ________________④________________; } return components; } struct ListNode* createListByInput() { int n, i, val; struct ListNode *head = NULL; struct ListNode *cur = NULL; struct ListNode *newNode = NULL; printf("请输入链表节点个数:"); scanf("%d", &n); if (n <= 0) return NULL; printf("请输入链表的 %d 个节点值: ", n); for (i = 0; i < n; i++) { scanf("%d", &val); ______________________⑤_________________________; newNode->val = val; newNode->next = NULL; if (head == NULL) { head = newNode; cur = head; } else { cur->next = newNode; cur = cur->next; } } return head; } void inputG(int** G, int* GSize) { int i; printf("请输入数组 G 的大小:"); scanf("%d", GSize); *G = (int*)malloc((*GSize) * sizeof(int)); printf("请输入数组 G 的 %d 个元素: ", *GSize); for (i = 0; i < *GSize; i++) { scanf("%d", &(*G)[i]); } } void printList(struct ListNode* head) { struct ListNode* p; p = head; while (p != NULL) { printf("%d", p->val); if (p->next != NULL) printf("->"); p = p->next; } printf(" "); } main() { struct ListNode* head; int* G; int GSize; int result; printf("===== 链表组件计数程序 ===== "); head = createListByInput(); printf(" "); inputG(&G, &GSize); printf(" 你的链表:"); printList(head); result = numComponents(head, G, GSize); printf("组件个数:%d ", result); } 【答案】①struct ListNode* head, int* G, int GSize ②hash[G[i]] = 1 ③hash[curr->val] ④curr = curr->next ⑤newNode = (struct ListNode*)malloc(sizeof(struct ListNode)) 2.下列程序的功能是实现两个独立无环单链表的基础查找功能:程序接收用户从键盘输入的两组整型数据,分别构建两个单链表,随后通过遍历两个链表,查找第一个节点值相等的节点,若找到该节点则返回其指针并输出对应数值;若遍历完两个链表均未找到值相等的节点,则返回空指针,并提示无相同节点。请你将程序中的空白处进行补充。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; struct ListNode* findFirstEqualNode(____________①__________) { struct ListNode* pA; struct ListNode* pB; pA = headA; while (pA != NULL) { ____________②____________; while (pB != NULL) { if (___________③___________) { return pA; } pB = pB->next; } ______________④_____________; } return NULL; } struct ListNode* createList(void) { int num; struct ListNode* head; struct ListNode* tail; struct ListNode* newNode; head = NULL; tail = NULL; printf("请输入链表节点整型值(输入-1结束创建):"); scanf("%d", &num); while (num != -1) { newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); if (newNode == NULL) { printf("内存分配失败,程序终止! "); exit(1); } newNode->val = num; newNode->next = NULL; if (head == NULL) { head = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } scanf("%d", &num); } return head; } void printList(struct ListNode* head) { struct ListNode* cur; cur = head; if (cur == NULL) { printf("链表为空 "); return; } while (cur != NULL) { printf("%d", cur->val); if (cur->next != NULL) { printf(" -> "); } cur = cur->next; } printf(" -> NULL "); } void freeList(struct ListNode* head) { struct ListNode* temp; temp = NULL; while (head != NULL) { temp = head; ______________⑤____________; free(temp); } } main() { struct ListNode* headA; struct ListNode* headB; struct ListNode* resultNode; printf("========== 构建第一个链表(链表A) ========== "); headA = createList(); printf("链表A结构:"); printList(headA); printf(" ========== 构建第二个链表(链表B) ========== "); headB = createList(); printf("链表B结构:"); printList(headB); resultNode = findFirstEqualNode(headA, headB); printf(" ========== 查找结果 ========== "); if (resultNode != NULL) { printf("两个链表第一个值相等的节点值为:%d ", resultNode->val); } else { printf("两个链表无值相等的节点 "); } freeList(headA); freeList(headB); } 【答案】①struct ListNode* headA, struct ListNode* headB ②pB = headB ③pA->val == pB->val ④pA = pA->next ⑤head = head->next 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 编写说明:本冲刺卷严格依据湖南省计算机应用类高考考纲编写,依托《C语言程序设计》(高等教育出版社第5版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。 湖南省计算机应用类 《C语言程序设计》 高频考点冲刺卷(九)解析版 时间:60分钟 总分:100分 班级:_________ 姓名:________ 学号:________ 成绩:_________ 一、单选题(在本题的每一小题的备选答案中,只有一个答案是正确的。本大题共5小题,每小题2分,共10分) 1.若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是( ) A.i=*p; B.*p=*&j; C.i=&j; D.i=**p; 2.以下选项中,当x的绝对值在1至6范围内表达式值为"真"的是( ) A.(x>=1)&&(x<=6)&&(x>=-6)&&(x<=-1) B.(x>=-6)&&(x<=-1)||(x>=1)&&(x<=6) C.(x>=-6)||(x<=-1)||(x>=1)||(x<=6) D.(x>=1)&&(x<=6)||(x>=-1)&&(x<=-6) 3.设有以下定义和输入语句,若要求给c1输入字母M,给c2输入字母N,则以下输入形式中正确的是( )(注:£代表空格,输入从第一列开始) char c1, c2; scanf("%3c%3c", &c1,&c2); A.M£N££<回车> B.££M££N<回车> C.M<回车>N<回车> D.££M<回车>££N<回车> 4.设有以下程序代码。则程序运行后的输出结果是( ) #include<stdio.h> int new_div(double a,double b) {return a/b+0.5;} main() {printf("%d", new_div(7.8,3.1));} A.0 B.1 C.2 D.3 5.设有定义:int x[10],*p=x,i,若要为数组x读入数据,以下选项正确的是( ) A. for(i=0;i<10;i++) scanf("%d", p+i); B. for(i=0;i<10;i++) scanf("%d", *p+i); C. for(i=0;i<10;i++) scanf("%d",*(p+i); D. for(i=0;i<10;i++) scanf("%d" ,x[i]); 二、程序分析题(本大题共3小题,共70分) 1.阅读程序,写出运行结果(每空2分,共14分) (1)下列程序的运行结果是_________________。 #include <stdio.h> main() { int arr[ ]={77,25,64,22,1}; int n=sizeof(arr)/sizeof(arr[0]),i,j,min_index,temp; for(i=0;i<n-1;i++) { min_index=i; for(j=i+1;j<n;j++) { if(arr[j]<arr[min_index]) { min_index=j; } } if(min_index!=i) { temp=arr[i]; arr[i]=arr[min_index]; arr[min_index]=temp; } } for(i=0;i<n;i++) { printf("%d ",arr[i]); } } (2)下列程序的运行结果是_________________。 #include <stdio.h> int mystery(int n) { static int cache = 1; static int calls = 0; calls++; if (n == 0) return cache; if (calls % 2 == 0) { cache = cache * n;} else { cache = cache + n; } return mystery(n - 1) + cache; } main() { int result = mystery(3); printf("%d ", result); } (3)下列程序的运行结果是_________________。 #include <stdio.h> int main() { char s[] = "AABBCDDAE"; char *p = s, *q = s,*k; int found; while (*q) { found = 0; for (k = s; k < p; k++) { if (*k == *q) { found = 1; break; } } if (!found) *p++ = *q; q++; } *p = '\0'; printf("%s,%d ", s, p - s); } (4)下列程序的运行结果是_________________。 #include<stdio.h> void f(char *from,char *to) { while(*to) to++; while((*to++=*from++)!='\0'); } main() { char s1[80]="abc"; char s2[80]="123"; f(s2,s1); printf("s1=%s ",s1); printf("s2=%s ",s2); } (5)下列程序的运行结果是_________________。 #include <stdio.h> int f(int x) { static int y = 0; y += x; return y; } int g(int *a, int n) { int sum = 0,i; for(i = 0; i < n; i++) { if(a[i] > 3) { sum += f(a[i]);} else { sum -= f(a[i] - 1); } } return sum;} main() { int arr[] = {2, 5, 1, 4, 3}; int result = 0,i; for(i = 0; i < 3; i++) { result += g(arr + i, 3); } printf("%d ", result); } (6)程序运行时输入58,则下列程序的运行结果是_________________。 #include<stdio.h> main() { int a[6]={34,23,45,67,19}; int i,j,t,x; for(i=0;i<5-1;i++) for(j=i+1;j<5;j++) if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;} scanf("%d",&x); i=4; while(i>=0&&a[i]<x) {a[i+1]=a[i];i--;} a[i+1]=x; for(i=0;i<6;i++) printf("%5d",a[i]); printf(" "); } (7)下列程序的运行结果是_________________。 #include<stdio.h> int fun2(int x,int y) {int z; z=x*y%3; return z;} int fun1(int x,int y) {int z;x+=x;y+=y; z=fun2(x,y); return z*z;} main() { int x=11,y=19; printf("%d ",fun1(x,y)); } 2.程序填空。按照题目要求,将正确内容填入程序空白处,使程序完整(每空2分,共36分)。 (1)在此程序中,函数fun()的功能是在3x4的矩阵中找出在行上最大,在列上最小的元素,若没有符合条件的元素则输出相应信息。 例如,有下列矩阵: 1 2 13 4 7 8 10 6 3 5 9 7 程序执行结果为find:a[2][2]=9. 请在程序的下划线处填入正确的内容,使程序得出正确的结果。(4空) #include <stdio.h> #define M 3 #define N 4 void fun(int (*a)[N]) {int i=0,j,find=0,rmax,c,k; while(_______①_______) { rmax=a[i][0];c=0; for(j=1;j<N;j++) if(_______②_______) { rmax=a[i][j]; c=j;} find=1;k=0; while(k<M && find) { if (__________③_________) find=0; k++; } if(________④________) printf("find:a[%d][%d]=% d ",i,c,a[i][c]); i++; } if(! find) printf("Not found! "); } main() {int x[M][N],i,j; printf("Enter number for array: "); for(i=0;i<M;i++) for(j=0;j<N;j++) scanf("%d",&x[i][j]); printf("The array: "); for(i=0;i<M;i++) {for(j=0;j<N;j++) printf("% 3d",x[i][j]); printf(" "); } fun(x); } (2)某商场有若干个种商品,每种商品的信息包括编号,名称,每季度的营业额(单位:万元)。从键盘输入每种商品的信息,计算每种商品的年平均营业额,将原有数据和平均值存入二进制文件 yye.bin中,再从文件 yye.bin中将数据读出并显示在屏幕上。(5空) #include <stdio.h> #define N 3 //N个商品 #define M 4 //M个季度 struct gs { char bh[6]; //商品编号 char mc[10]; //商品名称 float yue[M]; //季度营业额 float ave; //平均营业额 }goods[N]; void main() { FILE *fp; int i,j; float sum; for(i=0;i<N;i++) { printf("请输入第%d商品的信息: ",i+1); printf("编号:"); scanf("%s",__________①_________); printf("名称:"); scanf("%s",goods[i].mc); sum=0.0; for(j=0;j<M;j++) { printf("输入%d个季度的营业额:",j+1); scanf("%f",&goods[i].yue[j]); __________②___________; } goods[i].ave=_______③______; } if((fp=fopen("yye.bin",______④_____))==NULL) { printf("不能打开文件,写文件失败! "); return; } fwrite(goods,sizeof(struct gs),N,fp); _________⑤___________; printf("编号\t名称\t1季度\t2季度\t3季度\t4季度\t平均额 "); for(i=0;i<N;i++) { fread(&goods[i],sizeof(struct gs),1,fp); printf("%s\t%s\t%7.2f\t%7.2f\t%7.2f\t%7.2\t%7.2f ",goods[i].bh, goods[i].mc,goods[i].yue[0],goods[i].yue[1], goods[i].yue[2],goods[i].yue[3],goods[i].ave); } fclose(fp); } (3)下列程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号,姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a,请在程序的下划线处填入正确的内容,使程序得出正确的结果。(4空) #include <stdio.h> #include <string.h> typedef struct { int num; char name[9]; float score[3]; }STU; void show(STU tt) { int i; printf("%d %s:",_______①__________); for(i=0;i<3;i++) printf("%5.1f ",tt.score[i]); printf(" "); } void modify(_______②______,float a) { int i; for(i=0;i<3;i++) ss->score[i]=________③__________ } main() { STU std={1,"Zhang",76.5,78.0,82.0}; float a; printf("n The original number and name and scores: "); show(std); printf(" Input a number:"); scanf("%f",&a); ________④_________; printf(" A result of modifying: "); show(std); } (4)以下程序的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依次类推,把100岁(含100岁)以上年龄的人数放在d[10]中。(5空) #include <stdio.h> #define N 50 #define M 11 void fun(int *a, int *b) { int i,j; for (j=0;j<M;j++) b[j]=0; for (i=0;i<N;i++) { switch (_______①________) { case 0:b[0]++; break; case 1:b[1]++; break; case 2:b[2]++;break; case 3:b[3]++;break; case 4:b[4]++; break; case 5:b[5]++; break; case 6:b[6]++; break; case 7:b[7]++; break; case 8:b[8]++; break; case 9:b[9]++; break; default:b[10]++;break; } } } double rnd( ) {static int t=29,c=217,m=1024,r=0; r=________②_________; return((double)r/m); } main() { int age[N],i,d[M]; for(i=0;i< N;i++) age [i]=(int)(115*rnd()); printf ("The original data: "); for(i=0;i< N;i++) printf(______③_______?"%4d ":"%4d",age[i]); printf(" "); _________④__________; for(i=0; i< 10;i++) printf("%4d---%4d:%4d ",________⑤_______); printf("Over 100:%4d ",d[10]); } 3.阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构,请在作答处指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共20分)。 (1)在此程序中,函数fun()的功能是找出一个大于给定整数m且紧随m的素数,并将其作为函数值返回。请改正程序中的错误,使它能得出正确的结果。以下程序只允许修改两行。 L1 #include <stdlib.h> L2 #include <stdio.h> L3 int fun(int m) L4 { int i,k; L5 for(i=m+1;;i++) L6 { for (k=2;k<i;k++) L7 if (i%k!=0) L8 break; L9 if (k<i) L10 return(i); L11 } L12 } L13 void main() L14 { L15 int n; L16 system("CLS"); L17 printf(" Please enter n:"); L18 scanf("%d",&n); L19 printf ("%d ",fun(n)); L20 } ①___________________________________________________ ②___________________________________________________ (2)在下列程序中,函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后 s所指串中的字符按正序连接到t所指串的后面。请改正程序中的错误,使它能得出正确的结果。以下程序只允许修改三行。 L1 #include <stdio.h> L2 #include <string.h> L3 void fun(char *s, char *t) L4 { L5 int i,s1; L6 i=0; L7 s1=strlen(s); L8 for(;i<s1;i++) L9 t[i]=s[s1-i]; L10 for(i=0;i<s1;i++) L11 t[s1]=s[i]; L12 t[2*s1]='\0'; L13 } L14 main() L15 { L16 char s[100],t[100]; L17 printf(" Please enter string s: "); L18 scanf("%c",s); L19 fun(s,t); L20 printf("The result is:%s ",t); L21 } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ (3)中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何,下列程序的功能是求出翁、母、雏各有多少只。以下程序只允许修改两行。 L1 #include<stdio.h> L2 int main() L3 { L4 int x,y,z,j=0; L5printf("Folleing are possible plans to buy 100 fowls with 100 Yuan. "); L6 for(x=0;x<=20;x++) L7 for(y=0;y<=33;y++) L8 { L9 z=100-x; L10 if(z%3==0||5*x+3*y+z/3==100) L11 printf("%2d:cock=%2d hen=%2d chicken=%2d ",++j,x,y,z); L12 } L13 } ①___________________________________________________ ②___________________________________________________ (4)下面程序的功能是:求四位的可逆素数。可逆素数指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。以下程序只允许修改三行。 L1 #include<stdio.h> L2 #include<math.h> L3 int num(int number); L4 int ok(int number); L5 int main() L6 {int i,count; L7 printf("There are invertable primes with 4 digits: "); L8 for(count=0,i=1001;i<9999;i+=2) L9 {if(num(i)) L10 printf(count%9 ? "%3d:%d" : "%3d:%d ",++count,i); } L11 return 0; } L12 int num(int number) L13 { int i,j; L14 if(ok(number))return 0; L15 for(i=number,j=0;i>0;i%=10) L16 { j=j*10 + i%10; } L17 if(number>j) L18 { if(!ok(i)) L19 { return 0; } L20 else L21 { return 1; } L22 } L23 else L24 { return 0; } L25 getchar(); L26 return 0; } L27 int ok(int number) L28 { int i,j; L29 if(number%2 ==0) L30 return 0; L31 j= sqrt((double)number) +1 ; L32 for(i=3;i<j;i+=2) L33 { if(number %i ==0) L34 return 0; } L35 return 1; } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 三、程序设计题(本大题共2小题,合计20分) 1.下列程序的功能是:给定链表头结点head,列表中的每个节点都有一个唯一的整数值。同时给定列表G,该列表是链表值的一个子集。返回列表中组件的个数。程序运行结果如下图所示。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; int numComponents(_________________①___________________) { int hash[10000] = {0}; int i; int components; struct ListNode* curr; int in_component; for (i = 0; i < GSize; i++) { ___________②_________; } components = 0; curr = head; in_component = 0; while (curr != NULL) { if (__________③__________) { if (!in_component) { components++; in_component = 1; } } else { in_component = 0; } ________________④________________; } return components; } struct ListNode* createListByInput() { int n, i, val; struct ListNode *head = NULL; struct ListNode *cur = NULL; struct ListNode *newNode = NULL; printf("请输入链表节点个数:"); scanf("%d", &n); if (n <= 0) return NULL; printf("请输入链表的 %d 个节点值: ", n); for (i = 0; i < n; i++) { scanf("%d", &val); ______________________⑤_________________________; newNode->val = val; newNode->next = NULL; if (head == NULL) { head = newNode; cur = head; } else { cur->next = newNode; cur = cur->next; } } return head; } void inputG(int** G, int* GSize) { int i; printf("请输入数组 G 的大小:"); scanf("%d", GSize); *G = (int*)malloc((*GSize) * sizeof(int)); printf("请输入数组 G 的 %d 个元素: ", *GSize); for (i = 0; i < *GSize; i++) { scanf("%d", &(*G)[i]); } } void printList(struct ListNode* head) { struct ListNode* p; p = head; while (p != NULL) { printf("%d", p->val); if (p->next != NULL) printf("->"); p = p->next; } printf(" "); } main() { struct ListNode* head; int* G; int GSize; int result; printf("===== 链表组件计数程序 ===== "); head = createListByInput(); printf(" "); inputG(&G, &GSize); printf(" 你的链表:"); printList(head); result = numComponents(head, G, GSize); printf("组件个数:%d ", result); } 2.下列程序的功能是实现两个独立无环单链表的基础查找功能:程序接收用户从键盘输入的两组整型数据,分别构建两个单链表,随后通过遍历两个链表,查找第一个节点值相等的节点,若找到该节点则返回其指针并输出对应数值;若遍历完两个链表均未找到值相等的节点,则返回空指针,并提示无相同节点。请你将程序中的空白处进行补充。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; struct ListNode* findFirstEqualNode(____________①__________) { struct ListNode* pA; struct ListNode* pB; pA = headA; while (pA != NULL) { ____________②____________; while (pB != NULL) { if (___________③___________) { return pA; } pB = pB->next; } ______________④_____________; } return NULL; } struct ListNode* createList(void) { int num; struct ListNode* head; struct ListNode* tail; struct ListNode* newNode; head = NULL; tail = NULL; printf("请输入链表节点整型值(输入-1结束创建):"); scanf("%d", &num); while (num != -1) { newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); if (newNode == NULL) { printf("内存分配失败,程序终止! "); exit(1); } newNode->val = num; newNode->next = NULL; if (head == NULL) { head = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } scanf("%d", &num); } return head; } void printList(struct ListNode* head) { struct ListNode* cur; cur = head; if (cur == NULL) { printf("链表为空 "); return; } while (cur != NULL) { printf("%d", cur->val); if (cur->next != NULL) { printf(" -> "); } cur = cur->next; } printf(" -> NULL "); } void freeList(struct ListNode* head) { struct ListNode* temp; temp = NULL; while (head != NULL) { temp = head; ______________⑤____________; free(temp); } } main() { struct ListNode* headA; struct ListNode* headB; struct ListNode* resultNode; printf("========== 构建第一个链表(链表A) ========== "); headA = createList(); printf("链表A结构:"); printList(headA); printf(" ========== 构建第二个链表(链表B) ========== "); headB = createList(); printf("链表B结构:"); printList(headB); resultNode = findFirstEqualNode(headA, headB); printf(" ========== 查找结果 ========== "); if (resultNode != NULL) { printf("两个链表第一个值相等的节点值为:%d ", resultNode->val); } else { printf("两个链表无值相等的节点 "); } freeList(headA); freeList(headB); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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