函数调用时参数所传送的内容是: 数组地址传送、简单变量地址传送、变量地址或数组地址传送
若有语句组
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 ;
|