内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第99卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①C语言基础知识;②分支结构程序设计;③循环结构程序设计;④数组;⑤函数;⑥结构体和共用体;⑦指针、文件。
湖南省《计算机应用类专业综合考纲百套卷》 第99卷
《计算机编程语言——C语言》
课程综合卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共10小题,每题2分,共20分)
1.以下字符常量书写合法的是( )
A. '\079' B. '\x4g' C. ''' D. ""
【答案】C
【解析】A 八进制不能出现 9;B 十六进制无 g;D 是空字符串,不是字符常量;C 单引号转义字符合法。
2.执行 int m=064,n=027; int t=m&n; 变量 t 的值为( )
A. 16 B. 20 C. 24 D. 28
【答案】B
【解析】064 八进制 = 52,027 八进制 = 23;52 二进制 110100,23 二进制 010111;按位与结果 010100=20。
3.执行 int num=53; num-=num%=7; 最终 num 的值为( )
A. 0 B. 4 C. 6 D. 8
【答案】A
【解析】复合赋值自右向左,53%7=4,num=4;num=4-4=0。
4.下面表达式运算结果等于 0 的是( )
A. abs (-8) B. 15/4 C. 24%6 D. 5 || 0
【答案】C
【解析】A=8,B 整数除法 = 3,C 取余整除为 0,D 逻辑或结果 1。
5.以下关于算法特性描述错误的是( )
A. 有穷性:算法执行步骤必须有限
B. 确定性:相同输入每次运行输出完全一致
C. 必须有输入:任何算法至少提供一组外部输入
D. 可行性:每一步操作可机械执行实现
【答案】C
【解析】算法输入可为 0 个,如固定输出 “Hello” 的程序,无需外部输入。
6.设有语句:int a; float b=15.7; a = (int)b % 4; 执行后 a 的值为( )
A. 3 B. 0 C. 3.7 D. 1
【答案】A
【解析】(int) b 截断小数为 15;15%4=3。
7.设有输入语句 scanf("num=%d,score=%d",&a,&b);,要使 a=10、b=90,正确输入是( )
A. num=10,score=90 B. 10 90 C. num=10 90 D. 10,90
【答案】A
【解析】scanf 格式串内普通字符必须原样输入,逗号不能省略。
8.设有表达式 (a=2*6, a+=3), a*2 最终表达式的值、a 的值分别是( )
A. 15,30 B. 15,15 C. 30,15 D. 12,24
【答案】C
【解析】第一步 a=12;第二步 a=15;逗号取最右侧 a*2=30。
9.设有定义:int a=7,b=10; float c=4.0; 运算结果等于 1 的是( )
A. b/a B. a/c C. b/c D. a/b
【答案】A
【解析】b/a=10/7 整数除法 = 1;a/c=7/4.0=1.75;b/c=2.5;a/b=0。
10.设有定义int x=7,y=4,z=6; x %= y + z; 执行后 x 的值是( )
A. 7 B. 4 C. 0 D. 17
【答案】A
【解析】y+z=10;7%10 余数 7,x=7。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int recursive(int n)
{ static int s = 1;
if(n <= 1)
return s;
s *= n;
return recursive(n - 1);}
int *getResult(int num)
{ static int res;
res = recursive(num);
return &res;}
int main()
{ int *p = getResult(5);
printf("%d", *p);
return 0; }
【答案】120
2.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int a,b,c;
a = 14;
b = 20;
c = 0;
if(a > b)
c = a - b;
else if(b - a >= 7)
{
c = b / a;
if(c % 2 == 1)
a += c;
else
a -= c;
}
else
c = a + b;
printf("a=%d,b=%d,c=%d",a,b,c);
return 0;
}
【答案】a=14,b=20,c=34
3.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int num[9] = {19,23,12,7,34,15};
int i, sum, cnt, val, digit,s;
sum = 0;
cnt = 0;
for(i = 0; i < 9; i++)
{
if(num[i] == 0)
continue;
val = num[i];
s = 0;
while(val > 0)
{
digit = val % 10;
s = s + digit * digit;
val = val / 10;
}
if(s < 30)
{
sum = sum + num[i];
cnt = cnt + 1;
}
}
printf("%d", sum / cnt);
return 0;
}
【答案】21
4.下列程序的运行结果是__________________。
#include <stdio.h>
int gcd(int a, int b)
{
int t;
if(b == 0)
return a;
t = a % b;
return gcd(b, t);
}
void batchCalc(int pair[][2], int res[], int n)
{
int i;
for(i = 0; i < n; i++)
res[i] = gcd(pair[i][0], pair[i][1]);
}
int main(void)
{
int data[4][2] = {18,24, 35,14, 48,32, 27,15};
int output[4];
int i;
batchCalc(data, output, 4);
for(i = 0; i < 4; i++)
printf("%d ", output[i]);
return 0;
}
【答案】6 7 16 3
5.下列程序的运行结果是__________________。
#include <stdio.h>
int splitDigit(int num, int buf[], int pos)
{
int d;
if(num == 0)
return pos;
d = num % 10;
buf[pos] = d;
printf("%d ", d);
pos = splitDigit(num / 10, buf, pos + 1);
return pos;
}
int calcSquareSum(int arr[], int len)
{
int i, sum;
sum = 0;
for(i = 0; i < len; i++)
sum = sum + arr[i] * arr[i];
return sum;
}
int main(void)
{
int digit[10];
int len, total;
len = splitDigit(4619, digit, 0);
total = calcSquareSum(digit, len);
printf(" %d", total);
return 0;
}
【答案】9 1 6 4 134
6.下列程序的运行结果是__________________。
#include <stdio.h>
int logArr[10];
int idx = 0;
int layer(int n)
{
int a, b;
if(n <= 2)
{
logArr[idx] = n;
idx = idx + 1;
return n;
}
if(n % 4 == 0)
a = layer(n / 2);
else
b = layer(n - 2);
logArr[idx] = n;
idx = idx + 1;
return n;
}
int main(void)
{
int i;
layer(10);
for(i = 0; i < idx; i++)
printf("%d ", logArr[i]);
return 0;
}
【答案】2 4 8 10
7.下列程序的运行结果是__________________。
#include <stdio.h>
#include <stdlib.h>
struct Node{int val;struct Node *next;};
struct Node* rec(int c){
struct Node *nd;
if(c<=0)return NULL;
nd=(struct Node*)malloc(sizeof(struct Node));
nd->val=c*3;
nd->next=rec(c-1);
return nd; }
int main(void)
{ struct Node *h,*cur,*del;
FILE *fp,*fr;
int arr[5],i,sum=0;
h=rec(5);
fp=fopen("rec.dat","wb");
cur=h;
while(cur)
{ fwrite(&cur->val,4,1,fp);
cur=cur->next;}
fclose(fp);
fr=fopen("rec.dat","rb");
fread(arr,4,5,fr);
for(i=4;i>=0;i--)
sum+=arr[i];
fclose(fr);
while(h)
{ del=h;h=h->next;
free(del);}
printf("%d",sum);
return 0; }
【答案】45
8.下列程序的运行结果是__________________。
#include <stdio.h>
#include <stdlib.h>
struct Node{int num;struct Node *next;};
int sub4(int x){return x-4;}
int add7(int x){return x+7;}
int main(void)
{
struct Node *n1,*n2;
int (*op[2])(int)={sub4,add7};
FILE *fp,*fr;
char buf[24];
n1=(struct Node*)malloc(sizeof(struct Node));
n2=(struct Node*)malloc(sizeof(struct Node));
n1->num=20;
n2->num=13;
n1->next=n2;
n2->next=NULL;
fp=fopen("op.txt","w");
fprintf(fp,"%d%d",op[0](n1->num),op[1](n2->num));
fclose(fp);
fr=fopen("op.txt","r");
fgets(buf,24,fr);
printf("%s",buf);
free(n1);free(n2);
return 0; }
【答案】1620
9.下列程序的运行结果是__________________。
#include <stdio.h>
int isPrime(int n, int i)
{
if(n <= 1) return 0;
if(i * i > n) return 1;
if(n % i == 0) return 0;
return isPrime(n, i + 1);
}
int main(void)
{
int arr[9] = {4, 5, 7, 10, 11, 13, 16, 17, 19};
int *p = arr;
int sum = 0, i;
for(i = 0; i < 9; i++)
{
int val = *(p + i);
if(isPrime(val, 2))
sum += val * val;
}
printf("%d", sum);
return 0;
}
【答案】1014
10.下列程序的运行结果是__________________。
#include <stdio.h>
void bubbleSort(int *arr, int n)
{
int i, j, tmp;
for(i = 0; i < n - 1; i++)
{
for(j = 0; j < n - i - 1; j++)
{
if(*(arr + j) > *(arr + j + 1))
{
tmp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = tmp;
}
}
}
}
int main(void)
{
int src[5] = {9, 2, 14, 1, 7};
int buf[5], sumAbs = 0, i;
FILE *fp;
fp = fopen("sort.dat", "wb");
fwrite(src, sizeof(int), 5, fp);
fclose(fp);
fp = fopen("sort.dat", "rb");
fread(buf, sizeof(int), 5, fp);
fclose(fp);
remove("sort.dat");
bubbleSort(buf, 5);
for(i = 0; i < 4; i++)
{
int diff = buf[i + 1] - buf[i];
if(diff < 0) diff = -diff;
sumAbs += diff;
}
printf("%d", sumAbs);
return 0;
}
【答案】13
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计40分)
1.下列程序代码的功能是:5 行 5 列二维数组模拟简易迷宫,1为通路,0为墙壁。规定第一行第一个为入口,最后一行最后一个为出口。用行指针编写函数,判断从入口到出口是否全部连通(通路),输出迷宫是否可通行。
#include <stdio.h>
int isPass(int (*maze)[5], int row)
{
int i, j;
if (_______①______|| ________②________)
return 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < 5; j++)
{
if (_________③________ && _______④________)
return 0;
}
}
return 1;
}
int main()
{
int maze[5][5] = {{1,1,0,0,0},{0,1,1,0,0},
{0,0,1,1,0},{0,0,0,1,1},{0,0,0,0,1}};
if (____________⑤___________)
printf("迷宫可以通行
");
else
printf("迷宫无法通行
");
return 0; }
【答案】①maze[0][0] == 0 ②maze[4][4] == 0
③i==j ④maze[i][j] == 0
⑤isPass(maze, 5)
2.孪生素数:两个素数差值等于 2,如 (3,5)、(5,7)。输入上限 N,双层循环判断素数,筛选所有孪生素数组合输出。
#include <stdio.h>
int main(void)
{
int n, i, j, k, flag1, flag2;
printf("输入数字上限N:");
scanf("%d", &n);
if(n < 5)
{
printf("无孪生素数对
");
return 0;
}
printf("1~%d内孪生素数对:
", n);
for(i = 2; i + 2 <= n; i++)
{
flag1 = 1;
for(k = 2; k*k <= i; k++)
{
if(________①_______)
{
flag1 = 0;
break;
}
}
if(flag1 == 0)
________②________
j = _______③_______
_________④__________
for(k = 2; k*k <= j; k++)
{
if(j % k == 0)
{
flag2 = 0;
________⑤________
}
}
if(flag2 == 1)
printf("(%d,%d) ", i, j);
}
printf("
");
return 0;
}
【答案】①i % k == 0 ②continue; ③i + 2;
④flag2 = 1; ⑤break;
3.下列程序的功能是:计算数组内所有互质数字对的总数量(两数最大公约数= 1)
#include <stdio.h>
int main(void)
{
int arr[8];
int i, j, a, b, temp, gcd, pairCount;
________①________
printf("输入8个正整数:");
for(i = 0; i < 8; i++)
scanf("%d", &arr[i]);
for(i = 0; i < 8; i++)
{
for(j = _______②______; j < 8; j++)
{
a = arr[i];
b = arr[j];
while(b != 0)
{
temp = _______③_______
a = b;
b = temp;
}
_______④_______
if(gcd == 1)
________⑤________
}
}
printf("数组内互质数字对总数量:%d
", pairCount);
return 0;
}
【答案】①pairCount = 0; ②i + 1 ③a % b;
④gcd = a; ⑤pairCount++;
4.快乐数定义:反复拆分数字平方求和,最终结果为 1;循环出现 4 则不是快乐数,下列程序的功能是删除全部非快乐数节点,对剩余所有数字计算最小公倍数 LCM 并输出结果。
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* createList(int arr[], int n)
{
ListNode dummy;
ListNode *tail;
int i;
dummy.next = NULL;
tail = &dummy;
for (i = 0; i < n; i++)
{
tail->next = (ListNode*)malloc(sizeof(ListNode));
tail = tail->next;
tail->val = arr[i];
tail->next = NULL;
}
return dummy.next;
}
int digitSquareSum(int n)
{
int sum, g;
sum = 0;
while (n > 0)
{
g = n % 10;
________①________
n /= 10;
}
return sum;
}
int isHappy(int n)
{
while (n != 1 && n != 4)
n = __________②__________
return n == 1;
}
int gcd(int a, int b)
{
int t;
while (b != 0)
{
t = a % b;
a = b;
b = t;
}
return a;
}
int lcm(int a, int b)
{
return _________③__________
}
ListNode* filterHappy(ListNode* head)
{
ListNode dummy;
ListNode *prev, *tmp;
dummy.next = head;
prev = &dummy;
while (head != NULL)
{
if (___________④___________)
{
tmp = head;
head = head->next;
free(tmp);
prev->next = head;
}
else
{
prev = head;
head = head->next;
}
}
return dummy.next;
}
int main(void)
{
int arr[] = {7,19,22,28,31,44};
int len = 6;
ListNode *head, *p;
int res;
head = createList(arr, len);
p = filterHappy(head);
res = p->val;
__________⑤___________
while (p != NULL)
{
res = lcm(res, p->val);
p = p->next;
}
printf("剩余快乐数最小公倍数:%d", res);
return 0;
}
【答案】①sum += g * g; ②digitSquareSum(n);
③a / gcd(a, b) * b; ④!isHappy(head->val)
⑤p = p->next;
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是输入若干个学生信息,保存到指定磁盘文件中,要求将奇数条学生信息从磁盘中读入并显示在屏幕上。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 struct student_type
L3 {
L4 char name[10];
L5 int num;
L6 int age;
L7 }stud;
L8 void save(char *name, int n)
L9 {
L10 FILE *fp;
L11 int i;
L12 if ((fp = fopen(name, "wb")) == NULL)
L13 {
L14 printf("cannot open file
");
L15 exit(0);
L16 }
L17 for (i = 0; i < n; i++)
L18 if (fwrite(&stud[i], sizeof(struct student_type), 1, fp) != 1)
L19 printf("file write error
");
L20 fclose(fp);
L21 }
L22 main()
L23 {
L24 int i, n;
L25 FILE *fp;
L26 char filename[50];
L27 printf("please input filename:
");
L28 scanf("%s", filename);
L29 printf("please input the number of students:
");
L30 scanf("%d", &n);
L31 printf("please input name,number,age:
");
L32 for (i = 0; i < n; i++)
L33 {
L34 printf("NO%d", i + 1);
L35 scanf("%s%d%d", stud[i].name, stud[i].num, stud[i].age);
L36 save(filename, n);
L37 } if ((fp = fopen(filename, "rb")) == NULL)
L38 {
L39 printf("can not open file
");
L40 exit(0);
L41 }
L42 for (i = 0; i < n; i += 2)
L43 {
L44 fseek(i *sizeof(struct student_type), 0);
L45 fread(&stud[i], sizeof(struct student_type), 1, fp);
L46 printf("%-10s%5d%5d
",stud[i].name,stud[i].num,stud[i].age);
L47 }
L48 fclose(fp);
L49 }
【答案】①L7 }stud[10];
②L35 scanf("%s%d%d", stud[i].name, &stud[i].num, &stud[i].age);
③L44 fseek(fp, i *sizeof(struct student_type), 0);
2.下列程序的功能是:指针实现埃氏素数筛,筛选 1~100 全部素数,二进制文件存储素数集合后读取输出。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 #include <stdlib.h>
L3 int main(void){
L4 int max=100,i,j,*flag,count=0;
L5 FILE *fp;
L6 flag=(int*)calloc(max+1,sizeof(int));
L7 for(i=2;i<=max;i++){
L8 if(flag+i==0){
L9 count++;
L10 for(j=i*i;j<=max;j+=i)
L11 flag+j=1;
L12 }
L13 }
L14 fp=fopen("prime.dat","wb");
L15 fwrite(&count,sizeof(int),1,fp);
L16 for(i=2;i>=max;i++)
L17 if(*(flag+i)==0)
L18 fwrite(&i,sizeof(int),1,fp);
L19 fclose(fp);
L20 fp=fopen("prime.dat","rb");
L21 fread(&count,sizeof(int),1,fp);
L22 printf("1~100素数总个数:%d
素数列表:",count);
L23 for(i=0;i<count;i++){
L24 int num;
L25 fread(&num,sizeof(int),1,fp);
L26 printf("%d ",num);
L27 }
L28 fclose(fp);
L29 free(flag);
L30 remove("prime.dat");
L31 return 0;
L32 }
【答案】①L8 if(*(flag+i)==0){
②L11 *(flag+j)=1;
③L16 for(i=2;i<=max;i++)
3.下列程序的功能是:录入 3 名学生(学号、成绩),二进制保存全部数据,读取后输出最高分学生信息。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 struct{
L3 int id;
L4 int score;
L5 }Stu;
L6 int main(void){
L7 Stu s[3],*maxp,*p;
L8 int i;
L9 FILE *fp;
L10 for(i=0;i<3;i++){
L11 printf("输入第%d个学生 学号 成绩:",i+1);
L12 scanf("%d%d",&s[i].id,&s[i].score);
L13 }
L14 maxp=s[0];
L15 for(p=s;p<s+3;p++){
L16 if(p->score>maxp->score)
L17 maxp=p;
L18 }
L19 fp=fopen("stu_bin.dat","wb");
L20 fwrite(s,sizeof(Stu),3,fp);
L21 fclose(fp);
L22 fp=fopen("stu_bin.dat","rb");
L23 fread(s,sizeof(Stu),3,fp);
L24 fclose(fp);
L25 printf("
最高分学生:学号%d 成绩%d",maxp->id,maxp->score);
L26 remove("stu_bin.dat");
L27 return 0;
L28 }
【答案】①L2 typedef struct{
②L14 maxp=&s[0];
4.约瑟夫环问题:输入总人数 n、报数上限 k,模拟约瑟夫环出圈规则,依次输出每一轮出圈编号,最后输出幸存者。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 #include <stdlib.h>
L3 int main(void)
L4 {
L5 int n,k,i,count=0,cur=0,out=0;
L6 int *people;
L7 printf("输入总人数n、报数k:");
L8 scanf("%d%d",&n,&k);
L9 people = (int*)malloc(n*sizeof(int));
L10 if(people == NULL)
L11 {
L12 printf("内存分配失败");
L13 return -1;
L14 }
L15 for(i=0;i<n;i++)
L16 *(people+i) = i+1;
L17 while(out < n-1)
L18 {
L19 if(*(people+cur) == 0)
L20 count++;
L21 if(count == k)
L22 {
L23 printf("出圈编号:%d
",*(people+cur));
L24 *(people+cur) = 0;
L25 count = 0;
L26 out++;
L27 }
L28 cur = cur+1;
L29 }
L30 for(i=0;i<n;i++)
L31 if(*(people+i) != 0)
L32 printf("最终幸存者:%d",*(people+i));
L33 free(people);
L34 return 0;
L35 }
【答案】①L19 if(*(people+cur) != 0)
②L28 cur = (cur+1)%n;
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第99卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①C语言基础知识;②分支结构程序设计;③循环结构程序设计;④数组;⑤函数;⑥结构体和共用体;⑦指针、文件。
湖南省《计算机应用类专业综合考纲百套卷》 第99卷
《计算机编程语言——C语言》
课程综合卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共10小题,每题2分,共20分)
1.以下字符常量书写合法的是( )
A. '\079' B. '\x4g' C. ''' D. ""
2.执行 int m=064,n=027; int t=m&n; 变量 t 的值为( )
A. 16 B. 20 C. 24 D. 28
3.执行 int num=53; num-=num%=7; 最终 num 的值为( )
A. 0 B. 4 C. 6 D. 8
4.下面表达式运算结果等于 0 的是( )
A. abs (-8) B. 15/4 C. 24%6 D. 5 || 0
5.以下关于算法特性描述错误的是( )
A. 有穷性:算法执行步骤必须有限
B. 确定性:相同输入每次运行输出完全一致
C. 必须有输入:任何算法至少提供一组外部输入
D. 可行性:每一步操作可机械执行实现
6.设有语句:int a; float b=15.7; a = (int)b % 4; 执行后 a 的值为( )
A. 3 B. 0 C. 3.7 D. 1
7.设有输入语句 scanf("num=%d,score=%d",&a,&b);,要使 a=10、b=90,正确输入是( )
A. num=10,score=90 B. 10 90 C. num=10 90 D. 10,90
8.设有表达式 (a=2*6, a+=3), a*2 最终表达式的值、a 的值分别是( )
A. 15,30 B. 15,15 C. 30,15 D. 12,24
9.设有定义:int a=7,b=10; float c=4.0; 运算结果等于 1 的是( )
A. b/a B. a/c C. b/c D. a/b
10.设有定义int x=7,y=4,z=6; x %= y + z; 执行后 x 的值是( )
A. 7 B. 4 C. 0 D. 17
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int recursive(int n)
{ static int s = 1;
if(n <= 1)
return s;
s *= n;
return recursive(n - 1);}
int *getResult(int num)
{ static int res;
res = recursive(num);
return &res;}
int main()
{ int *p = getResult(5);
printf("%d", *p);
return 0; }
2.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int a,b,c;
a = 14;
b = 20;
c = 0;
if(a > b)
c = a - b;
else if(b - a >= 7)
{
c = b / a;
if(c % 2 == 1)
a += c;
else
a -= c;
}
else
c = a + b;
printf("a=%d,b=%d,c=%d",a,b,c);
return 0;
}
3.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
int num[9] = {19,23,12,7,34,15};
int i, sum, cnt, val, digit,s;
sum = 0;
cnt = 0;
for(i = 0; i < 9; i++)
{
if(num[i] == 0)
continue;
val = num[i];
s = 0;
while(val > 0)
{
digit = val % 10;
s = s + digit * digit;
val = val / 10;
}
if(s < 30)
{
sum = sum + num[i];
cnt = cnt + 1;
}
}
printf("%d", sum / cnt);
return 0;
}
4.下列程序的运行结果是__________________。
#include <stdio.h>
int gcd(int a, int b)
{
int t;
if(b == 0)
return a;
t = a % b;
return gcd(b, t);
}
void batchCalc(int pair[][2], int res[], int n)
{
int i;
for(i = 0; i < n; i++)
res[i] = gcd(pair[i][0], pair[i][1]);
}
int main(void)
{
int data[4][2] = {18,24, 35,14, 48,32, 27,15};
int output[4];
int i;
batchCalc(data, output, 4);
for(i = 0; i < 4; i++)
printf("%d ", output[i]);
return 0;
}
5.下列程序的运行结果是__________________。
#include <stdio.h>
int splitDigit(int num, int buf[], int pos)
{
int d;
if(num == 0)
return pos;
d = num % 10;
buf[pos] = d;
printf("%d ", d);
pos = splitDigit(num / 10, buf, pos + 1);
return pos;
}
int calcSquareSum(int arr[], int len)
{
int i, sum;
sum = 0;
for(i = 0; i < len; i++)
sum = sum + arr[i] * arr[i];
return sum;
}
int main(void)
{
int digit[10];
int len, total;
len = splitDigit(4619, digit, 0);
total = calcSquareSum(digit, len);
printf(" %d", total);
return 0;
}
6.下列程序的运行结果是__________________。
#include <stdio.h>
int logArr[10];
int idx = 0;
int layer(int n)
{
int a, b;
if(n <= 2)
{
logArr[idx] = n;
idx = idx + 1;
return n;
}
if(n % 4 == 0)
a = layer(n / 2);
else
b = layer(n - 2);
logArr[idx] = n;
idx = idx + 1;
return n;
}
int main(void)
{
int i;
layer(10);
for(i = 0; i < idx; i++)
printf("%d ", logArr[i]);
return 0;
}
7.下列程序的运行结果是__________________。
#include <stdio.h>
#include <stdlib.h>
struct Node{int val;struct Node *next;};
struct Node* rec(int c){
struct Node *nd;
if(c<=0)return NULL;
nd=(struct Node*)malloc(sizeof(struct Node));
nd->val=c*3;
nd->next=rec(c-1);
return nd; }
int main(void)
{ struct Node *h,*cur,*del;
FILE *fp,*fr;
int arr[5],i,sum=0;
h=rec(5);
fp=fopen("rec.dat","wb");
cur=h;
while(cur)
{ fwrite(&cur->val,4,1,fp);
cur=cur->next;}
fclose(fp);
fr=fopen("rec.dat","rb");
fread(arr,4,5,fr);
for(i=4;i>=0;i--)
sum+=arr[i];
fclose(fr);
while(h)
{ del=h;h=h->next;
free(del);}
printf("%d",sum);
return 0; }
8.下列程序的运行结果是__________________。
#include <stdio.h>
#include <stdlib.h>
struct Node{int num;struct Node *next;};
int sub4(int x){return x-4;}
int add7(int x){return x+7;}
int main(void)
{
struct Node *n1,*n2;
int (*op[2])(int)={sub4,add7};
FILE *fp,*fr;
char buf[24];
n1=(struct Node*)malloc(sizeof(struct Node));
n2=(struct Node*)malloc(sizeof(struct Node));
n1->num=20;
n2->num=13;
n1->next=n2;
n2->next=NULL;
fp=fopen("op.txt","w");
fprintf(fp,"%d%d",op[0](n1->num),op[1](n2->num));
fclose(fp);
fr=fopen("op.txt","r");
fgets(buf,24,fr);
printf("%s",buf);
free(n1);free(n2);
return 0; }
9.下列程序的运行结果是__________________。
#include <stdio.h>
int isPrime(int n, int i)
{
if(n <= 1) return 0;
if(i * i > n) return 1;
if(n % i == 0) return 0;
return isPrime(n, i + 1);
}
int main(void)
{
int arr[9] = {4, 5, 7, 10, 11, 13, 16, 17, 19};
int *p = arr;
int sum = 0, i;
for(i = 0; i < 9; i++)
{
int val = *(p + i);
if(isPrime(val, 2))
sum += val * val;
}
printf("%d", sum);
return 0;
}
10.下列程序的运行结果是__________________。
#include <stdio.h>
void bubbleSort(int *arr, int n)
{
int i, j, tmp;
for(i = 0; i < n - 1; i++)
{
for(j = 0; j < n - i - 1; j++)
{
if(*(arr + j) > *(arr + j + 1))
{
tmp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = tmp;
}
}
}
}
int main(void)
{
int src[5] = {9, 2, 14, 1, 7};
int buf[5], sumAbs = 0, i;
FILE *fp;
fp = fopen("sort.dat", "wb");
fwrite(src, sizeof(int), 5, fp);
fclose(fp);
fp = fopen("sort.dat", "rb");
fread(buf, sizeof(int), 5, fp);
fclose(fp);
remove("sort.dat");
bubbleSort(buf, 5);
for(i = 0; i < 4; i++)
{
int diff = buf[i + 1] - buf[i];
if(diff < 0) diff = -diff;
sumAbs += diff;
}
printf("%d", sumAbs);
return 0;
}
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计40分)
1.下列程序代码的功能是:5 行 5 列二维数组模拟简易迷宫,1为通路,0为墙壁。规定第一行第一个为入口,最后一行最后一个为出口。用行指针编写函数,判断从入口到出口是否全部连通(通路),输出迷宫是否可通行。
#include <stdio.h>
int isPass(int (*maze)[5], int row)
{
int i, j;
if (_______①______|| ________②________)
return 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < 5; j++)
{
if (_________③________ && _______④________)
return 0;
}
}
return 1;
}
int main()
{
int maze[5][5] = {{1,1,0,0,0},{0,1,1,0,0},
{0,0,1,1,0},{0,0,0,1,1},{0,0,0,0,1}};
if (____________⑤___________)
printf("迷宫可以通行
");
else
printf("迷宫无法通行
");
return 0; }
2.孪生素数:两个素数差值等于 2,如 (3,5)、(5,7)。输入上限 N,双层循环判断素数,筛选所有孪生素数组合输出。
#include <stdio.h>
int main(void)
{
int n, i, j, k, flag1, flag2;
printf("输入数字上限N:");
scanf("%d", &n);
if(n < 5)
{
printf("无孪生素数对
");
return 0;
}
printf("1~%d内孪生素数对:
", n);
for(i = 2; i + 2 <= n; i++)
{
flag1 = 1;
for(k = 2; k*k <= i; k++)
{
if(________①_______)
{
flag1 = 0;
break;
}
}
if(flag1 == 0)
________②________
j = _______③_______
_________④__________
for(k = 2; k*k <= j; k++)
{
if(j % k == 0)
{
flag2 = 0;
________⑤________
}
}
if(flag2 == 1)
printf("(%d,%d) ", i, j);
}
printf("
");
return 0;
}
3.下列程序的功能是:计算数组内所有互质数字对的总数量(两数最大公约数= 1)
#include <stdio.h>
int main(void)
{
int arr[8];
int i, j, a, b, temp, gcd, pairCount;
________①________
printf("输入8个正整数:");
for(i = 0; i < 8; i++)
scanf("%d", &arr[i]);
for(i = 0; i < 8; i++)
{
for(j = _______②______; j < 8; j++)
{
a = arr[i];
b = arr[j];
while(b != 0)
{
temp = _______③_______
a = b;
b = temp;
}
_______④_______
if(gcd == 1)
________⑤________
}
}
printf("数组内互质数字对总数量:%d
", pairCount);
return 0;
}
4.快乐数定义:反复拆分数字平方求和,最终结果为 1;循环出现 4 则不是快乐数,下列程序的功能是删除全部非快乐数节点,对剩余所有数字计算最小公倍数 LCM 并输出结果。
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* createList(int arr[], int n)
{
ListNode dummy;
ListNode *tail;
int i;
dummy.next = NULL;
tail = &dummy;
for (i = 0; i < n; i++)
{
tail->next = (ListNode*)malloc(sizeof(ListNode));
tail = tail->next;
tail->val = arr[i];
tail->next = NULL;
}
return dummy.next;
}
int digitSquareSum(int n)
{
int sum, g;
sum = 0;
while (n > 0)
{
g = n % 10;
________①________
n /= 10;
}
return sum;
}
int isHappy(int n)
{
while (n != 1 && n != 4)
n = __________②__________
return n == 1;
}
int gcd(int a, int b)
{
int t;
while (b != 0)
{
t = a % b;
a = b;
b = t;
}
return a;
}
int lcm(int a, int b)
{
return _________③__________
}
ListNode* filterHappy(ListNode* head)
{
ListNode dummy;
ListNode *prev, *tmp;
dummy.next = head;
prev = &dummy;
while (head != NULL)
{
if (___________④___________)
{
tmp = head;
head = head->next;
free(tmp);
prev->next = head;
}
else
{
prev = head;
head = head->next;
}
}
return dummy.next;
}
int main(void)
{
int arr[] = {7,19,22,28,31,44};
int len = 6;
ListNode *head, *p;
int res;
head = createList(arr, len);
p = filterHappy(head);
res = p->val;
__________⑤___________
while (p != NULL)
{
res = lcm(res, p->val);
p = p->next;
}
printf("剩余快乐数最小公倍数:%d", res);
return 0;
}
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.下列程序的功能是输入若干个学生信息,保存到指定磁盘文件中,要求将奇数条学生信息从磁盘中读入并显示在屏幕上。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 struct student_type
L3 {
L4 char name[10];
L5 int num;
L6 int age;
L7 }stud;
L8 void save(char *name, int n)
L9 {
L10 FILE *fp;
L11 int i;
L12 if ((fp = fopen(name, "wb")) == NULL)
L13 {
L14 printf("cannot open file
");
L15 exit(0);
L16 }
L17 for (i = 0; i < n; i++)
L18 if (fwrite(&stud[i], sizeof(struct student_type), 1, fp) != 1)
L19 printf("file write error
");
L20 fclose(fp);
L21 }
L22 main()
L23 {
L24 int i, n;
L25 FILE *fp;
L26 char filename[50];
L27 printf("please input filename:
");
L28 scanf("%s", filename);
L29 printf("please input the number of students:
");
L30 scanf("%d", &n);
L31 printf("please input name,number,age:
");
L32 for (i = 0; i < n; i++)
L33 {
L34 printf("NO%d", i + 1);
L35 scanf("%s%d%d", stud[i].name, stud[i].num, stud[i].age);
L36 save(filename, n);
L37 } if ((fp = fopen(filename, "rb")) == NULL)
L38 {
L39 printf("can not open file
");
L40 exit(0);
L41 }
L42 for (i = 0; i < n; i += 2)
L43 {
L44 fseek(i *sizeof(struct student_type), 0);
L45 fread(&stud[i], sizeof(struct student_type), 1, fp);
L46 printf("%-10s%5d%5d
",stud[i].name,stud[i].num,stud[i].age);
L47 }
L48 fclose(fp);
L49 }
2.下列程序的功能是:指针实现埃氏素数筛,筛选 1~100 全部素数,二进制文件存储素数集合后读取输出。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 #include <stdlib.h>
L3 int main(void){
L4 int max=100,i,j,*flag,count=0;
L5 FILE *fp;
L6 flag=(int*)calloc(max+1,sizeof(int));
L7 for(i=2;i<=max;i++){
L8 if(flag+i==0){
L9 count++;
L10 for(j=i*i;j<=max;j+=i)
L11 flag+j=1;
L12 }
L13 }
L14 fp=fopen("prime.dat","wb");
L15 fwrite(&count,sizeof(int),1,fp);
L16 for(i=2;i>=max;i++)
L17 if(*(flag+i)==0)
L18 fwrite(&i,sizeof(int),1,fp);
L19 fclose(fp);
L20 fp=fopen("prime.dat","rb");
L21 fread(&count,sizeof(int),1,fp);
L22 printf("1~100素数总个数:%d
素数列表:",count);
L23 for(i=0;i<count;i++){
L24 int num;
L25 fread(&num,sizeof(int),1,fp);
L26 printf("%d ",num);
L27 }
L28 fclose(fp);
L29 free(flag);
L30 remove("prime.dat");
L31 return 0;
L32 }
3.下列程序的功能是:录入 3 名学生(学号、成绩),二进制保存全部数据,读取后输出最高分学生信息。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 struct{
L3 int id;
L4 int score;
L5 }Stu;
L6 int main(void){
L7 Stu s[3],*maxp,*p;
L8 int i;
L9 FILE *fp;
L10 for(i=0;i<3;i++){
L11 printf("输入第%d个学生 学号 成绩:",i+1);
L12 scanf("%d%d",&s[i].id,&s[i].score);
L13 }
L14 maxp=s[0];
L15 for(p=s;p<s+3;p++){
L16 if(p->score>maxp->score)
L17 maxp=p;
L18 }
L19 fp=fopen("stu_bin.dat","wb");
L20 fwrite(s,sizeof(Stu),3,fp);
L21 fclose(fp);
L22 fp=fopen("stu_bin.dat","rb");
L23 fread(s,sizeof(Stu),3,fp);
L24 fclose(fp);
L25 printf("
最高分学生:学号%d 成绩%d",maxp->id,maxp->score);
L26 remove("stu_bin.dat");
L27 return 0;
L28 }
4.约瑟夫环问题:输入总人数 n、报数上限 k,模拟约瑟夫环出圈规则,依次输出每一轮出圈编号,最后输出幸存者。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 #include <stdlib.h>
L3 int main(void)
L4 {
L5 int n,k,i,count=0,cur=0,out=0;
L6 int *people;
L7 printf("输入总人数n、报数k:");
L8 scanf("%d%d",&n,&k);
L9 people = (int*)malloc(n*sizeof(int));
L10 if(people == NULL)
L11 {
L12 printf("内存分配失败");
L13 return -1;
L14 }
L15 for(i=0;i<n;i++)
L16 *(people+i) = i+1;
L17 while(out < n-1)
L18 {
L19 if(*(people+cur) == 0)
L20 count++;
L21 if(count == k)
L22 {
L23 printf("出圈编号:%d
",*(people+cur));
L24 *(people+cur) = 0;
L25 count = 0;
L26 out++;
L27 }
L28 cur = cur+1;
L29 }
L30 for(i=0;i<n;i++)
L31 if(*(people+i) != 0)
L32 printf("最终幸存者:%d",*(people+i));
L33 free(people);
L34 return 0;
L35 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$