当前位置:文档之家› 第七章字符数组与指针练习题参考答案(2)

第七章字符数组与指针练习题参考答案(2)

第七章字符数组与指针练习题参考答案(2)
第七章字符数组与指针练习题参考答案(2)

第七章字符数组与字符串

【题7.29】下面是对s的初始化,其中不正确的是。

A)char s[5]={“abc”};B)char s[5]={‘a’,‘b’,‘c’};

C)char s[5]=“”;D)char s[5]=“abcdef”;

【题7.30】下面程序段的运行结果是。

char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’};

printf(“%s”,c);

A)‘a’‘b’ B)ab C)ab c

【题7.31】对两个数组a和b进行如下初始化

char a[]=“ABCDEF”;

char b[]={‘A’, ‘B’,‘C’,‘D’,‘E’,‘F’};

则以下叙述正确的是。

A)a与b数组完全相同B)a与b长度相同

C)a和b中都存放字符串D)a数组比b数组长度长

提示:‘\0’是字符串结束的标志

【题7.32】有两个字符数组a、b,则以下正确的输入格式是。

A)gets(a,b); B)scanf(“%s %s”,a,b);

C)scanf(“%s %s”,&a,&b);D)gets(“a”),get(“b”);

【题7.33】有字符数组a[80]和b[80],则正确的输出形式是。

A)puts(a,b); B)printf(“%s %s”,a[],b[]);

C)putchar(a,b); D)puts(a),puts(b);

【题7.34】下面程序段的运行结果是。

char a[7]=“abcdef”;

char b[4]=“ABC”;

strcpy(a,b);

printf(“%c”,a[5]);

A)空格B)\0 C)e D)f

提示:复制后a[0]=‘A’,a[1]=‘B’,a[2]=‘C’,a[3]=‘\0’, a[4]=‘e’,a[5]=‘f’, a[6]=‘\0’,

【题7.35】有下面的程序段

char a[3],b[]=“China”;

a=b;

printf(“%s”,a);

则。

A)运行后将输出China B)运行后将输出Ch

C)运行后将输出Chi D)编译出错

提示:数组名是常量

【题7.36】下面程序段的运行结果是。

char c[]=“\t\n\\\0will\n”;

printf(“%d”,strlen(c));

A)14 B)3 C)9 D)字符串中有非法字符,输出值不确定

提示:strlen函数,求字符数符串的长度。

【题7.37】判断字符串a和b是否相等,应当使用。

A)if(a==b) B)if(a=b)

C)if(strcpy(a,b)) D)if(strcmp(a,b))

提示:只有strcmp函数才能判别2个字符串的关系。

【题7.38】判断字符串s1是否大于字符串s2,应当使用。

A)if(s1>s2) B)if(strcmp(s1,s2))

C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)

【题7.39】下面程序段是输出两个字符串中对应字符相等的字符。请选择填空。char x[]=“programming”;

char y[]=“Fortran”;

int i=0;

while(x[i]!=‘\0’&&y[i]!= ‘\0’)

{

if(x[i]==y[i]) printf(“%c”,【1】);

else i++;

}

【1】A)x[i++] B)y[++i] C)x[i] D)y[i]

【题7.40】下面描述正确的是。

A)两个字符串所包含的字符个数相同时,才能比较字符串

B)字符个数多的字符串比字符个数少的字符串大

C)字符串“STOP ”与“STOP”相等

D)字符串“That”小于字符串“The”

【题7.41】下述对C语言字符数组的描述中错误的是。

A)字符数组可以存放字符串

B)字符数组的字符串可以整体输入、输出

C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值

D)不可以用关系运算符对字符数组中的字符串进行比较

【题7.42】有已排好序的字符串a,下面的程序是将字符串s中的每个字符按a中元素的规律插入到a中。请选择填空。

#include

main()

{

char a[20]=“cehiknqtw”;

char s[]=“fbla”;

int i,k,j;

for(k=0;s[k]!=‘\0’;k++)

{

j=0;

while(s[k]>=a[j]&&a[j]!=‘\0’) j++;

for(【1】) 【2】;

a[j]=s[k];

}

puts(a);

}

【1】 A)i=strlen(a)+k; i>=j; i-- B)i=strlen(a); i>=j; i--

C)i=j; i<=strlen(a)+k; i++ D)i=j; i<=strlen(a); i++

【2】 A)a[i]=a[i+1] B)a[i+1]=a[i]

C)a[i]=a[i-1] D)a[i-1]=a[i]

【题7.43】下面程序的功能是将已按升序排好序的两个字符串a和b中的字符按升序归并到字符串c中。请选择填空。

#include

main()

{

char a[]=“acegikm”;

char b[]=“bdfhjlnpq”;

char c[80],*p;

int i=0,j=0,k=0;

while(a[i]!=‘\0’&&b[j]!=‘\0’)

{

if(a[i]

else { 【2】 }

k++;

}

c[k]= ‘\0’;

if(【3】) p=b+j;

else p=a+i;

strcat(c,p);

puts(c);

}

【1】A)c[k]=a[i]; i++; B)c[k]=a[j]; i++;

