文档库 最新最全的文档下载
当前位置:文档库 › 指针经典练习题及答案

指针经典练习题及答案

指针经典练习题及答案
指针经典练习题及答案

二、程序题

1、计算字符串中子串出现的次数。要求:用一个子函数subString()实现,

参数为指向字符串和要查找的子串的指针,返回次数。

2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),

Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。

例如,China转换成密文为G l m r e。

要求:在函数change中完成字母转换,在函数insert中完成增加空格,

用指针传递参数。

3、字符替换。要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),

并返回替换字符的个数。

4、编写一个程序,输入星期,输出该星期的英文名。用指针数组处理。

5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,

再分别取出每个字符串的第三个字母合并成一个新的字符串输出

(若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。

6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,

然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,

输它们相同的数字个数(使用动态内存分配)。

/*1、计算字符串中子串出现的次数。要求:用一个子函数subString()实现, 参数为指向字符串和要查找的子串的指针,返回次数。*/

#include

int subString(char *a, char *b)

{

int i = 0;

int j = 0;

int m = 0;

char *p = b;

while(*a)

{

while(*a)

{

if(*a == *b)

{

break;

}

a++;

}

while(*b)

{

if(*a != *b)

精选文档

{

return m;

}

else

{

m = m;

}

b++;

a++;

}

// a++;

b = p;

++m;

}

return m;

}

int main()

{

char a[100];

char b[100];

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

gets(a);

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

gets(b);

printf("%d", subString(a, b));

return 0;

}

/*2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),

Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。

例如,China转换成密文为G l m r e。

要求:在函数change中完成字母转换,在函数insert中完成增加空格,

用指针传递参数。 */

#include

#include

void change(char *p)

{

while(*p)

{

*p = *p+4;

p++;

}

}

精选文档

int main()

{

char a[2][100] = {""};

printf("请输入明文:");

gets(a[0]);

change(a[0]);

strcpy(a[1], a[0]);

printf("密文为:");

printf("%s\n", a[1]);

return 0;

}

/*3、字符替换。要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。 */

#include

#include

int Myreplace(char *p)

{

int i = 0;

while(*p)

{

if(*p == 't'||*p == 'T')

{

*p = *p-15;

i++;

}

p++;

}

return i;

}

int main()

{

int m;

char a[100];

char *p = a;

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

gets(a);

m = Myreplace(a);

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

printf("%d\n", m);

return 0;

}

精选文档

/*4、编写一个程序,输入星期,输出该星期的英文名。用指针数组处理。*/

#include

#include

void fun(char (*a)[100], char *b, char *c, int *m)

{

int i = 0;

int j = 0;

while(c[i])

{

if(c[i] == *m)

{

strcpy(b, a[i]);

break;

}

i++;

}

}

int main()

{

char a[][100] = {"yi", "er", "san", "si", "wu", "lui", "qi"};

char c[100] = {1, 2, 3, 4, 5, 6, 7};

char b[100] = "";

// char *p = b;

int m;

scanf("%d", &m);

fun(a, b, c, &m);

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

return 0;

}

第二种方法

/*4、编写一个程序,输入星期,输出该星期的英文名。用指针数组处理。*/

#include

#include

void fun(char (*a)[100], char *b, char *c, int *m)

{

while(*c)

{

if(*c == *m)

精选文档

{

strcpy(b, *a);

break;

}

c++;

a++;

}

}

int main()

{

char a[][100] = {"yi", "er", "san", "si", "wu", "lui", "qi"};

char c[100] = {1, 2, 3, 4, 5, 6, 7};

char b[100] = "";

// char *p = b;

int m;

scanf("%d", &m);

fun(a, b, c, &m);

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

return 0;

}

/*5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出

(若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。 */

#include

#include

void fun(char (*a)[100], int *b, char *c)

{

int i = 0;

int j = 0;

char temp[100];

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

{

b[i] = strlen(a[i]);

}

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

{

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

{

if(b[i]>b[j])

{

strcpy(temp, a[i]);

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

strcpy(a[j], temp);

精选文档

}

}

}

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

{

if(strlen(a[i])<3)

{

strcat(c, " ");

}

else

{

c[i] = a[i][2];//strcat(c, &a[i][2]);

}

}

}

int main()

{

char a[100][100];

int i = 0;

int b[100] = {""};

char c[100] = "";

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

{

printf("请输入字符串i:", i);

gets(a[i-1]);

}

fun(a, b, c);

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

{

printf("%s\n", a[i]);

}

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

return 0;

}

/*6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。*/

#include

#include

Myswap(char *a)

{

unsigned int i = 0;

精选文档

unsigned int j = 0;

char temp;

for(i = 0; i

{

for(j = i+1; j

{

if(a[i] > a[j])

{

temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}

}

}

int main()

{

char s[100] = "";

int i = 0;

int j = 0;

while(s[i-1] != '\n')

{

s[i] = getchar();

i++;

}

Myswap(s);

for(j = 0; s[j]; j++)

{

printf("%c ",s[j]);

}

printf("\n");

return 0;

}

#include

#include

#include

int fun(int *a, int *b, int *c)

{

int count = 0;

while(*b)

{

if(*b == *a)

{

精选文档

*c = *b;

count++;

c++;

}

a++;

b++;

}

return count;

}

int main()

{

int i = 0;

int num;

int a[10];

int b[10] = {0};

int c[10] = {0};

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

{

a[i] = 1+rand()%6;

}

printf("请输入六个数:");

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

{

scanf("%d", &b[i]);

}

printf("\n");

num = fun(a, b, c);

printf("出奖号码为:");

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

{

printf("%d ", a[i]);

}

printf("\n");

printf("中奖号码为:");

for(i = 0; c[i]; i++)

{

printf("%d ", c[i]);

}

printf("\n");

printf("中奖个数为:%d\n", num);

return 0;

}

第十章 指针

第十章指针 一、选择题 1.变量的指针,其含义是指该变量的_______________。 A) 值B) 地址C) 名D)一个标志 2.已有定义int k=2; int *ptr1, *ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值是________________。 A)k=*ptr1+*ptr2 B) ptr2=k C) ptr1=ptr2D)k=*ptr1*(*ptr2) 3.若有定义int *p, m=5,n;以下程序段正确的是________________。 A) p=&n; B) p=&n; scanf("%d",&p); scanf("%d",*p); C) scanf("%d",&n); D) p=&n; *p=n; *p=m; 4.若有定义:int *p1, *p2, m=5, n;以下____________是正确的赋值语句。 A) p1=&m; p2=&p1; B)*p1=*p2; C) p1=&m; p2=p1; D) p1=&m; *p2=*p1; 5.若有int *p, a=4;和p=&a;下面____________均代表地址。 A) a, p, *&a B)&*a, &a, *p C) *&p, *p, &a D)&a, &*p, p 6.若变量已正确定义并且指针p已经指向变量x,则*&x相当于____________。 A) x B) p C) &x D) &*p 7.若定义了int m, n=0, *p1=&m;则下列____________表达式与m=n等价。 A) m=*p1 B)*p1=&*n C) *&p1=&*n D) *p1=*&n; 8. 假如指针p已经指向整型变量x,则(*p)++相当于____________。 A) x++ B) p++ C) *(p++) D) &x++ 9. 对于基类型相同的两个指针变量之间,不能进行的运算是____________。 A) < B) = C) + D) - 10. 若程序中已包含头文件stdio.h,以下选项中正确运用指针变量的程序段是__________。 A) int *i=NULL; B) float *f=NULL scanf("%d",i); *f=10.5; C) char t='m',*c=&t; D) long *L; *c=&t; L='\0'; 11. 有如下函数和变量定义int a=25; 执行语句print_value(&a);后的输出结果是___________。 void print_value(int *x) { printf("%d",++*x); } A) 23 B) 24 C) 25 D) 26 12. 若有定义:char s[10]; 则在下面表达式中不表示s[1]的地址的是___________。 A) s+1 B) s++ C) &s[0]+1 D) &s[1] 13.若有定义:int a[5], *p=a; 则对a数组元素的正确引用是_____________。 A)*&a[5]B)a+2 C)*(p+5) D)*(a+2) 14. 若有定义:int a[5], *p=a; 则对a数组元素地址的正确引用是_____________。 A)p+5B)*a+1 C)&a+1 D)&a[0] 15. 若有定义:int a[5]; 则a数组中首元素的地址可以表示为_____________。 A)&a B)a+1 C)a D)&a[1] 16. 若要对a进行合法的自减运算,则之前应有下面___________的说明。 A) int p[3]; B) int k; C) char *a[3]; D) int b[10];

