函数调用时参数所传送的内容是: 数组地址传送、简单变量地址传送、变量地址或数组地址传送


若有语句组

1
char name[32]="beijing", *pn=name; while( pn[0]!='\0'){pn++;}

执行后pn[0] 的值是_____ \0


利用指针指向数组的内容,跟利用索引值取得的数组元素值是相同的;也就是说:*(a+1)与 a[1]都是指向数组的第2个元素。 错误


假设a是一个整型数组的数组名,则a=a+1 的表示不合法。 正确


想要利用指针传递到函数中,

1
int main (void) {int a[5]={13,32,67,14,95};int i,num=24; replace(a, 4, num);} void replace(int *ptr, int n, int num) {*(ptr+n-1)=num;},

置换后数组a[5]={13, 32, 67, 14, 24} 。 错误


指针不但可以指向任何一种数据型态的变量,还可以让指针指向另一个指针变量,这种指向指针的指标(pointer of pointer),通称为双重指标。 正确


不能把一个整数常量直接赋值给指针变量 正确


指针变量的初始化可以直接赋地址,比如int *ps=10000; 错误


设指针变量已经指向一个有效地址,则表达式&*p==p 的结果为真. 正确


设

1
2
3
4
5
6
7
8
9
10
11
struct s

{

int id;

char name[32];

}stu, *ps;

ps = &stu;

通过指针ps读入stu成员的id和name的语句为:

1
2
3
scanf("%d", ________id);

scanf("______", ________name);

&ps-> %s ps->


指针指向一维数组时,比如若有int s[10],*ps; 则对ps的初始化,即 ps=s; 和ps=&s[0]; 使得ps指向s的同一个元素。 正确


以下语句组,可以实现从键盘输入一个整数给变量x。

1
int x, *px; scanf("%d", px);

错误


利用指针指向数组的内容,跟利用索引值取得的数组元素值是相同的;也就是说:&a[1]与 a+1都是指向内存的同一个地址。 正确


若有char *ps=”beijing”, 则ps[3]的值为____;strlen(ps)的值为________ j 7


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124

/*------------------------------------------------

【程序设计】 Guo S.

--------------------------------------------------

题目:完成函数void fun(char *s),

功能是将s指向的字符串中的所有数字字符前,插入一个#,

比如当s指向a1b2c33时,

执行fun后,s指向的字符串为a#1b#2c#3#3

要求: 利用指针完成.

--------------------------------------------------

注意:部分源程序给出如下。请勿改动主函数

main和其它函数中的任何内容,仅在函

数的花括号中begin和end之间填入所编写的若干语句。

*********Begin**********和********** End **********不可删除

------------------------------------------------*/

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#include <stdlib.h>

#define N 128

void bky();

void fun1(char *s)

{

/**********Begin**********/

/********** End **********/

}

int main()

{

char s[256];

printf("请输入一个字符串:");

gets(s);

fun1(s);

puts(s);

bky();

return 0;

}

void bky()

{

FILE *IN,*OUT;

int i;

char s[256];

IN=fopen("in.dat","r");

if(IN==NULL)

{

printf("Please Verify The Currernt Dir..it May Be Changed");

return;

}

OUT=fopen("out.dat","w");

if(OUT==NULL)

{

printf("Please Verify The Current Dir.. it May Be Changed");

return;

}

 

for(i=0;i<3;i++)

{

fscanf(IN, "%s", s);

fun1(s);

fprintf(OUT, "%s\n", s);

}

fclose(IN);

fclose(OUT);

}

【参考代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
char *p, *q, *s0=s;

int len;

len = strlen(s);

p=(char *)malloc( sizeof(char)*(len*2+1) );

 

if(NULL==p){

exit(1);

}

q=p;

while(*s)

{

if( *s>='0'&&*s<='9')

{

*p++ = '#';

}

*p++ = *s++;

}

*p='\0';

strcpy(s0,q);

free(q);

q=p=NULL;

return ;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*------------------------------------------------

【程序设计】 一、二维数组;排序;guosumei

 

--------------------------------------------------

题目:键盘输入3人成绩(整数)和姓名,按照空格隔开。比如

80 zhangshan

100 lisi

90 zhaoliu

要求:完成函数fun1,

按照成绩排序(从高到低),程序会按照以下输出

100 lisi

90 zhaoliu

80 zhangshan

--------------------------------------------------

注意:部分源程序给出如下。请勿改动主函数

main和其它函数中的任何内容,仅在函

数的花括号中begin和end之间填入所编写的若干语句。

*********Begin**********和********** End **********不可删除

------------------------------------------------*/

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#include <stdlib.h>

#define N 128

#define L 3

void bky();

//第一个参数为成绩首地址,第二个为姓名的首地址,第三个为数组长度

void fun1(int score[], char name[][32], int num)