C)c[k]=a[i]; j++; D)c[k]=a[j]; j++;

【2】 A)c[k]=a[i]; i++; B)c[k]=a[j]; i++;

C)c[k]=a[i]; j++; D)c[k]=a[j]; j++;

【3】A)a[i]==‘\0’B)a[i]!=‘\0’

C)a[i-1]==‘\0’D)a[i-1]!=‘\0’

【题7.44】下面程序的功能是将字符串s中所有的字符‘c’删除。请选择填空。

#include

main()

{

char s[80];

int i,j;

gets(s);

f or(i=j=0;s[i]!=‘\0’;i++)

if(s[i]!=‘c’) 【1】;

s[j]=‘\0’;

puts(s);

}

【1】A)s[j++]=s[i] B)s[++j]=s[i]

C)s[j]=s[i]; j++ D)s[j]=s[i]

【题7.45】下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请选择填空。

#include

main()

{

char s[80],c1,c2=‘’;

int i=0,num=0;

gets(s);

while(s[i]!=‘\0’)

{

c1=s[i];

if(i==0) c2=‘’;

else c2=s[i-1];

if(【1】) num++;

i++;

}

printf(“There are %d words.\n”,num);

}

【1】 A)c1==‘’&&c2==‘’B)c1!=‘’&&c2==‘’

C)c1==‘’&&c2!=‘’ D)c1!=‘’&&c2!=‘’

【题7.46】下面程序的运行结果是。

#include

main()

{

char ch[7]={“12ab56”};

int i,s=0;

for(i=0;ch[i]>=‘0’&&ch[i]<=‘9’;i+=2)

s=10*s+ch[i]-‘0’;

printf(“%d\n”,s);

}

A)1 B)1256 C)12ab56 D)1

2

5

6

【题7.47】当运行以下程序时,从键盘输入:aa bb

cc dd

(表示回车),则下面程序的运行结果是。

#include

main()

{

char a1[5],a2[5],a3[5],a4[5];

scanf(“%s%s”,a1,a2);

gets(a3);

gets(a4);

puts(a1);

puts(a2);

puts(a3);

puts(a4);

}

/*提示:scanf(“%s”)是以空格、回车为结束标志;

gets( )仅是以回车作为结束标志, a3中接收到的是‘\n’

puts( )函数具有输出结束后自动加换行的功能*/

A)aa B)aa C)aa bb D)aa bb

bb bb cc cc dd

cc cc dd dd

dd

题7.48】当运行以下程序时,从键盘输入:ab

c

def

(表示回车),则下面程序的运行结果是。

#include

#define N 6

main()

{

char c[N];

int i=0;

for(;i

for(i=0;i

}

A)abcdef B)a C)b D)ab

B c c

c d d

d

e

f

【题7.49】当运行以下程序时,从键盘输入:AhaMA Aha(表示回车),则下面程序的运行结果是。

#include

main()

{

char s[80],c=‘a’;

int i=0;

scanf(“%s”,s);

while(s[i]!=‘\0’)

{

if(s[i]==c) s[i]=s[i]-32;

else if(s[i]==c-32) s[i]=s[i]+32;

i++;

}

puts(s);

}

A)ahAMa B)AhAMa C)AhAMa ahA D)ahAMa ahA

【题7.50】下面程序的运行结果是。

#include

main()

{

char a[80]=“AB”,b[80]=“LMNP”;

int i=0;

strcat(a,b);

while(a[i++]!=‘\0’) b[i]=a[i];

puts(b);

}

A)LB B)ABLMNP C)AB D)LBLMNP

【题7.51】下面程序的运行结果是。

#include

main()

{

char str[]=“SSSWLIA”,c;

int k;

for(k=2;(c=str[k])!=‘\0’;k++)

{

switch(c)

{

case ‘I’: ++k; break;

case ‘L’: continue;

default: putchar(c); continue;

}

putchar(‘*’);

}

}

A)SSW* B)SW* C)SW*A D)SW

【题7.52】下面程序的运行结果是。

#include

main()

{

char a[]=“morning”,t;

int i,j=0;

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

if(a[j]

j=i;

t=a[j];

a[j]=a[7];

a[7]=a[j];

puts(a);

} /*提示:原a[7]中存放的是‘\0’*/

A)mogninr B)mo C)morning D)mornin

参考答案:

【题7.29】D 【题7.30】B 【题7.31】D 【题7.32】B 【题7.33】D 【题7.34】D 【题7.35】D 【题7.36】B 【题7.37】D 【题7.38】D 【题7.39】A 【题7.40】D 【题7.41】C 【题7.42】B B【题7.43】ADA 【题7.44】A 【题7.45】B 【题7.46】A 【题7.47】B 【题7.48】D 【题7.49】A 【题7.50】D 【题7.51】B 【题7.52】B

