指针综合练习题(带答案)

合集下载

C语言指针经典练习题-及答案

C语言指针经典练习题-及答案

C语言指针练习题及答案一、选择题1. 变量的指针,其含义是指该变量的____.a)值b)地址c)名d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__ _.a)a,point,*&a b)&*a,&a,*pointc)*&point,*point,&a d)&a,&*point ,point3.若有说明;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. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是__ _____.main(){int *p,*q,a,b;p=&a;printf(“input a:”);scanf(“%d”,*p);……}a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是______.void print_value(int *x){ printf(“%d\n”,++*x);}a)23 b)24 c)25 d)266.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是A) *p=&a;scanf("%ld",p);B) p=(long *)malloc(8);scanf("%ld",p);C) scanf("%ld",p=&a);D) scanf("%ld",&a);7.有以下程序#include<stdio.h>main(){ int m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}程序运行后的输出结果是A)1,2,1,2 B)1,2,2,1C)2,1,2,1 D)2,1,1,28. 有以下程序main(){ int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c;*p =*p1*(*p2);printf("%d\n",c);}执行后的输出结果是A)1 B)2 C)3 D)49. 有以下程序main(){ int a,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}程序运行后的输出结果是()A)4 B)1 C)0 D)运行时出错,无定值10. 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是()A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与a+1等价11.有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3], b; b=p[5]; b中的值是()A)5 B)6 C)8 D)912.若有以下定义,则对a数组元素的正确引用是_________.int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)13.若有以下定义,则p+5表示_______.int a[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是()A) for(p=a;a<(p+10);a++);B) for(p=a;p<(a+10);p++);C) for(p=a,a=a+10;p<a;p++);D) for(p=a;a<p+10; ++a);15.有以下程序段#include <stdio.h>int main(){ int x[] = {10, 20, 30};int *px = x;printf("%d,", ++*px); printf("%d,", *px);px = x;printf("%d,", (*px)++); printf("%d,", *px);px = x;printf("%d,", *px++); printf("%d,", *px);px = x;printf("%d,", *++px); printf("%d\n", *px);return 0;}程序运行后的输出结果是( )A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,2016.设有如下定义则程序段的输出结果为int arr[]={6,7,8,9,10};int *ptr;ptr=arr;*(ptr+2)+=2;printf ("%d,%d\n",*ptr,*(ptr+2));A)8,10 B)6,8 C)7,9 D)6,1017.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是_4__. *(a+5)的值是__12__.18.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是___ __.A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2))19.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为__ __.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j20.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_8_. *(*(a+1)+0)的值是_ _8.21.有以下定义char a[10],*b=a; 不能给数组a输入字符串的语句是()A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b);22.下面程序段的运行结果是___ __.char *s="abcde";s+=2;printf("%d",s);a)cde b)字符'c' c)字符'c'的地址d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()A) char s[10]="abcdefg"; B) char t[]="abcdefg",*s=t;C) char s[10];s="abcdefg"; D) char s[10];strcpy(s,"abcdefg");24.设已有定义: char *st="how are you"; 下列程序段中正确的是()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);25.有以下程序输出结果是()main(){char a[]="programming",b[]="language";char *p1,*p2;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)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是_____.a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);27.以下正确的程序段是____.a)char str[20]; b)char *p;scanf("%s",&str); scanf("%s",p);c)char str[20]; d)char str[20],*p=str;scanf("%s",&str[2]); scanf("%s",p[2]);28.若有说明语句则以下不正确的叙述是____.char a[]="It is mine";char *p="It is mine";a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是___.#include <stdio.h>#include <string.h>main(){ char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}a)正数b)负数c)零d)不确定的值30.有以下程序运行后的输出结果是____。

函数、指针与结构体练习题-参考答案

函数、指针与结构体练习题-参考答案

