C语言程序设计 答案 ch08 指针_第1页
C语言程序设计 答案 ch08 指针_第2页
C语言程序设计 答案 ch08 指针_第3页
C语言程序设计 答案 ch08 指针_第4页
C语言程序设计 答案 ch08 指针_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章指针

一、选择题

1-5DDAAB

6-10DDCDD

11-15CDDCC

16-20CBABD

20-25BCDCB

26-30ACCDC

二、填空题

1.60

2.w[i-l]

3.①row(2)a[row][colum]

4.*s-*t

5.略

6.strcmp(a[i],a[i+A])book,6

7.int*c

8.str[i];i

9.略

10.pl++;*p2

三、编程题

1.输入3个整数,按曰小到大的顺序输出。

:include<stdio.h>

voidsort31ntegers(int*a,int*b,int*c)

(

inttemp;

if(*a>*b)

(

temp=

*a=*b:

*b=tenp;

)

if(*b>*c)

temp=仙

*b=*c;

*c=tenp;

if(*a>*b;

(

temp=

*a=*b:

*b=tenp;

}

}

intmain()

(

intnuml,num2,num3;

printf(〃请输入三个整数:\n");

scanf(z,%d%d%d”,&numl,&num2,&num3);

sort3Integers(&numl,&num2,&num3);

printf(〃按升序排列后的结果为:%d%d%d\n,z,numl,num2,nun3);

return0;

}

2.已知一个整型数组x[4],它的各元素值分别为3、118和2使用指针表示法

编写程序,求该数组各元素之积。

ftinclude<stdio.h>

intmainO

(

intx[4]=(3,118,2);

intproduct=1;

int*ptr=x;

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

(

product*=*(ptr+i);

)

printf(〃数组各元素之积为:%d\n”,product);

return0;

)

3.输入10个整数,将其中最小的数与第一个数交换,把最大的数与最后一个数

交换。

ttinclude<stdio.h>

voidswap(int*a,int*b)

(

inttemp=%;

*a=*b;

*b二temp;

}

intmain()

(

intnumbers[10];

printf(〃请输入10个整数:\n〃);

for(inti=0;i<10;i++)

(

scanf(〃%d〃,&numbers[i]);

)

intminlndcx=0;

intmaxIndex=0;

//寻找最小值和最大值的索引

for(inti=1;i<10;i++)

if(numbers[i]<numbers[minindex])

{

minZndex=i;

}

if(numbers[i]>numbers[maxindex])

(

maxIndex=i;

//最小数与第一个数交换

swap(&numbers[0],&numbers[minindex]);

//最大数与最后一个数交换

swap(&numbers[9],&numbers[maxlndex]);

printf("交换后的数组为:\n〃);

for(inti=0;i<10;i++)

(

printf("刎〃,numbers[i]);

)

printf('\n〃);

return0;

)

4.将n个数按输入顺序逆序排列。

#include<stdio.h>

voidreverseArray(intarr[],intn)

(

intleft=0;

intright=n-1;

while(left<right)

inttemp=arr[left];

arr[left]=arr[right];

arr[right]=temp;

left++;

right—:

}

}

intmain()

(

intn;

printf(〃请输入要逆序排列的数的个数:\n〃);

scanf&n);

intarr[n];

printf(〃请输入%d个整数:\n〃,n);

for(inti=0;i<n;i++)

(

scanf(线d〃,&arr[i]);

}

reverseArray(arr,n);

printf(〃逆序排列后的数组为:\n〃);

for(inti=0;i<n;i++)

(

printf("%d〃,arr[i]);

}

printf;

return0;

)

5.要求从键为y4][4]数组输入数据,使用一维数指针变量输入/输出数元素,并

且分别求出主、次对角线元素之和。

nclude<stdio.h>

ttdefineROWS4

ttdefineCOLS4

voidinputArrayjnt*arr)

(

printf(〃请输入数组元素:\n〃);

for(inti=0;i<ROWS*COLS;i-+)

(

scanfarr+i);

)

)

voidoutputArray(int*arr)

(

printf(〃数组元素为:\n〃);

for(inti=0;i<ROWS;i++)

(

for(intj=0;j<COLS;j++)

{

printfC%d”,*(arr+i*COLS+j));

)

printf("\n〃);

intcalculateMamDiagonalSuin(int*arr)

(

intsum=0:

for(inti=0;i<ROWS;i++)

(

sum+=*(arr+i*COLS+i);

}

returnsum;

}

intcalculateSecondaryDiagonalSum(intxarr)

intsum=0:

for(inti=0;i<ROWS;i++)

(

sum+=*(arr+i*COLS+(COLS-1-i));

)

returnsum;

}

intmain()

(

intarray[ROWS][COLS];

int*ptr=&array[0][0];

inputArray(ptr);

outputArrayJptr);

intmainDiagonalSum=calculateMainDiagonalSum(ptr);

printf(〃主XT角线元素之和为:%d\n〃,mainDiagonalSum);

intsecondaryDiagonalSum=calculateSecondaryDiagonalSum(ptr);

printf(〃次龙■角线元素之和为:%d\nz,,secondaryDiagonalSum);

return0;

)

6.编写一个程序,将一个字符串插入另一个字符串的指定位置。

ttinclude<stdio.h>

#include<string.h>

voidinsertString(char*strl,char*str2,intpos)

(

intlenl=strlen(strl);

intlen2=strlen(str2);

//检查插入位置的有效性

if(pos<0pos>lenl)

printf("错误:插入位置无效!\n");

return;

)

//创建临时字符数组来储存插入后的字符串

charresult[lenl+len2+1];

inti,j;

//复制strl中的前pos个字符到结果字符串result

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

(

result[i]=strl[i];

}

//复制str2到结果字符串result

for(j=0;j<len2;j++)

(

result[i+j]=str2[j];

)

//复制strl中剩余的字符到结果字符串result

for(;i<lenl;i++)

(

result[i+len2]=strl[i];

}

//添加末尾的NULL终止符

result[lenl+len2]='\0';

//将结果字符串复制回strl

strcpy(strl,result);

)

intmainO

(

charstrl[100];

printf(〃请输入目标字符串:\n〃);

fgets(strl,sizeof(strl),stdin);

strl[strcspn(strl,z/\n,z)]='\0';//去除fgets函数读取的换行

charstr2[100];

printf(〃请输入要插入的字符串:\n〃);

fgets(str2,sizeof(str2),stdin);

str2[strcspn(str2,z/\n,z)]='\0';//去除fgets函数读取的换行

intpos;

printf(〃请输入插入位置:\n〃);

scanf&pos);

insertString(strl,str2,pos);

printf("插入后的字符串为:%s\n〃,strl);

return0;

)

7.编写一个程序,用指针操作将一个一维数组中的个整数进行以下处理:顺序将

前面各数后移m个位置,使最后面的m个数变成前面的m个。例如,有5个

数13579,两个后7913。

ttinclude<stdio.h>

voidshiftArraylint*arr,intsize,intm)

