函数和指针题目1(带答案)
函数、指针与结构体练习题-参考答案

(一)选择题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;}执行后输出结果是______________。
实验一 函数-指针及其应用参考答案doc

实验一函数、指针及其应用(一)函数的基本应用1.验证性实验⑴思考回答:可以将函数的形参看作一局部变量,函数在执行时,形参才被分配内存,执行函数时实参并没有参加运算,它只是将值传递给形参,由形参参加运算.而在函数结束后,形参的内存被释放,但实参的内存并没有被释放(要等到main函数结束时才被释放),因而执行完函数后,实参不变,而形参就不复存在了.2.程序填空⑴①sele(k)②k③n%3==0&&n%7==0⑵①1②flag③num%n④flag⑶①return n②n%10③x④sum(x)3.程序改错⑴将unsigned k=0;改为unsigned k=1;将k*=num/10;改为k*=num%10;将while(k);改为while(num);将scanf(“%d”,x)改为scanf(“%d”,&x);⑵将j=(n/10/10);改为j=(n/10)%10;将scanf(“%f”,&n);改为scanf(“%d”,&n);将if(flower(n))改为if(flower(n)==0)4.设计性实验⑴#include<stdio.h>int Isleap(int year){if((year%4==0&&year%100!=0)||year%400==0)return 1;return 0;}void main(){int year;printf(“Please input the year:”);scanf(“%d”,&year);if(Isleap(year))printf(“%d is a leap year!”,year);elseprintf(“%d is not a leap year!”,year);}⑵①/*方法1:递归版*/#include<stdio.h>int gy(int a,int b)/*求最大公约数函数*/{if(a%b==0)return b;else gy(b,a%b);}int gb(int a,int b)/*求最小公倍数函数*/{return a*b/gy(a,b);}void main(){int a,b;printf(“请输入两个数字:(例如\”4,5\”)\n”); scanf(“%d,%d”,&a,&b);p rintf(“\n最大公约数为: %d”,gy(a,b));printf(“\n最小公倍数为: %d”,gb(a,b));}②/*方法2:辗转相除法*/#include<stdio.h>int gy(int a,int b)/*求最大公约数函数*/{int r;while((r=a%b)!=0){a=b;b=r;}return b;}int gb(int a,int b)/*求最小公倍数函数*/{return a*b/gy(a,b);}void main(){int a,b;printf(“请输入两个数字:(例如\”4,5\”)\n”); scanf(“%d,%d”,&a,&b);printf(“\n最大公约数为: %d”,gy(a,b));printf(“\n最小公倍数为: %d”,gb(a,b));}③/*方法3:位运算版,奇妙的算法*/#include<stdio.h>int gy(int a,int b)/*求最大公约数函数*/{while(b^=a^=b^=a%=b);return a;}int gb(int a,int b)/*求最小公倍数函数*/{return a*b/gy(a,b);}void main(){int a,b;printf(“请输入两个数字:(例如\”4,5\”)\n”); scanf(“%d,%d”,&a,&b);printf(“\n最大公约数为: %d”,gy(a,b));printf(“\n最小公倍数为: %d”,gb(a,b));}⑶#include<stdio.h>int sum(int i){if(i==1)return i;elsereturn i+sum(i-1);}void main(){printf("sum=%d",sum(100));}⑷①/*方法1:递归版*/#include<stdio.h>int Fib(int n){if(n==0) return 0;else if(n==1) return 1;else return Fib(n-1)+Fib(n-2); }void main(){int n;printf("please input n:");scanf("%d",&n);printf("Fib(%d)=%d",n,Fib(n)); }②/*方法2:非递归版*/#include<stdio.h>int Fib(int n){int x,a=0,b=1,i;if(n==0) return a;else if(n==1) return b;else{for(i=1;i<=n-1;i++){x=a+b;a=b;b=x;}return x;}}void main(){int a=0,b=1,x,n,i;printf("Please input n:");scanf("%d",&n);printf("Fib(%d)=%d",n,Fib(n));}(二)指针与数组2.程序填空⑴①p②*p③%d⑵①x②i--③i<=10&&i>=13.程序改错⑴将double fun[3],r;改为double fun[3],*r;将scanf(“%f%f%f”,&fun[0],&fun[1],&fun[2]);scanf(“%lf%lf%lf”,&fun[0],&fun[1],&fun[2]);将r=quadratic(fun[3])改为r=quadratic(fun);⑵将scanf(“%d”,*p);改为scanf(“%d”,p);在for(;p>=a;p--)前添加语句p--;将if(p%2==0)改为if(*p%2==0)4.设计性实验⑴#include<stdio.h>#define N 10void main(){int a[N],*max,*min,*p,q;printf("Please input the array:\n");for(p=a;p<a+N;p++)scanf("%d",p);max=min=a;for(p=a;p<a+N;p++){if(*max<*p) max=p;if(*min>*p) min=p;}printf("Max=%d\n",*max);printf("Min=%d\n",*min);q=*max;*max=*min;*min=q;for(p=a;p<a+N;p++)printf("%d",*p);}⑵#include<stdio.h>#define M 3#define N 10void main(){char a[M][N],(*p)[N] ,(*q)[N],*temp="temp";/*注意:(*p)[N]不是指针数组,而是指向数组的行指针*/printf("Please input thr string:\n");for(p=a;p<a+M;p++)gets(p);for(p=a;p<a+M-1;p++)for(q=p+1;q<a+M;q++)if(strlen(p)-strlen(q)<0){strcpy(temp,p);strcpy(p,q);strcpy(q,temp);}for(p=a;p<a+M;p++)puts(p);}⑶#include<stdio.h>#define N 10void main(){char a[N],*p;printf("Please input the string:\n");gets(a);p=a;while(*p)p++;/*移动指针到最末尾处*/for(p--;p>=a;p--)/*p--的作用是让p由'\0'指向字符串最后一个字母*/printf("%c",*p);}⑷#include<stdio.h>#define N 10void input(int a[],int n){int i;for(i=0;i<n;i++)scanf("%d",&a[i]);}void process(int a[],int n){int i;int *p,*max,*min,t;max=min=a;for(p=a+1;p<a+n;p++){if(*max<*p) max=p;if(*min>*p) min=p;}{t=*min;*min=*a;*a=t;}/*交换最小数与第一个数*/{t=*max;*max=*(a+n-1);*(a+n-1)=t;}/*交换最大数与最后一个数*/ }void output(int a[],int n){int i;for(i=0;i<n;i++)printf("%d",a[i]);}void main(){int a[N];input(a,N);process(a,N);output(a,N);}⑸#include<stdio.h>char *find(char a[],char b[],char c[]){char *p,*q,*k;k=c;for(p=a,q=b;(*p)!='\0'&&(*q)!='\0';p++,q++)if(*p-*q==0){*k=*p;k++;}*k='\0';return c;}void main(){char a[N],b[N],c[N],*i;printf("Please input two strings:\n");scanf("%s%s",a,b);i=find(a,b,c);while(*i)i++;for(i--;i>=find(a,b,c);i--)putchar(*i);}(三)指针与函数二、实验内容2.程序填空⑴①min=*p1②min=*p2③min=*p3⑵①switch②add③(*funp)3.程序改错⑴将void swap(int,int);改为void swap(int *p,int *q)或void swap(int *,int *)将scanf(“%d%d%d”,i1,i2,i3)改为scanf(“%d%d%d”,&i1,&i2,&i3);将p1=i1;p2=i2;p3=i3;改为p1=&i1;p2=&i2;p3=&i3;⑵将p=s改为p=&s将unsigned x,p;改为unsigned x,*p;将printf(“%d”,p)改为printf(“%d”,*p);4.设计性实验⑴#include<stdio.h>int add_num(long num){int s=0,a;a=num;while(a>0){s+=a%10;a=a/10;}return &s;/*这类题告诉我们,函数执行完后,其内部形参并不是马上被释放内存,我们暂时可以通过指针继续访问它的值*/}void main(){long num;int *p;printf("Please input a number:");scanf("%ld",&num);p=add_num(num);printf("The sum of every digit is %d",*p);}⑵#include<stdio.h>int *gy(int a,int b){static int gys;/*把形式参数设定为静态变量,在函数结束时其内存就不会被释放,这样我们就可以用指针随时访问它了*/int r;while(r=a%b){a=b;b=r;}gys=b;return &gys;}int *gb(int a, int b){static int gbs;int *p;p=gy(a,b);gbs=a*b/(*p);return &gbs;}void main(){int a,b,*c,*d;printf("Please input two integer:\n");scanf("%d,%d",&a,&b);c=gy(a,b);d=gb(a,b);printf("The greatest common divisor is %d\nThe lease common multiple is %d",*c,*d);}。
指针数组函数练习(含参考答案).