实验六 指针.

实验六指针 ●实验目的 1、进一步掌握指针的概念,会定义和使用指针变量。 2、能正确使用数组的指针和指向数组的指针变量。 3、能正确使用字符串的指针和指向宇符串的指针变量。 4、了解指向指针的指针的概念及其使用方法。 5、通过实验进一步理解指针和函数的几种关系。 ● 实验内容 1、输入两个整数,按由大到小的顺序输出。 输入以下程序并调试运行。 #include int main() { int a,b; int *p=&a,*q=&b,*t; cout<<"请输入a和b:"; cin>>a>>b; if(a

char *temp; int i,j,n=4; for(i=0;i0) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } //排序 for(i=0;i

C程序设计第三版第十章题解

第十章指针 10.1 输入3个整数,按照从小到大的顺序输出 #include void main() { void swap(int *p1, int *p2); int n1,n2,n3; int *p1,*p2,*p3; printf("input three integer:"); scanf_s("%d,%d,%d",&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if(n1>n2) swap(p1,p2); if(n1>n3) swap(p1,p3); if(n2>n3) swap(p2,p3); printf("the order: %d,%d,%d\n",n1,n2,n3); } void swap(int *p1, int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; } NOTE:scanf的参数为地址,printf参数为参数 10.2输入三个字符串,按照从小到大的顺序输出 #include #include void main() { void swap(char *p1, char *p2); char str1[20],str2[20],str3[20]; printf("input three string:"); gets_s(str1); gets_s(str2); gets_s(str3); if(strcmp(str1,str2)) swap(str1,str2);

