习题六指针与函数

合集下载

教材课后题答案-第6章_指针习题答案

教材课后题答案-第6章_指针习题答案

习题解答一、单项选择题1.若定义了int n=2, *p=&n, *q=p;则下面【】的赋值是非法的。

A.p=qB. *p=*qC. n=*qD. p=n【答案】D2.若定义了double *p, a;则能通过scanf函数给输入项读入数据的程序段是【】。

A.p=&a; scanf(“%1e”,p);B. *p=&a; scanf(“%1f”,p);C. p=&a; scanf(“%f”,p);D. p=&a; scanf(“%1f”,a);【答案】C3.若定义了int a[10], i=3, *p; p=&a[5];下面不能表示为a数组元素的是【】。

A.p[-5]B. a[i+5]C. *p++D. a[i-5]【答案】D4.若有如下定义:int n[5]={1,2,3,4,5},*p=n;则值为5的表达式是【】。

A.*+5B. *(p+5)C. *p+=4D. p+4【答案】C5.设变量b的地址已赋给指针变量ps,下面为“真”的表达式是【】。

A.b==&psB. b==psC. b==*psD. &b==&ps【答案】C6.设有以下定义和语句:int a[3][2]={1,2,3,4,5,6},*p[3];p[0]=a[1];则*(p[0]+1)所代表的数组元素是【】。

A.a[0][1]B. a[1][0]C. a[1][1]D. a[1][2]【答案】C7.若定义了char *str=”Hello!”;下面程序段中正确的是【】。

A.char c[ ], *p=c; strcpy(p,str);B.char c[5], *p; strcpy(p=&c[1],&str[3]);C.char c[5]; strcpy(c,str);D.char c[5]; strcpy(p=c+2,str+3);【答案】B8.若有下面的程序段,则不正确的fxy函数的首部是【】。

C语言指针习题和答案精选文档

C语言指针习题和答案精选文档

C语言指针习题和答案精选文档TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <>void swap(int *pa,int *pb){int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c);}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include ""#include ""int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0};p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<>void main(){int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while((s[i]=getchar())!='\n')i++;p=s;while(*p!=10){if(*p>='A'&&*p<='Z')a++;else if(*p>='a'&&*p<='z')b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9')d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b);printf("空格 %d 数字 %d 非字符 %d\n",c,d,e);}写一个函数,将3 3矩阵转置#include ""void Transpose(int (*matrix)[3]){int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j); *(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}用指向一维数组的指针做函数参数#include<>#include<>int main(){void sort(char (*s)[6]);3”n",*(month_name+n));elseprintf("It is wrong.\n");}运行结果:① Input month: 2↙It is February.② Input month: 8↙It is August.③ Input month: 13↙It is wrong.9.11c语言:将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。

c语言期末实操复习题

c语言期末实操复习题

c语言期末实操复习题### C语言期末实操复习题#### 一、基础语法题1. 变量声明与初始化编写一个程序,声明一个整型变量`a`和一个浮点型变量`b`,并将它们分别初始化为10和3.14。

2. 数据类型转换编写代码,将一个整数`x`(例如100)转换为浮点数,并打印转换后的值。

3. 条件语句编写一个程序,使用`if-else`语句判断一个整数`n`是否为正数、负数或零。

4. 循环结构使用`for`循环打印出1到10的数字。

5. 数组操作声明一个整型数组`arr`,包含5个元素,初始化为1, 2, 3, 4, 5,并使用循环打印数组元素。

#### 二、函数与指针1. 函数定义与调用定义一个函数`add`,接受两个整数参数并返回它们的和。

在主函数中调用该函数。

2. 指针基础编写一个程序,声明一个整型变量`num`和一个指向整型的指针`p`,将`num`的地址赋给`p`,并打印通过`p`访问的值。

3. 指针与数组使用指针操作上述数组`arr`,打印数组的最后一个元素。

4. 函数与指针定义一个函数`increment`,该函数接受一个整型指针参数,并使该指针指向的值增加1。

#### 三、结构体与联合体1. 结构体定义与使用定义一个结构体`Student`,包含学生的姓名(字符数组)、学号(整数)和成绩(浮点数)。

声明一个`Student`类型的变量,并初始化。

2. 结构体与指针编写一个函数,接受一个指向`Student`结构体的指针,并打印该学生的姓名和成绩。

