p_string2=p_string1;
while(*p_string2!='\\0')/*正序输出字符串*/ putchar(*p_string2++); putchar('\\n');
while(--p_string2>=p_string1)/*反序输出字符串*/ putchar(*p_string2); putchar('\\n'); }
9.使用指向指针的指针的方法,完成对n个整数(例如10个整数)排序后输出。要求从键盘输入n个整数并且把排序单独编写成函数。
#include
voidbubble_sort(int**p,intn); voidmain()
{inti,n,number[30]; int**pp,*pointer[30];
printf(\scanf(\for(i=0;i pointer[i]=&number[i];/*指针数组p存放n个整数的地址*/ printf(\for(i=0;i scanf(\ pp=pointer;/*二级指针pp指向指针数组p的首地址*/ bubble_sort(pp,n); printf(\for(i=0;i voidbubble_sort(int**p,intn)/*冒泡法排序*/ {int*temp; inti,j; for(i=0;i {temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}/*交换整数的地址*/ } } 10.使用指针数组编写程序,从键盘输入一个星期几(例如7),则程序输出对应星期几的英文名字(Sunday)。 #include char*day_name(intn);/*英文星期几函数的原型声明*/ voidmain() {intn; char*pointer; printf(\scanf(\ pointer=day_name(n); printf(\} char*day_name(intn)/*英文星期几函数的定义*/ {staticchar*english_name[]={\\if(n<1||n>7) return(english_name[0]); else return(english_name[n]); } 三.程序改错 1.有一个班级有n个学生,开设m门课程。使用指针的方法编写程序,查找有课程不及格的学生,并且打印他们的成绩。 #include voidsearch_fail(int(*p)[M]);/*函数的原型声明*/ voidmain()/*主函数*/ {inti,j; intscore[N][M]; printf(\for(i=0;i scanf(\ search_fail(score);/*找成绩差的学生*/ } voidsearch_fail(int(*p)[M])/*float(*p)[4]可以写成float[][4]的形式*/ {inti,j; for(i=0;i {if(*(*(p+i)+j)<60)break;}/*p[i][j]用*(*(p+i)+j)表示的形式*/ if(j {printf(\输出有关学生的信息*/ for(j=0;j printf(\ printf(\ } } } 错误语句:if(j 正确语句:if(j 2.使用指针编写程序,从键盘输入的n个整数中找出其中最大值和最小值。 调用一个函数只能得到一个返回值,要得到多个返回值则用全局变量在函数之间来“传递”数据。 #include intmax,min;/*全局变量*/ voidmax_min_value(intarray[],intn); main() {inti,number[N]; printf(\for(i=0;i scanf(\max_min_value(number,N); printf(\用max、min在函数之间传回数据*/ } voidmax_min_value(intarray[],intn) {int*p,array_end; max=min=*array; array_end=array+n; for(p=array+1;p {if(*p>max)max=*p;/*为全局变量max赋值*/ elseif(*p 错误语句:int*p,array_end; 正确语句:int*p,*array_end; 3.使用指针编写程序,从键盘输入一个字符串,然后统计字符串中字符的个数。 #include {charstring[30],*pointer; printf(\scanf(\pointer=string; while(*pointer!='\\0') pointer++; printf(\错误语句:scanf(\正确语句:scanf(\ 4.使用指针编写程序,在输入的字符串中查找是否存在字符?x?。 #include {charstring[30],*p; inti; p=string; printf(\ scanf(\ for(i=0;p[i]!='\\0';i++)/*p[i]等价与*(p+i)*/ if(p[i]=='x'){printf(\if(p[i]!='\\0') printf(\错误语句:if(p[i]!='\\0') 正确语句:if(p[i]='\\0') 5.使用指针数组编写程序,从键盘输入一个星期几(例如7),则程序输出对应星期几的英文名字(Sunday)。 #include char*day_name[]={\\while(1)/*无限循环,由break语句退出*/ {printf(\scanf(\if(n<1&&n>7) {printf(\break; } printf(\} } 错误语句:if(n<1&&n>7) 正确语句:if(n<1||n>7) 四.编程 1.从键盘输入3个整数,按照从小到大的顺序输出。使用指针的方法并且用3种不同方式实现。 #include int*pointer_1,*pointer_2,*pointer_3,*p; printf(\scanf(\ pointer_1=&a;pointer_2=&b;pointer_3=&c; if(a>b){p=pointer_1;pointer_1=pointer_2;pointer_2=p;}/*指针交换*/ if(a>c){p=pointer_1;pointer_1=pointer_3;pointer_3=p;}/*指针交换*/ if(b>c){p=pointer_2;pointer_2=pointer_3;pointer_3=p;}/*指针交换*/ printf(\、b、c之间未交换*/ printf(\} 2.将数组中n个整数按相反的顺序存放后输出。使用指针的方法并用2种不同方式实现。 #include voidinverted(int*x,intn); main() {inti,array[N]; printf(\for(i=0;i scanf(\ printf(\for(i=0;i printf(\ inverted(array,N);/*实参array为数组名*/ printf(\for(i=0;i printf(\} voidinverted(int*x,intn)/*形参x为指针变量*/ {int*front,*rear,*p,m,temp; m=(n-1)/2; front=x;rear=x+n-1;p=x+m; for(;front<=p;front++,rear--) {temp=*front;*front=*rear;*rear=temp;} return;} 3.从键盘输入3个字符串,按照从小到大的顺序输出。使用指针的方法实现。 #include charswap(char*p1,char*p2); voidmain() {charstring1[30],string2[30],string3[30]; printf(\scanf(\scanf(\scanf(\ if(strcmp(string1,string2)>0)swap(string1,string2);/*若string1>string2,则交换*/ if(strcmp(string1,string3)>0)swap(string1,string3);/*若string1>string3,则交换*/ if(strcmp(string2,string3)>0)swap(string2,string3);/*若string2>string3,则交换*/ printf(\输出排序后的结果*/ printf(\printf(\printf(\} charswap(char*p1,char*p2)/*交换字符串的函数,采用传地址的方法传递函数参数*/ {char*p[30]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); } 4.使用指针编写程序,完成字符串的复制。要求不能使用strcpy函数。