(一)选择题1.以下正确的说法是_________.建立函数的目的之一是 a)提高程序的执行效率b)提高程序的可读性c)减少程序的篇幅d)减少程序文件所占内存2.以下正确的函数原型声明形式是________.a)double fun(int x,int y)b)double fun(int x; int y)c)double fun(int x, int y);d)double fun(int x,y);3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为______.A)地址传递B)单向值传递C)由实参传给形参,再由形参传回给实参D)由用户指定传递方式4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是______.a)floatb)intc)longd)double5.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array 的错误定义方式为________.int a[3][4];f(a);a)f(int array[][6])b)f(int array[3][])c)f(int array[][4])d)f(int array[2][5])6.以下程序的正确运行结果是_________.#include <>void num(){ extern int x,y;int a=15,b=10;x=a-b;y=a+b;}int x,y;main(){int a=7,b=5;x=a+b;y=a-b;num();printf("%d,%d\n",x,y);}a)12,2 b)不确定 c)5,25 d)1,127.以下正确的描述是____________.a)C语言的预处理功能是指完成宏替换和包含文件的调用b)预处理指令只能位于C源程序文件的首部c)凡是C源程序中行首以"#"标识的控制行都是预处理指令d)C语言的编译预处理就是对源程序进行初步的语法检查8.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,找寻被包含文件的方式是_______.a)仅仅搜索当前目录b)仅仅搜索源程序所在目录c)直接按系统设定的标准方式搜索目录d)先在源程序所在目录搜索,再按照系统设定的标准方式搜索9.当调用函数时,实参是一个数组名,则向函数传送的是_____.A.数组的长度B.数组的首地址C.数组每一个元素的地址D.数组每个元素中的值10.函数的值通过return语句返回,下面关于return语句的形式描述错误的是_____.表达式; (表达式);C.一个return语句可以返回多个函数值D.一个return语句只能返回一个函数值11.设函数fun的定义形式为void fun(char ch,float x){…}则以下对函数fun的调用语句中,正确的是_____.("abc",; =fun('D',; ('65',; (32,32);12.以下程序的输出结果是_____.void reverse(int a[],int n){ int i,t;for(i=0;i<n/2;i++){ t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}}main( ){ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf(" %d\n ",s);}B.1013.阅读下列程序,则运行结果为_____.fun( ){ static int x=5;x++;return x;}main( ){ int i,x;for(i=0;i<3;i++)x=fun( );printf("%d\n",x);}B.614.若使用一维数组名作函数实参,则以下正确的说法是_____.A.必须在主调函数中说明此数组的大小B.实参数组类型与形参数组类型可以不匹配C.在被调用函数中,不需要考虑形参数组的大小D.实参数组名与形参数组名必须一致15.在C语言中,定义函数时函数的类型可以缺省,此时函数的隐含类型是_____. 16.在C语言中,形参的缺省存储类别是( ).17.以下关于字符串的叙述中正确的是_____.语言中有字符串类型的常量和变量B.两个字符串中的字符个数相同时才能进行字符串大小的比较C.可以用关系运算符对字符串的大小进行比较D.空串一定比空格打头的字符串小18.阅读程序,选择程序的运行结果。

c语言指针的习题答案

c语言指针的习题答案

指针练习题1.有以下程序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)ga2.设有说明int(*ptr)[m];其中的标识符ptr是A)M个指向整型变量的指针B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量3.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是A) p+1 B) a+1 C) a++ D) ++p4.若有语句int *point ,a=4;和point =&a;下面均代表地址的一组选项是A. a,point,*&aB. &*a,&a,*pointC. &point,*point,&aD. &a,&*point,point5.下面程序段的运行结果是char a[]=”language”,*p;p=a;while(*p!=’u’) {printf(“%c”, *p-32);p++;}A. LANGUAGEB. LANGuageNGngUAGE6.以下程序的运算结果是*p=1,m=3,n=5 。

#include<stdio.h>void main(){int a[5]={1,2,3,-4,5};int m,n,*p;p=&a[0];m=*(p+2);n=*(p+4);printf("*p=%d,m=%d,n=%d",*p,m,n);}7.写一通用函数slength,求出一个字符串的长度,并用main函数调用slength。

人教版五年级下册数学第五单元《图形的运动》练习题(含答案)

人教版五年级下册数学第五单元《图形的运动》练习题(含答案)

人教版五年级下册数学第五单元《图形的运动》练习题(含答案)一、填空题。