if(strcmp(str1,str3)) swap(str1,str3); if(strcmp(str2,str3)) swap(str2,str3); printf("the order: %s,%s,%s\n",str1,str2,str3); } void swap(char *p1, char *p2) { char temp[20]; strcpy(temp,p1); strcpy(p1,p2); strcpy(p2,temp); } NOTE:gets()用于获取字符串输入。strcmp() 和strcpy()的应用 10.3 输入10个整数,将其中最小的数和第一个数对换,把最大的数和最后一个数对换,写三个函数:①输入十个数;②进行处理;③输出十个数 #include void main() { void input(int *); void output(int *); void proceed(int *); int number[10]; input(number); proceed(number); output(number); } void input(int *number) { int i; printf("input ten integer:\n"); for (i=0;i<10;++i) { scanf("%d",&number[i]); } } void proceed(int *number)

c语言实验报告6 指针

实验6 指针1.实验目的和要求 (1)掌握指针的概念、指针变量定义格式和引用。 (2)掌握指针的运算方法。 (3)掌握数组的指针和指向数组的指针变量。 (4)掌握指针与函数的关系。 (5)能正确使用字符串的指针和指向字符串的指针变量。(6)了解指向函数的指针。 (7)了解指向指针变量的指针。 2.实验内容:实验指导书中的实验九。 3.实验步骤 9.1 调试程序,找出程序的错误。 改正后的程序代码(贴图): 运行结果(帖图): 9.2 运行程序:

运行结果:; 9.3 修改程序错误,并运行。 改正后程序代码: 运行结果(帖图): 9.4. 程序填空:

运行结果(请帖图):9.5. 程序填空:

程序填空: #include main() { int a[5][5]={0},*p[5],i,j; for(i=0; i<5; i++) p[i]= &a[i][0] ; for(i=0; i<5; i++) { *(p[i]+ i )=1; *(p[i]+5- (i+1) )=1; } for(i=0; i<5; i++) { for(j=0; j<5; j++) printf("%2d", p[i][j]); Printf("\n") ; } } 运行结果(请帖图):

9.6 编程(选作) #include main() { int *p,a[20],i,k,m,n; p=a; printf("请输入人数n:"); scanf("%d",&n); for(i=0;i

第10章指针类型习题及答案