c++指针类练习题及答案

1 5 6 6 5 #include using namespace std; void swap(int *xp,int *yp) { int tmp; tmp=*xp; *xp=*yp; *yp=tmp; } int main() { int a,b; cin>>a>>b; swap(&a,&b); cout< #include using namespace std; int main() { char str[100]; cin>>str; int len; len=strlen(str); char *p=&str[len-1]; while(p>=str) { cout<<*p; p--; } cout<

1 2 2 2 3 7 #include using namespace std; void selectsort(int *list,int count) { for(int i=0;i>n; int array[20]; for(int j=0;j>array[j]; selectsort(array,n); for(int i=0;i using namespace std; void bubble_up(int *ptr,int count) { for(int i=0;ii;j=j-1)

指针数组及指向一维数组的指针讲解

一、指针数组及指向一维数组的指针(数组指针)讲解 1、数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针,亦称行指针。 2、指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int *说明这是一个整型指针数组,它有n个指针类型的数组元素。这样赋值是错误的:p=a;只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。 如要将二维数组赋给一指针数组: int *p[3]; int a[3][4]; for(i=0;i<3;i++) p[i]=a[i]; 这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p [1]、p[2]所以要分别赋值。 这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。 比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 优先级:()>[]>* 例1、下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。 #include #include #define N 4

C语言程序设计实验答案数组、指针与字符串

实验06 数组、指针与字符串(4学时) (第6章数组、指针与字符串) 一、实验目的 二、实验任务 6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。 6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。 6_3 编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 6_4 使用string类声明字符串对象,重新实现上一小题。 6_5(习题6-27)声明一个Employee类。 其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。 6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee 类型的对象。 6_7 修改实验4中的people(人员)类。 具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”声明为一个“日期”类内嵌子对象。 用成员函数实现对人员信息的录入和显示。 要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。 在测试程序中声明people类的对象数组,录入数据并显示。

三、实验步骤 1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。 使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。程序名:lab6_1.cpp。 参考运行结果: ★程序及运行结果: //lab6_1.cpp #include using namespace std; void move(int matrix[][3]){ int temp; for(int i=0;i<3;i++) for(int j=0;j>mat[i][j]; } cout<<"\n输入的3×3矩阵为:"<

指针练习题

编程题 1用指向数组的指针变量输出数组的全部元素 2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出 练习题: 一判断题 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。 2.指针的类型是它所指向的变量或对象的类型。 3.定义指针时不可以赋初值。 4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。 5.指针可以加上或减去一个int型数,也可以加上一个指针。 6.两个指针在任何情况下相减都是有意义的。 7.数组元素可以用下标表示,也可以用指针表示。 8.指向数组元素的指针只可指向数组的首元素。 9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 10.引用是一种变量,它也有值和地址值。 11.引用是某个变量的别名,引用是被绑定在被引用的变量上。 12.创建引用时要用一个同类型的变量进行初始化。 13.指针是变量,它可以有引用,而引用不能有引用。

二单选题 1.下列关于定义一个指向double型变量的指针,正确的是()。 A.int a(5);double *pd=a;B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d;D.double a(2.5),pd=d; 2.下列关于创建一个int型变量的引用,正确的是()。 A.int a(3),&ra=a;B.int a(3),&ra=&a; C.double d(3.1);int &rd=d;D.int a(3),ra=a; 3.下列关于指针概念的描述中,错误的是()。 A.指针中存放的是某变量或对象的地址值 B.指针的类型是它所存放的数值的类型 C.指针是变量,它也具有一个内存地址值 D.指针的值是可以改变的 4.下列关于引用概念的描述中,错误的是()。 A.引用是变量,它具有值和地址值 B.引用不可以作数组元素 C.引用是变量的别名 D.创建引用时必须进行初始化 5.已知:int a[5],*p=a;则与++*p相同的是()。 A.*++p B.a[0] C.*p++ D.++a[0]

数组名和指针的区别(小结)

