您好,欢迎访问三七文档
第7章[习题7-1]输入3个整数,按从小到大的顺序输出。/*c7_1.c*/#includestdio.hvoidswap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}voidmain(void){intn1,n2,n3;int*pointer1,*pointer2,*pointer3;printf(请输入三个整数n1,n2,n3:);scanf(%d,%d,%d,&n1,&n2,&n3);pointer1=&n1;pointer2=&n2;pointer3=&n3;if(n1n2)swap(pointer1,pointer2);if(n1n3)swap(pointer1,pointer3);if(n2n3)swap(pointer2,pointer3);printf(排序后三个整数为:%d,%d,%d\n,n1,n2,n3);}[习题7-2]编写程序,输入一个十进制的正整数,将其对应的八进制数输出。/*c7_2.c*/#includestdio.h#defineN10voidmain(void){intx;char*p,result[N];printf(输入十进制正整数:);scanf(%d,&x);for(p=result;x!=0;p++){*p=x%8+'0';x=x/8;}for(p--;p=result;p--)putchar(*p);putchar('\n');}[习题7-3]输入一个字符串,用指针方式逐一显示字符,并求其长度。/*c7_3.c*/#includestdio.h#includestring.hvoidmain(void){charstr[100],*p;printf(输入字符串);gets(str);p=str;printf(结果输出:);while(*p!='\0'){printf(%c,*p);p++;}printf(\n字符串长度=%d\n,p-str);}[习题7-4]用指针方法编写一个程序,输入三个字符串,将它们按由小到大的顺序输出。/*c7_4.c*/#includestdio.h#includestring.hvoidmain(void){chara[30],b[30],c[30];char*pa,*pb,*pc;printf(输入三个字符串:);scanf(%s%s%s,a,b,c);if(strcmp(a,b)0)if(strcmp(b,c)0){pa=a;pb=b;pc=c;}elseif(strcmp(c,a)0){pa=c;pb=a;pc=b;}else{pa=a;pb=c;pc=b;}elseif(strcmp(b,c)0){pa=c;pb=b;pc=a;}elseif(strcmp(a,c)0){pa=b;pb=a;pc=c;}else{pa=b;pb=c;pc=a;}printf(排序后结果:\n%s%s%s\n,pc,pb,pa);}[习题7-5]从键盘输入一个字符串,然后按照字符顺序从小到大进行排列,并删除重复的字符。/*c7_5.c*/#includestdio.h#includestring.hvoidmain(void){charstr[100],*p,*q,*r,c;printf(输入字符串:);gets(str);for(p=str;*p;p++){for(q=r=p;*q;q++)if(*r*q)r=q;if(r!=p){c=*r;*r=*p;*p=c;}}for(p=str;*p;p++){for(q=p;*p==*q;q++);if(p!=q)strcpy(p+1,q);}printf(结果字符串是:%s\n,str);}[习题7-6]不使用额外的数组空间,将一个字符串按逆序重新存放。例如,原来的存放顺序是abcde,现在改为edcba。/*c7_6.c*/#includestdio.h#includestring.hvoidmain(){charstr[20];inttemp,i,j;printf(inputastring:);gets(str);for(i=0,j=strlen(str)-1;ij;i++,j--){temp=str[i];str[i]=str[j];str[j]=temp;}printf(invertedsequence=%s\n,str);}[习题7-7]不使用strcpy函数,实现字符串的复制功能。/*c7_7.c*/#includestdio.h#includestring.hvoidcopy_string(char*from,char*to){for(;*from!='\0';from++,to++)*to=*from;*to='\0';}voidmain(void){chars1[]=Iamateacher.,*a=s1;chars2[]=Youareastudent.,*b=s2;printf(string_a=%s\nstring_b=%s\n,a,b);copy_string(a,b);printf(\nstring_a=%s\nstring_b=%s\n,a,b);}[习题7-8]编写一个函数实现十进制到十六进制的转换。在主函数中输入十进制数并输出相应的十六进制数。/*c7_8.c*/#includestdio.h#includestring.h#defineMAX10inthtoi(char*s){inti,n;n=0;for(i=0;s[i]!='\0';i++){if(s[i]='0'&&s[i]='9')n=n*16+s[i]-'0';if(s[i]='a'&&s[i]='f')n=n*16+s[i]-'a'+10;if(s[i]='A'&&s[i]='F')n=n*16+s[i]-'A'+10;}returnn;}voidmain(void){intc,i,flag,flag1;chart[MAX];i=0;flag=0;flag1=1;printf(\n输入十六进制数:);while((c=getchar())!='\0'&&iMAX&&flag1){if(c='0'&&c='9'||c='a'&&c='f'||c='A'&&c='F'){flag=1;t[i++]=c;}elseif(flag){t[i]='\0';printf(\n十进制数:%d\n,htoi(t));printf(继续吗?);c=getchar();if(c=='N'||c=='n')flag1=0;else{flag=0;i=0;printf(\n输入十六进制数:);}}}}[习题7-9]用函数voidsort(int*p,intn)实现将n个数按递减排序。主函数中输入n个数并输出排序后的结果。/*c7_9.c*/#includestdio.hvoidsort(int*p,intn){inti,j,m,t;for(i=0;in-1;i++){m=i;for(j=i+1;jn;j++)if(p[m]p[j])m=j;if(m!=i){t=p[i];p[i]=p[m];p[m]=t;}}}voidmain(void){inta[10],i;printf(输入10个数:);for(i=0;i10;i++)scanf(%d,&a[i]);sort(a,10);printf(排序后结果:\n);for(i=0;i10;i++)printf(%d,a[i]);}[习题7-10]有n个人围成一圈,顺序排号,从第1个人开始从1到m报数,凡数到m的人出列,问最后留下的是原来圈中第几号的人员。/*c7_10.c*/#includestdio.h#definenmax50voidmain(void){inti,j,k,n,m,num[nmax],*p;printf(请输入人数n:);scanf(%d,&n);printf(报数:);scanf(%d,&m);p=num;for(i=0;in;i++)*(p+i)=i+1;i=0;//i为每次循环时的计数变量j=0;//j为计数变量k=0;//k为退出人数while(kn-1){if(*(p+i)!=0)j++;if(j==m){*(p+i)=0;//退出的人编号为0j=0;k++;}i++;if(i==n)i=0;//报到尾后i恢复尾0}while(*p==0)p++;printf(%d个人中最后留下的是第%d号.\n,n,*p);}[习题7-11]有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。/*c7_11.c*/#includestdio.hvoidmove(intarray[20],intn,intm){int*p,array_end;array_end=*(array+n-1);for(p=array+n-1;parray;p--)*p=*(p-1);*array=array_end;m--;if(m0)move(array,n,m);}voidmain(void){intnumber[20],n,m,i;printf(thetotalnumbersis:);scanf(%d,&n);printf(backm:);scanf(%d,&m);printf(enterthenumbers(total=%d):,n);for(i=0;in;i++)scanf(%d,&number[i]);move(number,n,m);for(i=0;in;i++)printf(%d,number[i]);printf(\n);}[习题7-12]用指针的方法实现将明文加密变换成密文。变换规则如下:小写字母z变换成a,其他字母变换成为该字线ASCII码顺序后1位的字母,比如o变换成为p。/*c7_12.c*/#includestdio.h#includestring.h#defineMAX50voidencrypt(char*s){for(;*s!='\0';s++)if(*s=='z')*s='a';else*s=*s+1;}voidmain(void){charline[MAX];printf(Inputthestring:);gets(line);encrypt(line);printf(Afterbeingencrypted:%s\n,line);}[习题7-13]设二维整型数组da[4][3],试用数组指针的方法,求每行元素的和。/*c7_13.c*/#includestdio.hvoidmain(void){intda[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*pa)[3];inti,j,s;for(i=0;i4;i++){pa=&da[i];s=0;for(j=0;j3;j++)s+=(*pa)[j];printf(Row:%dSum:%d\n,i,s);}}[习题7-14]编写函数,对二维数组中的对角线内容求和并作为函数的返回值。/*c7_14.c*/#includestdio.h#defineM2#defineN3intf(inty[][N]){intsum=0,i;for(i=0;iN;i++)sum+=*(*(y+i)+i);returnsum;}voidinput_f(intx[][N]){inti,j;printf(输入%d个整数:\n,M*N);for(i=0;iM;i++)for(j=0;jM;j++)scanf(%d,*(x+i)+j);}voidmain(void){intx[M][N];input_f(x);printf(\n对角线和=%d\n,f(x));}[习题7-15]30个学生,5门课,要求在主函数中输入学生成绩,再分别调用各函数实现如下要求:(1)求各门课程的平均分数。(2)找出不及
本文标题:C语言答案第7章
链接地址:https://www.777doc.com/doc-2908405 .html