第十章指针类型习题及其答案 10-2 定义指针变量p,q,r,让它们指向变量a,b,c,在指向d,e,f,最后指向变量x,y,z,然后输出p,q,r与*p,*q,*r. 解:int a,b,c,d,e,f,x,y,z ; int *p,*q,*r ; p=&a;q=&b;r=&c ; p=&d;q=&e;r=&f ; p=&x;q=&y;r=&z ; printf(“%l,%l,%l”,p,q,r) ; printf(“%d,%d,%d”,*p,*q,*r) ; 思考:指针也是一种数据类型吗?他可以不依赖其它数据类型而独立存在吗? 10-3 应用指针,实现10个整数从打到小的排序输出。 解:#include "stdio.h" void main() { int i,j,a[10],*p,t; printf("请输入10个整数:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<9;i++) { p=&a[i] ; for(j=i+1;j<10;j++) if(a[j]>*p) p=&a[j] ; t=*p;*p=a[i];a[i]=t; } printf("排序后的数组为:\n"); for(i=0;i<10;i++) printf("%d,",a[i]) ; } 思考:指针变量的值可以由键盘输入确定吗?它与其所指类型的变量值之间的关系如何?

10-4 应用指针,求n个数的最小值和最大值。 解:#include "stdio.h" #define L 100 void main() { int i,n,a[L],*max,*min; printf("请确定欲输入数据的个数(<100):"); scanf("%d",&n); printf("下面请依次输入%d的个数\n",n); for(i=0;i*max) max=&a[i]; if(a[i]<*min) min=&a[i]; } printf("最大值=%4d,最小值=%4d\n",*max,*min); } 思考:指针也可以指向相同类型的数组元素,此题如用指针来表示来表示数组的各元素的值,程序应如何设计? 10-5 应用指针,编写下列字符串处理函数: (1) 字符串的复制函数。 (2) 字符串的连接函数。 解:#include "stdio.h" void copy_string(char *from ,char *to) { for(;*from!='\0';from++,to++) *to=*from ; *to='\0';

C语言实验六实验报告——指针