1.如图,指针从A开始,逆时针旋转了90°到________点,逆时针旋转了180°到________点;要从A旋转到D,可以按________时针方向旋转________°,也可以按________时针方向旋转________°2.下面的现象中是平移的画“△”,是旋转的画“○”。

(1)扶梯的运动。

________(2)推拉门的移动。

________(3)分针的运动。

________(4)直升飞机的螺旋桨的运动。

________(5)电风扇叶子的运动。

________(6)拉动吹风机。

________3.由变成,是绕A点________方向旋转了________.4.钟面上分针从6绕中心点旋转到12点,顺时针要旋转________度,逆时针要旋转________度.5.下面各图形中()不能通过图①平移或旋转得到。

(多选)A. B. C. D.6.看图填一填(1)图①绕点O旋转________度得到图②。

(2)图③绕点A经过________时针旋转________度得到图④。

(3)图⑤经过________得到图⑥。

(4)图⑦经过________时针旋转________度,再平移________格得到图⑧。

二、选择题7.想一想,下列哪一组都是旋转现象()。

A. 拉抽屉,电风扇转动B. 转动转盘,风车转动C. 时针转动,电梯升降8.下列现象中,既有平移现象,又有旋转现象的是()。

A. 正在工作的风扇叶片B. 在笔直道路上行驶的汽车C. 运行中的观光电梯D. 传输带上的物品9.下图中,是以A点为中心旋转的是()A. B. C.10.绕A 点顺时针旋转90○后的图形是()A. B. C.11.从3时15分到3时45分,钟面上的分针()。

A. 旋转了120°B. 旋转了180°C. 旋转了30°D. 旋转了360°12.等边三角形有()条对称轴.A. 1B. 2C. 3D. 无数13.下面每组中的两个图形,经过平移后,可以完全重合的是()。

《C语言程序设计》综合练习试卷(一)

《C语言程序设计》综合练习试卷(一)

《C语言程序设计》综合练习试卷(一)试题一判断题 (每题1分,共10 分)(用T表示正确、F表示不正确) 1.C的任何类型数据在计算机内部都是以二进制形式存储的。

2.按格式符“%d”输出float类型变量时,截断小数位后取整输出。

3.字符数组中字符串可以整体输入输出。

4.传值调用的形参只有在被调用时,才被创建(分配存储单元)。

5.C语言中数组名是指针常量。

6.结构体类型中的各成员项数据类型可以不相同。

7.函数必须有返回值,否则不能使用函数。

8.C程序执行总是从第一个函数开始。

9.可以用关系运算符对字符串进行大小比较。

10.For循环只能用于循环次数已确定的场合。

试题二单选题(每题1分共15分)从A)、B)、C)、D)四个选项中,选出正确的一项。

1.以下程序运行后,输出结果是#include"stdio.h"void main( ){ char s[10]="abcde",*p;p=s+2;printf("%s \n",p);}A) cde B)字符c的ASCII码值 C)字符c的地址 D)出错2.对下面函数f,写出f(f(3))的值。

