函数及指针练习题
指针 习题九及参考答案

#include "string.h" main() {char s1[80],s2[30]; int n; gets(s1); gets(s2); printf("Input n(n<strlen(s1):\n"); do scanf("%d",&n); while(n>=strlen(s1)); insert(s1,s2,n); puts(s1); } insert(char *p1,char *p2,int k) {char tem[80]; strcpy(tem,p1+k); /*保存第k个字符开始的字符*/ *(p1+k)='\0'; /*使第k个字符之前的字符为一个独立字符串*/ strcat(p1,p2); /*将p2复制到p1之后*/ strcat(p1,tem);/*再将保存再tem中的字符串连接到p1末尾*/ } 3、用指针编写比较两个字符串s和t的函数strcmp(s,t)。要求s<t时返 回-1,s=t时返回0,s>t时,返回1。 解1: /* P279_3.C */ int strcmp(char *s1,char *t1) { while(*s1!='\0'&&*t1!='\0') {if(*s1>*t1)return 1; if(*s1<*t1)return -1; if(*s1++==*t1++)continue; } if(*s1>*t1)return 1; if(*s1==*t1)return 0; if(*s1<*t1) return -1; } main()
max=min=*p; for(q=________;________;q++) (q=p q<p+n) if(________)max=*q; (*q>max) else if (________)min=*q; (*q<min) } main() {int i,num[10]; printf("input 10 numbers:\n") for(i=0;i<10;i++) scanf("%d",&num[i]); find_max_min(num,10); printf("max=%d;min=%d\n",max,min); } 三、编程题 1、编写一函数,其功能是交换两个变量x、y的值。编程序实现对数组 a[100],b[100]调用此函数,交换a、b中具有相同下标的数组元素的 值,且输出交换后的a、b数组。 /*p279_1.c*/ #include "stdlib.h" void swap(int *pa,int *pb) {int t; t=*pa;*pa=*pb;*pb=t; } main() {int a[100],b[100],i; for(i=0;i<100;i++) /*产生数组a和b */ {a[i]=random(100); b[i]=random(100); } printf("before swap A:\n"); /*输出交换前数组a */ for(i=0;i<100;i++) printf("%3d",a[i]); printf("\n"); printf("before swap B:\n"); /*输出交换前数组b */ for(i=0;i<100;i++)
函数和指针题目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;}执行后输出结果是______________。
指针练习题

编程题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.inta(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相同的是()。
指针数组函数练习(含参考答案).

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、若有定义:intx,*pb;则以下正确的赋值表达式是()。
A)pb=&x B)pb=x C)*pb=&x D)*pb=*x2、已知指针p的指向如图所示,则执行语句*p++;后,*p的值是()。
A)20 B)30 C)21 D)313、已知指针p的指向如图所示,则表达示*++p的值是()。
A)20 B)30 C)21 D)314、已知指针p的指向如图所示,则表达示++*p的值是()。
A)20 B)30 C)21 D)315、以下程序的输出结果是()。
A)23 B)24 C)25 D)26void prtv(int *x){ printf(“%d\n”,++*x);}main(){ int a=25;prtv(&a);}6、以下程序的输出结果是()。
a)17 b)18 c)19 d)20main(){ int a[]={2,4,6,8,10},y=1,x,*p;p=&a[1];for(x = 0;x < 3;x++)y+=*(p+x);printf(“%d\n”,y);}7、以下程序的输出结果是( )。
A)6 B)8 C)4 D)2main(){ int a[]={2,4,6,8},*p=a,i;for(i = 0;i < 4;i++)a[i]=*p++;printf(“%d\n”,a[2]);}8、以下程序的输出结果是()。
A)4 4 B)2 2 C)2 4 D)4 6main(){ int a[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf(“%d”,*(p++));printf(“%d\n”,**k);}9、若已定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是()。
A)a[p-a] B)*(&a[I])C)p[i] D)&a[++i]10、以下程序的输出结果是()。
函数指针习题