一、实验项目名称 指针 二、实验目的 1.掌握指针的基本概念和基本用法。包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等; 2.掌握数组与指针的关系并能够利用指针解决数组的相关问题; 3.掌握字符串与指针的关系并能够利用指针处理字符串的问题; 4.掌握指针与函数的关系并能够利用指针处理函数问题; 5.了解指向指针的指针的概念及其使用方法; 6.能够使用指针进行程序设计。 三、实验内容 有关指针的程序设计 1.编程实现:任意输入的10个数,求其平均值。 要求: (1)10个数采用scanf语句读入。 (2)利用指针实现对这10个数的访问。 (3)要求平均值的精度为小数后面2位。 2.编程实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。 要求: (1)整数数组由初始化方式输入。任意整数由scanf函数输入; (2)实现过程采用指针处理; (3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。 3.编写函数newcopy(char *new,char *old),它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。 要求: (1)在主函数中以初始化方式输入一个字符串; (2)调用newcopy()函数; (3)在主函数中输出处理后的结果。 4.编程实现:输入三个整数,按由大到小的顺序输出。

要求: (1)通过scanf函数输入三个数据并存入三个变量中; (2)利用指针实现从大到小输出; (3)修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出; (4)修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出; (5)体会指针对不同数据处理的特点。 四、实验步骤及结果 一、 #include <> void main() { int a[10],n,sum=0; float aver;/* 定义平均数为浮点型*/ int *p=a;/*初始化*/ printf("Please input 10 numbers:\n"); for (n=0;n<10;++n) scanf("%d",&a[n]);/*输入十个数*/ for (n=0;n<10;++n) sum=sum+*(p+n);/*使用指针访问数据*/ aver=(float)sum/n; printf("Average is %.2f",aver);/*精确到小数点后两位*/ } 二、 #include <> void arr(int *a,int n);/*定义排序函数*/ void insert(int *a,int num);/*插入并排序函数*/ int n=10;/*定义数据个数,可修改*/ void main()

第十章(指针)

1.补充程序,程序实现从10个数中找出最大值和最小值。 #include #include int max,min; void find_max_min(int *p,int n) { int *q; max=min=*p; for(q=p; q*q) min=*q; } void main() { int i,num[10]; printf("Input 10 numbers: "); for(i=0;i<10;i++) scanf("%d",&num[i]); find_max_min(/**/ num /**/,10); printf("max=%d,num=%d\n",max,min); } 2.补充程序,其中main函数通过调用average函数计算数组元素的平均值。 #include float average(int *pa,int n) { int k; /**/ float avg=0; /**/ for(k=0;k #include

第十章 指针(含答案)

第十章指针 一、选择题 1.以下程序的运行结果是【C】。 sub(int x,int y,int *z) {*z=y-x ;} main() { int a, b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(”%4d,%4d,%4d\n”,a,b,c); } A. 5,2,3 B. -5,-12,-7 C.-5,-12,-17 D. 5,-2,-7 2.若已定义 char s[10]; 则在下面表达式中不表示s[1]的地址的是【 B 】 A)s+1 B)s++ C)&s[0]+1 D)&s[1] 3.下列程序能对两个整型变量的值进行交换。以下正确的说法是【 D】。 main() { int a=10,b=20; printf("(1)a=%d,b=%d\n",a,b); swap(&a,&b); printf(“(2)a=%d,b=%d\n”a,b); } swap(int p, int q) { int t; t=p;p=q;q=t;} A. 该程序完全正确 B. 该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可 C. 该程序有错,只要将swap()函数中的形参p和q以及t均定义为指 针(执行语句不变)即可 D. 以上说法都不正确 4.有四组对指针变量进行操作的语句,以下判断正确的选项是【】。 (1)int *p,*q; q=p; int a,*p,*q;p=q=&a; (2)int a,*p,*q; q=&a; p=*q; int a=20, *p; *p=a; (3)int a=b=0,* p; p=&a; b=* p; int a=20,*p,*q=&a; *p=*q; (4)int a=20,*p,*q=&a; p=q; int p, *q; q=&p; A.正确:(1);不正确:(2),(3),(4) B.正确:(l),(4);不正确:(2),(3) C.正确:(3);不正确:(1),(2),(4) D.以上结论都不正确 5.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是【】。

实验六 指针(题目)

实验六指针 一、实验目的及要求 1.通用实验进一步掌握指针的概念,会定义和使用指针变量; 2.能正确使用数组的指针和指向数组的指针变量; 3.能正确使用字符串的指针和指向字符串的指针变量; 4.能正确使用指向函数的指针变量; 5.了解指向指针的指针的概念及其使用方法。 二、实验学时 4学时 三、实验任务 编程序并上机调试运行程序(都要求用指针处理)。 1.上机验证以下c70101.c程序的运行结果 #include void main() { inti,j,*pi,*pj; pi=&i; pj=&j; i=5; j=7; printf("\n%d\t%d\t%d\t%d",i,j,pi,pj); printf("\n%d\t%d\t%d\t%d",&i,*&i,&j,*&j); } 运行结果: 5 7 -34 -32 -34 5 -32 7 相关知识:指针的值与指针指向的变量值的区别。在VC环境下,以上运行结果中的负数是另一个值。 2.上机验证以下c70102.c程序的运行结果 #include void main() { inti,a[]={1,2,3},*p; p=a;/*将数组a首地址赋给指针p*/ for (i=0;i<3;i++) printf("%d,%d,%d,%d\n",a[i],p[i],*(p+i),*(a+i)); } 运行结果: 1,1,1,1 2,2,2,2

3,3,3,3 相关知识:①指针指向数组的方法;②指针表示数组元素的方法。③数组元素的多种表示方法。 3.调试下列c70103.c程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 #include void main() { intj,a[12],*p=a; for(j=0;j<12;j++) scanf("%d",p++); p=a; for(j=1;j<=12;j++) { printf("%4d",*p++); if(j%4 == 0) printf("\n"); } } 相关知识:①调试时指针变量指向哪个目标变量;②区分指针的值和指针指向变量的值; ③通过指针操作数组元素。 4.调试下列c70104.c程序,使之具有如下功能:任意输入2个数,调用两个函数分别求:⑴2个数的和,⑵2个数交换值。 #include void main( ) { inta,b,c,*p=&c; void sum(int ,int ,int *); void swap(int * ,int * ); scanf("%d,%d",&a,&b); sum(a,b,p); swap(&a,&b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); } void sum(inta,intb,int *c) { *c=a+b; } void swap(int *a,int *b) { int *t; t=a; a=b; b=t; } 相关知识:①调试程序时注意参数传递的是数值还是地址。②指针作为参数;③利用指针得到多个返回值。