int f(int x){ static int k=0;x+=k--;return x;}A) 5 B) 3 C) 2 D) 43.以下程序运行后,输出结果是#define PT 5#define S(x) PT*x#include"stdio.h"void main( ){ int a=1,b=2;printf ("%d\n",S(a+b));}A) 15 B) 7 C) 8 D) 无正确答案4. 若有 float a[3][4]; 正确的引用第3行第1列的元素是A) **(a+2) B) *(*a+2) C) a[3][1] D) a[3][0]printf("%.1f,%d\n",10./4,10/8);的输出是A) 2.5, 1.25 B) 2.5, 1 CA) int a[ ]; B)int n=5,a[n];C) int n, a[n]={1,2,3,4,5}; D) int a[10/2];7.若有定义:struct person { char name[9]; int age; } ;person st[10]={{"john",17},{"paul",19},{"Mary",18}};能输出字母M的语句是A) printf("%c",st[2].name);B) printf("%c",st[3].name[1]);C) printf("%c",st[2].name[1]);D) printf("%c",st[2].name[0]);8.不能把字符串:“Hello!”赋给数组b的语句是A) char b[10]={'H','e','l','l','o','!','\0'};B) char b[10];b="Hello!";C) char b[10];strcpy(b,"Hello!");D) char b[10]="Hello!";9.若有 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则表达式值为6的是A)*p+6 B)*(p+6) C)*p+=5 D)p+510. 已知:int *p,m=5, n; 正确的程序段是A) p=&n; scanf(" %d",&p); B) p=&n; scanf(" %d", *p);C) scanf("%d",&n); *p=n; D) p=&n; *p=m;11. 下面程序的运行结果是:#include"stdio.h"void main( ){ int x[4]={ 2,4,6,8},*p, **pp;p=x;pp=&p;printf("%d",*p);printf("%3d",**pp);}A) 4 4 B) 2 4 C) 2 2 D) 4 612.下面程序执行后a的值是#include"stdio.h"void main( ){ int a,k=4,m=6,*p1=&k,*p2=&m;a=p1!=&m;printf("%d\n",a);}A)4 B)1 C)0 D)运行时出错,a无定值13.下列语句序列中,能够将变量u、s中最大值赋给变量t的是A) if (u>s) t=u; t=s; B) t=s; if (u>s) t=u;C) if (u>s) t=s; else t=u; D) t=u; if (u>s) t=s;14. 若有 int a=7,b=12;则语句printf("%d",a&b);输出结果A) 19 B) 9 C) 5 D) 415.若有 FILE *fp; 以“只读”方式打开文本文件a:\aa.dat,下列语句中正确的是A) fp=fopen("a:\aa.dat","w");B) fp=fopen("a:\aa.dat","r");C) fp=fopen("a:\\aa.dat","w");D) fp=fopen("a:\\aa.dat","r");试题三阅读程序题( 每题4分,共24分)写出读下列程序的输出结果1. #include<stdio.h>void main(){ char ch;for(ch='a';ch<'f'; ch++){ putchar(ch-32);putchar(ch);}}2. #include"stdio.h"void main(){ int i;for( i=1;i<=4;i++){ if ((i%3)==0) { printf("$"); continue;} else printf("*");printf("#");}}3. #include "stdio.h"void main(){ int i;for(i=1;i<5;i++)switch(i%5){ case 5: printf(" 5");case 3: printf(" 3");case 1: printf(" 1");default: printf("%2d",i);}}4. #include"stdio.h"void main(){ int x[10];int t,i,j,m=1;for(i=0;i<10;i++){ m=-m;x[i]=m*i;}for(i=1;i<10;i++){ t=x[i];for(j=i-1; j>=0; j--)if(t>x[j]) break;else x[j+1]=x[j];x[j+1]=t;}for(i=0;i<10;i++) printf("%3d",x[i]);}5. #include<stdio.h>void main(){ void swap1(int x ,int y );void swap2(int *x,int *y);void swap3(int &x,int &y);int a1,b1,a2,b2,a3,b3;a1=a2=a3=10;b1=b2=b3=5;swap1(a1,b1);swap2(&a2,&b2);swap3(a3,b3);printf("a1=%d b1=%d\n",a1,b1);printf("a2=%d b2=%d\n",a2,b2);printf("a3=%d b3=%d\n",a3,b3);}void swap1(int x,int y){ int t;t=x;x=y;y=t; }void swap2(int *x,int *y){ int t;t=*x; *x=*y; *y=t; }void swap3(int &x,int &y){ int t;t=x; x=y; y=t; }6.struct node{int num;node *next;};int fun( node *h){ int s,n=0,i;node *p=h ;while(p!=NULL){ for(s=0,i=1;i<p->num;i++)if ((p->num)%i==0) s+=i;if (s==p->num) n++;p=p->next;}return n;}写出执行语句“printf(“%d\n”,fun(head));”的输出结果。

指针字符串练习题及答案

指针字符串练习题及答案