函数、指针练习题一、选择题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、计算字符串中子串出现的次数。
要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。
2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。
例如,China转换成密文为G l m r e。
要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。
3、字符替换。
要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。
4、编写一个程序,输入星期,输出该星期的英文名。
用指针数组处理。
5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。
要求:利用字符串指针和指针数组实现。
6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。
7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。
/*1、计算字符串中子串出现的次数。
要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。
*/#include<stdio.h>int subString(char *a, char *b){int i = 0;int j = 0;int m = 0;char *p = b;while(*a){while(*a){if(*a == *b){break;}a++;}while(*b){if(*a != *b){return m;}else{m = m;}b++;a++;}// a++;b = p;++m;}return m;}int main(){char a[100];char b[100];printf("请输入字符串a:");gets(a);printf("请输入字符串b:");gets(b);printf("%d", subString(a, b));return 0;}/*2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
函数指针练习题

函数指针练习题函数指针是一种特殊的指针类型,它指向可以被调用的函数。
函数指针可以用于实现代码的动态调用、跳转以及回调函数等功能。
本文将通过几个练习题,帮助读者更好地理解函数指针的用法和实际应用。
练习一:使用函数指针实现两个整数的加法```c#include <stdio.h>int add(int a, int b) {return a + b;}int main() {int (*func)(int, int);int a = 10, b = 20;func = add;int result = func(a, b);printf("%d + %d = %d\n", a, b, result);return 0;}```在这个例子中,我们定义了一个函数指针`func`,它指向了一个名为`add`的函数。
通过将函数指针赋值为`add`,我们可以使用函数指针调用`add`函数进行加法运算。
练习二:使用函数指针作为回调函数```c#include <stdio.h>typedef int (*CallbackFunc)(int);int square(int x) {return x * x;}void applyCallback(CallbackFunc callback, int x) {int result = callback(x);printf("Result: %d\n", result);}int main() {CallbackFunc func = square;int num = 5;applyCallback(func, num);return 0;}```在这个例子中,我们定义了一个函数指针类型`CallbackFunc`,它指向一个接受一个整数参数并返回一个整数结果的函数。
我们实现了一个`square`函数,它返回传入参数的平方。
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 指针练习题

c 指针练习题C 指针练习题1. 介绍在C语言中,指针是一种非常重要的概念。
通过指针,我们可以直接访问和操作内存中的数据。
本文将为您提供一些C指针练习题,以帮助您更好地理解和掌握指针的用法。
2. 指针基础题2.1 编写一个程序,声明一个整型变量x,并定义一个指向该变量的指针p。
通过指针p修改变量x的值,并输出修改后的结果。
2.2 编写一个程序,声明一个整型数组a,并定义一个指向数组元素的指针p。
通过指针p遍历数组,并输出每个元素的值。
2.3 编写一个程序,声明一个字符型数组str,并定义一个指向字符串的指针p。
通过指针p遍历字符串,并输出每个字符。
3. 指针与函数题3.1 编写一个函数swap,交换两个整型变量的值。
在主函数中调用该函数,并输出交换后的结果。
3.2 编写一个函数reverse,接受一个字符型字符串作为参数,并将其逆序存储。
在主函数中调用该函数,并输出逆序后的字符串。
4. 动态内存分配题4.1 编写一个程序,使用malloc函数动态分配一个包含10个整型元素的数组,并通过指针遍历数组,并输出每个元素的值。
4.2 编写一个程序,使用calloc函数动态分配一个包含5个双精度浮点数的数组,并通过指针遍历数组,并输出每个元素的值。
4.3 编写一个程序,使用realloc函数动态分配一个包含5个整型元素的数组,并增加3个元素。
然后通过指针遍历数组,并输出每个元素的值。
5. 多级指针题5.1 编写一个程序,声明一个字符型变量c,并定义一个指向该变量的一级指针p1和一个指向p1的二级指针p2。
通过p2修改变量c的值,并输出修改后的结果。
6. 总结通过以上指针练习题,我们可以加深对C指针的理解和应用。
掌握指针的用法对于C语言编程非常重要,它能够提高程序的效率和灵活性。
希望本文能够帮助您更好地理解和运用C指针的知识。
祝您在C语言的学习中取得更好的成果!。
C语言指针练习题