在Win 32 中: 1. (1) 对数组名进行sizeof运算时,结果是整个数组占用空间的大小; (2) 但是数组作为函数参数时,对数组名进sizeof 运算,结果为4; (2) 对指针进行sizeof运算得到的值是编译器分配给指针(也就是一个地址)的内存空间,即为4。 2. (1) 对数组名作&运算,得到的还是数组第一个元素的地址; (2) 对指针取地址时得到的结果是指针所在的地址,也就是指向这个指针的指针,与指针的值不同。 BOOL mytest(char param[100]) { //参数数组名:paramBytes int paramBytes = sizeof(param); printf("paramBytes \t%d\n",paramBytes); //数组:mych1[] char mych1[] = "abcdefg123"; //若定义为mych1[100] int mych1Bytes = sizeof(mych1); printf("mych1Bytes \t%d\n",mych1Bytes);//输出:100 //数组:mych[200] char mych[200] = {0}; int myBytes = sizeof(mych); printf("myBytes \t%d\n",myBytes); printf("---addr \t%d\n",mych); printf("---addr \t%d\n",&mych); //指针:pch char* pch = "12345abc"; int pchBytes = sizeof(pch); printf("pchBytes \t%d\n",pchBytes); //pch = mych; printf("---addr \t%d\n",pch); printf("---addr \t%d\n",&pch); return TRUE; } 运行:

C语言字符串指针问题

C语言字符串指针问题 在C语言中,可以用两种方法访问一个字符串。 用字符数组存放一个字符串,然后输出该字符串。 1.main(){ 2.char string[]=”I love China!”; 3.printf("%s\n",string); 4.} 说明:和前面介绍的数组属性一样,string是数组名,它代表字符数组的首地址。 用字符串指针指向一个字符串。 1.main(){ 2.char *string=”I love China!”;

3.printf("%s\n",string); 4.} 字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如: char c,*p=&c; 表示p是一个指向字符变量c的指针变量。而: char *s="C Language"; 则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。 上例中,首先定义string是一个字符指针变量,然后把字符串的首地址赋予string(应写出整个字符串,以便编译系统把该串装入连续的一块内存单元),并把首地址送入string。程序中的:char *ps="C Language"; 等效于: char *ps; ps="C Language"; 输出字符串中n个字符后的所有字符。 1.main(){ 2.char *ps="this is a book";

3.int n=10; 4.ps=ps+n; 5.printf("%s\n",ps); 6.} 运行结果为: book 在程序中对ps初始化时,即把字符串首地址赋予ps,当ps= ps+10之后,ps指向字符“b”,因此输出为"book"。 在输入的字符串中查找有无‘k’字符。 1.main(){ 2.char st[20],*ps; 3.int i; 4.printf("input a string:\n"); 5.ps=st; 6.scanf("%s",ps); 7.for(i=0;ps[i]!='\0';i++) 8.if(ps[i]=='k'){ 9.printf("there is a 'k' in the string\n"); 10.break; 11.} 12.if(ps[i]=='\0') printf("There is no 'k' in the string\n");

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

指针综合练习题 一、选择题 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;

数组及指针 知识点总结

第9章数组 第1课 知识点一 定义一维数组 格式: 类型名数组名[元素个数] 例1 定义一个包含4个整数的数组a int a[4]; 例2 定义一个包含3个双精度数的数组b double b[3]; 注意: C语言中数组的下界从0开始计数。 例如: a[4]的4个元素分别为a[0]、a[1]、a[2]、a[3] 知识点二 一维数组的初始化 用一对大括号将数组的初值括起来。 例1 int a[3]={1, 2, 3}; 此例中a[0]值为1、a[1]值为2、a[2]值为3

例2 int a[5]={0}; 此例中数组a的全部元素值均为0 例3 int a[3]={1, 2, 3, 4}; 此例中由于初值个数多于数组元素个数,所以非法。例4 int a[ ]={0, 0, 0, 0}; 此例中省略数组元素个数,初值为4个0 等价于int a[4]={0}; 注意: 数组名是一个常量值,不能对它赋值。 例如: int a[3]; a=5; 此语句非法,应改为a[0]=5; 知识点三 一维数组应用 例1 从键盘上输入10个整数,输出最大数和最小数。 #include main() { int a[10],i,max,min; printf("请输入10个整数:\n");

for(i=0;i<=9;i++) scanf("%d",&a[i]); max=a[0]; min=a[0]; for(i=1;i<=9;i++) { if(a[i]>max) max=a[i]; if(a[i]

C语言练习3(数组)参考答案

C语言(数组) 一、选择题 1. 设有程序: main() { int i,a[11]; printf("给数组赋值:\n"); for (i=0;i<=10;i++) scanf("%d",( )); ... ... printf("输出数组:\n"); for(i=0;i<=10;i++) printf("%d,",( )); } 则在程序中的两个园括号中分别应填入:C A) &a[i]和&a[i] B) a[i]和&a[i] C) &a[i]和a[i] D) a[i]和a[i] 2. 设已定义:int a[15]; 则数组a占用的内存单元数是( C ). A) 15 B) 16 C) 30 D) 32 3. 阅读程序: main() { int a[2]={0},i,j,k=2; for(i=0;i

4. 阅读程序: f(int b[],int n) { int i,r=1; for(i=0;i<=n;i++) r=r*b[i]; return r; } main() { int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); printf("%d\n",x); } 以上程序的输出结果是( D ). A) 720 B) 6 C)24 D) 120 5. 以下定义语句中,错误的是( B ). A) int a[ ] = {6,7,8}; B) int n=5, a[n]; C) char a[ ]= "string"; D) char a[5 ]={'0','1','2','3','4'}; 6. 以下描述中正确的是( D ). A) 数组名后面的常量表达式用一对圆括弧括起来 B) 数组下标从1开始 C) 数组下标的数据类型可以是整型或实型 D) 数组名的规定与变量名相同 7. 若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'};指出以下错误语句( AB ). A) scanf("%c",a[0]); B) scanf("%s",&a); C) printf("%c",a[3]); D) printf("%s",a); 8.若定义数组int a[10] ,其最后一个数组元素为( C ). A) a[0] B) a[1]