C语言第十章习题答案

C程序设计[谭浩强](第三版)课后答案第十章指针2010-06-25 14:04 第十章指针 10.1 main() {int n1,n2,n3; int *p1,*p2,*p3; scanf("%d,%d,%d",&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if(n1>n2)swap(p1,p2); if(n1>n3)swap(p1,p3); if(n2>n3)swap(p2,p3); printf("%d,%d,%d\n",n1,n2,n3); } swap(p1,p2) int *p1,*p2; {int p; p=*p1;*p1=*p2;*p2=p; } 10.2 main() {char *str1[20],*str2[20],*str3[20]; char swap(); scanf("%s",str1); scanf("%s",str2); scanf("%s",str3); if(strcmp(str1,str2)>0)swap(str1,str2); if(strcmp(str1,str3)>0)swap(str1,str3); if(strcmp(str2,str3)>0)swap(str2,str3); printf("%s\n%s\n%s\n",str1,str2,str3); } char swap(p1,p2) char *p1,*p2; {char *p[20]; strcpy(p,p1); strcpy(p1,p2); strcpy(p2,p); } 10.3 main() {int number[10]; input(number);

C语言_实验六 指针剖析

实验六指针 一、实验目的 1、掌握指针的概念,定义和使用指针变量; 2、掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。 3、掌握字符串指针作的用法。 二、相关知识点 ●地址和指针的概念; ●数组和指针的关系; ●字符串和指针的关系; 三、实验内容一(验证及程序分析) Eg5-1: 输入两个整数,并使其从大到小输出,用指针变量实现数的比较。 (1)源程序: #include void main() { int *p1,*p2,*p,a,b; scanf("%d,%d",&a,&b); p1=&a; p2=&b; if(a

printf("a=%d,b=%d\n",a,b); printf("max=%d,min=%d\n",*p1,*p2); } (2)程序运行结果: (3)在程序中的定义一个整型变量t,然后将语句段if(a

Eg5-2:运行并改正下面程序中的错误。#include void main() { int a=3,b; int *p; *p=a; b=*p; printf("%d\n",b); a=100; b=*p; printf("%d\n",b); } (1)程序运行结果:

(2)请简要分析程序错误的原因: (3)请将程序中的错误改正后重新运行: Eg5-3:用指针法输入12 个数,然后按每行4 个数输出。 (1)算法分析:定义一个整型数组和一个整型指针,这样通过数组就可以静态分配内存空间,存储数据;然后将指针与数组相关,使指针指向与数组相同

第十章练习题

第十章练习题 一、选择题 1.将逻辑值赋给内存变量LZ的正确方法是: A)LZ=“.T.”B)STORE “T” TO LZ C)LZ=TRUED)STORE .T. TO LZ 2.将98年国庆节的日期赋给内存变量ND的正确方法是: A)ND=DTOC(“10/01/98”)B)ND=CTOD([10/01/98]) C)STORE DATE()TO NDD)STORE 10/01/98 TO ND 3.执行命令INPUT “请输入出生日期:” TO MDATE时,如果通过键盘输入CTOD(“01/01/88”)则内存变量MDATE的值应当是: A)CTOD(“01/01/88”)B)“01/01/88” C)日期值01/01/88D)拒绝接收,MDATE不赋值 4.在DO WHILE .T.的循环中,退出循环应使用的命令是: A)LOOPB)EXITC)CLOSED)CLEAR 5.下列程序的运行结果是: A=10 IF A=10 S=0 ENDIF S=1 ?S A)0B)1C)程序出错D)结果无法确定 6.有如下的程序: M=0