C语言指针练习题指针练习题1 填空题【1】下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add( int x, int y, ){ =x+y;}【2】若有定义: char ch;(1) 使指针p 可以指向变量ch的定义语句是。
(2) 使指针p指向变量ch的赋值语句是。
(3) 通过指针p给变量ch读入字符的scanf函数调用语句是。
(4) 通过指针p 给变量ch赋字符A的语句是。
(5) 通过指针p输出ch中字符的语句是。
(6) 在16位微机上,指针变量p在内存中所占字节数是,变量ch 在内在所占字节数是。
2 选择题【3】若有说明:int i,j=7,*p=&i则与i=j;等价的语句是()。
A.i=*p;B.*p=*&jC.i=&jD.i=**p;【4】若有定义:int x,*pb;则正确的赋值表达式是()。
A.pb=&xB.pb=xC. *pb=&xD.*pb=*x【5】对于类型相同的指针变量,不能进行的运算是()。
A.< B. = C. + D. –【6】以下程序的输出结果是()。
A.23 B. 24 C. 25 D. 26Void fun ( int *x){ printf(%d\n”,++*x); }main( ){ int a=25;fun (&a);}【7】以下程序的输出结果是()。
A.6 B. 7 C. 8 D. 9main(){int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf("%d\n",n);}【8】以下程序的输出结果是()。
A.100 B. 50 C. 101 D.200main(){int *v,b;v=&bb=100;*v+=b;printf("%d\n",b);}【9】以下程序的输出结果是()。
指针练习题及答案

指针练习题及答案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. 编写一个函数,将字符串反转,并通过指针返回结果。
小学数学_指针_试卷

一、选择题(每题2分,共20分)1. 以下哪个不是指针的表示方法?A. “→”B. “<—>”C. “→→”D. “→↓”2. 在指针表示法中,箭头指向的是?A. 指针所代表的数量B. 指针所代表的单位C. 指针本身D. 指针所代表的运算3. 下列哪个是正确的指针表示法?A. 5→B. 3<—>C. 8→→D. 6→↓4. 如果指针表示的数值是10,那么它的单位是?A. 个B. 十C. 百D. 千5. 下列哪个不是指针的运算?A. 加法B. 减法C. 乘法D. 除法6. 如果指针表示的数值是15,那么它的相邻数值是多少?A. 14B. 16C. 13D. 177. 在指针表示法中,如果两个指针相邻,它们的数值相差?A. 1B. 2C. 3D. 48. 以下哪个不是指针表示法的特点?A. 数值递增B. 数值递减C. 单位固定D. 数值不固定9. 如果指针表示的数值是20,那么它的倒数指针表示的数值是多少?A. 20B. 2C. 0.2D. 1010. 下列哪个不是指针表示法的应用?A. 计算器显示B. 电子地图导航C. 电话号码簿D. 电脑键盘布局二、填空题(每题2分,共20分)11. 指针表示法是一种______的表示方法。
12. 在指针表示法中,箭头指向的是______。
13. 指针的相邻数值相差______。
14. 指针的倒数表示法中,数值是原数值的______。
15. 指针表示法的特点包括______、______、______。
三、判断题(每题2分,共10分)16. 指针表示法中的箭头可以双向表示。
()17. 指针的数值可以是小数。
()18. 指针表示法中的单位可以随时改变。
()19. 指针表示法只能用于数学计算。
()20. 指针表示法在日常生活中有广泛的应用。
()四、简答题(每题5分,共20分)21. 简述指针表示法的基本概念。
22. 解释指针表示法中的“相邻”和“倒数”概念。
函数与指针选择题

函数与指针练习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. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。
函数及指针练习题

函数练习题【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);关于此语句的解释,下面说法正确的是____。
指针 练习题

指针练习题指针是C语言中非常重要的概念之一。
掌握指针的使用和理解对于C语言程序的编写至关重要。
本文将介绍一些指针的练习题,帮助读者巩固对指针的理解和应用。
练习题一:交换变量的值请编写一个函数,使用指针作为参数,交换两个整型变量的值。
函数原型为:void swap(int* p1, int* p2);在主函数中调用该函数进行测试,并输出交换后的结果。
练习题二:查找数组中的最大值和最小值请编写一个函数,使用指针作为参数,实现在一个整型数组中查找最大值和最小值的功能。
函数原型为:void findMinMax(int* arr, int size, int* max, int* min);其中,arr表示整型数组的首地址,size表示数组的大小,max和min分别表示最大值和最小值的指针。
在主函数中调用该函数进行测试,并输出最大值和最小值。
练习题三:统计字符出现次数请编写一个函数,使用指针作为参数,统计一个字符串中某个字符的出现次数。
函数原型为:int countChar(char* str, char ch);其中,str表示字符串的首地址,ch表示要统计的字符。
在主函数中调用该函数进行测试,并输出字符出现的次数。
练习题四:字符串反转请编写一个函数,使用指针作为参数,将一个字符串进行反转。
函数原型为:void reverseString(char* str);其中,str表示字符串的首地址。
在主函数中调用该函数进行测试,并输出反转后的字符串。
练习题五:动态分配内存并初始化请编写一个函数,使用指针作为参数,动态分配一块内存,并将其中的每个元素初始化为给定的初始值。
函数原型为:int* initArray(int size, int initialValue);其中,size表示要分配的内存块的大小,initialValue表示初始化的值。
在主函数中调用该函数进行测试,并输出分配的内存块中的元素。
通过以上的练习题,读者可以进一步巩固和提升对指针的理解和应用。
C语言指针习题及答案

