5-7
本题目用指针变量输入、输出数组arrA的元素值。
#include <stdio.h>
int main(void)
{
int *ptr, arrA[5];
//读入数组元素
for ( ptr=arrA; ptr<arrA+5; ptr++)
{
scanf("%d",ptr);
}
//输出数组元素
ptr=arrA;
for(; ptr<arrA+5; ptr++)
{
printf("%d ",*ptr);
}
printf("\n");
return 0;
}
5-8
本题要求输出字符数组中下标为偶数的字符。
#include<stdio.h>
int main(void)
{
char *str;
str = "abcdefghijk";
while (*str != '\0')
{
putchar(*str);
str+=2;
if ('\0' == *(str-1))
{
break;
}
}
return 0;
}
5-9
本题要求实现字符串的拷贝。
#include<stdio.h>
#include<string.h>
void MyStrcpy(char *dstStr, const char *srcStr);
int main(void)
{
char srcStr[100], detStr[100];
printf("please input string :");
gets(srcStr);
MyStrcpy(detStr, srcStr);
printf("copied string is:");
puts(detStr);
return 0;
}
void MyStrcpy(char *dstStr, const char *srcStr)
{
while
(*srcStr)
{
*dstStr=*srcStr;
srcStr++;
dstStr++;
}
*dstStr='\0';
}
5-10
本题目要求写一个函数 mystrcmp实现字符串比较,相等输出 0,不等输出其差值,在主函数输出比较结果。
#include<stdio.h>
#define N 20
int mystrcmp(char *s1,char *s2);
int main()
{
char str1[N],str2[N];
gets(str1);
gets(str2);
printf("compare result = %d\n",
mystrcmp(str1,str2)
);
return 0;
}
int mystrcmp(char *s1,char *s2)
{
while(*s1!='\0'&&*s2!='\0')
{
if
(*s1==*s2)
{
s1++;
s2++;
}
else
return *s1-*s2;
}
while(*s1 != '\0')
return *s1;
while(*s2 != '\0')
return -*s2;
return 0;
}
5-11
程序功能是将二维数组的元素值输出到屏幕上
#include<stdio.h>
int main(void)
{
int a[2][3]={1, 2, 3, 4, 5, 6}, i, j;
int (*p)[3];
p = a;
for (i=0; i<2; i++)
{
for (j=0; j<3; j++)
{
printf("%d ",
*(*(p+i)+j)
);
}
printf("\n");
}
return 0;
}
5-12
程序的功能是从键盘读入一个不超过80个字符的字符串(包括数字、非数字字符、空格等,如:a123x456 17960? 302tab5876),将其中连续的数字作为一个整数,依次存放到一数组a中,例如针对刚才的例子,则123放在a[0]中,17960放在a[2]中……统计共有多少个整数,假定连续的数字值在int表示范围内。
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[80], *pstr;
int i, j, k, m, e10, digit, ndigit, a[80], *pa;
gets(str);
pstr = str; /* 字符指针pstr置于数组str首地址 */
pa=a;
/* 指针pa置于a数组首地址 */
ndigit = 0; /* ndigit代表有多少个整数 */
i = 0; /* 代表字符串中第n个字符 */
j = 0; /* 代表连续数字的位数 */
while (1)
{
if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9'))
{
j++;
}
else
{
if (j > 0)
{
digit=*(pstr + i-1)-'0';
/* 将个位数赋予digit */
k = 1;
while (k < j)
{
e10=1;
for (m=1; m<=k; m++)
{
e10=e10*10; /* e10代表该位数所应乘的因子 */
}
digit = digit + (*(pstr + i - 1 - k) - '0') * e10;
k++;
}
*pa=digit;
/* 将数值赋予数组a */
ndigit++;
pa++;
j = 0;
}
}
if ('\0' == *(pstr + i))
{
break;
}
i++;
}
printf("There are %d numbers in this line.They are:\n", ndigit);
for(j=0; j<ndigit; j++) /* 显示数据 */
{
printf("%d ", a[j]);
}
printf("\n");
return 0;
}
5-13
程序的功能是:找出任意的一个m×n矩阵每一行上的最大值存放在数组max中,并在主函数显示出来。
#include <stdio.h>
#define N 20
void max_row(int (*p)[N], int m, int n, int *max);
int main(void)
{
int i, j, juZhen[N][N];
int m, n ,max[N];
scanf("%d%d", &m, &n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &juZhen[i][j]);
}
}
max_row(juZhen,m,n,max);
for (i=0; i<m; i++)
printf("The max in line %d is: %d\n", i+1,
*(max+i)
);
return 0;
}
void max_row(int (*p)[N], int m, int n, int *max)
{
int i, j;
for (i=0; i<m; i++, p++, max++)
{
*max = **p;
for (j=0; j<n; j++)
{
if (
*((*p)+j)>*max
)
*max=*((*p)+j);
}
}
}
5-14
程序功能是找到二维数组每一行的最大值。
#include <stdio.h>
void findmax(int (*pArr)[4], int *pmax, int m, int n);
int main(void)
{
int arr[3][4], *pa, max[3], i;
pa = arr[0];
for (i=0; i<12; i++)
{
scanf("%d", pa++);
}
findmax(arr,max,3,4);
for (i=0; i<3; i++)
{
printf("line %d's max = %d\n", i, max[i]);
}
return 0;
}
void findmax(int (*pArr)[4], int *pmax, int m, int n)
{
int i, j;
for (i=0; i<m; i++, pmax++)
{
*pmax=*(*pArr+i);
for (j=1; j<n; j++)
{
if
(*(*(pArr+i)+j)>*pmax)
{
*pmax=*(*(pArr+i)+j);
}
}
}
}
5-15 题目要求调用input函数输入N个字符串。
#include <stdio.h>
#define N 5
void input(char **p, int n);
int main(void)
{
char data[N][81], *ptr[N];
int i;
for(i=0;i<N;i++)
ptr[i]=data[i];
input(ptr,N);
for(i=0;i<N;i++)
printf("%s\n",*(ptr+i));
return 0;
}
void input(char **p, int n)
{
int i;
for(i=0;i<n;i++)
gets(*p++);
}
5-16
字符串排序,例如输入:banana orrange apple,则以下程序的输出结果: apple banana orrange
#include<stdio.h>
#include<string.h>
#define MAXLINE 20
void sort(char **pstr);
int main(void)
{
int i;
char *pstr[3], str[3][MAXLINE];
for (i=0; i<3; i++)
{
pstr[i] = str[i];
}
printf("Please input:");
for (i=0; i<3; i++)
{
scanf("%s",
str[i]
);
}
sort(pstr);
printf("output:");
for (i=0; i<3; i++)
{
printf("%s\n",
pstr[i]
);
}
return 0;
}
void sort(char **pstr)
{
int i, j;
char *p;
for (i=0; i<3; i++)
{
for (j=i+1; j<3; j++)
{
if (strcmp(
*(pstr+i),*(pstr+j)
) > 0)
{
p = *(pstr+i);
*(pstr+i) = *(pstr+j);
*(pstr+j) = p;
}
}
}
}
5-17
程序功能是:输入数组的长度n(n<=20)以及每个数组元素,排序后输出。
#include <stdio.h>
void change(int *p1, int *p2);
int *sort(int *pArr, int n);
int main( )
{
int arr[20], *pa, i, n;
scanf("%d", &n);
for (i=0, pa=arr; i<n; i++)
{
scanf("%d", pa++);
}
pa=sort(arr,n);
printf("output : \n");
for (i=0; i<n; i++)
{
printf("%d ", *(pa + i));
}
printf("\n");
return 0;
}
void change(int *p1, int *p2)
{
int tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int *sort(int *pArr, int n)
{
int i, *pa;
for (i=n-1; i>0; i--)
{
for (pa=pArr; pa<pArr+i; pa++)
{
if (*pa > *(pa+1))
{
change(pa,pa+1);
}
}
}
return pArr;
}
5-20
程序功能是:在子函数中动态申请内存空间,并在主函数中使用该空间进行赋值等操作。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define N 10
void GetMemory(char **ptr, int num);
int main(void)
{
char *str;
GetMemory(&str,N);
strcpy(str, "hello");
printf("%s\n", str);
free(str);
return 0;
}
void GetMemory(char **ptr, int num)
{
*ptr=(char *)malloc(num*sizeof(char));
}