习题六指针与函数
教材课后题答案-第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语言指针习题和答案精选文档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语言期末实操复习题#### 一、基础语法题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版)六、指针_选择题(答案)

六、指针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、有以下程序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语言指针习题及答案

指针主要内容的习题及答案一.选择题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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;}分析:自定义函数需返回多个统计结果,可采用一个专门的数组存放统计结果,并将其作为函数参数,在被调函数中计数。