3. 联合体基础定义一个联合体`Data`,可以存储整数、浮点数或字符。

声明一个`Data`类型的变量,并分别存储不同类型的数据。

#### 四、文件操作1. 文件的打开与关闭编写一个程序,打开一个文本文件(例如`example.txt`),读取文件内容,并在屏幕上打印,最后关闭文件。

2. 文件的写入编写代码,将字符串"Hello, World!"写入到一个新文件中。

(完整word版)六、指针_选择题(答案)

(完整word版)六、指针_选择题(答案)

六、指针183.下程序的运行结果是( A )。

void ast (int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x—y;}main(){ int a=4,b=3,c,d;ast(a,b,&c,&d);printf(”%d,%d\n”,c,d);}A. 7,1B. 1,7C. 7,—1D. c、d未赋值,编译出错执行 ast(a,b,&c,&d);调用ast 函数,把a传递给x,b传递给y,c的地址传递给cp,d的地址传递给dp。

因为cp=&c(cp的值为c变量的地址),所以*cp等价于c,执行*cp=x+y ;后c=4+3=7同理,因为dp=&d,所以*dp等价于d,执行*dp=x—y;后d=4—3=1执行 printf("%d,%d\n",c,d);后输出7,1184.有以下语句:int a[5]={0,1,2,3,4,5},i;int *p=a;设0≤i<5,对a数组元素不正确的引用是( C )。

A.*(&a[i])B. a[p—a]C.*(*(a+i))D. p[i]1.指针运算符取地址运算符&:其功能是取变量的地址。

须是指针变量。

A . *(&a[i]) 等价于a[i]B. a[p—a]等价于a[0]C. 因为*(a+i)等价于a[i] 所以*(*(a+i))等价于*(a[i]) ,又因为在*运算符之后跟的变量必须是指针变量,我们断定*a[i]是错的,所以*(*(a+i))也是错.D。

因为P=a,所以P[i]等价于a[i]185.若有定义int *p1,*p2; 则错误的表达式是( A )。

A. p1+p2B. p1—p2C. p1<p2D. p1=p2两个指针变量可以相减(结果表示介于二者之间元素的个数),可以比较大小,但不能相加。

186.以下叙述错误的是( D )。

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

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

(一)选择题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.阅读程序,选择程序的运行结果。

函数和指针题目1(带答案)

函数和指针题目1(带答案)

1、有以下程序Array char fun(char x , char y){if(x<y) return x;return y;}void main( ){int a='9',b='8',c='7';cout<<fun(fun(a,b),fun(b,c));}程序的执行结果是(D )A)函数调用出错 B)8 C)9 D)72、有以下程序int f(int b[][4]){int i,j,s=0;for(j=0;j<4;j++){i=j;if(i>2) i=3-j;s+=b[i][j];}return s;}void main( ){cout<<f(a)<<endl;}执行后的输出结果是(D )A)12 B)11 C)18 D)163、有以下程序void f(int a[],int i,int j){int t;if(i<j){t=a[i]; a[i]=a[j];a[j]=t;f(a,i+1,j-1);}}void main( ){int i,aa[5]={1,2,3,4,5};f(aa,0,4);for(i=0;i<5;i++) cout<<aa[i]<< ",";cout<<endl;}执行后输出结果是(A)A)5,4,3,2,1, B)5,2,3,4,1, C)1,2,3,4,5, D)1,2,3,4,5,7、以下能正确定义数组并正确赋初值的语句是(D)A) int N=5,b[N][N];B) int a[1][2]={{1},{3}};C) int c[2][]={{1,2},{3,4}};D) int d[3][2]={{1,2},{3,4}};8、以下叙述中正确的是(B)A) 全局变量的作用域一定比局部变量的作用域范围大B) 静态(static)类别变量的生存期贯穿于整个程序的运行期间C) 函数的形参都属于全局变量D) 未在定义语句中赋初值的auto变量和static变量的初值都是随机值9、下面rotate函数的功能是:将n行n列的矩阵A转置为A’,例如:1 2 3 4 1 5 9 135 6 7 8 2 6 10 14当 A=9 10 11 12 则 A’= 3 7 11 1513 14 15 16 4 8 12 16请填空const int N =4void rotate(int a[][N]){ int i,j,t;for(i=0;i<N;i++)for(j=0;_____________;j++) j<=i{t=a[i][j];____________;a[i][j]=a[j][i]a[j][i]=t;}}10、若有以下程序void main(){int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24},{-31,32,-33,0}};int i,j,s=0;for(i=0;i<4;i++)for(j=0;j<4;j++){if(a[i][j]<0) continue;if(a[i][j]==0) break;s+=a[i][j];}cout<<s<<endl;}执行后输出结果是______________。

