C语言指针精选习题和答案 下载本文

内容发布更新时间 : 2024/5/3 21:47:16星期一 下面是文章的全部内容请认真阅读。

{

printf(\ }

printf(\ } } }

9.6用指向一维数组的指针做函数参数

#include #include int main() {

void sort(char (*s)[6]);//一维数组的指针做函数参数 int i;

char str[10][6];

char (*p)[6];//定义一维数组的指针做函数参数 printf(\ for(i=0;i<10;i++) scanf(\

p=str;//将str一维数组指针,赋值给p; sort(p);

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

void sort(char (*s)[6])//s指向一维数组的指针做函数参数; {

.. ..

int i,j;

char temp[6], *t; t=temp;

for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则, for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;

if(strcmp(s[j],s[j+1])>0) {

strcpy(t,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],t); } }

9.7编一程序,用指针数组在主函数中输入十个等长的字符串。用另一函数

对它们排序,然后在主函数中输出10个已排好序的字符串

//用指针数组处理 #include #include int main() {

void sort(char *[]); int i;

char str[10][6], *p[10];

printf(\

for(i=0;i<10;i++)//首先将10个str的首地址赋值给10个p[i]; p[i]=str[i];//将第i个字符串的首地址赋予指针数组p的第i个元素; for(i=0;i<10;i++)

scanf(\输入到&p[i] sort(p);

printf(\ for(i=0;i<10;i++)

.. ..

printf(\输出到p[i]; }

void sort(char *s[]) {

char *temp; int i,j;

for(i=0;i<9;i++) for(j=0;j<9-i;j++)

if(strcmp(*(s+j),*(s+j+1))>0) {

temp=*(s+j);//*(s+j)指向数组指针,我想应该是字符串的首地址;所以可以直接赋值给temp指针; *(s+j)=*(s+j+1); *(s+j+1)=temp; } }

9.8指针 将n个数按输入时顺序的逆序排列,用函数实现

#include void reverse(int a[],int n) { int *p;

for(p=a+n-1;p>=a;p--)

printf(\

printf(\} main() { int a[20],n; int i;

.. ..

printf(\ scanf(\

printf(\ for(i=0;i

scanf(\

reverse(a,n); }

9.9写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为:

int stremp(char *p1,char *p2)

设p1指向字符串s1,p2指向字符串s2。要求:当s1=s2时,返回值为0。当s1不等于s2时,返回它们二者的第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果s1

#include main()

{ int strcmp(char *p1,char *p2); int m;

char str1[20],str2[20],*p1,*p2; printf(\ scanf(\

.. ..

scanf(\ p1=&str1[0]; p2=&str2[0]; m=strcmp(p1,p2);

printf(\}

int strcmp(char *p1,char *p2) /*两个字符串比较的函数*/ { int i; i=0;

while(*(p1+i)==*(p2+i))

if(*(p1+i++)=='\\0') return(0); /*相等时返回结果0*/

return(*(p1+i)-*(p2+i)); /*不等时返回结果为第一个不等字符ASCII码的差值*/ }

.. ..