内容正文:
编写说明:本冲刺卷严格依据湖南省计算机应用类高考考纲编写,依托《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))
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$