for(i=0;i
printf("%.0f\t",array[i];
Transfer(array,N;
printf("\n";
for(i=0;i
printf("%.0f\t",array[i];
printf("\n";
}
3.编写一个通用函数,该函数可以实现求数值型二维数组的上三角各元素的平方根的和(即先对上三角各元素求平方根,然后再对平方根求和)。编写主程序调用该函数,计算数组A的上三角元素的平方根的和。
scanf("%d",#
Transfer(num;
}
5.编写一个通用函数,该函数可以实现把一个十进制的正整数转换成七进制。例如把88转换成154。编写主程序调用该函数,把整数123455转换成七进制并输出。
注:把一个十进制的整数转换成七进制的方法是:把十进制数当作被除数,用7除,直到商为0为至,然后把余数倒序即可。例88除7的余数依次是4、5、1,则其七进制为:154。
注:把一个十进制的整数转换成二进制的方法是:把十进制数当作被除数,用2除,直到商为0为止,然后把余数倒序即可。例18除2的余数依次是0、1、0、0、1,则其二进制为:10010。
#include
void Transfer(int num
{
int a[100];
int count=0;
while(num!=0
return 1;
else
return 0;
}
void main(
{
int count=0;
long i;
for(i=10000;i<=99999;i++
函数指针习题

函数、指针练习题一、选择题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)

while(*(str+num)!=‘\0’) num++;
return(num);}
A.7B.6C.5D.10
19.下面程序的运行结果是()
# include <stdio.h>
main( )
{static char a[ ]=“Language”,b[ ]=“programe”;
2.执行以下程序后,a的值为(),b的值为()
main(0
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1= =&m;
b=(- *p1)/(*p2)+7;
printf(“a=%d\n”,a);
printf(“b=%d\n”,b);}
[1]A.-1B.1C.0D.4
[2]A.5 B.6C.7D.10
D.*p只能用来说明p是一个指针变量
4.以下程序有错,错误原因是()
main()
{int *p,i;
char *q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;……….}
A.p和q的类型不一致,不能执行*p=*q;语句;
B.*p中存放的是地址值,因此不能执行*p=40;语句
C.q没有指向具体的存储单元,所以*q没有实际意义
指针单元练习题
一、选择题:
1.以下程序的运行结果是()
sub(int x,int y,int *z)
{*z=y-x;}
main()
{int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
指针测试题及答案大全

指针测试题及答案大全一、选择题1. 指针变量的声明方式正确的是()。
A. int *p;B. int *p[];C. int *p[10];D. int (*p)[10];答案:A2. 指针变量可以存储()。
A. 整型数据B. 浮点型数据C. 函数名D. 任意类型的地址答案:D3. 指针变量的值是()。
A. 它所指向的变量的值B. 它所指向的变量的地址C. 它自己的值D. 它自己的地址答案:B4. 指针变量的类型转换时,以下说法正确的是()。
A. 可以将任何类型的指针转换为void指针B. 可以将void指针转换为任何类型的指针C. 可以将char指针转换为int指针D. 可以将int指针转换为char指针答案:A5. 指针变量的算术运算中,以下说法正确的是()。
A. 指针变量可以进行加法运算B. 指针变量可以进行减法运算C. 指针变量可以进行乘法运算D. 指针变量可以进行除法运算答案:B二、填空题1. 指针变量的值是它所指向的变量的________。
答案:地址2. 指针变量的类型转换时,可以将void指针转换为________类型的指针。
答案:任何类型3. 指针变量的算术运算中,指针变量可以进行________运算。
答案:减法三、简答题1. 描述指针变量与数组之间的关系。
答案:指针变量可以指向数组的首元素,从而可以通过指针访问数组中的所有元素。
数组名在大多数情况下可以作为指向数组首元素的指针使用。
2. 解释指针变量的类型转换规则。
答案:指针变量的类型转换遵循C语言的类型转换规则,可以将任何类型的指针转换为void指针,也可以将void指针转换为任何类型的指针。
但是,不同类型的指针之间不能直接转换,除非它们指向的数据类型是兼容的。
结束语:以上是指针测试题及答案大全,希望对您的学习有所帮助。
C语言二级,函数、数组、指针等的整理和课后题解答

第一个try(x,y,z)中的xyz是实参,中的xyz是形参,因为是void,没有return,所以无返回值,所以输出的(4)仍是2,3,0。
转换就是实参-----形参-----return------实参。
xy是实参,有值,是10,20。
ab是形参,(1)(4)中的xy不能换为ab,因为没有定义的ab 不能用。
此处没有return,所以(4)不能输出交换后的ab值。
7-7先读懂题意,这个主函数是一定要写出来的,关键在看返回值怎么弄。
注意(1)程序开始一定要有主函数的额定义,。
(2)中可以加上==1,但是因为if判断时就是1和0,所以此处不用写上1。
(3)下面的a是形参。
(4)for循环控制着if和return 0,在for---if---return 0执行完了才会执行return1 。
如果在return1 前面加上else的话,那么就会循环一次而判断一次,就输出一个0,不会整个循环完后返回1或0 。
(5)两个return的时候只执行一个return。
如条件成立的时候,执行return0,不成立的时候执行return1。
不断。
需要用循环,那么是用while还是for,则看:若是当。
则用while,如果是一个范围,则用while,若果是对次数什么的限制的话,就是用for。
不断输出结果,所以putchar(c)是放在和c=myupper(c)一样额括号内,如果是吧putchar(c)放在括号外面的话,就不会不断输出,只会输出一个,且是最后一个。
只要接受到的不是@,那么while久会一直循环。
7-9这个程序里没有实参和形参,是可以的,可以独立完成自己的事儿,不用实参传给形参。
这个程序也可以不用定义函数,直接把循环写在主函数中。
说明:7.1A,从主函数开始。
B、可以在程序的任意位置,如果实在main函数后面的话,记得开始要在函数最初的地方有个函数说明的语句。
7.2 如果函数没有说明格式的话,默认的是int型。
c语言(函数,数组,指针)练习题

C语言第2次练习题一.选择题1)一个C程序的执行是________.A.从程序的main( )函数开始执行。
B.从本程序的第一个函数开始执行。
C.从本程序第一条语句开始执行D.从#include 处开始执行3) 定义 int a, *p1; 若使p1指向a,在程序中应使用_______。
A.*p1=&a; B. p1=&a; C. p1=a; D. p1=*a;4) 下列为一维数组初始化时, 正确的是_______.A)int a[ ]={1,3,5,….15};B) int a[5]=1; C) int a[3]={5,6,8,3}; D) int a[5]={0};5).下列要将2,4,6,8存入数组a中,不正确的是______.B)int a[4]={2,4,6,8}; B) int a[ ]={2,4,6,8};C) int a[4]; a={2,4,6,8}; D) int a[4]; a[0]=2;a[1]=4,a[2]=6;a[3]=8;6).下列二维数组定义并初始化中, 正确的是A) int a[2][ ]={{3,4},{5,10,15}};B) int a[2][3]={2,3,4,5,6,7,8,9};C) int a[ ][3]={{0},{1,2},{3,4,5}};D) int a[ ][4]={(1,2,4,5),(2,3),(3,4,9),(5,6,8)};7). 若有说明: int a[5][5]; 则对数组元素的正确引用是______.A) a[3+2][3] B) a[0,3] C) a[4][1+2] D) a[ ][2]8).若有定义: char ch[ ]=”book120”; 则数组ch的存储长度是____;A) 7 B) 8 C)9 D)109) 设有定义: char s[20]; 向数组s中输入含有中间空格的字符串应使用的语句是______.A)scanf(“%s”,&s);B) scanf(“%s”,s);C)s=getchar(); D)gets(s);10).在数组: int a[][3]={{1},{3,2},{4,5,6},{0}}; 中, 数组元素a[2][1]的值是________.A)3 B) 4 C) 5 D) 211) 以下字符串赋值错误的是________。
C综合练习- 3 附参考答案