C语言中指针、数组和引用例子实例

一、指针:内容是指示一个内存地址的变量;类型是指示编译器怎么解释指针内容指向地址中的内容,以及该内存区域有多大; 例子: [cpp] int i = 0; int * pi = &i; printf(“pi = %x \n”, pi); // 打印pi的内容: 0x2000 printf(“*pi= %d \n” , *pi); // 打印pi指向地址中的值: 5 printf(“&pi= %x \n”, &pi); // 打印pi的地址: 0x100 从汇编的角度来看,指针是这样的: int i = 0; 010E139E mov dword ptr [i],0 int * pi = &i; 010E13A5 lea eax,[i] 010E13A8 mov dword ptr [pi],eax 二、数组:是一个单一数据类型对象的集合。其中单个对象没有被命名,通过索引访问。 数组名和指针的区别:数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组。数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量。指向数组的指针则是另外一种变量类型,仅仅意味着数组的存放地址 注意:虽然数组名可以转换为指向其指代实体的指针,但是它只能被看作一个指针常量,不能被修改,如下:天骄无双:https://www.doczj.com/doc/911520349.html, [cpp] int intArray[10]; intArray++; // 错误 “指针和数组等价”说的是什么?索引操作相同,例如:p[2]; a[2]; 三、引用(reference)是一个对象的别名。用对象初始化引用后,对象的名字和引用都指向该对象; 引用是如何实现的?从汇编语言的角度来看,指针和引用是一样的: [cpp] int i = 0; 00E9139E mov dword ptr [i],0 int & ref = i; 00E913A5 lea eax,[i] 00E913A8 mov dword ptr [ref],eax int * pi = &i; 00E913AB lea eax,[i] 00E913AE mov dword ptr [pi],eax 指针和引用的区别(从C++使用角度来看): 不存在空引用 引用要初始化 引用初始化后,不能指向另一个对象 这是由编译阶段保证的。 备注:一个指向非常量的引用不能用字面值或者临时值初始化;但是一个指向常量的引用可以。天骄无双:https://www.doczj.com/doc/911520349.html,

多用电表的使用 经典练习题含答案)

(时间:60分钟) 1.甲、乙两同学使用多用电表欧姆挡测同一个电阻时,他们都把选择开关旋到“×100”挡,并能正确操作.他们发现指针偏角太小,于是甲把选择开关旋到“×1 k”挡,乙把选择开关旋到“×10”挡,但乙重新调零,而甲没有重新调零.则以下说法正确的是() A.甲选挡错误,而操作正确 B.乙选挡正确,而操作错误 C.甲选挡错误,操作也错误 D.乙选挡错误,而操作正确 答案 D 解析在使用多用电表的欧姆挡时一定要先进行欧姆调零,再测量;同时为了减小误差,要尽量使指针指在中间刻度附近,即要合理地选择倍率挡位. 2.用多用电表的欧姆挡(×1 kΩ)检验性能良好的晶体二极管,发现多用电表的指针向右偏转的角度很小,这说明() A.二极管加有正向电压,故测得电阻很小 B.二极管加有反向电压,故测得电阻很大 C.此时红表笔接的是二极管的正极 D.此时红表笔接的是二极管的负极 答案BC 3.关于多用电表表面上的刻度线,下列说法中正确的是() A.直流电流刻度线和直流电压刻度线都是均匀的,可以共用一个刻度盘 B.电阻刻度是不均匀的 C.电阻刻度上的零刻度与直流电流的最大刻度线相对应 D.电阻刻度上的零刻度与直流电流的最大刻度线不对应 答案ABC 解析多用表中,直流电流和电压刻度是均匀的,但电阻刻度不均匀,A、B选项正确;电阻零刻度对应I g.电阻∞刻度线对应I=0,故C选项正确.