{

// 数组长度num

/**********Begin**********/

/********** End **********/

}

int main()

{

int num=3, n, m,k=1;

int score[3];

char name[3][32];

for(n=0;n<num;n++){

printf("请输入第%d个整数成绩和姓名(空格隔开):\n", n+1);

scanf("%d%s", &score[n], name[n]);

}

 

fun1(score, name, num);

for(n=0;n<num;n++){

printf("%d %s\n", score[n], name[n] );

}

bky();

return 0;

}

void bky()

{

FILE *IN,*OUT;

int num=3, n, m,k=1;

int score[3];

char name[3][32];

IN=fopen("in.dat","r");

if(IN==NULL)

{

printf("Please Verify The Currernt Dir..it May Be Changed");

return;

}

OUT=fopen("out.dat","w");

if(OUT==NULL)

{

printf("Please Verify The Current Dir.. it May Be Changed");

return;

}

for(n=0;n<num;n++){

fscanf(IN, "%d%s", &score[n], name[n]);

}

 

fun1(score, name, num);

for(n=0;n<num;n++){

fprintf(OUT, "%d %s\n", score[n], name[n] );

}

fclose(IN);

fclose(OUT);

}

【参考代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int i,j,t;

char temp[32];

for(i=0;i<num;i++)

for(j=i+1;j<num;j++)

{

if( score[i]<score[j])

{

t=score[i]; score[i]=score[j];

score[j]=t;

strcpy(temp, name[i]);

strcpy(name[i], name[j]);

strcpy(name[j], temp);

}

}

return ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*------------------------------------------------

【程序设计】Guo S.

--------------------------------------------------

题目:输入一个字符串,将连续数字字符作为整数输出。

设只有英文大小写字符和数字组成,比如a123b4x576AAZ36,将其中连续的数字字符作为一个整数,

依次存放到一维数组中,比如整数123、4、576和36分别存放于num[0],num[1],num[2]和num[3]中,

输出字符串中构成整数的个数,以及各个整数。

完成函数 int fun1(char *str, int num[])

// 函数返回数字的个数,即num的个数

//

// 数组num, 设str中连续数字中,不超过32

// num[0]存放第一个连续的数字,

// num[2]存放第二个连续的数字,

// 以此类推

本例题中,则需输出个数4,以及具体数值123、4、576和36。

共有4个数字:

123

4

576

36

要求: 字符串部分、存放结果的部分,均用指针完成.

--------------------------------------------------

注意:部分源程序给出如下。请勿改动主函数

main和其它函数中的任何内容,仅在函

数的花括号中begin和end之间填入所编写的若干语句。

*********Begin**********和********** End **********不可删除

------------------------------------------------*/

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#include <stdlib.h>

#define N 128

void bky();

int fun1(char *str, int num[])

{

// 函数返回数字的个数,即num的个数

//

// 数组num, 设str中连续数字中,不超过32

// num[0]存放第一个连续的数字,

// num[2]存放第二个连续的数字,

// 以此类推

/**********Begin**********/

/********** End **********/

}

int main()

{

char str[N];

int num[32], number, j;

printf("输入一个字符串: ");

scanf("%s", str);

 

number=fun1(str, num);

printf("共有%d个数字:\n", number);

 

for(j=0;j<number;j++)

printf("%d\n",num[j]);

bky();

return 0;

}

void bky()

{

FILE *IN,*OUT;

int i;

char str[N];

int num[32], number, j;

IN=fopen("in.dat","r");

if(IN==NULL)

{

printf("Please Verify The Currernt Dir..it May Be Changed");

return;

}

OUT=fopen("out.dat","w");

if(OUT==NULL)

{

printf("Please Verify The Current Dir.. it May Be Changed");

return;

}

for(i=0;i<6;i++)

{

fscanf(IN, "%s", str);

number=fun1(str, num);

fprintf(OUT, "共有%d个数字:\n", number);

for(j=0;j<number;j++)

fprintf(OUT, "%d\n",num[j]);

}

fclose(IN);

fclose(OUT);

}

【参考代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int len,i,*nump,isum=0, flg, number=0;

len =strlen(str);

nump=num;

 

for(i=0;i<32;i++)

num[i] = 0;

 

while( *str ){ //ab12c0c568dd666:结果是12,0,568,666四个数字

isum=0;

flg=0;

while( *str>='0' && *str<='9') {

isum = isum*10 + (*str-'0');

str++;

flg=1;

}

if(flg) {

*nump=isum;

nump++;

str--;

number++;

}

str++;

}

