数组和函数练习题

更新时间:2024-04-16 03:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验1 指针

1.1 实验目的

1. 2. 3. 4.

学习指针的使用

理解指针与数组的关系

了解指针数组与数组指针的区别 学习使用动态内存分配及释放

1.2 实验内容

1. 比较下面两个程序有何不同,并运行输出

//程序1

#include int main(){ int a=2,b=3,*p,*q,t; p=&a;q=&b;

printf(\ t=*p;*p=*q;*q=t; printf(\ }

输出:______________________ //程序2

#include int main(){ int a=2,b=3,*p,*q,*t; p=&a;q=&b;

printf(\ t=p;p=q;q=t; printf(\ }

输出:______________________ 2. 上机调试下面程序,写出程序的输出

#include int main(){ int a[10],b[10],*p,i,s=0; for(i=0;i<10;i++)a[i]=i; p=a; for(i=0;i<10;i++){ b[i]=*(a+i)+p[9-i]; s+=b[i]; } printf(\}

3.

4.

5.

6.

输出:_________________________________

下面程序完成输入两个整数,输出较大的一个,请填空完成此程序,然后上机调试通过

#include #include int main(){ int *a,*b,c; a=(int*)malloc(sizeof(int)); b=_____________________; scanf(\ c=*a>*b ? *a : *b; printf(\ free(a); ______ }

下面程序中读入的字符串在80个字符内,指出下面程序的错误,说明错误原因。上机运行,观察现象,并写出正确的程序 #include \int main(){ char *p; scanf(\ printf(\}

指出下列程序的错误之处 #include int main(){

int a[3]={1,2,3}; printf(\ ++a;

printf(\}

错误原因:_________________________ 写出程序运行结果

#include int main(){

double a[5],*p1,*p2; int b[5],*q1,*q2; char c[5],*r1,*r2; p1=a; p2=&a[4]; q1=b; q2=&b[4]; r1=c; r2=&c[4];

printf(\}

输出:______________________________

7. 写出下面程序的输出结果,然后再上机验证

#include int main(){

char a[5][5],b='A'; int i,j,p=0; for(i=0;i<5;i++)

for(j=0;j<5;j++)a[i][j]=b++; while(p<5)printf(\}

输出:_________________________________ 8. 写出下面程序的输出结果,然后再上机验证

#include int main(){

int a[5][5]={0}, i,j, (*p)[5]=a;

for(i=0,j=0;i<5;i++,j=(j+2)%5) *(*(p+i)+j)=1; for(i=0;i<5;i++){

for(j=0;j<5;j++) printf(\ printf(\ } }

输出:_________________________________ 9. 指出下面程序中的错误,说明原因:

//程序1

#include int main(){ int a[5][5]={1,2,3,4,5},*p[5],i; p=a;

for(i=0;i<25;++i) printf(\}

错误原因:____________________________ //程序2

#include int main(){ char *p[2], *q; int i; p[0]=\ q=p; for(i=0;i<2;++i)printf(\}

错误原因:____________________________ 10. 写出程序运行结果

#include int main(){ int a[5][5],*p,i,j;

for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=i*10+j; p=&a[0][0]; printf(\}

输出:________________________________ 11. 填空完成下列程序使得输出结果为:

January、February、March、April、June、July、August、September、October、November、December

#include \int main(){ char *month[12]={\ \ \ for(int i=0;i<12;++i)puts(___________); }

12. 理解下面程序,并比较两个指针有何不同(本题选做)

#include int main(){ int a[5][5],*p[5],(*q)[5],s,i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=i*10+j; for(i=0;i<5;i++) p[i]=a[5-i-1]; q=a; s=**(p+1)+**(q+1); printf(\}

输出: ___________________________

1.3 注意事项

1. 在指针没有指向合法分配单元前,对指针所指单元操作是很危险的,严重的甚至能导

致系统崩溃。

2. 动态分配的内存块,生命周期是用户控制的,不用的时候,要主动释放,在释放前,

不能改变指向指针。

实验2 函数(一)

2.1 实验目的

1. 学习函数的定义和使用

2. 学习参数的不同传递方式及对实参的影响

2.2 实验预习

1. 预先了解函数的定义结构及返回函数值语句

2. 了解把被调用的函数定义放置在调用者之后要作的预声明 3. 预先完成实验内容部分填空及程序编写

2.3 实验内容

1. 写出下面程序的输出结果,并运行验证

#include int inc(int c,int *d){ c++; (*d)++; }

int main(){ int a=1,b=1; inc(a,&b); printf(\}

输出:_________________________ 2. 写出下面程序输出并运行验证

#include int f2(); int f3(); int f1(){ printf(\ f2(); printf(\}

int f2(){ printf(\ f3(); printf(\}

int f3(){ printf(\}

int main(){

f1(); f2(); printf(\}

输出:____________________________

3. 下面程序的功能是调用max()函数,求两个数中较大者,请填空

#include int max(int x,int y){ int z; if(x>y) z=x; else z=y; return z; }

int main(){

int a=8,b=12,c;

c=__________________; printf(\}

4. 下面程序的函数找出数组中的最大值,最小值,并用参数返回,请填空完成程序,并

运行验证

#include

int find(int b[],int len,int _______,int *minp){ int i; *maxp=*minp=b[0]; for(i=1;i*maxp)*maxp=b[i]; if(b[i]<*minp)*minp=b[i]; } }

int main(){ int a[10]={23,45,6,7,87,78,34,56,33,22},max,min; find(a,10,&max,________); printf(\}

5. 以下程序完成数组排序功能,请填空。

#include int swap(int *p,int *q){ int t; t=*p; *p=*q; *q=t; }

int main(){ int a[10]={23,56,2,54,6,7,34,46,27,8},i,j;

for(i=0;i<9;i++) for(j=i+1;j<10;j++) if(a[i]>a[j])swap(______,______); for(i=0;i<10;i++)printf(\}

6. 下面程序自己定义double pow(double m , int n),用来计算mn;并进一步使用此函数计

算 1112+2224+3336+4448+55510 #include __________________ int main(){ int i,k=2; double s=0; for(i=111;i<=555; i+=111 ){ s+=pow(i,k); k+=2; } printf(\}

double pow(double m,int n){ int i;

double s=1; for(i=0;i

7. 下面程序使用自己定义的int strlen(char *p)函数返回字符串长度,在主函数中输入字符

串输出字符串长度

#__________________ int strlen(char *p){ int i=0; while(p[i]!='\\0')i++; __________________; }

int main(){ char a[80]; gets(a); printf(\}

8. 编写一个函数,返回数组元素中最大值的地址,并在主函数中输出该元素

#include

int * maxp(int a[],int len){ //此处写函数代码

}

int main(){ int a[10]={23,43,45,232,45,456,33,22,55,77},*p; p=maxp(a,10); printf(“%d\\n”,*p); }

9. 已知三角形的三边,求三角形面积,将其编写成一个函数,在主函数中调用验证。

#include

int main(){ float a,b,c; printf(\输入三条边长度\\n\ scanf(\ printf(\}

10. 设计一个函数判断一个三位整数是否为水仙花数,如是则函数返回1,否则返回0,

并利用此函数找出所有水仙花数。

11. 编写一个子函数完成把传递来的字符串颠倒次序的功能,并在主函数中输入字符串,

调用函数后,输出颠倒后的字符串,运行验证

实验3 函数(二)

3.1 实验目的

1. 2. 3. 4.

理解变量的作用范围

理解动态变量和静态变量的区别 理解递归的概念及使用 理解函数指针

3.2 实验预习

1. 2. 3. 4.

了解变量定义的位置与作用范围的关系 了解动态变量和静态变量的区别 理解递归的执行过程及参数变化 预先完成下面填空及程序编写

3.3 实验内容

1. 写出下面程序的输出,并运行验证

#include int a=1,b=2; int ff(){ int a=3; return (++a)+(++b); }

int main(){ int b=6; printf(\}

输出:_____________________________ 2. 写出下列程序的运行结果。

#include int n=0;

int * fun (int x){ n-=x;

return &n; }

int main(){ *fun(100)+=10; printf(\}

输出:_____________________________ 3. 写出下面程序的输出结果,并上机证实

#include

int f(){ static int i=1; int j=1; i++;j++; printf(\}

int main(){ f(); f(); f(); }

输出: __________ __________ __________

4. 写出下面程序的输出结果,并上机证实

#include int A=1,B=1;

int dblA(){ A*=2;}

int dblB(){ int B=5; B*=2;} int main(){ dblA();dblB(); printf(\}

输出: _______________________________ 5. 写出下面程序的输出结果,并运行验证

#include int x,y; int num(){ int a=15,b=10; x=a-b; y=a+b; }

int main(){ int a=7,b=5; x=a+b; y=a-b; num(); printf(\}

输出: _________________________________ 6. 先改错,然后写出下面程序的输出结果,上机证实

#include int f(int *x,int y){ int t; t=*x;

本文来源:https://www.bwwdw.com/article/mf4p.html

Top