N=0 DO WHILE N>M M=M+N N=N-10 ENDDO ?M 运行此程序后M的值为: A)0B)10C)100D)99 7.有如下程序: SET TALK OFF STORE 2 TO S,K DO WHILE S<14 S=S+K K=K+2 ENDDO ?S,K SET TALK ON RETURN 此程序运行后的输出结果是: A)2210B)228 C)148D)14108.执行如下程序:SET TALK OFF S=0 I=1

实验六 指 针

昆明理工大学(C++面向对象编程)上机报告 实验六指针(一) 一、目的和要求 1. 熟悉指针的正确用法。 2. 掌握指针作为函数参数的使用方式 二、实验内容和步骤 1、指出下面程序错误的原因。 main( ) { int x=10,y=5,*px,*py; px=py; px=&x; py=&y; printf(“*px=%d,*py=%d,*px,*py);

} 答:警告是px,py没有赋初值; 错误时printf语句中缺少了” 正确:printf(“*px=%d,*py=%d”,*px,*py); 2、下面的程序试图有如下运行结果: 请调试下面的程序,使其有如上执行结果。#include main () { char s*; char c; printf(“which style you want to :ln”); printf(“capital ( c ) or uncapital(a):”); c=getchar(); if(c=’c’)strcpy(s,”COMPUTER”);

else strcpy(s,”computer”); put(s); } 分析出错原因。 If(c=’ c’)不应用赋值语句 Strcpy函数中s 不应该为指针!!应定义为数组;正确程序 3.下面的程序能获得上述运行结果吗? main() {

char *S=”COMPUTER”; char c; printf(“which style you want t o \n”); printf(“capital (c) or uncapital(u);”); c=getchar(); if(c=’c’) put(s); else { s=”computer”; puts(s); } } 分析出错原因。 If(c=’ c’)不应用赋值语句 Put函数无法输出 正确程序

数据结构严蔚敏版第十章答案

第十章内部排序 10.23 void Insert_Sort1(SqList &L)//监视哨设在高下标端的插入排序算法 { k=L.length; for(i=k-1;i;--i) //从后向前逐个插入排序 if(L.r[i].key>L.r[i+1].key) { L.r[k+1].key=L.r[i].key; //监视哨 for(j=i+1;L.r[j].key>L.r[i].key;++j) L.r[j-1].key=L.r[j].key; //前移 L.r[j-1].key=L.r[k+1].key; //插入 } }//Insert_Sort1 10.24 void BiInsert_Sort(SqList &L)//二路插入排序的算法 { int d[MAXSIZE]; //辅助存储 x=L.r.key;d=x; first=1;final=1; for(i=2;i<=L.length;i++) { if(L.r[i].key>=x) //插入前部 { for(j=final;d[j]>L.r[i].key;j--) d[j+1]=d[j]; d[j+1]=L.r[i].key; final++; } else //插入后部 { for(j=first;d[j]

实验报告一(指针)

实验报告一(指针) 指针实验一 指向变量得指针变量编程一.实验目得与要求 1、理解指针得概念。 2、掌握指针变量得定义与使用。 3、掌握指针变量作为函数参数得使用方法。 二二. 实验题目1、用指针变量编程,求数组中得最大元素与最小元素. #include "stdio、h”#define N 10 void main() { ;)n tni,2tp* tni,1tp* tni,][rra tni(nimxamdiov?int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b; ;b&=2p ;a&=1p? ;)N,2p,1p,yarra(nimxam? printf("max=%d,min=%d\n",a,b); } void maxmin(int arr[],int *pt1,int *pt2,int n)

