复习专用C语言程序设计课堂练习题综合

更新时间:2023-10-02 21:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言程序设计课堂练习题 第7章 指针 一、选择题

1.已知p是一个整型指针变量,且p指向的是整型变量a的地址,则下列哪个语句是错误的?( )

A.*p=a; B. p=&a; C.p=&*p; D.p=*&p;

2.下列哪一项是不正确的字符串赋值或不正确的赋初值的方式?()

A. char *str;str=“string“; B.char str[7]={?s?, ?t?, ?r?, ?i?, ?n?, ?g? }; C. char str1[10];str1= “string“; D.char str1[]=“string“,*str2=”1234567”; 3.对于类型相同的指针变量,不能进行()运算。 A. + B. - C. = D.== 4.已知p是一个整型指针变量,a为一个一维整型数组,且p=a;则下列哪个语句是错误的?()

A.*p=a[0]; B. *p=*a; C. p=a+1; D.p=*a; 5.若有以下说明语句,则p2-p1的值为() int a[10],*p1,*p2; p1=a; p2=&a[5];

A. 5 B. 6 C. 10 D.没有指针与指针的减法 6.下列定义中不正确的是()

A.int *p; B. int p[10]; C.int (*p)() D.int *(p(n)); 7.以下程序的输出结果是() main(){

int a[]={1,2,3,4,5,6},*p; p=a;

printf(“%d,%d\\n”,*p,*(p+4)); }

A. 0,5 B.1,5 C.0,6 D.1,6

8.若有以下说明和语句,且0<=i<10,则下面哪个不是对数组元素地址的正确表示()。 int a[]={1,2,3,4,5,6,7,8,9,10},*p,i; p=a;

A.&(a+1) B.a++ C. &p D.&p[i] 二、写出程序的输出结果 1.main(){

int a=10,b=20,s,t,m,*pa,*pb; pa=&a; pb=&b; s=*pa+*pb; t=*pa-*pb; m=*pa**pb;

printf“s=%d\\nt=%d\\nm=%d\\n“,s,t,m); } 2.

main(){

1

int a[][3]={9,7,5,3,1,2,4,6,8}; int i,j,s1=0,s2=0; for(i=0;i<3;i++) for(j=0;j<3;j++)

{if (i==j) s1=s1+a[i][j]; if(i+j==2) s2=s2+a[i][j]; }

printf(“%d\\n%d\\n”,s1,s2); } 3.

main(){

int a[5]={1,3,5,7,9},*p,**k; p=a;k=&p;

printf(“%d”,*(p+2)); printf(“%d”,**k); } 4.

main(){

int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i=2,j=2; p=a;

printf(“%d”,*(*(p+i)+j)+*((a+i)+j)+**(p+i)+**p); }

三、填空

1. 在空格地方填上语句,以实现字符串复制的功能。 main(){

char *ps=“C language“; char str[15]; char *p1,*p2; p1=ps; p2=str;

while(*p1!=?\\0?) {

(1) (2) (3) }

*p2=?\\0?;

printf(“ps=%s\\n”,ps); printf(“str=%s\\n”,str); }

2.下面程序完成从键盘输入两个字符串a和b,再将a和b的对应位置字符中的较大者存放在数组c中,填空完成该程序。 main(){

2

int k=0;

char a[80],b[80],c[80]={?\\0?},*p,*q; p=a;q=b; gets(a); gets(b);

while( (1) ) { if ( (2) ) c[k]=*p; else c[k]=*q; p++;

(3) k++; }

if(*p!=0) strcat(c,p); else strcat(c,q); puts(c); }

3.完成下面程序,以实现单词的输出功能。 main(){

char *s[]={“man”,”woman”,”girl”,”boy”,sister”}; char **q; int k;

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

{ (1) ; printf(“%s\\n”,*q); } }

4.下列程序完成截取字符串s中从第m个位置开始的n个字符,返回所截字符串的首地址。 static char sub[20]; main(){ int m,n;

static char s[]=”good moring”;

char *cut(char *s1,int m1,int n1),*p; scanf(“%d%d”,&m,&n); p=cut(s,m,n); printf(%s\\n”,p); }

char *cut(char *s1,int m1,int n1) {int k;

for(k=0;k

sub[k]= (1) ; sub[k]=?\\0?;

return (2) ; }

5.下列程序求数组元素的平均值。

3

float f(int *p,int n) {int i;

float avg=0.0; for(i=0;i

(1) ; return avg; }

main(){

int a[10]={1,2,3,4,5,6,7,8,9,10}; float avg;

avg=f( (2) ,10);

printf(“\\n Average=%f\\n”,avg); }

6.下列程序完成3个操作。(1)输入10个字符串(每串不多于9个字符),依次放在a数组中,指针数组str中的每个元素依次指向每个字符串的开始。(2)输入每个字符串。(3)从这些字符串中选出最小的那个串输出。 main(){

char a[100],*str[10],*sp; int i,k; sp=a;

for(i=0;i<10;i++) {scanf(“%s”,sp);

str[i]= ; k=strlen(sp);

sp+= ; } k=0;

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

if (strcmp(str[i],str[k]) ) k=I; ; }

7.下面程序把数组元素按相反的顺序进行存放。 void inv(int *x,int n) { int *i,*j,t;

for(i=x,j=x+n-1; (1) ;i++,j--) {t=*i;*i=*j;*j=t;} }

main(){

int i,a[10]={3,7,9,11,0,6,7,5,4,2}; printf(“The old array is:\\n”); for(i=0;i<10;i++) printf(“%-6d”,a[i]); printf(“\\n”);

4

(2) ; printf(“after reveser:\\n”); for(i=0;i<10;i++) printf(“%-6d”,a[i]); printf(“\\n”); }

8.用指针法求出数组中的最大元素与最小元素。 int max,min;

void max_min_value(int array[],int n){ int *p;

(1) ; for( (2) ;pmax) max=*p; else

if (*p

main(){

int i,number[10],*p; p=number;

printf(“input 10 number:\\n”); for(i=0;i<10;i++,p++) scanf(“%d”,p); (3) ; max_min_value(p,10);

printf(“max=d min=%d\\n”,max,min); }

9.把字符串按从小到大的顺序输出。 void sort( (1) ,int n){ int i,j,k; char *temp;

for(i=0;i<=n-1;i++) { k=i;

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

if ( (2) ) k=j;

if(k!=i) {temp=name[i];name[i]=name[k];name[k]=temp;} } }

void print(char *name[],int n){ int i;

for(i=0;i

printf(“%s\\n”, (3) ); }

5

本文来源:https://www.bwwdw.com/article/jwxd.html

Top