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

2026-03-27
| 2份
| 38页
| 184人阅读
| 1人下载

资源信息

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

内容正文:

编写说明:本冲刺卷严格依据湖南省计算机应用类高考考纲编写,依托《C语言程序设计》(高等教育出版社第5版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。 湖南省计算机应用类 《C语言程序设计》 高频考点冲刺卷(一)解析版 时间:60分钟 总分:100分 班级:_________ 姓名:________ 学号:________ 成绩:_________ 一、单选题(在本题的每一小题的备选答案中,只有一个答案是正确的。本大题共5小题,每小题2分,共10分) 1.若有整型变量a,执行:int *pa=&a;后,以下scanf语句中能正确为变量a读入数据的是( ) A.scanf(“%d”,pa); B.scanf(“%d”,a); C.scanf(“%d”,&pa); D.scanf(“%d”,*pa); 【答案】A 【解析】scanf要求传入变量地址,pa是指向a的指针,本身就是a的地址,可直接传入;B 选项a是变量值,C 选项&pa是指针自身地址,D 选项*pa是a的值,均不符合要求。 2.设有以下语句,其中对数组元素a不正确的引用是:( )(其中0≤i<10) int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a; A.a[p-a] B.*(&a[i]) C.p[i] D.*(*(a+i)) 【答案】D 【解析】观察程序可知,a实际上就是数组a的首地址,所以”*(a+i)"表示的就是数组a中的第i个元素的值,进而我们可以知道*(*(a+i))必然不是对a数组元素的正确引用。故本题答案为D。 3.若有定义:int a=25,b=14,c=19;,则执行以下语句的输出结果是( ) a<=25&&b--<=2&&c?printf("***a=%d,b=%d,c=%d ",a,b,c):printf("###a=%d,b=%d,c=%d ",a,b,c); A.***a=25,b=13,c=19 B.***a=26,b=14,c=19 C.###a=25,b=13,c=19 D.###a=26,b=14,c=19 【答案】C 【解析】逻辑与&&遇假即短路,a<=25为真,b--<=2中b原值为 14,判断为假后b自减为 13,后续c不再判断,整体条件为假,执行else分支输出###a=25,b=13,c=19。 4.设有定义int a[3][3];和函数调用语句sort(a,3);则下列选项中正确的函数声明是( ) A.void sort(int a,n); B.void sort(int a[ ][ ],int n); C.void sort(int a[ ][3],int n); D.void sort(int a[ ][3],n); 【答案】C 【解析】二维数组作为函数参数时,行长度可省略,列长度必须指定,int a[][3]符合语法;A、D 参数类型不完整,B 列长度省略不符合 C 语言语法规范。 5.有函数定义:int func(int *p),x和y是int型变量,则正确的调用是( ) A.y=func(x); B.func(x); C.func()=x; D.y=func(&x); 【答案】D 【解析】根据func函数的定义可以知道调用func函数需要传入一个指针,且该指针的指向类型是int型,只有D项传入的是指向int型数据的指针。 二、程序分析题(本大题共3小题,共70分) 1.阅读程序,写出运行结果(每空2分,共14分) (1)下列程序的运行结果是_________________。 #include <stdio.h> void inv(int *p,int n) { int *i,*j,m=(n-1)/2,t; j=p+n-1; for(i=p;i<p+m;i++,j--) { t=*i;*i=*j;*j=t;} } void main() { int i; int a[6]={3,5,7,0,6,2}; inv(a,6); for(i=0;i<6;i++) { printf("%d",a[i]); } } 【答案】267053 (2)下列程序的运行结果是_________________。 #include <stdio.h> int main() { char s[] = "01234"; int sum = 0,i; for (i = 0; s[i]; i++) { if (i % 2 == 0) sum += s[i] - '0'; } printf("%d ", sum); } 【答案】6 (3)下列程序的运行结果是_________________。 #include <stdio.h> main() { char s[] = "XYZ"; int shift = 3,i; for (i = 0; s[i]; i++) { s[i] = ((s[i] - 'A' + shift) % 26) + 'A'; if (i % 2 == 0) s[i] = s[i] + 1; } printf("%s ", s); } 【答案】BBD (4)下列程序的运行结果是_________________。 #include <stdio.h> struct pair { int first,second; }; struct pair get_min_max(int*array, int len) { int i; struct pair res; res.first=array[0]; res.second=array[0]; for(i=1;i<len;i++) { if(array[i]<res.first) res.first=array[i]; if(array[i]>res.second) res.second=array[i]; } return res; } main() { int array[5]={9,1,3,4}; struct pair min_max =get_min_max(array,5); printf("min=%d,max=%d ",min_max.first, min_max.second); } 【答案】min=0,max=9 (5)下列程序的运行结果是_________________。 #include<stdio.h> #define M 4 void fun(int *a) { int i,j,k,m; for(i=M;i>0;i--) { k=*(a+M-1); for(j=M-1;j>=0;j--) *(a+j+1)=*(a+j); *a=k; for(m=0;m<M;m++) printf("%d ",*(a+m)); printf(" "); } } main() { int a[M]={1,2,3,4}; fun(a);} 【答案】 4 1 2 3 3 4 1 2 2 3 4 1 1 2 3 4 (6)下列程序的运行结果是_________________。 #include<stdio.h> #include <stdio.h> short fun(char *p1,char*p2) { while(*p1&&*p2&&p1!=p2) p1++,p2++; if(*p1-*p2)return(*p2-*p1); return 0; } short main() {printf("%d",fun("abeTAA","abcta")) ; return 0; } 【答案】-65 (7)下列程序的运行结果是_________________。 #include <stdio.h> #include <string.h> struct Node { int data;int *ptr;}; void process(struct Node *n, int *arr, int size) { int i; static int count = 0; for(i = 0; i < size; i++) { if(arr[i] % 2 == 0) { n->data += arr[i] + count; } else { n->data -= arr[i] - count;} } count++; *(n->ptr) = n->data; } main() { int a = 10, b = 20; int arr[] = {1, 2, 3, 4, 5}; struct Node node1 = {5, &a}; struct Node node2 = {8, &b}; process(&node1, arr, 3); process(&node2, arr + 1, 3); process(&node1, arr + 2, 2); printf("node1.data=%d, node2.data=%d ", node1.data, node2.data); } 【答案】node1.data=8, node2.data=14 2.程序填空。按照题目要求,将正确内容填入程序空白处,使程序完整(每空2分,共36分)。 (1)程序中将m个人的成绩存放在score数组中,请编写函数fun(),它的功能是将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。(4空) #include <stdio.h> #include <string.h> #include <stdlib.h> int fun(int score[],int m, int below[]) { int i,j=0; float av=0.0; for(i=0;i<m;i++) av=________①_______; for(i=0;i<m;i++) if(score[i]<av) _________②_________; return j; } void main() { FILE * wf; int i, n, below[9]; int score[9]={10,20,30,40,50,60,70,80,90}; system("CLS"); n=_________③__________; printf(" Below the average score are:"); for(i=0;i<n;i++) printf("% d",below[i]); wf=fopen("out.dat","w"); for(i=0;i<n;i++) fprintf(___________④____________); fclose(wf); } 【答案】①av+score[i]/m ②below[j++]=score[i] ③fun (score, 9, below) ④wf,"%d",below[i] (2)下列程序的功能是在屏幕上显示杨辉三角形。(4空) #include<stdio.h> int c(int x, int y) { int z; if (_______①_______) return 1; z = c(________②_______) + c(x - 1, y); return z; } int main() { int i, j, n = 13; printf("N="); while (n>12) scanf("%d", &n); for (i = 0; i <= n; i++) { for (j = 0; j<_____③______; j++) printf(" "); for (j = 1; j<______④______; j++) printf("%4d", c(i, j)); printf(" "); } } 【答案】①(y==1)||(y==x+1) ②x-1,y-1 ③24-2*i ④i+2 (3)在此程序中,函数fun()的功能是将NxN矩阵中的元素按列向右移动1个位置,右边被移出矩阵的元素绕回左边第1列。请在程序的下划线处填入正确的内容,使程序得出正确的结果。(4空) #include <stdio.h> #define N 4 void fun(int (*t)[N]) { int i,j,x; for (i=0;i<N;i++) { x=_______①__________; for (j=_____②______;j>0;j--) t[i][j]=t[i][j-1]; __________③_________; } } main() { int i,j,t[ ][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}; printf("The original array: "); for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%2d ",t[i][j]); printf(" "); } __________④__________ printf(" The result is: "); for(i=0;i<N;i++) { for (j=0;j<N;j++) printf("%2d ",t[i][j]); printf(" "); } } 【答案】①t[i][N-1] ②N-1 ③t[i][0]=x ④fun(t); (4)函数fun的作用是:参数xx的前10个元素已经按升序排好序,将参数num按升序插入到数组xx中。请在程序的下划线处填入正确的内容,使程序得出正确的结果。(3空) #include <stdio.h> void func(int xx[], int num) { int n1,n2,pos,i,j; pos=xx[9]; if (num > pos) xx[10] = _______①______; else { for(i=0;i<10;i++) { if(xx[i]>num){ n1=xx[i]; xx[i]=num; for(j=i+1;j<11;j++){ n2=xx[j]; xx[j] = n1; ________②________; } ______③_______; } } } } main() { int xx[11] = {2,5,7,10,17,51,63,73,85,99}; int i,num; printf("original array is: "); for(i=0;i<10;i++) printf("%5d",xx[i]); printf(" "); printf("insert a new number:"); scanf("%d", &num); func(xx, num); for(i=0;i<11;i++) printf("%5d", xx[i]); printf(" "); } 【答案】①num ②n1=n2 ③break (5)下列程序的功能是将十进制正整数转换成十六进制。请填空。(3空) #include<stdio.h> #include<string.h> void c10_16(char *p,int b) { int j; while(b>0) {j=b%16; if(______①_______) *p=j+48; else *p=j+55; b=b/16; _______②_______;} *p='\0'; } main() { int a,i; char s[20]; printf("Input a: "); scanf("%d",&a); c10_16(s,a); for(i=________③________;i>=0;i--) printf("%c",*(s+i)); printf(" "); } 【答案】①j<10 ②p++ ③strlen(s)-1 3.阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构,请在作答处指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共20分)。 (1)在此程序中,函数fum()的功能是根据整型参数m的值,计算如下公式。 例如,若m中的值为5,则应输出0.536389。请改正程序中的错误,使它能得出正确的结果。以下程序只允许修改两行。 L1 #include <stdio.h> L2 double fun (int m) L3 {double y=1.0; L4 int i; L5 for(i=2;i<m;i++) L6 y-=1/(i*i);; L7 return(y); L8 } L9 main() L10 {int n=5; L11 printf(" The result is% lf ", fun(n)); L12 } ①___________________________________________________ ②___________________________________________________ 【答案】①L5 for(i=2;i<=m;i++) ②L6 y-= 1.0/(i*i); (2)下列给定程序中,函数fun()的功能是:将n个无序整数从小到大排序。请改正程序指定部位的错误,使它能得到正确结果。以下程序只允许修改三行。 L1 #include <stdio.h> L2 void fun(int n, int *a) L3 { L4 int i,j,p,t; L5 for(j=0;j<n-1;j++) L6 { p=j; L7 for(i=j+1;i<n-1;i++) L8 if(a[p]>a[i]) L9 t=i; L10 if(p!=j) L11 { t=a[j]; L12 a[j]=a[p]; L13 a[p]=t; } L14 } L15 } L16 void putarr(int n, int *z) L17 { int i; L18 for(i=1;i<=n;i++,z++) L19 { printf("%4d",z); L20 if(!(i%10)) L21 printf(" "); } L22 printf(" "); } L23 void main() L24 { L25 int aa[20]={9,3,0,4,1,2,5,6,8,10,7,52,33,42},n=11; L26 printf(" Before sorting %d numbers: ",n); L27 putarr(n,aa); L28 fun(n,aa); L29 printf(" After sorting %d numbers: ",n); L30 putarr(n,aa); } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 【答案】①L7 for(i=j+1;i<n;i++) ②L9 p=i; ③L19 { printf("%4d",*z); (3)如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。下列程序的功能是求出3000以内的全部亲密数。以下程序只允许修改两行。 L1 #include<stdio.h> L2 int main() L3 { L4 int a,i,b,n; printf("There are following friendly–numbers pair smaller than 3000: "); L5 for(a=1;a<3000;a++) L6 { L7 for(b=0,i=1;i<=a/2;i++) L8 if(!(a%i)) L9 b+=i+1; L10 for(n=0,i=1;i<=b/2;i++) L11 if(!(b%i)) L12 n+=i; L13 if(n==a||a<b) L14 printf("%4d..%4d ",a,b); L15 } L16 } ①___________________________________________________ ②___________________________________________________ 【答案】①L9 b+=i; ②L13 if(n==a&&a<b) (4)下面程序的功能是:验证2000以内的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立) 。以下程序只允许修改三行。 L1 #include<stdio.h> L2 #include<math.h> L3 int fflag(int n); L4 int main() L5 { L6 int i,n; L7 for(i=4;i<=2000;i+=2) L8 { L9 for(n=2;n<i;n++) L10 if(fflag(n)) L11 if(fflag(i)) L12 { L13 printf("%14d=%d+%d ",i,n,i-n); L14 continue; } L15 if(n==i) printf("error %d ",i); } L16 } L17 int fflag(int i) L18 {int j; L19 if(i<=1)return 0; L20 if(i==2)return 1; L21 if(!(i%2))return 0; L22 for(j=3;j<=(int)(sqrt((double)i)+1);j+=2) L23 if(i%j)return 0; L24 return 1; } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 【答案】①L11 if(fflag(i-n)) ②L14 break; } ③L23 if(!(i%j))return 0; 三、程序设计题(本大题共2小题,合计20分) 1.下列程序的功能是:创建一个链表,链表中每个节点都包含一个0或1。这个链表的数字是二进制数字的列表。返回链表中数字的十进制值。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; int getDecimalValue(struct ListNode* head) { struct ListNode* curr; int result; __________①___________; result = 0; while (curr != NULL) { result = ____________②___________; ___________③_____________; } return result; } 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 = _____________④____________; node->val = __________⑤____________; node->next = NULL; if (head == NULL) { head = node; tail = node; } else { tail->next = node; tail = node; } } return head; } void printBinary(struct ListNode* head) { struct ListNode* curr; curr = head; while (curr != NULL) { printf("%d", curr->val); curr = curr->next; } } main() { int len, i; int* arr; struct ListNode* head; int decimal; printf("===== 二进制链表转十进制 ===== "); printf("请输入二进制数的位数:"); scanf("%d", &len); arr = (int*)malloc(len * sizeof(int)); printf("请输入 %d 位二进制数(只能输入 0 或 1): ", len); for (i = 0; i < len; i++) { scanf("%d", &arr[i]); } head = createList(arr, len); printf(" 二进制链表:"); printBinary(head); decimal = getDecimalValue(head); printf(" 转换后的十进制:%d ", decimal); free(arr); } 【答案】①curr = head ②result * 2 + curr->val ③curr = curr->next ④(struct ListNode*)malloc(sizeof(struct ListNode)) ⑤arr[i] 2.下列程序的功能是:创建一个长度为偶数的链表,求链表中孪生节点对的最大和。孪生节点对是第i个节点和第(n-1-i)个节点的和。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; int pairSum(struct ListNode* head) { struct ListNode* slow; struct ListNode* fast; struct ListNode* prev; struct ListNode* curr; struct ListNode* next; int max_sum; int sum; slow = head; fast = head; while (fast != NULL && fast->next != NULL) { slow = slow->next; _____________①_______________; } prev = NULL; __________②___________; while (curr != NULL) { _________③________; curr->next = prev; prev = curr; curr = next; } ________④_________; while (prev != NULL) { _____________⑤___________; if (sum > max_sum) { max_sum = sum; } head = head->next; prev = prev->next; } return max_sum; } 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; } } main() { int len, i; int* arr; struct ListNode* head; int result; printf("===== 求链表孪生节点对最大和 ===== "); printf("请输入链表节点个数(必须是偶数):"); scanf("%d", &len); arr = (int*)malloc(len * sizeof(int)); printf("请输入 %d 个整数: ", len); for (i = 0; i < len; i++) { scanf("%d", &arr[i]); } head = createList(arr, len); printf(" 你输入的链表:"); printList(head); result = pairSum(head); printf(" 最大孪生节点和为:%d ", result); free(arr); } 【答案】①fast = fast->next->next ②curr = slow ③next = curr->next ④max_sum = 0 ⑤sum = head->val + prev->val 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 编写说明:本冲刺卷严格依据湖南省计算机应用类高考考纲编写,依托《C语言程序设计》(高等教育出版社第5版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。 湖南省计算机应用类 《C语言程序设计》 高频考点冲刺卷(一)解析版 时间:60分钟 总分:100分 班级:_________ 姓名:________ 学号:________ 成绩:_________ 一、单选题(在本题的每一小题的备选答案中,只有一个答案是正确的。本大题共5小题,每小题2分,共10分) 1.若有整型变量a,执行:int *pa=&a;后,以下scanf语句中能正确为变量a读入数据的是( ) A.scanf(“%d”,pa); B.scanf(“%d”,a); C.scanf(“%d”,&pa); D.scanf(“%d”,*pa); 2.设有以下语句,其中对数组元素a不正确的引用是:( )(其中0≤i<10) int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a; A.a[p-a] B.*(&a[i]) C.p[i] D.*(*(a+i)) 3.若有定义:int a=25,b=14,c=19;,则执行以下语句的输出结果是( ) a<=25&&b--<=2&&c?printf("***a=%d,b=%d,c=%d ",a,b,c):printf("###a=%d,b=%d,c=%d ",a,b,c); A.***a=25,b=13,c=19 B.***a=26,b=14,c=19 C.###a=25,b=13,c=19 D.###a=26,b=14,c=19 4.设有定义int a[3][3];和函数调用语句sort(a,3);则下列选项中正确的函数声明是( ) A.void sort(int a,n); B.void sort(int a[ ][ ],int n); C.void sort(int a[ ][3],int n); D.void sort(int a[ ][3],n); 5.有函数定义:int func(int *p),x和y是int型变量,则正确的调用是( ) A.y=func(x); B.func(x); C.func()=x; D.y=func(&x); 二、程序分析题(本大题共3小题,共70分) 1.阅读程序,写出运行结果(每空2分,共14分) (1)下列程序的运行结果是_________________。 #include <stdio.h> void inv(int *p,int n) { int *i,*j,m=(n-1)/2,t; j=p+n-1; for(i=p;i<p+m;i++,j--) { t=*i;*i=*j;*j=t;} } void main() { int i; int a[6]={3,5,7,0,6,2}; inv(a,6); for(i=0;i<6;i++) { printf("%d",a[i]); } } (2)下列程序的运行结果是_________________。 #include <stdio.h> int main() { char s[] = "01234"; int sum = 0,i; for (i = 0; s[i]; i++) { if (i % 2 == 0) sum += s[i] - '0'; } printf("%d ", sum); } (3)下列程序的运行结果是_________________。 #include <stdio.h> main() { char s[] = "XYZ"; int shift = 3,i; for (i = 0; s[i]; i++) { s[i] = ((s[i] - 'A' + shift) % 26) + 'A'; if (i % 2 == 0) s[i] = s[i] + 1; } printf("%s ", s); } (4)下列程序的运行结果是_________________。 #include <stdio.h> struct pair { int first,second; }; struct pair get_min_max(int*array, int len) { int i; struct pair res; res.first=array[0]; res.second=array[0]; for(i=1;i<len;i++) { if(array[i]<res.first) res.first=array[i]; if(array[i]>res.second) res.second=array[i]; } return res; } main() { int array[5]={9,1,3,4}; struct pair min_max =get_min_max(array,5); printf("min=%d,max=%d ",min_max.first, min_max.second); } (5)下列程序的运行结果是_________________。 #include<stdio.h> #define M 4 void fun(int *a) { int i,j,k,m; for(i=M;i>0;i--) { k=*(a+M-1); for(j=M-1;j>=0;j--) *(a+j+1)=*(a+j); *a=k; for(m=0;m<M;m++) printf("%d ",*(a+m)); printf(" "); } } main() { int a[M]={1,2,3,4}; fun(a);} (6)下列程序的运行结果是_________________。 #include<stdio.h> #include <stdio.h> short fun(char *p1,char*p2) { while(*p1&&*p2&&p1!=p2) p1++,p2++; if(*p1-*p2)return(*p2-*p1); return 0; } short main() {printf("%d",fun("abeTAA","abcta")) ; return 0; } (7)下列程序的运行结果是_________________。 #include <stdio.h> #include <string.h> struct Node { int data;int *ptr;}; void process(struct Node *n, int *arr, int size) { int i; static int count = 0; for(i = 0; i < size; i++) { if(arr[i] % 2 == 0) { n->data += arr[i] + count; } else { n->data -= arr[i] - count;} } count++; *(n->ptr) = n->data; } main() { int a = 10, b = 20; int arr[] = {1, 2, 3, 4, 5}; struct Node node1 = {5, &a}; struct Node node2 = {8, &b}; process(&node1, arr, 3); process(&node2, arr + 1, 3); process(&node1, arr + 2, 2); printf("node1.data=%d, node2.data=%d ", node1.data, node2.data); } 2.程序填空。按照题目要求,将正确内容填入程序空白处,使程序完整(每空2分,共36分)。 (1)程序中将m个人的成绩存放在score数组中,请编写函数fun(),它的功能是将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。(4空) #include <stdio.h> #include <string.h> #include <stdlib.h> int fun(int score[],int m, int below[]) { int i,j=0; float av=0.0; for(i=0;i<m;i++) av=________①_______; for(i=0;i<m;i++) if(score[i]<av) _________②_________; return j; } void main() { FILE * wf; int i, n, below[9]; int score[9]={10,20,30,40,50,60,70,80,90}; system("CLS"); n=_________③__________; printf(" Below the average score are:"); for(i=0;i<n;i++) printf("% d",below[i]); wf=fopen("out.dat","w"); for(i=0;i<n;i++) fprintf(___________④____________); fclose(wf); } (2)下列程序的功能是在屏幕上显示杨辉三角形。(4空) #include<stdio.h> int c(int x, int y) { int z; if (_______①_______) return 1; z = c(________②_______) + c(x - 1, y); return z; } int main() { int i, j, n = 13; printf("N="); while (n>12) scanf("%d", &n); for (i = 0; i <= n; i++) { for (j = 0; j<_____③______; j++) printf(" "); for (j = 1; j<______④______; j++) printf("%4d", c(i, j)); printf(" "); } } (3)在此程序中,函数fun()的功能是将NxN矩阵中的元素按列向右移动1个位置,右边被移出矩阵的元素绕回左边第1列。请在程序的下划线处填入正确的内容,使程序得出正确的结果。(4空) #include <stdio.h> #define N 4 void fun(int (*t)[N]) { int i,j,x; for (i=0;i<N;i++) { x=_______①__________; for (j=_____②______;j>0;j--) t[i][j]=t[i][j-1]; __________③_________; } } main() { int i,j,t[ ][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}; printf("The original array: "); for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%2d ",t[i][j]); printf(" "); } __________④__________ printf(" The result is: "); for(i=0;i<N;i++) { for (j=0;j<N;j++) printf("%2d ",t[i][j]); printf(" "); } } (4)函数fun的作用是:参数xx的前10个元素已经按升序排好序,将参数num按升序插入到数组xx中。请在程序的下划线处填入正确的内容,使程序得出正确的结果。(3空) #include <stdio.h> void func(int xx[], int num) { int n1,n2,pos,i,j; pos=xx[9]; if (num > pos) xx[10] = _______①______; else { for(i=0;i<10;i++) { if(xx[i]>num){ n1=xx[i]; xx[i]=num; for(j=i+1;j<11;j++){ n2=xx[j]; xx[j] = n1; ________②________; } ______③_______; } } } } main() { int xx[11] = {2,5,7,10,17,51,63,73,85,99}; int i,num; printf("original array is: "); for(i=0;i<10;i++) printf("%5d",xx[i]); printf(" "); printf("insert a new number:"); scanf("%d", &num); func(xx, num); for(i=0;i<11;i++) printf("%5d", xx[i]); printf(" "); } (5)下列程序的功能是将十进制正整数转换成十六进制。请填空。(3空) #include<stdio.h> #include<string.h> void c10_16(char *p,int b) { int j; while(b>0) {j=b%16; if(______①_______) *p=j+48; else *p=j+55; b=b/16; _______②_______;} *p='\0'; } main() { int a,i; char s[20]; printf("Input a: "); scanf("%d",&a); c10_16(s,a); for(i=________③________;i>=0;i--) printf("%c",*(s+i)); printf(" "); } 3.阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构,请在作答处指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共20分)。 (1)在此程序中,函数fum()的功能是根据整型参数m的值,计算如下公式。 例如,若m中的值为5,则应输出0.536389。请改正程序中的错误,使它能得出正确的结果。以下程序只允许修改两行。 L1 #include <stdio.h> L2 double fun (int m) L3 {double y=1.0; L4 int i; L5 for(i=2;i<m;i++) L6 y-=1/(i*i);; L7 return(y); L8 } L9 main() L10 {int n=5; L11 printf(" The result is% lf ", fun(n)); L12 } ①___________________________________________________ ②___________________________________________________ (2)下列给定程序中,函数fun()的功能是:将n个无序整数从小到大排序。请改正程序指定部位的错误,使它能得到正确结果。以下程序只允许修改三行。 L1 #include <stdio.h> L2 void fun(int n, int *a) L3 { L4 int i,j,p,t; L5 for(j=0;j<n-1;j++) L6 { p=j; L7 for(i=j+1;i<n-1;i++) L8 if(a[p]>a[i]) L9 t=i; L10 if(p!=j) L11 { t=a[j]; L12 a[j]=a[p]; L13 a[p]=t; } L14 } L15 } L16 void putarr(int n, int *z) L17 { int i; L18 for(i=1;i<=n;i++,z++) L19 { printf("%4d",z); L20 if(!(i%10)) L21 printf(" "); } L22 printf(" "); } L23 void main() L24 { L25 int aa[20]={9,3,0,4,1,2,5,6,8,10,7,52,33,42},n=11; L26 printf(" Before sorting %d numbers: ",n); L27 putarr(n,aa); L28 fun(n,aa); L29 printf(" After sorting %d numbers: ",n); L30 putarr(n,aa); } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ (3)如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。下列程序的功能是求出3000以内的全部亲密数。以下程序只允许修改两行。 L1 #include<stdio.h> L2 int main() L3 { L4 int a,i,b,n; printf("There are following friendly–numbers pair smaller than 3000: "); L5 for(a=1;a<3000;a++) L6 { L7 for(b=0,i=1;i<=a/2;i++) L8 if(!(a%i)) L9 b+=i+1; L10 for(n=0,i=1;i<=b/2;i++) L11 if(!(b%i)) L12 n+=i; L13 if(n==a||a<b) L14 printf("%4d..%4d ",a,b); L15 } L16 } ①___________________________________________________ ②___________________________________________________ (4)下面程序的功能是:验证2000以内的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立) 。以下程序只允许修改三行。 L1 #include<stdio.h> L2 #include<math.h> L3 int fflag(int n); L4 int main() L5 { L6 int i,n; L7 for(i=4;i<=2000;i+=2) L8 { L9 for(n=2;n<i;n++) L10 if(fflag(n)) L11 if(fflag(i)) L12 { L13 printf("%14d=%d+%d ",i,n,i-n); L14 continue; } L15 if(n==i) printf("error %d ",i); } L16 } L17 int fflag(int i) L18 {int j; L19 if(i<=1)return 0; L20 if(i==2)return 1; L21 if(!(i%2))return 0; L22 for(j=3;j<=(int)(sqrt((double)i)+1);j+=2) L23 if(i%j)return 0; L24 return 1; } ①___________________________________________________ ②___________________________________________________ ③___________________________________________________ 三、程序设计题(本大题共2小题,合计20分) 1.下列程序的功能是:创建一个链表,链表中每个节点都包含一个0或1。这个链表的数字是二进制数字的列表。返回链表中数字的十进制值。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; int getDecimalValue(struct ListNode* head) { struct ListNode* curr; int result; __________①___________; result = 0; while (curr != NULL) { result = ____________②___________; ___________③_____________; } return result; } 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 = _____________④____________; node->val = __________⑤____________; node->next = NULL; if (head == NULL) { head = node; tail = node; } else { tail->next = node; tail = node; } } return head; } void printBinary(struct ListNode* head) { struct ListNode* curr; curr = head; while (curr != NULL) { printf("%d", curr->val); curr = curr->next; } } main() { int len, i; int* arr; struct ListNode* head; int decimal; printf("===== 二进制链表转十进制 ===== "); printf("请输入二进制数的位数:"); scanf("%d", &len); arr = (int*)malloc(len * sizeof(int)); printf("请输入 %d 位二进制数(只能输入 0 或 1): ", len); for (i = 0; i < len; i++) { scanf("%d", &arr[i]); } head = createList(arr, len); printf(" 二进制链表:"); printBinary(head); decimal = getDecimalValue(head); printf(" 转换后的十进制:%d ", decimal); free(arr); } 2.下列程序的功能是:创建一个长度为偶数的链表,求链表中孪生节点对的最大和。孪生节点对是第i个节点和第(n-1-i)个节点的和。(每空2分,共10分) #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode* next; }; int pairSum(struct ListNode* head) { struct ListNode* slow; struct ListNode* fast; struct ListNode* prev; struct ListNode* curr; struct ListNode* next; int max_sum; int sum; slow = head; fast = head; while (fast != NULL && fast->next != NULL) { slow = slow->next; _____________①_______________; } prev = NULL; __________②___________; while (curr != NULL) { _________③________; curr->next = prev; prev = curr; curr = next; } ________④_________; while (prev != NULL) { _____________⑤___________; if (sum > max_sum) { max_sum = sum; } head = head->next; prev = prev->next; } return max_sum; } 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; } } main() { int len, i; int* arr; struct ListNode* head; int result; printf("===== 求链表孪生节点对最大和 ===== "); printf("请输入链表节点个数(必须是偶数):"); scanf("%d", &len); arr = (int*)malloc(len * sizeof(int)); printf("请输入 %d 个整数: ", len); for (i = 0; i < len; i++) { scanf("%d", &arr[i]); } head = createList(arr, len); printf(" 你输入的链表:"); printList(head); result = pairSum(head); printf(" 最大孪生节点和为:%d ", result); free(arr); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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