《C综合练习 3 --- 函数与指针》一、选择题1. 程序中调用了库函数strcmp,必须包含头文件()。
若是调用库函数gets呢?A、math.hB、string.hC、ctype.hD、stdio.h2.数组声明为“int y[4][3];”,表达式“*(y+2)+2-*y”的值为()。
A. 10B. 20C. 16D. 83.指针变量p1、p2类型相同,要使p1、p2指向同一变量,哪一个语句是正确的( )。
A、p2=*&p1;B、p2=**p1;C、p2=&p1;D、p2=*p1;4.数组定义为“int a[4][5];”,下列哪一个引用是错误的( )。
A、*aB、*(*(a+2)+3)C、&a[2][3]D、++a5.表达式“c=*p++”的执行过程是()。
A、复制*p的值给c后再执行p++B、复制*p的值给c后再执行*p++C、复制p的值给c后再执行p++D、执行p++后将*p的值复制给c6.函数strcmp("Int","int"))的返回值为。
A、0B、-32C、"intInt"D、"Intint"7.函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为。
int f(int m){ static int i=0; int s=0;for(; i<=m; i++) s+=i;return s;}A、21B、16C、15D、88.下列语句定义x为指向int类型变量a的指针,其中哪一个是正确的。
A、int a,*x=a;B、int a,*x=&a;C、int *x=&a,a;D、int a,x=a; 9.声明语句为“int a[3][4];”,下列表达式中与数组元素a[2][1]等价的是。
A、*(a[2]+1)B、a[9]C、*(a[1]+2)D、*(*(a+2))+1 10.对于以下递归函数f,调用f (2) 的返回值是。
C语言指针精选习题和答案