C语言指针习题及答案

C语言指针习题及答案

指针主要内容的习题及答案一.选择题1.变量的指针,其含义是指该变量的 B 。

A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。

A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。

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 a=25;print_value(&a);下面函数的输出结果是 D 。

void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是C 。

A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是D 。

A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。

A)char *a=”china”; 等价于char *a; *a=”china” ;B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;}C)char *s=”china”; 等价于char *s; s=”china” ;D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;8.下面程序段中,for循环的执行次数是 C 。

函数指针习题

函数指针习题

函数、指针练习题一、选择题1. 若有”fun(int a[],int n)”,以下说法正确的是( )。

A.函数的类型为单精度类型B.第一个实参应该是数组名C.实参和形参之间是一个值传递的过程D.以上说法都不对2. 下列有关函数调用的说法不正确的是( )。

A.若用值传递方式,则形式参数在函数被调用时才分配内存B.实际参数和形式参数不可以同名C.主调函数和被调用函数可以不在同一个文件中D.函数间传送数据可以使用外部全局变量3. 下列叙述中正确的是( )。

A.函数可以嵌套定义,但不能嵌套调用B.函数可以嵌套调用,也可以嵌套定义C.函数不可以嵌套定义,也不可以递归调用D.函数可以嵌套调用,但不能嵌套定义4. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。

A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元5. 函数中未指定存储类型的变量,其隐含的存储类型是( )。

A.static B.auto C.extern D.register6. 在一个C语言源程序文件中所定义的全局变量,其作用域为( )。

A.所在文件的全部范围B.所在程序的全部范围C.所在函数的全部范围D.由具体定义位置和extern 说明来决定范围7. 所谓静态存储即是在程序运行期间分配固定的( )。

A.变量名称B.变量值C.存储单元D.作用域8. 设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是( )。

A.auto B.register C.static D.auto或register9. 若变量定义时未初始化,则其值不确定的是( )。

A.静态全局变量B.静态局部变量C.局部变量D.全局变量10. 以下叙述中错误的是( )。

A.用户定义的函数中可以没有return 语句B.用户定义的函数中可以有多个return 语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有return 语句,则应当定义函数为void 类型D.函数的return 语句中可以没有表达式11. 下列关于指针定义的描述中不正确的是( )。

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

1.指针(1) 有以下程序void f( int y,int *x){y=y+*x; *x=*x+y;}main( ){ int x=2,y=4;f(y,&x);printf(“%d %d\n”,x,y);}执行后输出的结果是【1】。

(2) 下面程序的运行结果是:[2] 。

void swap(int *a,int *b){ int *t;t=a; a=b; b=t;}main(){ int x=3,y=5,*p=&x,*q=&y;swap(p,q);printf(“%d%d\n”,*p,*q);}(3) 设有以下程序:main(){ int a, b, k=4, m=6, *p1=&k, *p2=&m;a=pl= =&m;b=(*p1)/(*p2)+7;printf(“a=%d\n”,a);printf(“b=%d\n”,b);}执行该程序后,a的值为【3】,b的值为【4】。

(4) 下列程序的输出结果是【5】。

void fun(int *n){ while( (*n)--)printf(“%d”,++(*n));}main(){ int a=100;fun(&a);}(5) 以下函数用来求出两整数之和,并通过形参将结果传回,请填空。

void func(int x,int y, [6] z){ *z=x+y; }(6) 函数void fun(float *sn, int n)的功能是:根据以下公式计算S,计算结果通过形参指针sn 传回;n通过形参传入,n的值大于等于0。

请填空。

void fun( float *sn, int n){ float s=0.0, w, f=-1.0;int i=0;for(i=0; i<=n; i++){ f= [7] * f;w=f/(2*i+1);s+=w;}[8] =s;}(7) 以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。

