2022年湖北专升本C语言指针模拟题
一、单项选择题
1.以下程序的输出结果是( B)。
main( )
{char a[10]={'1','2','3','4','5','6','7','8','9',0},*p;
int i;
i=8;
p=a+i;
printf("%s\n",p-3);
}
A) 6
B) 6789
C)‘6’
D) 789
2.以下程序的运行结果是( A )。
#include "stdio.h"
main( )
{int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p=a+5,*q=NULL;
*q=*(p+5);
printf("%d %d\n", *p, *q);
}
A) 运行后报错
B) 6 6
C) 6
11
D) 5 5
3.若有以下的说明和语句,则在执行 for 语句后,*(*(pt+l)+2)表示的数组元素是(C)。
int t[3][3],*pt[3],k;
for(k=0; k<3; k++) pt[k]=&t[k][0];
A) t[2][0]
B) t[2][2]
C) t[l][2]
D) t[2][l]
4.下面程序把数组元素中的最大值放入 a[0]中,则在 if 语句中的条件表达式应该是( B )。
main( )
{int a[10]={6,7,2,9,1,10,5,8,4,3}, *p=a, i;
for(i=0; i<10; i++, p++)
if(________) *a=*p;
printf("%d",*a);
}
A) p>a
B) *p>a[0]
C) *p>*a[0]
D) *p[0]> *a[0]
5.以下程序的输出结果是( A )。
#include
#include
main( )
{char *a="abcdefghi";
int k;
fun (a); puts(a);
}
fun(char *s)
{int x, y;
char c;
for(x=0, y=strlen(s)-1; x {c=s[y]; s[y]=s[x]; s[x]=c;} } A) ihgfedcba B) abcdefghi C) abcdedeba D) ihgfefghi 6.以下程序的输出结果是( B )。 main( ) {char *s="12134211";int v[4]={0,0,0,0},k,i; for(k=0;s[k];k++) {switch(s[k]) {case '1':i=0; case '2':i=1; case '3':i=2; case '4':i=3; } v[i]++; } for(k=0;k<4;k++) printf("%d ",v[k]); } A) 4 2 1 1 B) 0 0 0 8 C) 4 6 7 8 D) 8 8 8 8 7.以下程序的输出结果是( D)。 #include main( ) {char *p1,*p2,str[50]="ABCDEFG"; p1="abcd";p2="efgh"; strcpy(str+1,p2+1);strcpy(str+3,p1+3); printf("%s",str);str+1 表示数组第二个数据 B,p2+1 指向 f,即把 fgh 复制到 BCD 的位置,同时复制‘\0’ } A) AfghdEFG B) Abfhd C) Afghd D) Afgd 8.若有以下定义和语句: double r=99,*p=&r; *p=r; 则以下正确的叙述是( D )。 A) 以上两处的*p 含义相同,都说明给指针变量 p 赋值 B) 在"double r=99,*p=&r; "中,把 r 的地址赋给了 p 所指的存储单元 C) 语句"*p=r; "把变量 r 的值赋给指针变量 p D) 语句"*p=r; "取变量 r 的值放回 r 中 9.若已定义:int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a, i;其中 0≤ i ≤9, 则对 a 数组元素不正确的引用是(D)。 A) a[p-a] B) *(&a[i]) C) p[i] D) *(*(a+i))=*a[i] 10.下列程序执行后的输出结果是( A)。 void func(int *a, int b[ ]) {b[0]=*a+6;} main() {int a, b[5]; a=0; b[0]=3; func(&a, b); printf("%d\n", b[0]); } A) 6 B) 3 C) 8 D) 9 11.下列程序执行后的输出结果是( B )。 main() {int a[3][3], *p, i; p=&a[0][0]; for(i=0; i<9; i++) p[i]=i+1; printf("%d\n", a[1][2]); } A) 3 B) 6 C) 9 D) 随机数 12.请选出正确的程序段( C )。 A) int *p; B) int *s, k; - C) int *s, k; D) int *s, k; scanf("%d", p); *s=100; char *p, c; char *p, c; s=&k; s=&k; p=&c; p=&c; *p='a'; s=p; *s=1; 13.已知指针 p 的指向如下图所示,则执行语句 *- -p; 后*p 的值是( B)。 A) 30 B) 20 C) 19 D) 29 14.设已有定义: char *st="how are you";下列程序段中正确的是( A )。 A) char a[11], *p; strcpy(p=a+1, &st[4]); B) char a[11]; strcpy(++a, st); C) char a[11]; strcpy(a, st); D) char a[ ], *p; strcpy(p=&a[1], st+2); 15.以下程序的输出结果是( C)。 main( ) {int i, x[3][3]={9, 8, 7, 6, 5, 4, 3, 2, 1}, *p=&x[1][1]; for(i=0; i<4; i+=2) printf("%d ", p[i]); } A) 5 2 B) 5 1 C) 5 3 D) 9 7 16.若有说明:int i, j=2,*p=&i;,则能完成 i=j 赋值功能的语句是(B)。 A) i=*p; B) *p=*&j; C) i=&j; D) i=**p; 17.以下定义语句中,错误的是( D )。 A) int a[ ]={1,2}; B) char *a[3]; C) char s[10]="test"; D) int n=5,a[n]; 18.下列程序段的输出结果是(A)。 void fun(int *x, int *y) {printf("%d %d", *x, *y); *x=3; *y=4;} main() {int x=1,y=2; fun(&y, &x); printf("%d %d", x, y); } A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2 19.下列程序的输出结果是(C)。 main() {char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf("%d",*--p); } A) 非法 B) a[4]的地址 C) 5 D) 3 20.下列程序的运行结果是(B)。 void fun(int *a, int *b) {int *k; k=a; a=b; b=k; } main() {int a=3, b=6, *x=&a, *y=&b; fun(x, y); printf("%d %d", a, b); } A) 6 3 B) 3 6 C) 编译出错 D) 0 0 21.下面程序的输出结果是( C)。 main() {int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf("%d\n",*p+9); } A) 0 B) 1 C) 10 D) 9 22.假定以下程序经编译和连接后生成可执行文件 PROG . EXE,如果在此可执行文件所在目录的 DOS 提示符下键入:PROG ABCD EFGH IJKL<回车>,则输出结果为( D )。 main( int argc, char *argv[ ]) {while(--argc>0) printf("%s", argv[argc]); printf("\n"); } A) ABCDEFGH B) IJHL C) ABCDEFGHIJKL D) IJKLEFGHABCD 23.对于基类型相同的两个指针变量之间,不能进行的运算是(C)。 A) < B) = C) + D) - 24.有以下函数: char * fun (char *p) {return p;} 该函数的返回值是( B)。 A) 无确切的值 B) 形参 p 中存放的地址值 C) 一个临时存储单元的地址 D) 形参 p 自身的地址值 25.若有以下说明和定义 fun(int *c){…} main() {int (*a)()=fun,*b(),w[10],c; ┆ } 在必要的赋值之后,对 fun 函数的正确调用语句是( B)。 A) a=a(w); B) (*a)(&c); C) b=*b(w); D) fun (b); 26.有如下说明 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为 9 的表达式是(B)。 A) *p+9 B) *(p+8) C) *p+=9 D) p+8 27.有如下程序: main() {char ch[2][5]={“6937”,“8254”},*p[2]; int i,j,s=0; for(i=0;i<2;i++) p[i]=ch[i]; for(i=0;i<2;i++) for(j=0;p[i][j]>‘\0’;j+=2) s=10*s+p[i][j]-‘0’; printf(“%d\n”,s); } 该程序的输出结果是( C)。 A) 69825 B 63825 C) 6385 D) 693825 28.若有以下定义和语句: char *s1=“12345”,*s2=“1234”; printf(“%d\n”, strlen(strcpy (s1, s2))); 则输出结果是( A)。 A) 4 B) 5 C) 9 D) 10 29.下面程序的输出结果是( C)。 main( ) {char *s=“121”; int k=0, a=0, b=0; do {k++; if(k%2= =0) {a=a+s[k]-‘0’; continue;} b=b+s[k]-‘0’; a=a+s[k]-‘0’; } while(s[k+1]); printf(“k=%d a=%d b=%d\n”, k, a, b); } A) k=3 a=2 b=3 B) k=3 a=3 b=2 C) k=2 a=3 b=2 D) k=2 a=2 b=3 30.若有以下的定义: int a[ ]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p=a; 则值为 3 的表达式是( A )。 A) p+=2,*(p++) B) p+=2,*++p C) p+=3,*p++ D) p+=2,++*p 31.以下程序的输出结果是( A)。 #include sub1(char a, char b) {char c; c=a; a=b; b=c;} sub2(char *a, char b) {char c; c=*a; *a=b; b=c;} sub3(char *a, char *b) {char c; c=*a; *a=*b; *b=c;} main() {char a, b; a=‘A’; b=‘B’; sub3 (&a, &b); putchar(a); putchar(b); a=‘A’; b=‘B’; sub2 (&a, b); putchar(a); putchar(b); a=‘A’; b=‘B’; sub1 (a, b); putchar(a); putchar(b); } A) BABBAB B) ABBBBA C) BABABA D) BAABBA 32.设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是(B)。 A) k=*p1+*p2; B) p2=k; C) p1=p2; D) k=*p1*(*p2); 33.设有如下定义:int arr[ ]={6, 7, 8, 9, 10}; int *ptr; 则下列程序段的输出结果是(D)。 ptr=arr; *(ptr+2)+=2; printf(“%d, %d\n”, *ptr, *(ptr+2)); A) 8,10 B) 6,8 C) 7,9 D) 6,10 34.以下程序的输出结果是( D)。 main() {char a[ ]=“programming”, b[ ]= “language”; char *p1, *p2; int i; p1=a; p2=b; for(i=0; i<7; i++) if(*(p1+i)= =*(p2+i)) printf(“%c”, *(p1+i)); } A) gm B) rg C) or D) ga 35.以下程序运行后,输出结果是( C )。 main() {char *s=“abcde”; s+=2; printf(“%ld\n”, s); } A) cde B) 字符 c 的 ASCII 码值 C) 字符 c 的地址 D) 出错 36.以下程序运行后,如果从键盘上输入 ABCDE<回车>,则输出结果为( D)。 #include #include func(char str[ ]) {int num=0; while(*(str+num)!=’\0’) num++; return(num); } main() {char str[10], *p=str; gets (p); printf(“%d\n”, func (p)); } A) 8 B) 7 C) 6 D) 5 37.以下程序执行后,a 的值是( C )。 main() {int a, k=4, m=6, *p1=&k, *p2=&m; a=p1= =&m;(等于运算符==优先级高于赋值运算符=,即为 a=(p1==&m)) printf(“%d\n”, a); } A) 4 B) 1 C) 0 D) 运行时出错,a 无定值 38.以下程序运行后,如果从键盘上输入: book<回车> book<空格><回车> 则输出结果是( B)。 #include main() {char a1[80], a2[80], *s1=a1, *s2=a2; gets(s1); gets(s2); if(!strcmp(s1, s2)) printf(“*”); else printf(“#”); printf(“%d\n”, strlen(strcat(s1, s2))); } A) *8 B) #9 C) #6 D) *9 39.若有以下调用语句,则不正确的 fun 函数的首部是( D)。 main() { … int a[50], n; … fun (n, &a[9]); … } A) void fun(int m,int x[ ]) B) void fun(int s,int h[41]) C) void fun(int p,int *s) D) void fun(int n,int a) 40.假定下列程序的可执行文件名为 prg . exe,则在该程序所在的子目录下输入命令行:prg hello good<回车>后,程序的输出结果是(B)。 main(int argc, char *argv[ ]) {int i; if(argc<=0) return; for(i=1; i } A) hello good B) hg C) hel D) hellogood 41.以下程序的输出结果是( D )。 main( ) {char s[ ]=”ABCD”, *p; for(p=s+1; p } A) ABCD BCD CD D B) A B C D C) B C D D) BCD CD D 42.若已定义:int a[9], *p=a; 并在以后的语句中未改变 p 的值,不能表示 a[1]地址的表达式是(C)。 A) p+1 B) a+1 C) a++ D) ++p 43.执行以下程序后,y 的值是(C)。 main( ) {int a[ ]={2, 4, 6, 8, 10}; int y=1, x, *p; p=&a[1]; for(x=0;x<3;x++) y+=*(p+x); printf(“%d\n”, y); } A) 17 B) 18 C) 19 D) 20 44.下列程序的输出结果是( C )。 main( ) {int a[5]={2, 4, 6, 8, 10}, *p, **k; p=a; k=&p; printf(“%d ”, *(p++)); printf(“%d\n”, **k); } A) 4 4 B) 2 2 C) 2 4 D) 4 6 45.下列程序的输出结果是( D)。 #include main( ) {char *p1,*p2,str[50]="xyz"; p1="abcd";p2="ABCD"; strcpy(str+2, strcat(p1+2,p2+1)); printf("%s",str); } A) xyabcAB B) abcABz C) ABabcz D) xycdBCD 46.设有以下定义: int a[4][3]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int (*prt)[3]=a, *p=a[0]; 则下列能够正确表示数组元素 a[1][2]的表达式是(D)。 A) *((*prt+1)[2]) B) *(*(p+5)) C) (*prt+1)+2 D) *(*(a+1)+2) 47.阅读程序: main( ) {int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p; p=a; printf("%x\n",p); printf("%x\n",p+9); } 该程序有两个 printf 语句,如果第一个 printf 语句输出的是 194,则第二个 printf 语句的输出结果是( D )。 A) 203 B) 204 C) 1a4 D) 1a6 48.以下程序的输出结果是(C)。 #include #include void fun(char *w, int m) {char s, *p1, *p2; p1=w; p2=w+m-1; while(p1 {s=*p1++; *p1=*p2--; *p2=s;} } main( ) {char a[ ]="ABCDEFG"; fun(a, strlen(a)); puts(a); } A) GEFDCBA B) AGADAGA C) AGAAGAG D) GAGGAGA 49.以下程序的输出结果是(C)。 #include void fun(int *s) {static int j=0; do s[j]+=s[j+1]; while (++j<2); } main( ) {int k, a[10]={1, 2, 3, 4, 5}; for(k=1; k<3; k++) fun (a); for(k=0; k<5; k++) printf (“%d”, a[k]); } A) 34756 B) 23445 C) 35745 D) 12345 50.请读程序: #include char fun(char *c) {if(*c<=‘Z’&&*c>=‘A’) *c-=‘A’-‘a’; return *c; } main( ) {char s[81], *p=s; gets (s); while(*p) {*p=fun(p); putchar(*p); p++;} putchar(‘\n’); } 若运行时从键盘上输入 OPEN THE DOOR<回车>,则上面程序的输出结果为(B)。 A) oPEN tHE dOOR B) open the door C) OPEN THE DOOR D) Open The Door 51.以下程序的输出结果是( B)。 #include main( ) {char *s1="AbCdEf",*s2="aB"; s1++;s2++; printf("%d\n",strcmp(s1, s2)); } A) 正数 B) 负数 C) 零 D) 不确定的值 52.下面各语句行中,能正确进行赋字符串操作的语句行是( C)。 A) char st[4][5]={“ABCDE”}; B) char s[5]={‘A’,‘B’,‘C’,‘D’,‘E’}; C) char *s; s= “ABCDE”; D) char *s; scanf(“%s”,s); 53.以下程序的输出结果是( C )。 fun(int *s, int n1, int n2) {int i, j, t; i=n1; j=n2; while(i {t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i++; j--; } } main( ) {int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i, *p=a; fun (p, 0, 3); fun (p, 4, 9); fun (p, 0, 9); for(i=0; i<10; i++) printf("%d ", *(a+i)); printf(“\n”); } A) 0 9 8 7 6 5 4 3 2 1 B) 4 3 2 1 0 9 8 7 6 5 C) 5 6 7 8 9 0 1 2 3 4 D) 0 9 8 7 6 5 1 2 3 4 54.下面函数的功能是( B )。 sss (char *s, char *t) {while((*s)&&(*t)&&(*t= =*s)) s++, t++; return(*s-*t); } A) 求字符串的长度 B) 比较两个字符串的大小 C) 将字符串 s 复制到字符串 t 中 D) 将字符串 s 连接到字符串 t 中 55.以下程序段给数组所有的元素输入数据,则以下正确答案为( A)。 main() {int a[10], i=0; while (i<10) scanf(“%d”,); … } A) a+(i++) B) &a[i+1] C) a+i D) &a[++i] 56.在下列叙述中,正确的一条是( B)。 A) 语句 int *pt 中的*pt 是指针变量名 B) 语句 int *p=a;等价于 int *p; p=&a[0]; C) 运算符*和&都是取变量地址的运算符 D) 已知指针变量 p 指向变量 a,则&a 和*p 值相同,都是变量 a 的值 57.下列语句执行后的结果是( A)。 y=5; p=&y; x=*p++; A) x=5,y=5 B) x=5,y=6 C) x=6, y=5 D) x=6, y=6 58.在下列语句中,其含义为“p 为带回一个指针的函数,该指针指向整型数据”的定义语句是( A)。 A) int *p(); B) int **p; C) int (*p)(); D) int *p; 59.在下面关于指针的说法中,错误的一条是( B )。 A) 变量的指针就是变量的地址 B) 可以将一个整型量或任何其他非地址类型的数据赋给一个指针变量 C) 一个指针变量只能指向同一个类型的变量 D) 指针变量中只能存放地址 60.在下列程序中,输出结果与其它程序不同的是(D)。 A) main() {int a[10]; int i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\n”); for(i=0;i<10;i++) printf(“%d”,a[i]); } B) main() {int a[10]; int i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\n”); for(i=0;i<10;i++) printf(“%d”,*(a+i)); } C) main() {int a[10]; int i, *p; for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\n”); for(p=a;p<(a+10);p++) printf(“%d”,*p); } D) main() {int a[10]; int i, *p; for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\n”); for(i=0;i<10;i++) printf(“%d”,*(p+i)); } 61.以下程序的输出结果是(D)。 sub(int *s, int y) {static int t=3; y=s[t]; t--; } main() {int a[ ]={1, 2, 3, 4}, n; int x=4; for(n=0; n<4; n++) {sub(a, x); printf(“%d”, x); } printf(“\n”); } A) 1234 B) 3333 C) 4321 D) 4444 62.以下程序的输出结果为( B )。 #idefine FORMAT “%u, %u” main() {int a[3][4]={1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23}; printf(“\n”); printf(FORMAT, **a, *a[0]); printf(FORMAT, *(a[0]+1), *&a[0][1]); printf(FORMAT, a[1][1], *(*(a+1)+1)); } A) 3,3 5,5 9,9 B) 1,1 3,3 9,9 C) 1,1 3,3 5,5 D) 5,5 7,7 9,9 63.以下程序的输出结果为(D)。 f(char *s) {char *p=s; while(*p!=‘\0’) p++; return(p-s); } main() { printf(“%d\n”, f(“12345678”)); } A) 12345678 B) 7 C) 1 D) 8 64.以下程序的输出结果为(C)。 move(int array[6], int n, int m) {int *p, array_end; array_end=*(array+n-1); for(p=array+n-1;p>array;p--) *p=*(p-1); *array=array_end; m--; if(m>0) move (array, n, m); } main() {static int number[6]={1, 2, 3, 4, 5, 6}; int m=4, j; move(number, 6, m); for(j=0;j<5;j++) printf(“%d,”, number[i]); printf(“%d”, number[5]); } A) 1,2,3,4,5,6 B) 6,5,4,3,2,1 C) 3,4,5,6,1,2 D) 6,1,2,3,4,5 65.在下列叙述中,正确的一条是( B )。 A) 以下程序运行结果为 Computer and c: main() {char str[4]; str=“Computer and c”; printf(“%s\n”, str); } B) 下面两种表示方式等价 (1) int fun(int x,int y) (2) int fun(x,y) int x,y; C) 若输入 1、2,以下程序的运行结果为 12 main() {int *p,i,a[2]; p=a; for(i=0;i<2;i++) scanf(“%d”,p++); for(i=0;i<2;i++,p++) printf(“%d”,*p); } D) 以下程序的运行结果为 3 main() {int *p,a[5]={1,3,4,5,6}; p=a; printf(“%d”,*p++); } 66.以下程序的输出结果是( A )。 point(char *pt); main() {char b[4]={‘a’,‘c’,‘s’,‘f’}, *pt=b; point(pt); printf(“%c\n”, *pt); } point(char *p) {p+=3; } A) a B) c C) s D) f 67.以下程序的输出结果为(A)。 void move(int *pointer) {int i, j, t; for(i=0; i<3; i++) for(j=i; j<3; j++) {t=*(pointer+3*i+j); *(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; }} main() {int a[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}, *p, i; p=&a[0][0]; move(p); for(i=0; i<3; i++) printf(“%d%d%d”, a[i][0], a[i][1], a[i][2]); } A) 147258369 B) 123456789 C) 987654321 D) 127485639 68.以下程序的输出结果是( A )。 sub(int x, int y, int *z) {*z=y-x+2;} main() {int a, b, c; sub(16, 7, &a); sub(9, a, &b); sub(a, b, &c); printf(“%d, %d, %d\n”, a, b, c); } A) –7,-14,-5 B) –7,-16,-9 C) –7,-12,-9 D) –9,-14,-5 69.变量 p 为指针变量,若 p=&a,下列说法不正确的是( D )。 A) &*p==&a B) *&a==a C) (*p)++==a++ D) *(p++)==a++ 70.若输入 10,以下程序的输出结果是(B )。 #define MAX 50 main() {int i, k, m, n, num[MAX], *p; scanf(“%d”, &n); p=num; for(i=0; i *(p+i)=i+1; i=0; k=0; m=0; while(m {if(*(p+i)!=0) k++; if(k= =3) {*(p+i)=0; k=0; m++;} i++; if(i= =n) i=0; } while(*p= =0) p++; printf(“%d\n”, *p); } A) 10 B) 4 C) 50 D) 60 71.以下程序的输出结果是( B )。 main() {char *alpha[5]={“a”, “bc”, “def”, “1”, “23”}, **p; int i; p=alpha; for(i=0; i<3; i++, p++) printf(“%s”, *p); printf(“\t”); p=p-3; for(i=0; i<3; i++, p++) printf(“%c\t”,**p); } A) abcdef d e f B) abcdef a b d C) abcdef 1 23 D) defabc 1 23 二、填空题 1.下列程序的输出结果是GDABC。 #include main( ) {char b[30],*chp; strcpy(&b[0],"GH"); strcpy(&b[1],"DEF"); strcpy(&b[2],"ABC"); printf("%s\n",b); } 2.下列程序的字符串中各单词之间有一个空格,则程序的输出结果是How does she。 #include main( ) {char strl[ ]="How do you do",*p1=strl; strcpy (strl+strlen(strl)/2,"es she"); printf("%s\n",pl); } 3.若有如下图所示五个连续的 int 类型的存储单元并赋值如下图,a[0]的地址小于 a[4]的地址。p 和 s是基类型为 int 的指针变量。请对以下问题进行填空。 (1)若 p 已指向存储单元 a[1]。通过指针 p 给 s 赋值,使 s 指向最后一个存储单元 a[4]的语句是s=p+3。 (2)若指针 s 指向存储单元 a[2],p 指向存储单元 a[0],表达式 s-p 的值是 2。 4.以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数 366。请填空。 5.设有以下程序: main() {int a, b, k=4, m=6, *p1=&k, *p2=&m; a=(pl= =&m); b=(*p1)/(*p2)+7; printf("a=%d\n", a); printf("b=%d\n", b); } 执行该程序后,a 的值为 0,b 的值为7。 6.下列程序的输出结果是0。 void fun(int *n) {while((*n)--); printf("%d", ++(*n)); } main() {int a=100; fun (&a); } 7.以下程序的输出结果是10。 main() {int arr[ ]={30, 25, 20, 15, 10, 5}, *p=arr; p++; printf("%d\n", *(p+3)); } 8.若有以下定义,则不移动指针 p,且通过指针 p 引用值为 98 的数组元素的表达式是*(p+5)。 int w[10]={23,54,10,33,47,98,72,80,61}, *p=w; 9.以下函数把 b 字符串连接到 a 字符串的后面,并返回 a 中新字符串的长度。请填空。 10.函数 void fun(float *sn,int n)的功能是:根据以下公式计算 S,计算结果通过形参指针 sn 传回;n 通过形参传入,n 的值大于等于 0。请填空。 11.下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。 int add(int x,int y, int*z) {*z=x+y;} 12.以下 fun 函数的功能是:累加数组元素中的值。n 为数组中元素的个数。累加的和值放入 x 所指的存储单元中。请填空。 fun(int b[ ],int n,int *x) {int k,r=0; for(k=0;k *x=r; } 13.以下函数的功能是:把两个整型指针变量所指的存储单元中的内容进行交换。请填空。 exchange(int *x,int *y) {int t; t=*y; *y=*x; *x=t; } 14.以下程序的输出是49。 main() {int a[10]={19,23,44,17,37,28,49,36},*p; p=a; printf(“%d\n”,(p+=3)[3]); } 15.下面程序的输出结果是024。 #define MAX 3 int a[MAX]; main() {fun1();fun2(a);printf(“\n”);} fun1() {int k,t=0; for(k=0;k } fun2(int b[]) {int k; for(k=0;k } 16.下面程序的输出结果是 ABCDCD。 char b[]=“ABCD”; main() {char *chp; for(chp=b; *chp; chp+=2) printf(“%s”, chp); printf(“\n”); } 17.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。 #include main() {char str[81],*sptr; int i; for(i=0;i<80;i++) {str[i]=getchar(); if(str[i]==‘\n’) break; } str[i]='\0'; sptr=str; while(*sptr) putchar(*sptr++); } 18.fun1 函数的调用语句为:fun1(&a,&b,&c);它将三个整数按由大到小的顺序调整后依次放入 a、b、c三个变量中,a 中放最大数。请填空。 void fun2(int *x, int *y) {int t; t=*x; *x=*y; *y=t; } void fun1(int *pa,int *pb,int *pc) {if(*pc>*pb) fun2(pc,pb); if(*pa<*pc) fun2(pa,pb); if(*pa<*pb) fun2(pa,pc); } 19.以下函数用来在 w 数组中插入数 x,w 数组中的数已按由小到大的顺序存放,n 所指存储单元中存放数组中数据的个数,x 插入后数组中的数仍有序。请填空。 void fun(char *w,char x,int *n) {int i,p; p=0; w[*n]=x; while(x>w[p]) p++; for(i=*n;i>p;i--) w[i]= w[i-1]; w[p]=x; ++*n; } 20.阅读程序: main() {char str1[]=“how do you do”, str2[10]; char *p1=str1, *p2=str2; scanf(“%s”, p2); printf(“%s ”, p2); printf(“%s\n”, p1); } 运行上面的程序,输入字符串 HOW DO YOU DO,则程序的输出结果是 HOWhow do you do。 21.下面程序的输出结果是SO。 main() {char *p[]={“BOOL”, “OPK”, “H”, “SP”}; int i; for(i=3;i>=0;i--,i--) printf(“%c”,*p[i]); printf(“\n”); } 22.下面程序的输出结果是17。 funa(int a,int b) {return a+b;} funb(int a,int b) {return a-b;} sub(int(*t)(),int x,int y) {return((*t)(x,y));} main() {int x,(*p)(); p=funa; x=sub(p,9,3); x+=sub(funb,8,3); printf(“%d\n”, x); } 23.下面程序的输出结果是 XYZA。 #include void fun(char *a1,char *a2,int n) {int k; for(k=0;k a2[k]=(a1[k]-‘A’-3+26)%26+‘A’; a2[n]=‘\0’; } main() {char s1[5]=“ABCD”, s2[5]; fun (s1, s2, 4); puts(s2); } 24.下面程序的输出结果是7 1。 void as(int x,int y,int *cp,int *dp) {*cp=x+y; *dp=x-y; } main() {int a=4,b=3,c,d; as(a,b,&c,&d); printf(“%d %d\n”,c,d); } 25.下面程序的输出结果是eybdooG。 #include main() {static char b[]=“Goodbye”; char *chp=&b[7]; while(--chp>=&b[0]) putchar(*chp); putchar(‘\n’); } 26.若输入:this test terminal,以下程序的输出结果为:terminal test this。填空补充以下程序。 #include #define MAXLINE 20 main() {int i; char *pstr[3],str[3][MAXLINE]; for(i=0;i<3;i++) pstr[i]=str[i]; for(i=0;i<3;i++) scanf(“%s”,pstr[i]); sort(pstr); for(i=0;i<3;i++) printf(“%s\n”,pstr[i]); } sort( char *pstr [3] ) {int i,j; char *p; for(i=0;i<3;i++) {for(j=i+1;j<3;j++) {if(strcmp(*(pstr+i),*(pstr+j))>0) {p=*(pstr+i); *(pstr+i)=*(patr+j); *(pstr+j)=p; }}}} 27.以下程序利用指针法将两个数按从小到大的顺序输出来。 main() {int a,b, *p1,*p2 , p; printf(“input a, b:”); scanf(“%d%d”, &a,&b); p1=&a; p2=&b; if(a {p=p1; p1=p2; p2=p;} printf(“a=%d b=%d\n”,a,b); printf(“max=%d min=%d\n”, *p1,*p2); } 28.以下程序的输出结果是8。 fun(int n,int *s) {int f1,f2; if(n==1||n==2) *s=1; else {fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } main() {int x; fun(6,&x); printf(“%d\n”,x); } 29.下面的程序通过函数 average 计算数组中各元素的平均值,请填空。 float average(int *pa,int n) {int i; float avg=0.0; for(i=0;i avg=avg+ *(pa+i); avg= avg/n; return avg; } main() {int i,a[5]={2,4,6,8,10}; float mean; mean=average(a,5); printf(“mean=%f\n”,mean); } 30.以下程序将字符串 s1 中的所有与字符串 str1 相同的子串替换成字符串 str2,并将替换后的新串存于字符数组 s2 中。 #include void replace(char *s1,char *s2,char *str1,char *str2) {char *t0,*t1,*t2; while( *s1) {for(t0=s1,t1=str1;(*t1!=‘\0’&&*t0=*t1 );t0++,t1++); if(*t1!=‘\0’) *s2++ = *s1++; else {for(t1=str2;*t1!=‘\0’;) *s2++ =*t1++; s1=t0; } } *s2=‘\0’; } main() {static char s1[]=“abcef ababcd abab.”, s2[25]; replace (s1, s2, “abc”, “XYZ”); printf(“%s\n”, s2); } 31.以下语句的输出结果是hELLO!。 char s[80],*sp=“HELLO!”; sp=strcpy (s, sp); s[0]=‘h’; puts(s); 以上就是关于2022年湖北专升本C语言指针模拟题的全部内容了,如果你还有专升本相关的疑惑(如专升本报名、考试动态、院校招生简章、统考动态、湖南专升本院校、历年真题、考试大纲、专升本等相关信息),可以在文章下方留下你的联系方式,老师会第一时间联系到你,为你答疑解惑哦! 部分内容来源于网络转载、学生投稿,如有侵权或对本站有任何意见、建议或者投诉,请联系邮箱(1296178999@qq.com)反馈。
未经本站授权,不得转载、摘编、复制或者建立镜像, 如有违反,本站将追究法律责任!