西北农林科技大学C语言上机实习5答案由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言上机题答案大全”。
实习五答案
1、用指针实现排序
/* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ 用指针实现:由键盘输入10个整数,将他们按由小到大的顺序排列。
输入: 键盘输入的10个整数。
输出: 按由小到大的顺序排列。
输入样例: 1 5 4 3 2 9 23 11 5 7 输出样例: 1 2 3 4 5 5 7 9 11 23
#include void main(void){
int a[10],*p = NULL;
/* 说明数组和指针 */
int i, j, temp;
for(p = a;p
/* 指针从数组首到尾 */
{
scanf(“%d”, p);
/* 利用指针依次输入 */
}
p = a;
for(i = 0;i
/* 利用指针依次比较 */
{
for(j = i + 1;j
if(*(p + i)> *(p + j))
{
temp = *(p + i);
*(p + i)= *(p + j);
*(p + j)= temp;
}
}
for(p=a;p
printf(“%d ”, *p);
printf(“%dn”, *p);}
2、用指针实现字符串排序
/*exer 5-2 将 10个长度小于20的字符串排序*/ 用指针实现:将10个字符串(设其长度小于20)从小到大排序。
输入: 10个字符串。
输出: 排序后的10个字符串。
输入样例: ijk jkl def ghi
def cde hij def efg fgh
输出样例: cde def def def efg fgh ghi hij ijk jkl
提示:
① 定义二维字符数组和指向该数组的指针数组;
② 用循环使指针数组的元素指向二维字符数组各行首;
③ 用循环为指针数组元素赋字符串为值;
④ 用strcmp函数比较两个指针数组元素的值、用strcpy函数交换两个指针数组元素的值。
#include #include void main(void){
char szStr[10][20],*psz[10],szTemp[20];
int i,j;
for(i = 0;i
{
psz[i] = szStr[i];
/*指针数组的每个元素指向各行串*/
}
for(i = 0;i
{
gets(psz[i]);
/*输入10个字符串*/
}
for(i = 0;i
/*字符串排序*/
{
for(j = i + 1;j
{
if(strcmp(psz[i], psz[j])> 0)
{
strcpy(szTemp, psz[i]);
strcpy(psz[i], psz[j]);
strcpy(psz[j], szTemp);
}
}
}
for(i = 0;i
{
puts(psz[i]);
/*输出字符串*/
} }
3、数据倒置
/*exer 5-3 将具有10个元素的一维数组中的数据倒置 */ 描述: 用指针实现:将具有10个元素的一维数组中的数据倒置
输入: 10个元素。3 4 5 6 7 8 9
输出样例: 9 8 7 6 5 4 3 2 1 0
提示: 数据倒置是指将数组前后元素的值交换后再输出。
#include void main(void){
int a[10], iTemp, *p, *q;
int i;
for(i = 0;i
{
scanf(“%d”, a + i);
/*输入数组*/
}
for(p = a, q = a + 9;p
/*首尾交换*/
{
iTemp = *p;
*p = *q;
*q = iTemp;
}
for(i = 0;i
{
printf(“%d ”, *(a + i));
/*输出*/
} }
4、用指针实现数据位置调整
/*exer 5-4 输入 10个整数,将最大的调到最后,最小的调到最前*/ 描述: 用指针实现:由键盘输入10个整数,将最大的调到最后,最小的调到最前。输入: 10个整数。
输出: 最大的调到最后,最小的调到最前。
输入样例: 5 8 7 6 9 4 3 2 1 0 输出样例: 0 8 7 6 5 4 3 2 1 9
#include
输入样例: 0 1 2
void swap(int *px, int *py);
int main(void){
int a[10], iTemp, *pMax, *pMin;
int i;
for(i = 0;i
{
scanf(“%d”, a + i);/*输入数组*/
}
pMax = a;
/*最大值指针指向数组首地址*/
pMin = a;
/*最小值指针指向数组首地址*/
for(i = 1;i
{
if(*(a+i)> *pMax)
pMax = a + i;
if(*(a+i)
pMin = a + i;
}
/*最大值是第1个元素,最小值是最后一个元素*/
if(pMax == a && pMin == a + 9)
{
swap(pMax, pMin);
}
else
{
/*最小值与第一个元素交换*/
swap(a, pMin);
/*最大值与最后一个元素交换*/
swap(a + 9, pMax);
}
for(i = 0;i
{
printf(“%d ”, *(a + i));
/*输出*/
}
return 0;}
void swap(int *px, int *py){
int temp;
temp = *px;
*px = *py;
*py = temp;}
5、用指针实现查找二维数组中最大数及其位置
/*exer 5-5 找出二维数组(设3行4列)中的最大数及其位置 */ 用指针实现:找出二维数组(设3行4列)中的最大数及其位置。
输入: 二维数组(设3行4列)。
输出: 最大数及其位置。
输入样例:2 5 4 6 8 7 2 0 2 4 5
输出样例: 1 1 8
#include void main(void){
int a[3][4],(*p)[4], iCol, iRow;
int i, j;
p = a;
for(i = 0;i
{
for(j = 0;j
scanf(“%d”, *(p + i)+ j);
/*输入数组*/
}
iCol = 0;
/*设最大数及其位置 */
iRow = 0;
for(i = 0;i
{
for(j = 0;j
{
if(*(*(p + i)+ j)> *(*(p + iRow)+ iCol))
{
iRow = i;
iCol = j;
/*修改位置*/
}
}
}
printf(“%d %d %dn”, iRow, iCol, a[iRow][iCol]);}
或者
#include #include
int main(){
int a[3][4];
int m,n,i,j;
for(i=0;i
for(j=0;j
scanf(“%d”,&a[i][j]);
m=0;
n=0;
for(i=0;i
{
for(j=0;j
{
if(a[i][j]>a[m][n])
{
m=i;
n=j;
}
}
}
printf(“%d %d %dn”,m,n,a[m][n]);}
6、用指针实现子字符串提取
/*exer 5-6 由键盘输入一串字符,从字符串下标为m开始
取出n个字符(m和n由键盘输入),形成一个新的字符串
*/ 用指针实现:由键盘输入一串字符,从下标为m的字符开始,取出n个字符(m和n由键盘输入),形成一个新的字符串。输入: 键盘输入一串字符。
输出: 从下标为m的字符开始,取出n个字符(m和n由键盘输入),形成一个新的字符串。输入样例: 0123456 5 2 输出样例: 56 提示: ① 定义二个字符数组zfsour[100]、zfdest[100],zfsour存放原串,zfdest存放新串;
② 定义二个指针变量*pzfsour、*pzfdest; zfsour字符数组的首地址;
③ 从键盘输入取字符的开始位置m(即下标值)和要取的字符个数n;
④ 让指针变量pzfsour指向zfsour+m处,让pzfdest指向zfdest字符数组的首地址;
⑤ 通过n次循环,逐次赋值、移动指针,即将原串中的n个字符存到新串字符数组中。
#include #include void main(void)
{
char szStrSour[80], szStrDest[80], *pszSour, *pszDest;
int i, m, n;
gets(szStrSour);
/* 输入字符串 */
scanf(“%d%d”, &m, &n);
/* 输入位置和长度 */
pszSour = szStrSour + m;
/* 确定起始位置 */
pszDest = szStrDest;
for(i = 0;i
/* 依次取n个字符 */
{
*pszDest = *pszSour;
pszDest++;
pszSour++;
}
*pszDest = ' ';
/* 在字符串末尾追加结束标志 */
puts(szStrDest);}