C语言指针精选习题和答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <stdio.h>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 "stdio.h"#include "string.h"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;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<stdio.h>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); }9.5写一个函数,将3 3矩阵转置 #include "stdio.h"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");}}}9.6用指向一维数组的指针做函数参数 #include<stdio.h>#include<string.h>int main(){void sort(char (*s)[6]);//一维数组的指针做函数参数int i;char str[10][6];char (*p)[6];//定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i++)scanf("%s",&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i++)printf("%s/n",str[i]);return 0;}void sort(char (*s)[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
C语言指针习题 附答案

C语言指针习题附答案c语言指针习题--附答案一、选择题1.变量的指针,其含义就是指本变量的_________.a)值b)地址c)名d)一个标志2.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point3.若有说明;int*p,m=5,n;以下正确的程序段的是________.a)p=&n;b)p=&n;scanf(\scanf(\c)scanf(\d)p=&n;*p=n;*p=m;4.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________.main(){int*p,*q,a,b;p=&a;printf(“inputa:”);scanf(“%d”,*p);……}a)*p则表示的就是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p 只能用来说明p是一个指针变量5.尚无变量定义和函数调用语句:inta=25;print_value(&a);下面函数的恰当输入结果就是________.voidprint_value(int*x){printf(“%d\\n”,++*x);}a)23b)24c)25d)266.若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是a)*p=&a;scanf(\,p);b)p=(long*)malloc(8);scanf(\,p);c)scanf(\,p=&a);d)scanf(\,&a);7.有以下程序#includemain(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(\}程序运行后的输出结果是a)1,2,1,2c)2,1,2,18.存有以下程序main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf(\}继续执行后的输入结果就是a)19.有以下程序main(){inta,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf(\}程序运行后的输出结果是()a)410.在16十一位编译系统上,若存有定义inta[]={10,20,30},*p=&a;,当继续执行p++;后,以下观点错误的就是()a)p向低地址安远了一个字节c)p向低地址安远了两个字节b)p向高地址移了一个存储单元d)p与a+1等价b)1c)0d)运行时出错,无定值b)2c)3d)4b)1,2,2,1d)2,1,1,211.存有以下程序段inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是()a)5b)6c)8d)912.若有以下定义,则对a数组元素的正确引用是_________.inta[5],*p=a;a)*&a[5]b)a+2c)*(p+5)d)*(a+2)13.若有以下定义,则p+5表示_______.inta[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设尚无定义:inta[10]={15,12,7,31,47,20,16,28,13,19},*p;以下语句中恰当的就是()a)for(p=a;ad)for(p=a;a15.存有以下程序段#includeintmain(){intx[]={10,20,30};int*px=x;printf(\printf(\px=x;printf(\printf(\px=x;printf(\printf(\px=x;printf(\printf(\return0;}程序运行后的输入结果就是()a)11,11,11,12,12,20,20,20b)20,10,11,10,11,10,11,10c)11,11,11,12,12,13,20,20d)20,10,11,20,11,12,20,2016.设有如下定义:intarr[]={6,7,8,9,10};int*ptr;ptr=arr;*(ptr+2)+=2;printf(\则程序段的输出结果为a)8,10b)6,8c)7,9d)6,1017.若有定义:inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______.*(a+5)的值是_________.18.若存有以下表明和语句,intc[4][5],(*p)[5];p=c;能够恰当提及c数组元素的就是______.a)p+1b)*(p+3)c)*(p+1)+3d)*(p[0]+2))19.若存有定义:inta[2][3],则对a数组的第i行j列元素地址的恰当提及为______.a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j20.若有以下定义:inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.*(*(a+1)+0)的值是________.21.存有以下定义chara[10],*b=a;不能给数组a输入字符串的语句是()a)gets(a)b)gets(a[0])c)gets(&a[0]);d)gets(b);22.下面程序段的运行结果是_________.char*s=\s+=2;printf(\a)cdeb)字符'c'c)字符'c'的地址d)并无确认的输入结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()a)chars[10]=\c)chars[10];s=\24.设已有定义:char*st=\下列程序段中正确的是()a)chara[11],*p;strcpy(p=a+1,&st[4]);b)chara[11];strcpy(++a,st);c)chara[11];strcpy(a,st);d)chara[],*p;strcpy(p=&a[1],st+2);25.存有以下程序main(){chara[]=\char*p1,*p2;inti;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf(\}输出结果是()a)gmb)rgc)ord)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);27.以下正确的程序段是_________.a)charstr[20];b)char*p;scanf(\scanf(\c)charstr[20];d)charstr[20],*p=str;scanf(\scanf(\28.若有说明语句chara[]=\char*p=\则以下不正确的叙述是________.a)a+1则表示的就是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运转结果就是_______.#include#include。
函数与指针选择题.docx

