c语言程序设计第五版习题答案解析 下载本文

完美WORD格式

参考代码: main() {

int table[10]={2,4,6,8,10,12,14,16,18,20}; int find=0,i,x;

printf(\请输入要找的数: \scanf(\for(i=0;i<10;i++) if(x==table[i])

{find=1;break;} if(find==1)

printf(\在table[%d]中\\n\else

printf(\没有找到数%d\\n\}

5.求一个4×4矩阵对角线元素之和。

【分析与提示】若设置矩阵行列坐标分别为i和j,则对角线元素下标满足以下条件:i==j或i+j=3。

参考代码: main() {

int a[4][4] ,i,j,sum=0; for(i=0;i<4;i++) for(j=0;j<4;j++) {

scanf(\

if(i==j||i+j==3) sum=sum+a[i][j]; }

printf(\对角线元素之和:%d\}

6.将两个二维数组对应元素加起来,存到另一个二维数组中。

1 4 10 20 b= 2 5 a= 30 40

3 6 50 60

【分析与提示】运用双重循环,把行列下标均相同的元素值相加。 参考代码: main() {

int a[3][2]={10,20,30,40,50,60}; int b[3][2]={1,4,2,5,3,6}; int c[3][2]; int i,j;

for(i=0;i<3;i++) {

专业整理 知识分享

完美WORD格式

for(j=0;j<2;j++) {

c[i][j]=a[i][j]+b[i][j]; printf(\}

printf(\} }

7.找出一个二维数组中的鞍点。

【分析与提示】所谓鞍点指该位置上的数在该行上最大,在该列上最小。注意并不是所有的二维数组都有鞍点。

参考代码: #define N 3 #define M 3 main() {

int a[M][N],(*p)[N]; /* p 为指向一维数组的指针*/ int max,maxi,maxj; int i,j,k,m,n;

int flag1=0,flag2=0; p=a;

printf(\给数组输入数据:\\n\for(i=0;i

scanf(\for(i=0;i

max=*p[i];

for(j=0;jmax)

{max=*(p[i]+j);maxj=j;} for(k=0,flag1=1;k*(p[k]+j) ) flag1=0; if(flag1) {

printf(\第%d行,第%d列的%d是鞍点!\\n\flag2=1; } }

if(!flag2)

printf(\矩阵中无鞍点!\}

8.用指针数组给一个整型二维数组输入数值,并求出各行元素的和。

【分析与提示】用二维数组a各行的首地址赋予指针数组p的各个元素,通过此循环嵌

专业整理 知识分享

完美WORD格式

套,为各个数组元素赋值。 main( )

{

int a[3][3],*p[3],i,j,sum; for(i=0;i<3;i++)

p[i]=a[i]; /*把二维数组a各行的首地址赋予指针数组p的各个元素*/ for(i=0;i<3;i++) /*通过此循环嵌套,为各个数组元素赋值*/ for(j=0;j<3;j++) scanf(\printf(\和分别为:\

for(i=0;i<3;i++) /*通过此循环嵌套,求各行数组元素的和*/ {

sum=0; for(j=0;j<3;j++)

sum=sum+*(p[i]+j);

printf(\分行输出每一行的和值*/ } }

9.用指针实现合并两个字符串。 【分析与提示】把第二个字符串中字符逐个赋值给第一个字符串,需要注意的是两个字符数组下标变量的初值不同。

参考代码:

#include #include main() {

char s1[40],s2[20],*p1,*p2; int i,j,n; p1=s1;p2=s2;

printf(\输入第一个字串:\gets(p1);

printf(\输入第二个字串:\gets(p2); n=strlen(p1);

for(i=n,j=0;*(p2+j)!='\\0';i++,j++) *(p1+i)=*(p2+j); *(p1+i)='\\0';

printf(\输出合并后字串为:\puts(p1); }

10.从输入的5个字符串中找出最长的一个字符串输出。

【分析与提示】运用测试字符串长度函数strlen,进行串比较。 参考代码:

# include

专业整理 知识分享

完美WORD格式

# include main() {

char a[5][80],*sp; int i;

for(i=0;i<5;i++) gets(a[i]);

for(i=0;i<5;i++)

if(strlen(sp)

第7章 函数与指针

一.运行程序写结果

1.下列程序运行的结果为 。 int x1=30,x2=40; main() {

int x3=10, x4=20; swap(x3,x4); swap(x2,x1);

printf(\}

swap(int x,int y) {x1=x;x=y;y=x1;}

【提示】本题考查全局变量的作用范围。 【解答】 10,20,40,40

2.下列程序运行的结果为 。 #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(\}

专业整理 知识分享

完美WORD格式

【分析与提示】用extern进行外部变量说明。 【解答】5,25

3.下列程序运行的结果为 。

main()

{int a[5]={5,10,-7,3,7},i,j,t; sort(a);

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

sort(int a[]) {int i,j,t;

for(i=0; i<4; i++) for(j=0; j<4-i; j++) if(a[j]>a[j+1])

{t=a[j]; a[j]=a[j+1]; a[j+1]=t;}

}

【提示】该程序的功能是将5个数由小到大进行排序。 【解答】 -7 3 5 7 10

4.下列程序运行的结果为 。 #define SQR(x) 2*x+1 main()

{int a,b,c; a=3;b=2;c=1;

a*=SQR(b+c)/ SQR(b+c); printf(\}

【提示】a*=SQR(b+c)/ SQR(b+c);宏展开为a*=2*b+c+1/2*b+c+1; 【解答】21

5.下列程序运行的结果为 。 void swap1(int x,int y) {int t;

t=x;x=y;y=t; return; }

void swap2(int *x,int *y) {int t;

t=*x;*x=*y;*y=t; return; }

main()

{int x=3,y=5;

printf(\swap1(x,y);

printf(\

专业整理 知识分享