C语言题解1013.docx
- 文档编号:29739653
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:67
- 大小:33.75KB
C语言题解1013.docx
《C语言题解1013.docx》由会员分享,可在线阅读,更多相关《C语言题解1013.docx(67页珍藏版)》请在冰豆网上搜索。
C语言题解1013
第10章
1.输入3个整数,按由小到大的顺序输出。
#include<>
#include<>
intmain()
{
inti,j,k,temp;
int*p1,*p2,*p3;
printf("请输入三个数,中间用空格分隔:
");
scanf("%d%d%d",&i,&j,&k);
p1=&i;
p2=&j;
p3=&k;
if(*p1<*p2){
temp=*p1;
*p1=*p2;
*p2=temp;
}
if(*p1<*p3){
temp=*p1;
*p1=*p3;
*p3=temp;
}
if(*p2<*p3){
temp=*p2;
*p2=*p3;
*p3=temp;
}
printf("三个数新的顺序是%d%d%d\n",*p1,*p2,*p3);
return0;
}
2.输入3个字符串,按由小到大的顺序输出。
voidsort(char*s[],intk)
{
char*temp;
inti,j;
for(i=0;i for(j=0;j if(strcmp(s[i],s[j])<0){ temp=s[i]; s[i]=s[j]; s[j]=temp; } } 3.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 写3个函数: ①输入10个数;②进行处理;③输出10个数。 #include<> voidmain() { intnumber[10]; voidinput(int*a,intn); voidmax_min_value(int*a,intn); voidoutput(int*a,intn); input(number,10); max_min_value(number,10); output(number,10); } voidinput(int*a,intn) { inti; printf("Input%dnumber: ",n); for(i=0;i scanf("%d",&a[i]); } voidmax_min_value(int*a,intn) { inti; intmin,max,temp; min=a[0]; max=a[n-1]; for(i=0;i { if(a[i] { temp=a[0]; a[0]=a[i]; a[i]=temp; } if(a[i]>max) { temp=a[n-1]; a[n-1]=a[i]; a[i]=temp; } } } voidoutput(int*a,intn) { inti; for(i=0;i printf("%d",a[i]); printf("\n"); } 4.有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前面m个数(循环移位)。 写一函数实现以上功能。 #include<> voidmain() { intnumber[10]; voidinput(int*a,intn); voidCircleMove(int*a,intn,intm); voidoutput(int*a,intn); input(number,10); CircleMove(number,10,5); output(number,10); } voidinput(int*a,intn) { inti; printf("Input%dnumber: ",n); for(i=0;i scanf("%d",&a[i]); } voidCircleMove(int*a,intn,intm) { inti; voidMove(int*a,intn); for(i=0;i { Move(a,n); } } voidMove(int*a,intn) { inti; inttemp; temp=a[n-1]; for(i=n-1;i>0;i--) { a[i]=a[i-1]; } a[0]=temp; } voidoutput(int*a,intn) { inti; for(i=0;i printf("%d",a[i]); printf("\n"); } 5.有n个人围成一圈,顺序排号。 从第1个人开始报数(从1到3报数),凡报到3的人离开圈子,问最后留下的是原来第几号的那位? intJosephus(inta[],intk,intbase) { inti,j,m,*p; p=a; for(i=0;i i=0;/*i为每次循环时的计数变量*/ j=0;/*j为按1,2,3报数时的计数变量*/ m=0;/*m为退出人数*/ while(m 执行循环体*/ if(*(p+i)! =0)j++; if(j==base){/*对退出的人的标号置为0*/ *(p+i)=0; j=0; m++; } i++; if(i==k)i=0;/*报数到尾后,i恢复为0*/ } while(*p==0)p++; return*p; } 6.写一函数,求一个字符串的长度。 在main函数中输入字符串,并输出其长度。 intLength(char*p) { intn; n=0; while(*p! ='\0') { n++; p++; } returnn; } 7.有一字符串,包含n个字符。 写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 voidcopysubstr(char*p1,char*p2,intn) { intn=0; while(n { n++; p1++; } while(*p1! ='\0') { *p2=*p1; p1++; p2++; } *p2='\0'; } 8.输入一行文字,找出其中大写字母、小写字母、数字、空格及其他字符各有多少? #include<> voidmain() { intUpper,Lower,Num,Space,Others; Upper=Lower=Num=Space=Others=0; chartext[80]; char*p; printf("请输入文字: "); gets(text); for(p=text;*p! ='\0';p++) { if(*p>='A'&&*p<='Z') Upper++; elseif(*p>='a'&&*p<='z') Lower++; elseif(*p>='0'&&*p<='9') Num++; elseif(*p=='') Space++; else Others++; } printf("大写字母个数为%d\n",Upper); printf("小写字母个数为%d\n",Lower); printf("数字个数为%d\n",Num); printf("空格个数为%d\n",Space); printf("其他字符个数为%d\n",Others); } 9.写一函数,将一个3×3的整数型矩阵转置。 #include<> voidmain() { voidmove(int*p); inta[3][3],*p,i; printf("Inputmatrix: \n"); for(i=0;i<3;i++) scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]); p=&a[0][0]; move(p); printf("Now,matrix: \n"); for(i=0;i<3;i++) printf("%d%d%d\n",a[i][0],a[i][1],a[i][2]); } voidmove(int*p) { inti,j,t; for(i=0;i<3;i++) for(j=i;j<3;j++) { t=*(p+3*i+j); *(p+3*i+j)=*(p+3*j+i); *(p+3*j+i)=t; } } 10.将一个5×5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放),写一函数实现之。 用main函数调用。 #include<> voidmain() { voidchange(int*p); inta[5][5],*p,i,j; printf("Inputmatrix: \n"); for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); p=&a[0][0]; change(p); printf("Now,matrix: \n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%d",a[i][j]); printf("\n"); } } voidchange(int*p) { inti,j,temp; int*pmax,*pmin; pmax=p; pmin=p; for(i=0;i<5;i++) for(j=i;j<5;j++) { if(*pmax<*(p+5*i+j)) pmax=p+5*i+j; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j; } temp=*(p+12); *(p+12)=*pmax; *pmax=temp; temp=*p; *p=*pmin; *pmin=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)! =p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; temp=*pmin; *pmin=*(p+4); *(p+4)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)! =(p+4))&&((p+5*i+j)! =p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; temp=*pmin; *pmin=*(p+20); *(p+20)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)! =p)&&((p+5*i+j)! =(p+4))&&((p+5*i+j)! =(p+20))&&(*pmin<*(p+5*i+j))) pmin=p+5*i+j; temp=*pmin; *pmin=*(p+24); *(p+24)=temp; } 11.在主函数中输入10个等长的字符串。 用另一函数对它们排序。 然后在主函数中输出这10个已排好序的字符串。 略 12.用指针数组处理上一题目,字符串不等长。 voidsort(char*s[],intk) { char*temp; inti,j; for(i=0;i for(j=0;j if(strcmp(s[i],s[j])<0){ temp=s[i]; s[i]=s[j]; s[j]=temp; } } 13.写一个用矩形法求定积分的通用函数,分别求 , , 说明: sin、cos、exp函数已在系统的数学函数库中,程序开头要用#include<> #include<> #include<> typedefdouble(*FUN)(double);将n个数按输入时顺序的逆序排列,用函数实现。 #include<> #defineN10 voidmain() { voidsort(int*p,intn); inti; inta[N]; for(i=0;i { printf("请输入第%d个数: ",i); scanf("%d",&a[i]); } sort(a,N); for(i=0;i printf("%d",a[i]); printf("\n"); } voidsort(int*p,intn) { inti,temp; for(i=0;i { temp=p[i]; p[i]=p[n-1-i]; p[n-1-i]=temp; } } 15.有一个班4个学生,5门课程。 ①求第一门课程的平均分;②找出有2门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。 分别编3个函数实现以上3个要求。 #include<> #defineM4 #defineN5 voidmain() { floataverage(floata[M][N]); voidfail(floata[M][N]); voidgood(floata[M][N]); floata[M][N]; inti,j; for(i=0;i { printf("请输入第%d个同学的成绩: \n",i); for(j=0;j { printf("第%d门课程成绩: ",j); scanf("%f",&a[i][j]); } } printf("第一门课程的平均成绩为%f\n",average(a)); fail(a); good(a); } floataverage(floata[M][N]) { inti; floatsum=0; for(i=0;i sum=sum+a[i][0]; returnsum/M; } voidfail(floata[M][N]) { intflag[M]; inti,j; intcount; floatsum; for(i=0;i { count=0; for(j=0;j { if(a[i][j]<60) count++; } if(count>1) flag[i]=1; else flag[i]=0; } for(i=0;i { if(flag[i]) { sum=0; printf("学号: %d\n",i); for(j=0;j { printf("第%d门课程成绩: %f\n",j,a[i][j]); sum=sum+a[i][j]; } printf("平均成绩: %f\n",sum/N); } } } voidgood(floata[M][N]) { intflag[M]; inti,j; intcount; floatavg,sum; for(i=0;i { count=0; sum=0; for(j=0;j { sum=sum+a[i][j]; if(a[i][j]>85) count++; } avg=sum/N; if(avg>90||count>N-1) flag[i]=1; else flag[i]=0; } for(i=0;i { if(flag[i]) { sum=0; printf("学号: %d\n",i); for(j=0;j { printf("第%d门课程成绩: %f\n",j,a[i][j]); sum=sum+a[i][j]; } printf("平均成绩: %f\n",sum/N); } } } 16.输入一个字符串,内有数字和非数字字符,例如: A123x45617960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中。 例如,123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。 #include<> voidmain() { charstr[50],*pstr; inti,j,k,m,e10,digit,ndigit,a[10],*pa; printf("Inputastring: \n"); gets(str); printf("\n"); pstr=&str[0]; pa=&a[0]; ndigit=0; i=0; j=0; while(*(pstr+i)! ='\0') { if((*(pstr+i)>='0')&&(*(pstr+i)<='9')) j++; else { if(j>0) { digit=*(pstr+i-1)-48; k=1; while(k { e10=1; for(m=1;m<=k;m++) e10=e10*10; digit=digit+(*(pstr+i-1-k)-48)*e10; k++; } *pa=digit; ndigit++; pa++; j=0; } } i++; } if(j>0) { digit=*(pstr+i-1)-48; k=1; while(k { e10=1; for(m=1;m<=k;m++) e10=e10*10; digit=digit+(*(pstr+i-1-k)-48)*e10; k++; } *pa=digit; ndigit++; j=0; } printf("Thereare%dnumbersinthisline.Theyare: \n",ndigit); j=0; pa=&a[0]; for(j=0;j printf("%d",*(pa+j)); printf("\n"); } 17.写一函数,实现两个字符串的比较。 即自己写一个strcmp函数,函数原型为: intstrcmp(char*p1,char*p2); 设p1指向字符串s1,p2指向字符串s2。 要求当s1=s2时,返回值为0;若s1≠s2时,返回它们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14)。 如果s1>s2,则输出正值;如果s1>s2,则输出负值。 #include<> intstrcmp(char*p1,char*p2); voidmain() { intm; charstr1[20],str2[20],*p1,*p2; printf("Inputtwostrings: \n"); scanf("%s",str1); scanf("%s",str2); p1=&str1[0]; p2=&str2[0]; m=strcmp(p1,p2); printf("result: %d.\n",m); } intstrcmp(char*p1,char*p2) { inti=0; while(*(p1+i)==*(p2+i)) if(*(p1+i++)=='\0') return0; return*(p1+i)-*(p2+i); } 18.编一程序,输入月份号,输出该月的英文月名。 例如,输入3,则输出March,要求用指针数组处理。 #include<> voidmain() { char*month_name[13]={ "illegalmonth","January","February","March","April","May", "June","July","August","September","October","November","December"}; intn; printf("Inputmonth: \n"); scanf("%d",&n); if((n<=12)&&(n>=1)) printf("Itis%s.",*(month_name+n)); else printf("Itiswrong.\n"); } 19.编写一个函数alloc(n),用来在内存区新开辟一个连续的空间(n个字节)。 此函数的返回值是一个指针,指向新开辟的连续空间的起始地址。 再写一个函数free(p),将地址p开始的各单元释放(不能再被程序使用,除非再度开辟)。 #defineNULL0 #defineALLOCSIZE1000 charallocbuf[ALLOCSIZE]; char*allocp=allocbuf; char*alloc(intn) { if(allocp+n<=allocbuf+ALLOCSIZE) { allocp+=n; returnallocp-n; } else retur
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 题解 1013
![提示](https://static.bdocx.com/images/bang_tan.gif)