单项选择==================================================题号:4074若有定义语句:int a[4][10],*p,*q[4];且0<=i<4,则错误的赋值是().A、p=aB、p=&a[2][1]C、q[i]=a[i]D、p=a[i]答案:A题号:4333执行下列语句后的结果为().int x=3,y;int *px=&x;y=*px++;printf("x=%d,y=%d\n",x,y);A、x=3,y=3B、x=4,y=4C、x=3,y不知D、x=3,y=4答案:A题号:4876下列程序的运行结果是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、0 0B、3 6C、编译出错D、6 3答案:B题号:4116若说明int *p,n;则通过语句scanf能够正确读入数据的程序段是().A、scanf("%d",n);B、p=&n;scanf("%d",&p);C、p=&n;scanf("%d",*p);D、p=&n;scanf("%d",p);答案:D题号:4120下面程序:int aa[3][3]={{2},{4},{6}};main(){int i,*p=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*p+1;else++p;printf("%d",*p);}}的输出是().A、25B、30C、26D、23答案:D题号:4124若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是().A、i=*p;B、*p=*&j;C、i=**p;D、i=&j;答案:B题号:4165阅读下面程序,程序执行后的结果为().#include"stdio.h"main(){ char *str="abcdefghijklmnopq";while(*str++!='e');printf("%c\n",*str);}A、fB、qC、eD、a答案:A题号:4167关于指针概念说法不正确的是().A、指针变量可以由整数赋,不能用浮点赋B、只有同一类型变量的地址才能放到指向该类型变量的指针变量之中,C、一个指针变量只能指向同一类型变量D、一个变量的地址称为该变量的指针答案:A题号:4173设有以下定义:int w[2][3],(*pw)[3];pw=w;,则对w数组元素非法引用是().A、pw[0][0]B、*(pw[1]+2)C、*(pw+1)[2]D、*(w[0]+2)答案:C题号:4532若有定义:char s[3][10],*k[3],*p;,则以下赋值语句正确的是().A、k=s;B、p=k;C、p=s;D、p=s[0];答案:D题号:4174当运行以下程序时输入OPEN THE DOOR<CR>,则输出结果是#include<stdio.h>char fun(char *c){if(*c<='Z' && *c>='A')*c -='A' - 'a';return *c;}main(){char s[8],*p=s;gets(s);while(*p){*p=fun(p);putcahr(*p);p++;}putchar('\n');}A、Open The DoorB、OPEN THE DOORC、open the doorD、oPEN tHE dOOR答案:C题号:4175下列程序执行后的输出结果是().void func(int *a,int b[]){b[0]=*a+6;}main(){int a,b[5]={0};a=0; b[0]=3;func(&a,b); printf("%d\n",b[0]);}A、8B、9C、7D、6答案:D题号:4390已知有声明"char a[]="prongram",*p=a+1;",则执行以下语句不会输出字符a的是()oA、putchar(*p+4);B、putchar(*(p+4));C、putchar(a[sizeof(a)-3]);D、putchar(*(a+5));答案:A题号:4181定义语句int *swap();指的是A、其他说法都不对B、swap是一个返回指向整型值指针的函数C、swap是一个返回整型值的函数D、swap是一个指向函数的指针答案:B题号:4184有以下程序:#include<stdio.h>void swap(char *x,char *y){char t;t=*x;*x=*y;*y=t;}main(){char *s1="abc",*s2="123";swap(s1,s2);printf("%s,%s\n",s1,s2); }程序执行后的输出结果是().A、1bc,a23B、123,abcC、321,cbaD、abc,123答案:A题号:4211若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,则输出结果不为5 的语句为().A、printf("%d",p[5]);B、printf("%d",*p[5]);C、printf("%d",*(a+5));D、printf("%d",*(p+5));答案:B题号:4215有以下程序:void fun(int *a,int i,int j){int t;if(i<j){t=a[i];a[i]=a[j];a[j]=t;fun(a,++i,--j);}}main(){int a[]={1,2,3,4,5,6},i;fun(a,0,5);for(i=0;i<6;i++)printf("%d",a[i]);}执行后输出结果是().A、6 5 4 3 2 1B、2 1 4 3 6 5C、3 2 4 1 5 6D、1 2 3 4 5 6答案:A题号:4113以下程序运行后的输出结果是(). main(){char ch[]="uvwxyz",*pc; pc=ch;printf("%c\n",*(pc+5));}A、字符y的地址B、0C、元素ch[5]地址D、z答案:D题号:4695有以下程序#include<stdio.h>main(){int a[]={1,2,3,4},y,*p=&a[3]; --p; y=*p; printf("y=%d\n",y); }程序的运行结果是().A、y=0B、y=2C、y=1D、y=3答案:D题号:4298若有语句:char *line[5];下列叙述中正确的是().A、定义line是一个指针数组,语句中的*号称为间址运算符B、定义line是一个数组,每个数组元素是一个基类型为char 的指针变量C、定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组D、定义line是一个指向字符型函数的指针答案:B题号:2457设有数组定义:char array[]="China";,则数组 array所占的空间为().A、5个字节B、4个字节C、6个字节D、7个字节答案:C题号:2468下述对C语言字符数组的描述中错误的是().A、字符数组中的字符串可以整体输入,输出.B、不可以用关系运算符对字符数组中的字符串进行比较.C、字符数组中可以存放字符串.D、可以通过赋值运算符"="对字符数组整体赋值.答案:D题号:2479以下程序:#include<stdio.h>#include<string.h>main(){ char str[]="abcd\n\123\xab";printf("%d",strlen(str));}运行后的输出结果是().A、10B、9C、14D、7答案:D题号:2485已知有声明"char s[20]="Hello";",在程序运行过程中若要想使数组s中的内容修改为"Good",则以下语句能够实现此功能的是().A、strcpy(s,"Good");B、strcat(s,"Good");C、s[20]="Good";D、s="Good";答案:A题号:2499以下程序段的输出结果是pritnf("%d\n",strlen("ATS\n012\1\\"));A、11B、8C、9D、10答案:C题号:2510char a1[]="abc",a2[80]="1234";将a1串连接到a2串后面的语句是().A、strcat(a2,a1);B、strcpy(a2,a1);C、strcpy(a1,a2);D、strcat(a1,a2);答案:A题号:2530设有以下语句,若0<k<4,下列选项中对字符串的非法引用是().char str[4][2]={"aaa","bbb","ccc","ddd"},*strp[4];int j;for(j=0;j<4;j++)strp[j]=str[j];A、*strpB、strpC、strp[k]D、str[k]答案:B题号:2543选择正确的输入语句().(其中:char string[10];)使得string的内容为"Hello".A、scanf("%s",&string);B、scanf("%c",string);C、scanf("%c",&string);D、scanf("%s",string);答案:D题号:2874下列数组说明中正确的是().A、static char str1[5],str2[]={"China"};str1=str2;B、static char str[];str="China";C、static char str1[],str2[];str2={"China"};strcpy(str1,str2);D、static char str[]="China";答案:D题号:2633已定义char string[20];使得string的内容为"You are student"的正确输入语句是().A、scanf("%c",&string);B、gets(string);C、scanf("%s",&string);D、scanf("%s",string);答案:B填空题==================================================题号:4875若有定义: char ch;定义指针p,并使其指向变量ch的初始化语句是_____。