(

//创建临时数组,用于保存后面的m个数

inttemp[m];

//复制后面的m个数到临时数组中

for(inti=size-m,j=0;i<size;i++,j++)

(

temp[j]=arr[i];

//将前面的数向后移动m个位置

for(inti=size-1;i>=m;i­)

(

arr[i]=arr[i-m];

)

//将临时数组中的数放到前面的m个位置

for(inti=0;i<m;i++)

(

arr[i]=temp[i];

)

}

intmain()

(

intsize;

printf(〃请输入数组的大小:\n〃);

scanf(,z%d,z,&size);

intarrfsize];

printf(〃请输入%d个整数:\n〃,size);

for(inti=0;i<size;i++)

(

scanf(〃%d〃,&arr[i]);

)

intm;

printf(”请输入要移动的位置数m:\n");

scanf(〃%d〃,&m);

shiftArray(arr,size,m);

printf(〃移动后的数组为:\n〃);

for(inti=0;i<size;i++)

(

printf("%d〃,arr[i]);

printf;

return0;

)

8.编写一个程序,使用指针操作将一个矩阵转置,即二维数组a的转置矩阵满

足下列条件:b的行就是a的列。

ftinclude<stdio.h>

voidtransposeMatrix(int*a,int*b,introws,intcols)

(

for(inti=0;i<rows;i++)

(

for(intj=0;j<cols;j++)

(

*(b+j*rows+i)=*(a-i*cols+j);

)

}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论