4.如图2124所示为多用电表的刻度盘.若选用倍率为“×100”的电阻挡测电阻时,表针指示如图所示,则: 图2124 (1)所测电阻的阻值为________ Ω;如果要用此多用电表测量一个阻值约为 2.0×104Ω的电阻,为了使测量结果比较精确,应选用的欧姆挡是________(选填“×10”、“×100”或“×1 k”). (2)用此多用电表进行测量,当选用量程为50 mA的电流挡测量电流时,表针指于图示位置,则所测电流为________ mA;当选用量程为250 mA的电流挡测量电流时,表针指于图示位置,则所测电流为________ mA. (3)当选用量程为10 V的电压挡测量电压时,表针也指于图示位置,则所测电压为________ V. 答案(1)1.5×103×1 k(2)30.8(30.7~30.9都正确)154(3)6.2 解析(1)欧姆表读数:对应最上一行刻度值为15,倍率为“×100”,读数为 1.5×103Ω;测 2.0×104Ω电阻时应选“×1 k”的欧姆挡. (2)选50 mA直流电流挡,则每一大格表示10 mA,每一小格表示1 mA,测量的 精确度为1 mA,应估读到0.1 mA(此时为1 10估读),指针对应的读数为30.8 mA; 选择量程为250 mA的电流挡,则每一大格表示50 mA,每一小格表示5 mA,测 量的精确度为5 mA,应估读到1 mA(此时为1 5估读),指针对应的读数为154 mA. (3)选择10 V电压挡,则每一大格表示2 V,每一小格表示0.2 V,测量的精确度为 0.2 V,应估读到0.1 V(此时应为1 2估读),指针对应的读数为6.2 V. 5.用多用电表的欧姆挡测量一未知电阻的阻值,若将选择倍率的旋钮拨至“×100 Ω”的挡时,测量时指针停在刻度盘0 Ω附近处,为了提高测量的精确度,有下列可供选择的步骤: A.将两根表笔短接 B.将选择开关拨至“×1 kΩ”挡 C.将选择开关拨至“×10 Ω”挡

实验三 数组与指针实验

实验三数组与指针实验 【实验目的】 1.学习使用数组数据对象。 2.掌握指针的使用方法。 3.学习通过动态内存分配实现动态数组的定义和使用,并体会指针在其中的作用。4.练习通过Debug观察指针的内容及其所指对象的内容。 【实验内容】 1.运行下列程序,观察运行结果。 (1)#include class ArrayElem { int x; public: ArrayElem(int i){x=i;} //带参数的构造函数 int getx(){return x;} }; int main() { ArrayElem obs[4] ={-1,-2,-3,-4}; //创建对象数组并初始化 for(int i=0;i<4;i++) cout<<"obs["< class NumClass { int num; public: void set_num(int val){num=val;} void show_num(){cout<<"The num is :"<set_num(20);p->show_num(); //通过指针调用成员函数 return(0); } (3)#include class NumClass

第4章 数组练习题答案

第4章数组练习题 一、选择题 1.在c语言中,引用数组元素时,其数组下标的数据类型允许是()。 A)整型常量 B)整型表达式C)整型常量或整型表达式 D)任何类型的表达式 2.要说明一个有10个int元素的数组,应当选择语句()。 A) int a[10]; B) int a(10); C) int a[9] D) int a[11] 3.对以下说明语句的正确理解是()。 int a[10]={6,7,8,9,10}; A)将5个初值依次赋给a[1]至a[5] B)将5个初值依次赋给a[0]至a[4] C)将5个初值依次赋给a[6]至a[10] D)因为数组长度与初值的个数不相同,所以此语句不正确 4.已知:int a[10];则对a数组元素的正确引用是()。 A) a[10] B) a[3.5] C) a(5) D) a[10-10] 5.以下对一维整型数组a的正确说明是()。 A) int a(10); B)int n=10,a[n]; C) int n; D)#define SIZE 10; scanf("%",&n); int a[SIZE]; int a[n]; 6.要定义一个int型一维数组art,并使其各元素具有初值89,-23,0,0,0,不正确的定义 语句是()。 A) int art[5]={89,-23}; B) int art[ ]={89,-23}; C) int art[5]={89,-23,0,0,0}; D) int art[ ]={89,-23,0,0,0}; 7.在C语言中,二维数组元素在内存中的存放顺序是()。 A)按行存放 B)按列存放 C)由用户自己定义 D)由编译器决定 8.以下对二维数组a的正确说明是()。 A)int a[3][] B) float a(3,4) C) double a[1][4] D) float a(3)(4) 9.已知:int a[3][4];则对数组元素引用正确的是()。 A)a[2][4] B)a[1,3] C) a[2][0] D) a(2)(1) 10.已知:int a[3][4]={0};则下面正确的叙述是()。 A)只有元素a[0][0]可得到初值0 B)此说明语句是错误的 C)数组a中的每个元素都可得到初值,但其值不一定为0 D)数组a中的每个元素均可得到初值0 11.以下各组选项中,均能正确说明二维实型数组a的是()。 A) float a[3][4]; B) float a(3,4); float a[][4]; float a[3][4]; float a[3][]={{1},{0}}; float a[][]={{0},{0}}; C) f loat a[3][4]; D) float a[3][4]; float a[][4]={{0},{0}}; float a[3][]; float a[][4]={{0},{0},{0}}; float a[][4]; 12.已知:int a[][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是()。 A)2 B)3 C)4 D)无确定值 13.若二维数组a有m列,则在a[i][j]之前的元素个数为()。 A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1 14.要使字符数组str存放一个字符串"ABCDEFGH",正确的定义语句是()。 A) char str[8]={'A','B','C','D','E','F','G','H'};

