版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防安全员理论考试卷含答案
- 环磷酰胺冲击治疗术后难治性MG方案优化
- 深度解析(2026)《GBT 19310-2025小艇 永久性安装的燃油系统》
- 客服主管面试题及服务技能考核含答案
- 通信行业网络工程师面试题
- 年产xxx二极管 项目可行性分析报告
- 布轮建设项目可行性分析报告(总投资5000万元)
- 美容师岗位面试题及答案
- 大数据公司数据分析师日常工作及问题解决技巧
- 深度解析(2026)《GBT 18874.1-2002起重机 供需双方应提供的资料 第1部分总则》
- 交通事故处理讲解
- 常考重难易错名校押题卷(含答案)-人教部编版五年级上册语文高效培优测试
- 2025年重大公共卫生服务服务项目工作方案
- 边角料管理办法
- 《WPS AI智能办公应用大全》全套教学课件
- 库房租赁管理办法
- 员工考勤抽查管理办法
- 换瓣术后护理查房
- 胆囊炎胆囊结石的护理常规
- 养老护理员初级理论试题及答案
- 钻芯法检测混凝土强度技术规程JGJ-T384-2024
评论
0/150
提交评论