请填空。

exchange(int *x, int *y){ int t;t=*y; *y= 【9】; *x= 【10】;}(8) 下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。

int add(int x,int y, 【11】z){ 【12】=x+y;}2.函数(1) 给出年、月、日,问是星期几(星期日~六用0~6表示)。

#include<iostream.h>int month_to_day(int c);void show(int d);int year,month,day;int main(){cout<<"请输入年月日"<<endl;cin>>year>>month>>day;int a=year-1900,b=a/4,c=month-1,d;//a表示过了几年,b表示a中有几年是闰年,//c表示过了几个月,d表示一共有多少天c=month_to_day(c); //把月份转成天数if(a%4==0&&a!=0) //判断输入的年份是不是闰年{b=b-1;c=c+1;d=(a-b)*365+b*366+c;}elsed=(a-b)*365+b*366+c+day;show(d); //输出星期几return 0;}int month_to_day(int c){switch(c){case 11:c=334;break;case 10:c=304;break;case 9:c=273;break;case 8:c=243;break;case 7:c=212;break;case 6:c=181;break;case 5:c=151;break;case 4:c=120;break;case 3:c=90;break;case 2:c=59;break;case 1:c=31;break;default:break;}return c;}void show(int d){switch(d%7){case 0:cout<<year<<"-"<<month<<"-"<<day<<"是星期日。

"<<endl;break;case 1:cout<<year<<"-"<<month<<"-"<<day<<"是星期一。

"<<endl;break;case 2:cout<<year<<"-"<<month<<"-"<<day<<"是星期二。

"<<endl;break;case 3:cout<<year<<"-"<<month<<"-"<<day<<"是星期三。

"<<endl;break;case 4:cout<<year<<"-"<<month<<"-"<<day<<"是星期四。

"<<endl;break;case 5:cout<<year<<"-"<<month<<"-"<<day<<"是星期五。

"<<endl;break;case 6:cout<<year<<"-"<<month<<"-"<<day<<"是星期六。

"<<endl;break;}}(2) 用递归法将一个整数转换成字符串输出。

#include<iostream>using namespace std;int main(){void convert(int n);int number;cout<<"input an integer:";cin>>number;cout<<"output:"<<endl;if(number<0){cout<<"-";number=-number;}convert(number);cout<<endl;return 0;}void convert(int n){int i;char c;if((i=n/10)!=0)convert(i);c=n%10+'0';cout<<" "<<c;}(3) 有一篇三行文字的文章,每行最多80个字符,编写函数,由实参传递字符串,分别统计文章中大写字母、小写字母、数字、空格及其它字符的个数。

#include "iostream.h"#include "string.h"void main(){char a[100],b[100],c[100];int l1,l2,l3,d=0,x=0,s=0,k=0,q=0,i;cout<<"请输入第一行文字"<<endl;gets(a);cout<<"请输入第二行文字"<<endl;gets(b);cout<<"请输入第三行文字"<<endl;gets(c);l1=strlen(a);l2=strlen(b);l3=strlen(c);for(i=0;i<l1;i++)//统计第一行{ if(a[i]>='a'&&a[i]<='z') x++;if(a[i]>='A'&&a[i]<='Z') d++;if(a[i]>='0'&&a[i]<='9') s++;if(a[i]==' ') k++;}for(i=0;i<l2;i++)//统计第二行{ if(b[i]>='a'&&b[i]<='z') x++;if(b[i]>='A'&&b[i]<='Z') d++;if(b[i]>='0'&&b[i]<='9') s++;if(b[i]==' ') k++;}for(i=0;i<l3;i++)//统计第三行{ if(c[i]>='a'&&c[i]<='z') x++;if(c[i]>='A'&&c[i]<='Z') d++;if(c[i]>='0'&&c[i]<='9') s++;if(c[i]==' ') k++;}q=l1+l2+l3-x-d-s-k;//其他字符cout<<"共有大写字母"<<d<<"个"<<"小写字母"<<x<<"个"<<"数字"<<s<<"个"<<"空格"<<k<<"个"<<"其他字符"<<q<<"个"<<endl;}分析:自定义函数需返回多个统计结果,可采用一个专门的数组存放统计结果,并将其作为函数参数,在被调函数中计数。

相关文档
最新文档