1、 p+;n+; q=p; while(*q!=j-1) q+; while(parray;p-)*p=*(p-1);*array=array_end;m-;if(m0) move(array,n,m);95 输入n个整数,将最小数与第一个数对换,把最大数与最后一个数对换程序源代码:int number10;input(number);max_min(number);output(number);input(number)int i;9;number9);max_min(array)int array10;int *max,*min,k,l;int *p,*arr_end;arr_end=arr
2、ay+10;max=min=array;for(p=array+1;p*max) max=p;else if(*p0) swap(str1,str2);if(strcmp(str1,str3)0) swap(str1,str3);if(strcmp(str2,str3)0) swap(str2,str3);after being sortedn%sn%sn%sn,str1,str2,str3);char swap(p1,p2)char *p1,*p2;char *p20;strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);9.7 写一函数,功能是交换两个实数变量的值
3、。void swap(float * x, float * y); main() float a, b, *p1, *p2; a=10; b=20; p1=&a; p2=&b; printf(a=%f, b=%fn, a, b); swap(p1, p2); /* 或printf(%d %d, *p1, *p2) */ void swap(float *pa, float *pb) float temp; temp=*pa; *pa=*pb; *pb=temp; 9. 10 写一个函数,求一个字符串的长度。int len;char *str20;please input a string:le
4、n=length(str);the string has %d characters.,len);length(p)char *p;int n;n=0;while(*p!)n+;p+;return n;9.11_ 约瑟夫环问题:n个人围成一圈,从第一个人开始报数,凡报到的人退出,问最后剩下的是第几号。#define nmax 50int i,k,m,n,numnmax,*p;please input the total of numbers:p=num;*(p+i)=i+1;i=0;k=0;m=0;while(mnum,p-score); /*输出学号和成绩*/p=p-next; /*指针前进
5、*/while(p!=NULL);struct student *insert(ah,bh) /*定义插入函数*/struct student *ah,*bh;struct student *pa1,*pa2,*pb1,*pb2; /*这四个指针皆为student结构体类型*/pa2=pa1=ah; /*两个指针指向第一链表的表头*/pb2=pb1=bh; /*两个指针指向第二链表的表头*/do while(pb1-numpa1-num)&(pa1-next!=NULL) /*注意是按学号链接.当第二个链表的学号大于第一个链表的学号而且未到第一个链表结尾时*/ pa2=pa1;pa1=pa1-
6、 /*用pa2记下第一个链表的当前位置,pa1前进到下一个结点.到此已经脱离循环*/if (pb1-numnext=pb1; /*否则,第二个链表pa2指针指向第二个链表的当前位置*/pb1=pb1-pb2-next=pa1; /*做完上面的事情,两指针同时前进到下一个结点*/pa2=pb2;pb2=pb1; /*pa2指向第二个链表的当前位置,pb2 指向第二个链表的当前位置*/while (pa1-=NULL)|(pa1=NULL&pb1!=NULL); /*当第一个链表未到末尾或者第一个链表结束而第二个链表未结束 时,便重复做上面的事情*/if(pb1-next=NULL) /*脱离循环
7、时如果是第一个链表结束而且第二个链表之序号大于第一个 链表之序号则把pa1之next 域指向第二个链表的当前位置*/return(ah); /*返回目标链表的头地址*/struct student *creat() /*定义建立链表函数*/ struct student *p1,*p2,*head; /*此三个指针皆为student结构体类型*/ /*计数器n赋初值为0*/p1=p2=(struct student *)malloc(LEN); /*为结构体分配地址,p1,p2都指向这个地址*/input sno score: input 0 end.%ld,%dp1-num,& /*输入学号
8、和成绩*/head=NULL; /*表头先置为空指针*/while (p1-num!=0) /*当输入的学号不为0时*/ n=n+1; /*计数器增值1*/if(n=1)head=p1; /*如果是第生个结点,head指向第一个结点*/else p2-next=p1; /*如果不是第一个结点,链结到p2中,p2是建立的链表*/p2=p1; /*指针p2前进*/p1=(struct student *)malloc(LEN); /*再分配地址*/ /*再输入学号及成绩*/p2-next=NULL; /*当脱离循环时,链表已经建立完毕.勿忘给表尾一个空指针*/return(head); /*返回表
9、头地址*/main() struct student *ahead,*bhead,*abh; /*三个变量皆为结构体student类型*/ahead=creat();print(ahead); /*调用建立链表函数建立链表llistA,把返回地址赋给指针ahead*/sum=n; /*n为链表结点数*/bhead=creat(); print(bhead); /*调用建立链表函数建立链表llistB,把返回地址赋给指针bhead*/sum=sum+n; /*sum为两个链表的结点总数*/abh=insert(ahead,bhead); /*调用插入函数连结两个链表,把表头地址赋给abh*/pr
10、int(abh); /*打印连接的结果*/9.1 写一个函数,将一个行列矩阵转置。main()/*将一个3行3列矩阵转置*/ int a33,*p,i;input 3*3 ju zhen:for (i=0;3;i+)/*一行一行的输入*/%d %d %dai0,&ai1,&ai2);p=&a00;/*p指向二维数组首地址*/move(p);/*调用转置函数进行转置*/zhuan zhi hou juzhen wei:i+)/*一行一行的输出*/%d %d %dn,ai0,ai1,ai2);move(pointer)/*自己定义矩阵转置函数*/int *pointer;int i,j,t;for
11、 (j=i;t=*(pointer+3*i+j);/*(pointer+3*i+j)乃aij*/*(pointer+3*i+j)=*(pointer+3*j+i);/*(pointer+3*j+i);乃aji*/*(pointer+3*j+i)=t;/*此三句实现aij与aji互换*/ 9.13 运行结果:9.14 将n个数按输入时的顺序逆序排列。程序代码如下:struct line int num;struct line *next;/*定义结构体类型line,此中next是line类型的指针. 处理链表必用此种结构*/ int len=1,i;struct line *p1,*head,*
12、new,*newhead; /*此行指针皆为line类型*/p1=head=(struct line *)malloc(sizeof(struct line);/*各指针都指向系统分配的内存地址*/num=-1; head-=0)/*当输入的不是0时*/ p1=(struct line *)malloc(sizeof(struct line);/*再分配地址*/p-num?:num);/*再输入结点值*/next=head;head-len+;/*结点数自增值*/p1=head-/*指针指向表头,准备输出*/ output link n do %4d,p1-/*输出结点值*/if(p1-=NU
13、LL)p1=p1-/*如果未到表尾指针前进到下一个结点*/while(p1! /*循环终止条件*/9.17 有一个班个学生,门课,求: 第一门课的平均分; 找出有两科以上不及格的学生; 找出平均成绩在分以上者或全部课程成绩在85分以上者。有个学生,每个学生包括学号、姓名和三门课的成绩,要求打印出三门课崐总平均成绩以及最高分的学生数据。/*输入10个学生数据,计算平均分*/ char num6;char name8;int score4;float avr;stu10;/*定义stu10为student型结构体数组*/ int i,j,max,maxi,sum;float average;/*输
14、入*/10;n请输入第%d个学生的成绩:,i+1);学号: ,stui.num);姓名:,stui.name);for(j=0;成绩 %d.,j+1);stui.scorej);/*输入数据*/*计算*/average=0;max=0;maxi=0; sum=0;sum+=stui.scorej;/*累加每个人的分数*/stui.avr=sum/3.0;/*总分被3除得平均分*/average+=stui.avr;/*累加总平均成绩*/if(summax)max=sum;maxi=i;/* 如果这个人的总成绩大于当前最高成绩则此成绩替换掉当前最高成绩*/average/=10;/*总平均分被1
15、0除得平均分*/*打印*/ 学号 姓名 成绩1 成绩2 成绩3 平均分n%8s%10s,stui.num,stui.name);/*先输出学号,姓名*/j+)/*再输出三科成绩*/%7d,stui.scorej); %6.2fn,stui.avr);/*输出每个人平均分*/平均成绩是%5.2fn,average);/*输出总平均成绩*/最好成绩是学生 %s,总分是 %d.,stumaxi.name,max);/*输出最高分及相应学生姓名*/9.19 实现两个字符串的比较。int compare(char *s1, char *s2)int c;while (*s1!|*s2!)if (*s1*
16、s2) c=1;return c; else s1+;s2+;if(*s1= if(*s2=) c=0; else c=-1;else if(*s2=) c=1;main()char *s1,*s2;ninput string s1,s2n,s1);,s2);c=compare(s1,s2);result is if (c0)printf(s1s2else if (c=0)printf(s1=s2 else printf(s1_9.20 输入一个月份号,输出该月的英文名。enum month jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec; enum month i,; int * j;input month ?,j);switch (j-1)case jan:%-10s,jan break;case feb:febcase mar:marcase apr:aprcase may:maycase jun:juncase jul:julcase aug:augcase sep:sepcase oct:octcase nov:novcase dec:decdefault :9.21 将空格分开的字符串称为单词。输入多行字符串,直到输入stop单词时才停止。最后输出单词的数量#include
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1