函数与指针练习1、以下叙述屮正确的是A)函数名允许用数字开头B)函数调用时,不必区分函数名称的大小写0调用函数时,函数名必须与被调用的函数名完全一致D)在函数体中只能出现一次return语句2、函数调用语句:fun( (expl, exp2), ( expl, exp2, cxp3)); 含有的实参个数是A) 2 B) 4 0 5 D) 13、有以下程序★include <stdio.h>main(){ int findmax(int, int, int), m;IIm=f indmax (a, b, c);int k=5; void f (int *s){ *s=k; }mainO{ int m=3, *p=&m;f(p);printf (z,%d, m, *p);}程序的运行结果是A)5,5 B) 3,3 C) 3,5 D) 5,37、以下关于C语言函数参数传递方式的叙述正确的是A)数据只能从实参单向传递给形参B)数据可以在实参和形参之间双向传递0 数据只能从形参单向传递给实参D) C语言的函数参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用8、有以下程序int findmax(int x,int y, int z){ … }则以下叙述正确的是A)在maini^i数中声明了findmax函数B)在mdin函数屮定义了 f indmax函数C)在main函数中两次调川了findmax函数D)在main函数内.外重复定义了findmax函数4、以下叙述中正确的是A)用户自己定义的函数只能调用库函数B)实用的C语言源程序总是由一个或多个函数组成0不同函数的形式参数不能使用相同名称的标识符[))在C语言的函数内部,可以定义局部嵌套函数5、以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到小排序。
#inelude <stdio.h>void f(int b[], int n, int flag){int i,j,t;for (i=0; i<n-l; i++)for (j=i+l; jvn; j++)if(flag?b[i]>b[j]:b[i]<b[j]){ t=b[i]; b[i]=b[j]; b[j]=t; }}main(){int a[10]={5A3,2,1,6,7,8,9,10}, i;f(&a[2], 5, 0);f(a, 5,1);for (j=0; i<10; i++)printf(”%d,“, a[i]);}程序运行后的输出结果是A)1,2,3,4,5,6,7,8,9,10,B)3,4,5,6,7,21,8,9,10,0 5,4,3,2,1,6,7,8,9,10,D) 10,9,8,7,6,5,4,3,2,1,6、有以下程序^include <stdio.h>#include <stdio. h>void fun( int x, int y, int *z ) { *z = y-x; }main()int a, b, c;fun (10, 5, &a ) ; fun (7, a, &b ); fun (a, b, &c );printf (,z%d, %d, %d\n z,, a, b, c );}程序运行后的输出结果是A)-5,-12, -7 B) 5,2,30 -5,-12,-17 D) 5, -2, -79、有以下程序:#include <stdio.h> void fun( int a, int b){ int t;t=a; a=b; b=t;)main(){ int c[10] = { 1234567,890}, i;for (i=0; i<10;for(i=0; i<10;)程序的运行结果是(A) 1,2,3,4,5,6,7,8,9,0,0 0,9,&7,6,5,4,3,2,l,10、有以下程序#include <stdio.h> void fun( int *a,int *b){int *c; c=a;a=b;b=c;}main(){int x=3, y=5, *p=&x, *q=&y; fun(p,q);printf, %d,%d,”,*p,*q); fun(&x,&y);printf("%d/%d\n,,/p,*q);}程序运行后的输岀结果是i+=2) fun(c[i], c[i+l]); i++)printf(H%d, ”,c[i]);)。
C综合练习- 3 附参考答案-推荐下载