C语言指针习题及答案1.变量的指针,其含义是指该变量的地址。
2.已有定义int k=2.int *ptr1.*ptr2.且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是ptr2=k。
3.若有说明:int *p。
m=5.n。
以下程序段正确的是p=*p=m。
4.已有变量定义和函数调用语句:int a=25.print_value(&a)。
下面函数的输出结果是26.void print_value(int *x){ printf("%d\n"。
++*x)。
}5.若有说明:int *p1.*p2.m=5.n。
以下均是正确赋值语句的选项是p1= p2=p1.6.若有语句:int *p。
a=4.和p=&a;下面均代表地址的一组选项是&*p。
&a。
p。
7.下面判断正确的是char *s="china"。
等价于char *s。
s="china";8.下面程序段中,for循环的执行次数是6.char*s="\ta\018bc"。
for (。
*s!='\0'。
s++) printf("*");9.下面能正确进行字符串赋值操作的是charstr[10]="china"。
1.strcmp1(char *s,char *t)改写为:int strcmp1(char *s。
char *t) { while (*s == *t) {if (*s == '\0') {return 0;s++;t++;return (*s - *t);2.strcmp2(char *s,char *t)改写为:int strcmp2(char *s。
char *t) {while (*s++ = *t++) {if (!*s) {return 0;return (*s - *t);3.strcmp3(char *s,char *t)改写为:int strcmp3(char *s。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数练习题
【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);
关于此语句的解释,下面说法正确的是____。
A) z是一个数组,它有10个元素。
B) z是一个函数,小括号内的10是它的实参的值。
C) z是一个变量,小括号内的10是它的初值。
D)语句中有错误。
【1.62】已知函数定义如下:
float fun1(int x,int y)
{ float z;
z=(float)x/y;
return(z);
}
主调函数中有int a=1,b=0;可以正确调用此函数的语句是____。
A) printf("%f",fun1(a,b));B) printf("%f",fun1(&a,&b));
C) printf("%f",fun1(*a,*b));D)调用时发生错误
【1.63】下面函数的功能是____。
a(s1,s2)
char s1[],s2[];
{ while(s2++=s1++) ;
}
A)字符串比较B) 字符串复制C) 字符串连接D) 字符串反向
【1.64】在下列结论中,只有一个是错误的,它是。
A) C语言允许函数的递归调用
B) C语言中的continue语句,可以通过改变程序的结构而省略
C) 有些递归程序是不能用非递归算法实现的
D) C语言中不允许在函数中再定义函数
指针练习题
1.若有以下定义,则对a数组元素的正确引用是_________.
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列元素地址的正确引用为______.
a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j
3.若有以下定义,则p+5表示_______.
int a[10],*p=a;
a)元素a[5]的地址b)元素a[5]的值
c)元素a[6]的地址d)元素a[6]的值
4.下面程序段的运行结果是_________.
char *s="abcde";
s+=2;printf("%d",s);
a)cde b)字符'c' c)字符'c'的地址d)无确定的输出结果
5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确
执行的赋值语句是________.
a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);
6.以下正确的程序段是_________.
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]);
7.若有说明语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是________.
a)a+1表示的是字符t的地址
b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变
d)a中只能存放10个字符
8.下面程序的运行结果是_______.
#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)不确定的值
9.下面程序的运行结果是_______.
#include <stdio.h>
#include <string.h>
fun(char *w,int n)
{char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}
}
main()
{char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
}
a)7654321 b)1714171 c)1711717 d)7177171
10.变量的指针,其含义是指该变量的_________.
a)值b)地址
c)名d)一个标志
11.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.
a)a,point,*&a b)&*a,&a,*point
c)*&point,*point,&a d)&a,&*point ,point
12.若有说明;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;。