return number;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
/*------------------------------------------------

【程序设计】

--------------------------------------------------

题目:编程实现:

完成函数 void fun1(int *n, int num)

// 指针n指向存放num*num个整数,num为奇数

// 将最大一个数存放到中间,其他按从小到大以此存放

键盘输入大于等于3且小于等于11的奇数N,以及N*N的二维数组的值,将最大值存放到中间,将从小到大的值依次放数组中。

比如当输入3,以及

41 3 4

1 5 2

3 6 9

则有最大值41,存放到数组的中间,其余按照从小到大放入:

1 2 3

3 41 4

5 6 9

要求: 利用指针指向二维数组完成.

--------------------------------------------------

注意:部分源程序给出如下。请勿改动主函数

main和其它函数中的任何内容,仅在函

数的花括号中begin和end之间填入所编写的若干语句。

*********Begin**********和********** End **********不可删除

------------------------------------------------*/

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#include <stdlib.h>

#define N 128

void bky();

void fun1(int *n, int num)

{

// 指针n指向存放num*num个整数,num为奇数

// 将最大一个数存放到中间,其他按从小到大以此存放

 

/**********Begin**********/

 

/********** End **********/

}

int main()

{

int *x, num, n, m,k=1;

do{

printf("输入一个大于等于3,且小于等于11的奇数: ");

scanf("%d", &num);

}while( num<3 num>11 num%2==0);

 

x=(int *)malloc(sizeof(int)*num*num);

 

for(n=0;n<num;n++){

for(m=0;m<num;m++){

printf("请输入第%d个数:", k);

scanf("%d", (x+n*num+m));

k++;

}

}

 

fun1(x, num);

for(n=0;n<num;n++){

for(m=0;m<num;m++){

printf("%d ", *(x+n*num+m));

}

printf("\n");

}

bky();

return 0;

}

void bky()

{

FILE *IN,*OUT;

int i;

int *x, num, n, m,k=1,*p1,*p2;

x=(int *)malloc(sizeof(int)*121);

IN=fopen("in.dat","r");

if(IN==NULL)

{

printf("Please Verify The Currernt Dir..it May Be Changed");

return;

}

OUT=fopen("out.dat","w");

if(OUT==NULL)

{

printf("Please Verify The Current Dir.. it May Be Changed");

return;

}

 

for(i=0;i<3;i++)

{

fscanf(IN, "%d", &num);

p1=x;

for(n=0;n<num;n++){

for(m=0;m<num;m++){

fscanf(IN, "%d", p1);

p1++;

}

}

 

fun1(x, num);

 

p1=x;

for(n=0;n<num;n++){

for(m=0;m<num;m++){

fprintf(OUT, "%d ", *p1);

p1++;

}

fprintf(OUT,"\n");

}

}

fclose(IN);

fclose(OUT);

}

【参考代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
int i,j,k, max, temp, *p1, N2, *p2;

N2 = num*num;

 

max=*n;

 

for(i=0;i<N2-1;i++)

{

p1=n+i;

for(j=i, p2 = n+j; j<N2;j++){

if(*p1 > *p2){

temp = *p1;

*p1 = *p2;

*p2 = temp;

}

p2++;

}

}

 

k = N2/2;

max = *(n+N2-1);

for(i=N2-1;i>k;i--)

*(n+i)=*(n+i-1);

*(n+k)=max;

 

return ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*------------------------------------------------

【程序设计】Guo S.

--------------------------------------------------

题目:

完成函数void fun1(char *str),将指针str指向的字符串反转。

即:当字符串为abc123时,则将字符串变为321cba

要求: 字符串部分的处理用指针完成.

输入字符串部分,在程序的其他部分完成,无需考虑。

--------------------------------------------------

注意:部分源程序给出如下。请勿改动主函数

main和其它函数中的任何内容,仅在函

数的花括号中begin和end之间填入所编写的若干语句。

*********Begin**********和********** End **********不可删除

------------------------------------------------*/

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#include <stdlib.h>

#define N 128

void bky();

void fun1(char *str)

{

/**********Begin**********/

 

/********** End **********/

}

int main()

{

char str[N];

double ave;

printf("输入一个字符串: ");

scanf("%s", str);

fun1(str);

printf("%s\n",str);

bky();

return 0;

}

void bky()

{

FILE *IN,*OUT;

int i;

 

char str[N];

double ave;

IN=fopen("in.dat","r");

if(IN==NULL)

{

printf("Please Verify The Currernt Dir..it May Be Changed");

return;

}

OUT=fopen("out.dat","w");

if(OUT==NULL)

{

printf("Please Verify The Current Dir.. it May Be Changed");

return;

}

for(i=0;i<4;i++)

{

fscanf(IN,"%s", str);

fun1(str);

fprintf(OUT, "%s\n",str);

 

}

fclose(IN);

fclose(OUT);

}

【参考代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
char temp, *p;

int len;

int i;

len =strlen(str);

p=str+len-1;

 

while(p>str){

temp = *p;

*p = *str;

*str = temp;

p--;

str++;

}

return ;

站内搜索

没有找到内容!