国家开放大学C语言试题及答案

国家开放大学C语言试题及答案

1.C语言中的循环类语句有3条,它们是()。

选择一项:A. for,if,whileB. for,while,doC. while,do,switchD. for,break,do正确答案是:for,while,do2.C语言中的跳转类语句有四条,它们是goto,return和()。

A. break,constB. static,continueC. break,continueD. while,extern正确答案是:break,continue3.当不需要函数返回任何值时,则所使用的返回类型为()。

A. IntB. unionC. voidD. Void 正确答案是:void4.在一个函数定义中,函数头包括的3个部分依次为函数类型、函数名和()。

选择一项:A. 表达式B. 语句C. 函数体D. 参数表正确答案是:参数表5.在一个程序文件的开始,若需要使用一个包含命令包含一个头文件时,则命令标识符为A. #cludeB. #constC. #includeD. #defile正确答案是:#include6.在#include预处理命令中,不可以包含()。

A. 系统头文件B. 程序文件C. 用户头文件D. 目标文件正确答案是:目标文件7.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f”,则规定对应输出的数据占用的字符位置个数为()。

选择一项:A. 5B. 6C. 4D. 2正确答案是:68.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f”,则规定对应输出的数据中,其小数部分占用的字符位置个数为()。

选择一项:A. 5B. 6C. 4D. 2正确答案是:29.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f”,则规定对应输出的数据中,其整数部分占用的字符位置个数为()。

