任务34:指针变量作函数参数、返回值为指针的函数、指针指向函数 《编程语言-C语言》45分钟专题训练
|
2份
|
30页
|
68人阅读
|
1人下载
内容正文:
湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。
《编程语言—C语言》
项目七: 指针
第34卷:指针变量作函数参数、返回值为指针的函数、指针指向函数
时间:45分钟 总分:100分
班级___________ 姓名__________ 学号__________ 成绩________
一、选择题(共23小题,每小题2分,共46分)
1.若有函数声明:void fun(float array[ ],int *ptr);以下叙述中正确的一项是( )
A.函数参数array,ptr都是指针变量
B.函数参数array不是指针变量,ptr是指针变量
C.调用函数时,实参数组的值将一一复制给array数组
D.调用函数时,array是按值传送,ptr是按地址传送
2.若有函数:void fun(double a[ ],int *n){……},则以下叙述中,正确的一项是( )
A.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送
B.形参a和n都是指针变量
C.形参a是一个数组名,n是指针变量
D.调用fun函数时将把double型实参数组元素一一对应地传给形参a数组
3.若有定义:int fun(int *p){return *p;},则fun函数的返回值是( )
A.一个整数 B.形参p中存放的值
C.形参p的地址值 D.不确定的值
4.设有函数:char *fun(char *s){……return s;},则该函数的返回值是( )
A.无确定值 B.形参s中存放的地址值
C.一个临时存储单元的地址 D.形参s自身的地址值
5.设有说明语句:int (*p)( );的含义是( )
A.p是一个指向一维数组的指针变量
B.p是指针变量,指向一个整型数据
C.p是一个指向函数的指针,该函数的返回值是一个整型数据
D.p是一个指向字符串的指针变量
6.下列函数的功能是( )
void fun(int *p1,int *p2)
{int *p;*p=*p1;*p1=*p2;*p2=*p;}
A.没有交换*p1和*p2的值
B.存在语法错误,无法正常编译执行
C.可以实现交换p1和p2所指向的变量的值
D.可以实现交换p1和p2的值
7.以下函数的功能是按照每行8个输出数组中的数据,程序中的空白处应该填入的语句是( )
void fun(int *w,int n)
{int i;
for(i=0;i<n;i++)
{【1】;
printf("%d",w[i]);}
printf("
");}
A.if(i/8==0) printf("
") B. if(i/8==0) continue
C.if(i%8==0) continue D.if(i%8==0) printf("
")
8.执行以下程序段的输出结果是( )
void fun(int *p)
{printf("%d
",p[5]);}
main()
{int a[10]={1,2,3,4,5,6,7,8,9,10};
fun(&a[3]);
getch();}
A.5 B.6 C.8 D.9
9.执行以下程序段的输出结果是( )
void f(int *p);
main()
{int a[5]={1,2,3,4,5},*r=a;
f(r);
printf("%d
",*r);getch();}
void f(int *p)
{p=p+3;
printf("%d ",*p);}
A.1 4 B.4 1 C.4 4 D.3 1
10.执行以下程序段的输出结果是( )
void f(int *q)
{int i=0;
for( ;i<5;i++)
(*q)++;}
main()
{int a[5]={1,2,3,4,5},i;
f(a);
for(i=0;i<5;i++)
printf("%d",a[i]);getch();}
A.22345 B.12345 C.62345 D.23456
11.执行以下程序段的输出结果是( )
#define N 8
void fun(int *x,int i)
{*x=*(x+i);}
main()
{int a[N]={1,2,3,4,5,6,7,8},i;
fun(a,2);
for(i=0;i<N/2;i++)
printf("%d",a[i]);getch();}
A.1313 B.2234 C.3234 D.1234
12.执行以下程序段的输出结果是( )
void change(int *array,int len)
{for( ;len>=0;len--)
array[len]+=2;}
main()
{int i,array[5]={1,2};
change(array,4);
for(i=0;i<4;i++)
printf("%d",array[i]);getch();}
A.2345 B.3456 C.3422 D.1200
13.执行以下程序段的输出结果是( )
void fun(int *x,int s,int n)
{int i;
for(i=s;i>=n;i--)
*(x+i+3)=*(x+i);}
main()
{int m[ ]={0,1,2,3,4,5,6,7,8,9},k;
fun(m,10-4,3);
for(k=0;k<10;k++)
printf("%d",m[k]);getch();}
A.0123456345 B.0123453456
C.0123456666 D.0123454569
14.下列函数的功能是( )
int fun(char *s)
{char *t=s;while(*t) t++; return(t-s);}
A.比较两个字符串的大小 B.计算s所指字符串占用的内存字节数
C.计算s所指字符串的长度 D.将s所指字符串赋值到t中
15.设有定义:int max( ),(*p)( );,为了使指针变量p指向函数max( ),正确的赋值语句是( )
A.p=max; B.*p=max; C.p=&max; D.*p=max( );
16.设有函数定义:void f(int n,char s){……},则下列选项中对指向函数的指针的定义和赋值均正确的是( )
A.void (*p)( );p=f; B.void *p( );p=f;
C.void *p( );*pf=f; D.void (*p)(int,char);p=f;
17.设有函数max(a,b),并且已使指针变量p指向函数max,当调用该函数时,正确的调用方法是( )
A.(*p)max(a,b); B.*pmax(a,b);
C.(*p)(a,b); D.*p(a,b);
18.设有函数:max(a,b),下列选项中,可以使函数指针变量p指向函数max的是( )
A.p=max; B.p=max(a,b); C.*p=max; D.*p=max(a,b);
19.执行以下程序段的输出结果是( )
void fun(char *a,char *b)
{a=b;(*a)++;}
main()
{char c1='A',c2='a',*p1,*p2;
p1=&c1;p2=&c2;
fun(p1,p2);
printf("%c%c
",c1,c2);getch();}
A.Ab B.aa C.Aa D.Bb
20.执行以下程序段的输出结果是( )
int *f( )
{static int s[3]={1,0,3,},*p=s;
return p;}
main()
{int *result,i;
result=f();
for(i=0;i<3;i++)
printf("%d",result[i]);getch();}
A.103 B.输出s数组的地址
C.程序有语法错,无法编译执行 D.输出数值1、s[1]和s[2]的地址
21.执行以下程序段的输出结果是( )
int *f( )
{int s[3]={1,0,3,},*p=s;
return p;}
main()
{int *result;
result=f();
printf("%d ",*result);getch();}
A.1 B.0 C.3 D.-1
22.执行以下程序段的输出结果是( )
int *f(int *x,int *y)
{if(*x<*y) return x;
else return y;}
main()
{int a=6,b=7,*p,*q,*r;
p=&a;
q=&b;
r=f(p,q);
printf("%d,%d,%d",*p,*q,*r);getch();}
A.7,6,7 B.7,7,7, C.6,6,7, D.6,7,6
23.执行以下程序段的输出结果是( )
void fun(int*n)
{ while((*n)--);
printf("%d",*n);}
main( )
{ int a=10;
fun(&a);getch();}
A.-1 B.0 C.1 D.无定值
二、程序运行结果题(本题共7小题,每题3分,共21分)
24.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
void fun(int *a,int n)
{int t,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{t=a[i];a[i]=a[j];a[j]=t;}}
main()
{int c[10]={0,1,2,3,4,5,6,7,8,9},i;
fun(c+4,6);
for(i=0;i<10;i++)
printf("%d ",c[i]);getch();}
25.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
void fun(int *a,int n)
{int i,j,k,t;
for(i=0;i<n-1;i+=2)
{k=i;
for(j=i;j<n;j+=2)
if(a[j]>a[k]) k=j;
t=a[i];a[i]=a[k];a[k]=t;}}
main()
{int aa[10]={1,2,3,4,5,6,7},i;
fun(aa,7);
for(i=0;i<7;i++)
printf("%d",aa[i]);getch();}
26.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
int fun(char *a,char *b)
{ int num=0,n=0;
while(*(a+num)!='\0') num++;
while(b[n])
{*(a+num)=b[n];
num++;n++;}
return num;}
main( )
{ char sl[81]="abcdef",s2[81]="ABCD",*pl=sl,*p2=s2;
printf("%d
",fun(pl,p2));getch();}
27.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
void fib(int n,int*s)
{ int f1,f2;
if(n==1||n==2) *s=1;
else { fib(n-1,&f1);
fib(n-2,&f2);
*s=f1+f2;}}
main( )
{ int x;
fib(7,&x);
printf("x=%d
",x);getch();}
28.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
#define N 9
void fun(int *a,int*max,int* min)
{ int i;
*max=*min=*(a+0);
for(i=1;i<N;i++)
{ if(*max<*(a+i))
*max=*(a+i);
if(*min> *(a+i))*min=*(a+i);}}
main( )
{ int a[N]={86,7,45,90,34,92,32,62,38},max,min;
fun(a,&max,&min);
printf("max=%d,min=%d
",max,min);getch();}
29.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
#define N 7
void fun(int *a)
{ int i,t;
t=*(a+1);
for(i=0;i<N-1;i++)*(a+i)=*(a+i+1);
*(a+i)=t;}
main( )
{ int a[N]={11,22,66,33,77,55,99},i;
fun(a);
for(i=0;i<N;i++)
printf("%d ",a[i]);getch();}
30.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
char *fun2(char *s,char *t)
{int i,j;
for(i=0;s[i];i++)
for(j=0;t[j];j++,i++)
s[i]=t[j];
s[i]='\0';
return s;}
main()
{char s[ ]="abcd",t[ ]="123";
puts(fun2(s,t));getch();}
三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分)
31.下列程序的功能是:将一个3×3的整型矩阵转置。程序中有三处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 main()
L4 {void move(int *pointer);
L5 int a[3][3],p,i;
L6 printf("input matrix:
");
L7 for(i=0;i<3;i++)
L8 scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
L9 p=&a[0][0];
L10 move(*p);
L11 printf("转置后的数组:
");
L12 for(i=0;i<3;i++)
L13 printf("%d %d %d
",a[i][0],a[i][1],a[i][2]);
L14 getch();}
L15 void move(int *pointer)
L16 {int i,j,t;
L17 for(i=0;i<3;i++)
L18 for(j=0;j<3;j++)
L19 {t=*(pointer+3*i+j);
L20 *(pointer+3*i+j)=*(pointer+3*j+i);
L21 *(pointer+3*j+i)=t;}}
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
32.下列程序的功能是:输入10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换。请填空。
#include <stdio.h>
#include<conio.h>
main()
{void input(int *);
void max_min_value(int *);
void output(int *);
int number[10];
input(number);
max_min_value(number);
output(number);
getch();}
void input(int *number)
{int i;
printf("input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&number[i]);}
void max_min_value(int *number)
{int *max,*min,*p,temp;
max=min=number;
for(p=【1】;p<number+10;p++)
if(*p>*max) max=p;
else if(【2】) min=p;
temp=number[0];
number[0]=*min;
*min=temp;
if(【3】) max=min;
temp=number[9];
number[9]=【4】;
*max=temp;}
void output(int *number)
{int *p;
printf("Now,they are:");
for(p=number;p<number+10;p++)
printf("%d ",*p);
printf("
");}
33.下列程序的功能是将n个数按照输入时顺序的逆序排列。请填空。
#include <stdio.h>
#include<conio.h>
main()
{void sort(char *p,int m);
int i,n;
char *p,num[20];
printf("input n:");
scanf("%d",&n);
printf("please input these numbers:
");
for(i=0;i<n;i++)
scanf("%d",&num[i]);
p=【1】;
sort(p,n);
printf("Now,the sequence is:
");
for(i=0;i<n;i++)
printf("%d ",num[i]);
printf("
");
getch();}
void sort(char *p,int m)
{int i;
char temp,*p1,*p2;
p1=p;
p2=【2】;
while(【3】)
{temp=*p1;
*p1=*p2;
*p2=temp;
p1++;
【4】;}}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。
《编程语言—C语言》
项目七: 指针
第34卷:指针变量作函数参数、返回值为指针的函数、指针指向函数
时间:45分钟 总分:100分
班级___________ 姓名__________ 学号__________ 成绩________
一、选择题(共23小题,每小题2分,共46分)
1.若有函数声明:void fun(float array[ ],int *ptr);以下叙述中正确的一项是( )
A.函数参数array,ptr都是指针变量
B.函数参数array不是指针变量,ptr是指针变量
C.调用函数时,实参数组的值将一一复制给array数组
D.调用函数时,array是按值传送,ptr是按地址传送
【答案】A。数组名为数组的首地址,也是指向数组的指针。
2.若有函数:void fun(double a[ ],int *n){……},则以下叙述中,正确的一项是( )
A.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送
B.形参a和n都是指针变量
C.形参a是一个数组名,n是指针变量
D.调用fun函数时将把double型实参数组元素一一对应地传给形参a数组
【答案】C
3.若有定义:int fun(int *p){return *p;},则fun函数的返回值是( )
A.一个整数 B.形参p中存放的值
C.形参p的地址值 D.不确定的值
【答案】A
4.设有函数:char *fun(char *s){……return s;},则该函数的返回值是( )
A.无确定值 B.形参s中存放的地址值
C.一个临时存储单元的地址 D.形参s自身的地址值
【答案】B
5.设有说明语句:int (*p)( );的含义是( )
A.p是一个指向一维数组的指针变量
B.p是指针变量,指向一个整型数据
C.p是一个指向函数的指针,该函数的返回值是一个整型数据
D.p是一个指向字符串的指针变量
【答案】C
6.下列函数的功能是( )
void fun(int *p1,int *p2)
{int *p;*p=*p1;*p1=*p2;*p2=*p;}
A.没有交换*p1和*p2的值
B.存在语法错误,无法正常编译执行
C.可以实现交换p1和p2所指向的变量的值
D.可以实现交换p1和p2的值
【答案】C
7.以下函数的功能是按照每行8个输出数组中的数据,程序中的空白处应该填入的语句是( )
void fun(int *w,int n)
{int i;
for(i=0;i<n;i++)
{【1】;
printf("%d",w[i]);}
printf("
");}
A.if(i/8==0) printf("
") B. if(i/8==0) continue
C.if(i%8==0) continue D.if(i%8==0) printf("
")
【答案】D
8.执行以下程序段的输出结果是( )
void fun(int *p)
{printf("%d
",p[5]);}
main()
{int a[10]={1,2,3,4,5,6,7,8,9,10};
fun(&a[3]);
getch();}
A.5 B.6 C.8 D.9
【答案】D
9.执行以下程序段的输出结果是( )
void f(int *p);
main()
{int a[5]={1,2,3,4,5},*r=a;
f(r);
printf("%d
",*r);getch();}
void f(int *p)
{p=p+3;
printf("%d ",*p);}
A.1 4 B.4 1 C.4 4 D.3 1
【答案】B
10.执行以下程序段的输出结果是( )
void f(int *q)
{int i=0;
for( ;i<5;i++)
(*q)++;}
main()
{int a[5]={1,2,3,4,5},i;
f(a);
for(i=0;i<5;i++)
printf("%d",a[i]);getch();}
A.22345 B.12345 C.62345 D.23456
【答案】C
11.执行以下程序段的输出结果是( )
#define N 8
void fun(int *x,int i)
{*x=*(x+i);}
main()
{int a[N]={1,2,3,4,5,6,7,8},i;
fun(a,2);
for(i=0;i<N/2;i++)
printf("%d",a[i]);getch();}
A.1313 B.2234 C.3234 D.1234
【答案】C
12.执行以下程序段的输出结果是( )
void change(int *array,int len)
{for( ;len>=0;len--)
array[len]+=2;}
main()
{int i,array[5]={1,2};
change(array,4);
for(i=0;i<4;i++)
printf("%d",array[i]);getch();}
A.2345 B.3456 C.3422 D.1200
【答案】C
13.执行以下程序段的输出结果是( )
void fun(int *x,int s,int n)
{int i;
for(i=s;i>=n;i--)
*(x+i+3)=*(x+i);}
main()
{int m[ ]={0,1,2,3,4,5,6,7,8,9},k;
fun(m,10-4,3);
for(k=0;k<10;k++)
printf("%d",m[k]);getch();}
A.0123456345 B.0123453456
C.0123456666 D.0123454569
【答案】B
14.下列函数的功能是( )
int fun(char *s)
{char *t=s;while(*t) t++; return(t-s);}
A.比较两个字符串的大小 B.计算s所指字符串占用的内存字节数
C.计算s所指字符串的长度 D.将s所指字符串赋值到t中
【答案】C
15.设有定义:int max( ),(*p)( );,为了使指针变量p指向函数max( ),正确的赋值语句是( )
A.p=max; B.*p=max; C.p=&max; D.*p=max( );
【答案】A
16.设有函数定义:void f(int n,char s){……},则下列选项中对指向函数的指针的定义和赋值均正确的是( )
A.void (*p)( );p=f; B.void *p( );p=f;
C.void *p( );*pf=f; D.void (*p)(int,char);p=f;
【答案】D
17.设有函数max(a,b),并且已使指针变量p指向函数max,当调用该函数时,正确的调用方法是( )
A.(*p)max(a,b); B.*pmax(a,b);
C.(*p)(a,b); D.*p(a,b);
【答案】C
18.设有函数:max(a,b),下列选项中,可以使函数指针变量p指向函数max的是( )
A.p=max; B.p=max(a,b); C.*p=max; D.*p=max(a,b);
【答案】A
19.执行以下程序段的输出结果是( )
void fun(char *a,char *b)
{a=b;(*a)++;}
main()
{char c1='A',c2='a',*p1,*p2;
p1=&c1;p2=&c2;
fun(p1,p2);
printf("%c%c
",c1,c2);getch();}
A.Ab B.aa C.Aa D.Bb
【答案】A
20.执行以下程序段的输出结果是( )
int *f( )
{static int s[3]={1,0,3,},*p=s;
return p;}
main()
{int *result,i;
result=f();
for(i=0;i<3;i++)
printf("%d",result[i]);getch();}
A.103 B.输出s数组的地址
C.程序有语法错,无法编译执行 D.输出数值1、s[1]和s[2]的地址
【答案】A
21.执行以下程序段的输出结果是( )
int *f( )
{int s[3]={1,0,3,},*p=s;
return p;}
main()
{int *result;
result=f();
printf("%d ",*result);getch();}
A.1 B.0 C.3 D.-1
【答案】A
22.执行以下程序段的输出结果是( )
int *f(int *x,int *y)
{if(*x<*y) return x;
else return y;}
main()
{int a=6,b=7,*p,*q,*r;
p=&a;
q=&b;
r=f(p,q);
printf("%d,%d,%d",*p,*q,*r);getch();}
A.7,6,7 B.7,7,7, C.6,6,7, D.6,7,6
【答案】D
23.执行以下程序段的输出结果是( )
void fun(int*n)
{ while((*n)--);
printf("%d",*n);}
main( )
{ int a=10;
fun(&a);getch();}
A.-1 B.0 C.1 D.无定值
【答案】A
二、程序运行结果题(本题共7小题,每题3分,共21分)
24.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
void fun(int *a,int n)
{int t,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{t=a[i];a[i]=a[j];a[j]=t;}}
main()
{int c[10]={0,1,2,3,4,5,6,7,8,9},i;
fun(c+4,6);
for(i=0;i<10;i++)
printf("%d ",c[i]);getch();}
【答案】0 1 2 3 9 8 7 6 5 4
25.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
void fun(int *a,int n)
{int i,j,k,t;
for(i=0;i<n-1;i+=2)
{k=i;
for(j=i;j<n;j+=2)
if(a[j]>a[k]) k=j;
t=a[i];a[i]=a[k];a[k]=t;}}
main()
{int aa[10]={1,2,3,4,5,6,7},i;
fun(aa,7);
for(i=0;i<7;i++)
printf("%d",aa[i]);getch();}
【答案】7254361
26.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
int fun(char *a,char *b)
{ int num=0,n=0;
while(*(a+num)!='\0') num++;
while(b[n])
{*(a+num)=b[n];
num++;n++;}
return num;}
main( )
{ char sl[81]="abcdef",s2[81]="ABCD",*pl=sl,*p2=s2;
printf("%d
",fun(pl,p2));getch();}
【答案】10
27.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
void fib(int n,int*s)
{ int f1,f2;
if(n==1||n==2) *s=1;
else { fib(n-1,&f1);
fib(n-2,&f2);
*s=f1+f2;}}
main( )
{ int x;
fib(7,&x);
printf("x=%d
",x);getch();}
【答案】x=13
28.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
#define N 9
void fun(int *a,int*max,int* min)
{ int i;
*max=*min=*(a+0);
for(i=1;i<N;i++)
{ if(*max<*(a+i))
*max=*(a+i);
if(*min> *(a+i))*min=*(a+i);}}
main( )
{ int a[N]={86,7,45,90,34,92,32,62,38},max,min;
fun(a,&max,&min);
printf("max=%d,min=%d
",max,min);getch();}
【答案】max=92,min=7
29.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
#define N 7
void fun(int *a)
{ int i,t;
t=*(a+1);
for(i=0;i<N-1;i++)*(a+i)=*(a+i+1);
*(a+i)=t;}
main( )
{ int a[N]={11,22,66,33,77,55,99},i;
fun(a);
for(i=0;i<N;i++)
printf("%d ",a[i]);getch();}
【答案】22 66 33 77 55 99 22
30.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
char *fun2(char *s,char *t)
{int i,j;
for(i=0;s[i];i++)
for(j=0;t[j];j++,i++)
s[i]=t[j];
s[i]='\0';
return s;}
main()
{char s[ ]="abcd",t[ ]="123";
puts(fun2(s,t));getch();}
【答案】123d
三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分)
31.下列程序的功能是:将一个3×3的整型矩阵转置。程序中有三处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 main()
L4 {void move(int *pointer);
L5 int a[3][3],p,i;
L6 printf("input matrix:
");
L7 for(i=0;i<3;i++)
L8 scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
L9 p=&a[0][0];
L10 move(*p);
L11 printf("转置后的数组:
");
L12 for(i=0;i<3;i++)
L13 printf("%d %d %d
",a[i][0],a[i][1],a[i][2]);
L14 getch();}
L15 void move(int *pointer)
L16 {int i,j,t;
L17 for(i=0;i<3;i++)
L18 for(j=0;j<3;j++)
L19 {t=*(pointer+3*i+j);
L20 *(pointer+3*i+j)=*(pointer+3*j+i);
L21 *(pointer+3*j+i)=t;}}
答案:
L5 int a[3][3],*p,i;
L10 move(p);
L18 for(j=i+1;j<3;j++)
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
32.下列程序的功能是:输入10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换。请填空。
#include <stdio.h>
#include<conio.h>
main()
{void input(int *);
void max_min_value(int *);
void output(int *);
int number[10];
input(number);
max_min_value(number);
output(number);
getch();}
void input(int *number)
{int i;
printf("input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&number[i]);}
void max_min_value(int *number)
{int *max,*min,*p,temp;
max=min=number;
for(p=【1】;p<number+10;p++)
if(*p>*max) max=p;
else if(【2】) min=p;
temp=number[0];
number[0]=*min;
*min=temp;
if(【3】) max=min;
temp=number[9];
number[9]=【4】;
*max=temp;}
void output(int *number)
{int *p;
printf("Now,they are:");
for(p=number;p<number+10;p++)
printf("%d ",*p);
printf("
");}
答案:①number+1 ②*p<*min ③max==number ④*max
33.下列程序的功能是将n个数按照输入时顺序的逆序排列。请填空。
#include <stdio.h>
#include<conio.h>
main()
{void sort(char *p,int m);
int i,n;
char *p,num[20];
printf("input n:");
scanf("%d",&n);
printf("please input these numbers:
");
for(i=0;i<n;i++)
scanf("%d",&num[i]);
p=【1】;
sort(p,n);
printf("Now,the sequence is:
");
for(i=0;i<n;i++)
printf("%d ",num[i]);
printf("
");
getch();}
void sort(char *p,int m)
{int i;
char temp,*p1,*p2;
p1=p;
p2=【2】;
while(【3】)
{temp=*p1;
*p1=*p2;
*p2=temp;
p1++;
【4】;}}
答案:①&num[0] ②p+m-1 ③p1<p2 ④p2- -
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$