{ int i; * ;]0[rra=2tp*=1tp? for(i=1;i #define MAXLEN 20 int CountLetter(char *str, char ch) {

实验6指针程序设计

C语言程序设计实验报告 实验六指针程序设计 一、实验目的 (1)掌握指针的概念,会定义和使用指针变量; (2)能正确使用数组的指针和指向数组的指针变量; (3)熟悉指针做函数参数的使用方法; (4)能正确使用字符串的指针和指向字符串的指针变量。 二、实验内容及步骤 1、按要求完善程序 下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数,利用指针odd返回奇数之和,利用指针even返回偶数之和。例如:数组中的值依次为:1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。 程序代码如下所示:粗体部分为补充程序 #include #define N 20 void fun(int *a,int n,int *odd,int *even) { int i; for(i=0;i

实验六 指针

实验6指针 一.实验目的 1.熟练掌握指针、地址、指针类型、void指针、空指针等概念; 2.熟练掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算和指针表达式; 3.会使用数组的指针和指向的指针变量; 4.会使用字符串的指针和指向字符串的指针变量 5.学会使用指向函数的指针变量; 6.了解指针与链表关系。 二.实验内容 1. 用调用函数,实现从两个数为输出较大者(要求用指针变量传递参数值)。 #include using namespace std; void swap(int *,int *); int main() { int x,y; cout<<"请输入两个整数:"<>x>>y; swap(&x,&y); cout<<"较大的数是:"< #include using namespace std; #define N 50 int main() { char a[N];

char *p = NULL; int len=0; int count1=0,count2=0,count3=0,count4=0,count5=0; cout<<"please input a string:"<= 'A' && *p <= 'Z') count1++; else if (*p >= 'a' && *p<= 'z') count2++; else if (*p == ' ') count3++; else if (*p >= '0' && *p<= '9') count4++; else count5++; } cout<<"大写字母:"< using namespace std; int findMinIndex(int a[], int n); int findMaxIndex(int a[], int n); void main() { int array[10]; cout<<"请输入十个数据:"<

第十章 指针

第十章指针 本章重点: 指针变量和指针运算符。 指针用作函数参数。 指针与数组。 10.1指针的基本概念 一、地址 在计算机中,把内存区划分为一个一个的存储单元,每个单元为一个字节(8位),它们都有一个编号,这个编号就是内存地址。如下图所示: 注意:1、程序中定义的每个数据在编译后都占有各自的内存区。 2、数据所占有的存储单元个数是由其类型决定的。 3、首地址:第1个单元的地址, 4、表示地址的数与整数的区别: 5、系统通过变量名对内存单元进行访问 2.数据在内存中的存储 整型变量---分配2个字节单元 实型变量—分配4个字节单元 字符变量—分配1个字节单元

2.内存单元的地址与内存单元的内容。 printf(“%d”,i); scanf(“%d”,&i); 的操作过程。 3.对变量值的访问方式 (1)直接访问:按变量地址存取变量值的方式。 (2)间接访问方式:将变量的地址存放在另一个变量当中,通过对另一变量来访问变量。 4.指针:就是变量的地址。 指针变量:用于存放变量地址的变量。 10.2 指针变量和指针运算符 一.指针变量的定义 1.格式:类型名*指针变量名; 2、举例 int *p1; char *s1, *s2; float *a1, *a2, f; 3、说明 a. 类型名:指针变量所指向的变量类型。 b. “*” 是定义指针变量的标志,不可丢掉。 c. 指针变量定义后,其值是不确定的。 4、赋值:可以进行初始化,也可以使用赋值语句 (1)、初始化:int a, *s=&a;

(2)、赋值语句 int a, *s; s=&a; 3)、注意:只能用同类型变量的地址进行赋值! 如定义:int *s; float f; 则s=&f;是非法的。 二. 指针变量的引用 1、两个运算符:& 与* &:取地址,注意与作位运算符时的不同(双目) *:取内容,注意与作乘运算符时的不同(双目) 2、说明 a. &既可作用于一般变量,也可作用于指针变量 b. * 只能作用于指针变量 c. 定义指针变量时的* 与该处的含义不同 3、指针变量可以进行的操作 (1)赋值:int a, *p1=&a, *p2; p2=p1; 下面的赋值是不合法的: int *ip; ip=100; 假设: int i=200, x; int *ip; ip=&i; x=*ip; 通过指针变量ip间接访问变量i, (2)输出:printf(“%x”,p1); (3)增减:p1++; p2--; p1+=4; (只能和一个整数) p+n 不论指针变量指向何种数据类型, 指针和整数进行加、减运算时, 编译程序总根据所指对象的数据长度对n放大。 (4). 两个指针变量在一定条件下, 可进行 减法运算。设p, q指向同一数组, 则p-q的绝对 值表示p所指对象与q所指对象之间的元素个 数。 例1 #include main( ) { int a1=11, a2=22; int *p1, *p2;

相关文档