A. 6B. 4C. 3D. 2正确答案是:310.在scanf()函数调用的格式字符串中,若使用格式符为“%f”,则对应输入的数据类型为()。

(完整word版)C语言指针练习+答案+讲解

(完整word版)C语言指针练习+答案+讲解

第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。

A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。

除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。

A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。

A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指针综合练习题
一、选择题
1.若有以下定义,则对a数组元素的正确引用是____d_____.
int a[5],*p=a;
a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)
2.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为__d____.
a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j
3.若有以下定义,则p+5表示___a____.
int a[10],*p=a;
a)元素a[5]的地址b)元素a[5]的值
c)元素a[6]的地址d)元素a[6]的值
4.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确
执行的赋值语句是____b____.
a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);
5.若有说明语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是___d_____.
a)a+1表示的是字符t的地址
b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变
d)a中只能存放10个字符
二、填空题
1 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给
它(2)和(3)的地址。

使用变量名来访问变量,是按(4)来直接存取变量称为(5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。

答案:(1)地址
(2)NULL
(3)已经分配了内存的变量的地址
(4)按变量的地址
(5)直接访问
(6)间接访问
2 以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。

请填空。

void main()
{int *a,*b,*c,num,x,y,z;
a=&x;b=&y;c=&z;
cou<<"输入3个整数:";
cin>>a>>b>>c;
cout<<*a<<*b<<*c;
num=*a;
if(*a>*b) __num=*b____;
if(num>*c) _num=*c_____;
cout<<"输出最小整数:"<<num<<endl;
}
3 下面程序段的运行结果是___ef_____.
char str[]="abc\0def\0ghi",*p=str;
cout<<p+5;
4若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____. *(a+5)的值是___12______.
5若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8___. *(*(a+1)+0))的值是____8____.
6以下程序将数组a中的数据按逆序存放,请填空。

#define M 8 //定义宏M代表了8
void main()
{int a[M],i,j,t;
for(i=0;i<M;i++)
cin>>a[i];
i=0;j=M-1;
while(i<j)
{
t=*(a+i);_*(a+i)=*(a+j)_______;*(_a+j______)=t;
i++;j--;
}
for(i=0;i<M;i++)
cout<<*(a+i);
}
三、简答题
1 指针变量与整型量的加减运算代表什么意义?
答:指针变量与整型量的加减表示移动指针,以指向当前目标前面或后面的若干个位置的目标。

指针与整型量i的加减等于指针值(地址)与i*sizeof(目标类型)积的加减,得出新的地址。

2 设a为数组名,那么a++是否合法?为什么?
答:非法。

因为a是指针常量。

3 有如下定义:
int ival=60021;
int *ip;
double *dp;
下面哪些赋值非法或可能带来错误,并加以讨论。

ival=*ip; ival=ip; *ip=ival; ip=ival; *ip=&ival;
ip=&ival; dp=ip; dp=*ip; *dp=*ip;
解:ival=*ip; 错,未确定指针ip初值,用随机内存地址中的数据给ival赋值是危险的。

但语法对。

ival=ip; 错,赋值类型错,指针型不能赋给整型。

*ip=ival; 错,未确定指针ip初值,用ival给随机内存赋值是危险的。

但语法对。

ip=ival; 错,赋值类型错,整型不能赋给指针型。

*ip=&ival; 错,赋值类型错,地址(指针型)不能赋给整型。

ip=&ival; 对,地址赋给指针型。

dp=ip; 错,整型指针不能赋给双精度指针。

dp=*ip; 错,赋值类型错,整型不能赋给指针型。

*dp=*ip; 对,赋值类型转换
四、编程题
要求用指针的方法完成:输入一串英文文字,统计其中字母(不区分大小写)的数目。

相关文档
最新文档