第七章字符数组与指针练习题参考答案

第七章字符数组与字符串 【题7.29】下面是对s的初始化,其中不正确的是。 A)char s[5]={“abc”};B)char s[5]={‘a’,‘b’,‘c’}; C)char s[5]=“”;D)char s[5]=“abcdef”; 【题7.30】下面程序段的运行结果是。 char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’}; printf(“%s”,c); A)‘a’‘b’ B)ab C)ab c 【题7.31】对两个数组a和b进行如下初始化 char a[]=“ABCDEF”; char b[]={‘A’, ‘B’,‘C’,‘D’,‘E’,‘F’}; 则以下叙述正确的是。 A)a与b数组完全相同B)a与b长度相同 C)a和b中都存放字符串D)a数组比b数组长度长 提示:‘\0’是字符串结束的标志 【题7.32】有两个字符数组a、b,则以下正确的输入格式是。 A)gets(a,b); B)scanf(“%s %s”,a,b); C)scanf(“%s %s”,&a,&b);D)gets(“a”),get(“b”); 【题7.33】有字符数组a[80]和b[80],则正确的输出形式是。 A)puts(a,b); B)printf(“%s %s”,a[],b[]); C)putchar(a,b); D)puts(a),puts(b); 【题7.34】下面程序段的运行结果是。 char a[7]=“abcdef”; char b[4]=“ABC”; strcpy(a,b); printf(“%c”,a[5]); A)空格B)\0 C)e D)f 提示:复制后a[0]=‘A’,a[1]=‘B’,a[2]=‘C’,a[3]=‘\0’, a[4]=‘e’,a[5]=‘f’, a[6]=‘\0’,

变量的指针和指针变量的区别是什么

2变量的指针和指针变量的区别是什么。 答;一个变量的地址指出了变量的存储单元在内存中的具体位置,能对变量进行存取操作。这个变量的地址就是变量的指针。指针是一种具有特殊意义的整型数,指针不能存放在一般的整型变量中,必须存放在专门指针的变量中,这类变量就是指针变量。 3 一维数组元素的引用有哪些方式。 答;下标法、地址法、指针法 4 2维数组列地址有哪些计算方法。 答;1 根据数组元素所在的行计算出行地址,然后把行地址转换成行中首元素的地址,再根据数组元素所在的列计算数组元素的地址。 2 根据2维数组的数组元素在存储空间上按行连续存放的特点,每个数组元素的地址等于2维数组元素的首元素地址加上该数组元素相对于首元素位置的偏移量。 3把2维数组的每一行当作一个一维数组,用一维数组元素地址的计算方法计算相应的2维数组元素的地址。 第9章结构体与共用体 1 什么是链表。其中单向链表具有哪些特点。 答;链表是若干个同样类型的结构通过依次串接方式构成的一种动态数据结构。链表中的每一个结构体数据成为结点,链表可以分成单向链表和双向链表 单向链表的特点;1 链表中的结点数据可以改变的 2 结点占用的内存是动态分配内存和动态释放内存函数。 2 对单向链表的常用操作有哪些。 答;对单向链表的常用操作有建立、显示、插入,删除和查找。 3 什么是共用体。 答;共用体是一个集合体。它的各个成员的数据类型可以是不相同的,所有成员共享同一段存储空间,存储空间的大小取决存储单元最大的成员的数据类型。 4 指向结构体类型变量的指针变量引用形式有哪些。 答;有两种形式;【星号指针变量名】。成员名和指针变量名-大于号成员名。 第10章位运算及编译预处理 1 C提供的编译预处理功能有哪些。如何实现。 答;功能有三种;宏定义、文件包含和条件编译,分别用宏定义命令、文件包含命令、条件编译命令实现。 2 文件包含的基本功能是什么。 答;文件包含处理是一个源文件可以将另一个源文件的全部内容包含到本文件中来,作为本文件的一部分,这可以节省程序设计人员的重复劳动。 【3【在C语言中提供了几种什么样的位运算符。 答;-、小于小于、大于大于、 4 文件包含需要注意哪些问题 答;一个井include命令只能指定一个被包含文件,包含多个文件侧需多个井include命令;文件包含可以嵌套,即一个被包含文件中可以包含另一个被包含的文件;在井include命令中,文件名可以用双引号或尖括号括起来。 第11章文件 1 文件的结束标志有哪些。 答;每个文件都有一个结束标志。当文件的位置指针移到文件的结束标志处时,表示文件结束。如何测试文件是否结束,常有2种方法 1 ASCII码文件的结束标志用【-1】表示。