D、++a
5.表达式“c=*p++”的执行过程是( )。
A、复制*p 的值给 c 后再执行 p++
B、复制*p 的值给 c 后再执行*p++
C、复制 p 的值给 c 后再执行 p++
D、执行 p++后将*p 的值复制给 c
6.函数 strcmp("Int","int"))的返回值为 。
A、 0
B、 -32
共7 页
B、6
06 级校试点班
。
C、(3, 6)
C、10
B、char str[10]= "string";
D、char str[10]; str="string";
C、8
C、ijkl
C、(1, 3)
C、3
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
指针练习题及答案

指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。
```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。
```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。
```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。
C语言指针习题及答案

C语言指针习题及答案指针习题及答案一?选择题1.变量的指针,其含义是指该变量的 BA )值B )地址C )名D )一个标志 2.已有定义int k=2;int *ptr1,*ptr2; 且ptr1和ptr2 均已指向变量k ,下面不能正确执行的赋值语句是 B。
A ) k=*ptr1+*ptr2B ) ptr2=kC ) ptr1=ptr2D ) 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 _____ 。
A) c=*p1+*p2B ) p2=cC ) p 仁p2D ) c=*p1*(*p2) 12.设有程序段:char s[ ]= "china ";char *p ; p=s ;则下面叙述正确的是 DA) s 和p 完全相同void prin t_value(i nt *x) { printf( %d\n ",++*x); }A ) 23B ) 245. 若有说明:int *p1, *p2,m=5,n; A ) p 仁&m p2=&p1 ;C ) p 仁&m p2=p1 ;6. 若有语句:A ) a,p,*&a 7. 下面判断正确的是 C)25 D ) 26 以下均是正确赋值语句的选项是CB ) p 仁&m p2=&n *p1 =* p2 ;D) p 仁&m *p 仁*p2 ; int *p,a=4; 和p=&a ;下面均代表地址的一组选项是B ) &*a,&a,*pC ) *&p,*p,&aC D ) &a,&*p,pA )B )C )D )char *a= "ch in a "; 等价于char *a; *a= "ch in a "; char str[10]={ “hina"};等价于char str[10]; str[ ]={ “hina";} char *s= "ch in a "; 等价于 char *s; s= "ch in a "; char c[4]= "abc ",d[4]= "abc ";等价于 8. 下面程序段中,for 循环的执行次数是char *s= "\ta\018bc "; for ( ; *s!= '\0'; s++)printf( *");A ) 9B ) 79. 下面能正确进行字符串赋值操作的是 A ) char s[5]={ ABCDE ”}; C ) char *s ; s= "ABCDE "; 10. 下面程序段的运行结果是char *s= "abcde"; s+=2 ; printf( %d",s); A ) cdeB )字符}'11. 设pl 和p2是指向同一个字符串的指针变量,值语句是—Bchar c[4]=d[4]= "abc ” ;CC ) 6 CB ) D )C )char s[5]={ A ', 'B ','C','D','E'}; char *s; scanf( %s",s);字符’c'的地址 D )不确定c 为字符变量,则以下不能正确执行的赋B) 数组s中的内容和指针变量p中的内容相等C) s数组长度和p所指向的字符串长度相等D) *p与s[0]相等13. 以下与库函数strcpy(char *p1,char *p2) 功能不相等的程序段是 D __________A) strcpy1(char *p1,char *p2){ while ((*p1++=*p2++)!= ''); }B) strcpy2(char *p1,char *p2){ while ((*p1=*p2)!= '){ p1++; p2++ } }C) strcpy3(char *p1,char *p2){ while (*p1++=*p2++); }D) strcpy4(char *p1,char *p2){ while (*p2) *p1++=*p2++ ; }14. 下面程序段的运行结果是__C ___________ 。
函数与指针选择题

函数与指针练习1、以下叙述中正确的是A) 函数名允许用数字开头B) 函数调用时,不必区分函数名称的大小写C) 调用函数时,函数名必须与被调用的函数名完全一致D) 在函数体中只能出现一次return语句2、函数调用语句:fun( ( exp1, exp2 ), ( exp1, exp2, exp3) ); 含有的实参个数是A) 2 B) 4 C) 5 D) 13、有以下程序#include <stdio.h>main(){ int findmax(int,int,int),m;┋m=findmax(a,b,c);┋}int findmax(int x,int y,int z){ … }则以下叙述正确的是A) 在main函数中声明了findmax函数B) 在main函数中定义了findmax函数C) 在main函数中两次调用了findmax函数D) 在main函数内、外重复定义了findmax函数4、以下叙述中正确的是A) 用户自己定义的函数只能调用库函数B) 实用的C语言源程序总是由一个或多个函数组成C) 不同函数的形式参数不能使用相同名称的标识符D) 在C语言的函数内部,可以定义局部嵌套函数5、以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到小排序。
#include <stdio.h>void f(int b[], int n, int flag){int i,j,t;for (i=0; i<n-1; i++)for (j=i+1; j<n; j++)if (flag ? b[i]>b[j] : b[i]<b[j]){ t=b[i]; b[i]=b[j]; b[j]=t; }}main(){int a[10]={5,4,3,2,1,6,7,8,9,10}, i;f(&a[2], 5, 0);f(a, 5, 1);for (i=0; i<10; i++)printf("%d,", a[i]);}程序运行后的输出结果是A) 1,2,3,4,5,6,7,8,9,10,B) 3,4,5,6,7,2,1,8,9,10,C) 5,4,3,2,1,6,7,8,9,10,D) 10,9,8,7,6,5,4,3,2,1,6、有以下程序#include <stdio.h> int k=5;void f(int *s){ *s=k; }main(){ int m=3,*p=&m;f(p);printf("%d,%d", m, *p);}程序的运行结果是A) 5,5 B) 3,3 C) 3,5 D) 5,37、以下关于C语言函数参数传递方式的叙述正确的是A) 数据只能从实参单向传递给形参B) 数据可以在实参和形参之间双向传递C) 数据只能从形参单向传递给实参D) C语言的函数参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用8、有以下程序#include <stdio.h>void fun( int x, int y, int *z ){ *z = y-x; }main(){int a, b, c;fun(10,5,&a ); fun(7,a,&b ); fun(a,b,&c );printf("%d,%d,%d\n", a,b,c );}程序运行后的输出结果是A) -5,-12,-7 B) 5,2,3C) -5,-12,-17 D) 5,-2,-79、有以下程序:#include <stdio.h>void fun( int a,int b ){int t;t=a;a=b;b=t;}main(){int c[10]={1,2,3,4,5,6,7,8,9,0},i;for (i=0;i<10;i+=2) fun(c[i],c[i+1]);for (i=0;i<10;i++) printf("%d,",c[i]);printf("\n");}程序的运行结果是()。
c语言指针习题及答案

c语言指针习题及答案C语言指针习题及答案C语言作为一门广泛应用于软件开发和系统编程的编程语言,指针是其重要的特性之一。
掌握指针的使用对于理解和编写高效的C程序至关重要。
本文将介绍一些常见的C语言指针习题,并提供相应的答案,帮助读者更好地理解和掌握指针的概念和用法。
1. 习题一:交换两个变量的值请编写一个函数,接受两个整型指针作为参数,实现交换两个变量的值。
例如,如果输入a=10,b=20,函数执行后,a=20,b=10。
答案:```cvoid swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}```2. 习题二:查找数组中的最大值和最小值请编写一个函数,接受一个整型数组和数组长度作为参数,返回数组中的最大值和最小值。
例如,对于数组[5, 2, 9, 1, 7],函数应该返回最大值9和最小值1。
答案:```cvoid findMinMax(int *arr, int length, int *max, int *min) {*max = *min = arr[0];for (int i = 1; i < length; i++) {if (arr[i] > *max) {*max = arr[i];}if (arr[i] < *min) {*min = arr[i];}}}```3. 习题三:计算字符串长度请编写一个函数,接受一个字符串作为参数,返回字符串的长度。
例如,对于字符串"Hello, World!",函数应该返回12。
答案:```cint stringLength(char *str) {int length = 0;while (*str != '\0') {length++;str++;}return length;}```4. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。
指针经典练习题(含答案版)一

指针一.填空题(20分)1. 指针变量是把内存中另一个数据的地址作为其值的变量。
2. 能够直接赋值给指针变量的整数是 0。
3. 如果程序中已有定义:int k;1)定义一个指向变量k的指针变量p的语句是 int* p = &k; 。
2)通过指针变量,将数值6赋值给k的语句是 *p = 6; 。
3)定义一个可以指向指针变量p的变量pp的语句是 int ** pp; 。
4)通过赋值语句将pp指向指针变量p的语句是 pp = &p; 。
5)通过指向指针的变量pp,将k的值增加一倍的语句是 *(*pp)*= 2; 。
4. 当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是int型指针、 int型数组等。
4. 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。
例如,输入的字符串为:556,则输出十进制整数366。
请填空。
45*8#include <stdio.h>main( ){ char *p,s[6]; int n; p=s; gets(p); n=*p-'0';while( *++p != '\0') //先++ ,后*n=n*8+*p-'0';printf("%d \n",n);}二.选择题(22分)1. 以下count函数的功能是统计substr在母串str中出现的次数。
int count(char *str,char *substr){ int i,j,k,num=0;for(i=0; ①B ;i++){for( ②B ,k=0;substr[k]==str[j];k++,j++)if(substr[ ③C ]==’\0’){num++;break;}}return num;}①A) str[i]==substr[i] B) str[i]!=‘\0’C) str[i]==‘\0’ D) str[i]>substr[i]②A) j=i+1 B) j=i C) j=i+10 D) j=1③A) k B) k++ C) k+1 D) ++k2. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。
函数及指针练习题

函数练习题【1.54】对函数形参的说明有错误的是____。
A) int a(float x[],int n) B) int a(float *x,int n)C) int a(float x[10],int n) D) int a(float x,int n)【1.55】如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为____。
A)静态变量B) 动态变量C) 外部变量D) 内部变量【1.56】在一个C源程序文件中,•若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是。
A) extern B) register C) auto D) static【1.57】在C语言中,函数的数据类型是指____。
A)函数返回值的数据类型B) 函数形参的数据类型C) 调用该函数时的实参的数据类型D) 任意指定的数据类型【1.58】已知如下定义的函数:fun1(a){ printf("\n%d",a);}则该函数的数据类型是____。
A)与参数a的类型相同B) void型C) 没有返回值D) 无法确定【1.59】定义一个函数实现交换x和y的值,并将结果正确返回。
能够实现此功能的是____。
A) swapa(int x,int y) B) swapb(int *x,int *y){ int temp;{ int temp;temp=x;x=y;y=temp;temp=x;x=y;y=temp;} }C) swapc(int *x,int *y) D) swapd(int *x,int *y){ int temp;{ int *temp;temp=*x;*x=*y;*y=temp;temp=x;x=y;y=temp;} }【1.60】求一个角的正弦函数值的平方。
能够实现此功能的函数是____。
A) sqofsina(x)float x;{ return(sin(x)*sin(x));}B) double sqofsinb(x)float x;{ return(sin((double)x)*sin((double)x));}C) double sqofsinc(x){ return(((sin(x)*sin(x));}D) sqofsind(x)float x;{ return(double(sin(x)*sin(x)));【1.61】一个函数内有数据类型说明语句如下:double x,y,z(10);关于此语句的解释,下面说法正确的是____。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)7
2、有以下程序
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)16
3、有以下程序
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 13
5 6 7 8 2 6 10 14
当 A=9 10 11 12 则 A’= 3 7 11 15
13 14 15 16 4 8 12 16
请填空
const int N =4
void 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;
}
执行后输出结果是______________。
58
11、以下函数的功能是删除字符串s中的所有数字字符。
请填空。
viod dele(char *s)
{
int n=0,i;
for(i=0;s[i];i++)
if(___________________________)
s[n++]=s[i];
s[n]=________________;
}
答案为!(s[i]>='0'&&s[i]<='9')和'\0'
12、若有初始化“int a=5,p=&a;”,则下面能代表地址值的一组是(B )
A.*a,&p,p B.&a,&*p,p C.*&a,&*p,p D.a,&a,p
13、有以下程序:
void main( )
{
int a=3,b=2,*p=&a,*q=&b;
b=*p/(*q);
a=p==q;
cout<<a<<’,’<<b<<endl;
}
程序运行后的输出结果是( B )
A.1,1 B.0,1 C.1,1.5 D.0,1.5
14、假设a是数组名,以下选项中正确的是(B )
A.a++ B.a+2 C.--a D.a=100
15、若有初始化“int a[ ]={1,2,3,4,5},*p=a;”则能代表a数组元素的选项是(B )
A.*(p+5)B.*(p+3)C.p+3 D.*(--p)、
16、执行以下程序段后,a[3]中的值是12
int a[5]={1,2,3,4,5},*p;
a[3]=(p=&a[1],*p+=10);\。