计算机二级c语言第九章 数组和指针习题与答案

第九章数组和指针 1、有以下程序 main() { int a[]={2,4,6,8,10}, y=0, x, *p; p=&a[1]; for(x= 1; x< 3; x++) y += p[x]; printf("%d\n",y); } 程序运行后的输出结果是 A)10 B)11 C)14 D)15 2、有以下程序 void sum(int a[]) { a[0] = a[-1]+a[1]; } main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]); printf("%d\n", a[2]); } 程序运行后的输出结果是 A)6 B)7 C)5 D)8 3、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++< 7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是 A)42 B)45 C)56 D)60 4、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组6个元素中的值,不能完成此操作的语句是 A)for(i=0;i<6;i++) printf("%2d",*(p++)); B)for(i=0;i<6;i++) printf("%2d",*(p+i)); C)for(i=0;i<6;i++) printf("%2d",*p++); D)for(i=0;i<6;i++) printf("%2d",(*p)++); 5、有以下程序 #include < stdio.h > main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5); printf("%d %d\n",*p,*q); } 程序运行后的输出结果是 A)运行后报错 B)6 6 C)6 11 D)5 10

字符串及数组应用程序设计习题

字符串及数组应用程序设计习题 1、 【字符替换问题】 题目描述:在使用Word 进行文档编辑的过程中,我们都有过使用替换操作的经历,现在就请你运用字符串操作函数来实现一个简化的替换操作! 题目要求:用户输入三行字符串:第一行为原始文本串(长度为100以内);第二行为被替换子串;第三行为新的替换子串,注意替换操作可能不止进行一次。 输入数据:What ’s the meaning of this? this that 输出数据:What ’s the meaning of that? 2、 【简单字符串解压(压缩)问题】 题目描述:在计算机世界里,数据量总是庞大无比,因此压缩的概念无处不大:比如,音、视频信息压缩就产生了MP3、MP4等;网络数据包压缩更是减少了网络传输量,加快了数据传输出速度等,今天,我们也来试试一点简单的字符串解压(压缩)操作! 题目要求:键盘输入一段被压缩的字符信息,其中仅含大小写字母、数字、‘-’字符,并假定其中连续的字符(超过2个字符)已压缩为“起始字符-终止字符”的形式,请编程实现解压缩操作(解压后长度不超过200字符)! 输入数据:a-eio1-49X-Z 输出数据:abcdeio12349XYZ 思考:试试编写压缩操作(仅供同学们讨论实现,较难)。 3、 【归并操作问题】 题目描述:在计算机内部排序方案中,有一种重要的排序思想叫归并排序。归并排序的主要操作是递归分解、回归合并。回归合并操作就是将两个原本有序的序列,合并为一个有序序列。例如:A 序列为{12、14、32};B 序列为{13、15、40、99};则新序列C 为{12、13、14、15、32、40、99}。 题目要求:编程实现用户输入的两个有序子序列的合并操作,合并长度不长过100个元素。 输入数据:如上A 、B 子序列;输出结果:如上C 序列。 4、 【矩阵初始化问题】 题目描述:在计算机算法习题设计中,我们常常需要运用矩阵来记录当前问题的子问题的最优解,进而导出当前问题的最优解,并最终得到全局最优解,因此矩阵的下标运算是学习这类问题的重要基础之一。如下图所示方阵中的A 矩阵称为螺旋矩阵、B 矩阵称为蛇形矩阵。 题目要求:用户输入方阵的维大小,编程完成该方阵的这类初始化(分别实现)。 A 4×4 = B 4×4 = 输入数据:4 输出结果:螺旋矩阵如上图中的A 矩阵、蛇形矩阵如上图中的B 矩阵。 5、 【高精度运算问题】 题目描述:计算机软件功能其实就是扩展硬件功能。比如:计算机中硬件所能表示的最大整数long int 型数为-231 到231 ,要想表示更大的整型数据或其运算就只能依赖整型数组来完成! 题目要求:用户输入两个充分大的整数(C++基本类型是装不下了哟!),请输出它们的和。 输入数据( 两行):15464315464465465 482321654151 输出数据: 和为 15464797786119616 思考:求积(仅供同学们讨论实现,较难),上述数据积为 7458774215133872939813395215。 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 10 11 15 16 4 9 12 14 3 5 8 13 1 2 6 7

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

函数 (一)选择题 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)float b)int c)long d)double 5.已有以下数组定义和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,12 7.以下正确的描述是____________. a)C语言的预处理功能是指完成宏替换和包含文件的调用 b)预处理指令只能位于C源程序文件的首部 c)凡是C源程序中行首以"#"标识的控制行都是预处理指令 d)C语言的编译预处理就是对源程序进行初步的语法检查 8.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,找寻被包含文件的方式是_______. a)仅仅搜索当前目录 b)仅仅搜索源程序所在目录

相关主题
文本预览
相关文档 最新文档