当前位置:文档之家› 程序设计实验及在线指导课后习题答案

程序设计实验及在线指导课后习题答案

程序设计实验及在线指导课后习题答案第二章/*一:求平均年龄描述班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。

输入第一行有一个整数n(1<= n <= 100),表示学生的人数。

其后n行每行有1个整数,取值为15到25。

输出输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。

样例输入21817样例输出17.50提示要输出浮点数、双精度数小数点后2位数字,可以用下面这种形式:printf("%.2f", num);#include<stdio.h>int main(){int n,i,age;double sum,average;sum=0.00;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&age);sum+=age;}average=sum/n;printf("%.2f\n",average);}/*二:数字求和描述给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少?输入输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。

输出输出一行,给出一个正整数,是5个数中小于a 的数的和。

样例输入10 1 2 3 4 11样例输出10#include<stdio.h>int main(){int a,i,s[5];int sum;sum=0;scanf("%d",&a);for(i=0;i<5;i++){scanf("%d",&s[i]);}for(i=0;i<5;i++)if(s[i]<a)sum+=s[i];}printf("%d\n",sum);}/*三:两倍:描述给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。

比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。

输入输入包括多组测试数据。

每组数据包括一行,给出2到15个两两不同且小于100的正整数。

每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。

输入的最后一行只包括一个整数-1,这行表示输入数据的结束,不用进行处理。

对每组输入数据,输出一行,给出有多少个数对满足其中一个数是另一个数的两倍。

样例输入1 4 32 9 7 18 22 02 4 8 10 07 5 11 13 1 3 0-1样例输出320*/#include<stdio.h>int main(){int a[16],i;int count,j,m=0;while(1){scanf("%d",&a[0]);if(a[0]==-1)break;m=0;for(i=1;;i++){scanf("%d",&a[i]);m++;if(a[i]==0)break;}count=0;j=m;while(j--){for(i=0;i<m;i++){if(a[j]==2*a[i])count++;}}printf("%d %d\n",count,m); }}}}四:肿瘤面积/*描述在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0表示。

其它肿瘤内和肿瘤外的点都用255表示。

现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。

已知肿瘤的边缘平行于图像的边缘。

输入只有一个测试样例。

第一行有一个整数n,表示正方形图像的边长。

其后n行每行有n个整数,取值为0或255。

整数之间用一个空格隔开。

已知n不大于1000。

输出输出一行,该行包含一个整数,为要求的肿瘤内的像素点的个数。

样例输入5255 255 255 255 255255 0 0 0 255255 0 255 0 255255 0 0 0 255255 255 255 255 255样例输出1提示如果使用静态数组来表示图片数据,需要将该数组定义成全局变量。

*/#include<stdio.h>int s[1000][1000];int main(){int n,i,j,b,c,k,t;int area;area=0;scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<n;j++){scanf("%d",&s[i][j]); }j=0;for(i=0;i<n;i++){if(s[i][j]==0){b=i;t=j;break;}j++;}i=0;for(j=0;j<n;j++){if(s[i][j]==0){c=j;k=i;}i++;}area=(k-b-1)*(c-t-1);printf("%d %d %d %d %d\n",area,b,c,k,t); }/*五:肿瘤检测描述一张CT扫描的灰度图像可以用一个N*N (0<N<100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-255。

我们假设给定的图像中有且只有一个肿瘤。

在图上监测肿瘤的方法如下:如果某个点对应的灰度值小于等于50,则这个点在肿瘤上,否则不在肿瘤上。

我们把在肿瘤上的点的数目加起来,就得到了肿瘤在图上的面积。

任何在肿瘤上的点,如果它是图像的边界或者它的上下左右四个相邻点中至少有一个是非肿瘤上的点,则该点称为肿瘤的边界点。

肿瘤的边界点的个数称为肿瘤的周长。

现在给定一个图像,要求计算其中的肿瘤的面积和周长。

输入输入第一行包含一个正整数N(0<N<100),表示图像的大小;接下来N行,每行包含图像的一行。

图像的一行用N个整数表示(所有整数大于等于0,小于等于255),两个整数之间用一个空格隔开。

输出输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。

样例输入699 99 99 99 99 9999 99 99 50 99 9999 99 49 49 50 5199 50 20 25 52 9940 50 99 99 99 9999 99 99 99 99 99样例输出9 8*/#include<stdio.h>int s[1000][1000];int main(){int n,i,j;int area,permit;area=0;permit=0;scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<n;j++){scanf("%d",&s[i][j]);}for(i=0;i<n;i++)for(j=0;j<n;j++)if(s[i][j]<=50){area++;if(s[i-1][j]>50||s[i+1][j]>50||s[i][j-1]>50||s[i][j+1]>50)permit++;}printf("%d %d\n",area,permit);}/*八:简单密码描述Julius Caesar曾经使用过一种很简单的密码。

对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文。

比如字符A用F来代替。

如下是密文和明文中字符的对应关系。

密文A B C D E F G H I J K L M N O P Q R S T U V W X Y Z明文V W X Y Z A B C D E F G H I J K L M N O P Q R S T U你的任务是对给定的密文进行解密得到明文。

你需要注意的是,密文中出现的字母都是大写字母。

密文中也包括非字母的字符,对这些字符不用进行解码。

输入输入中的测试数据不超过100组。

每组数据都有如下的形式,而且各组测试数据之间没有空白的行。

一组测试数据包括三部分1.起始行- 一行,包括字符串"START"2.密文- 一行,给出密文,密文不为空,而且其中的字符数不超过2003.结束行- 一行,包括字符串"END"在最后一组测试数据之后有一行,包括字符串"ENDOFINPUT"。

输出对每组数据,都有一行输出,给出密文对应的明文。

样例输入STARTNS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX ENDSTARTN BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJENDSTARTIFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ ENDENDOFINPUT样例输出IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSESI WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROMEDANGER KNOWS FULL WELL THATCAESAR IS MORE DANGEROUS THAN HE*/#include<stdio.h>#include<string.h>int main(){char s[201],end[201];charb[27]="VWXYZABCDEFGHIJKLMNOPQRS TU";int i,len;gets(s);while(strcmp(s,"START")==0){gets(s);len=strlen(s);for(i=0;i<len;i++){if(s[i]>='A'&&s[i]<='Z')s[i]=b[s[i]-'A'];}gets(end);printf("%s\n",s);gets(s);}}第三章一:十进制到八进制#include<stdio.h>int main(){int n,i,j;int s[200];scanf("%d",&n);i=0;while(n>0){s[i]=n%8;n=n/8;i++;}for(j=i-1;j>=0;j--){printf("%o",s[j]);}}二:八进制到十进制#include<stdio.h>#include<string.h>int main(){int i,len,ret;char s[100];ret=0;scanf("%s",&s); len=strlen(s);for(i=0;i<len;i++) {ret*=8;ret+=s[i]-'0';}printf("%d\n",ret); }三:二进制到十六进制#include <stdio.h>#include <string.h>char alp[]="0123456789ABCDEF";int main(){int result = 0,ret;int i,len,t,j,k,p;char a[10002];char res[100];scanf("%d",&t);getchar();while(t--){ret=0;gets(a);len=strlen(a);for(i=0;i<len;i++){ret*=2;ret+=a[i]-'0';}j=0;while(ret>0){result=ret%16;res[j]=alp[result];ret=ret/16;j++;}for (i=j-1;i>=0;i--)printf("%c",res[i]);putchar('\n');}}#include <stdio.h>#include <string.h>char alp[]="0123456789ABCDEF"; int main(void){int result = 0,ret;int i,len,t,j,k,p;char a[10002];char res[100];scanf("%d",&t);getchar();while(t--){ret=0;gets(a);len=strlen(a);strrev(a);j=0;for (i=0;i<len;i+=4){result=0;p=1;for (k=i;k<i+4 && k<len;k++,p*=2)result+=(a[k]-'0')*p;res[j++]=alp[result];}for (i=j-1;i>=0;i--)printf("%c",res[i]);putchar('\n');}}/*m进制到n进制*/#include<stdio.h>#include<string.h>char apl[]="0123456789ABCDEF"; int main(){int ret,result;int m,n,t,i,j,len;char a[100002];char b[100002];scanf("%d",&t);getchar();while(t--){scanf("%d %d",&m,&n);ret=0;scanf("%s",a);len=strlen(a);for(i=0;i<len;i++){if(a[i]-'0'>=m)continue;ret*=m;ret+=a[i]-'0';}j=0;while(ret>0){result=ret%n;b[j]=apl[result];ret=ret/n;j++;}for(i=j-1;i>=0;i--){printf("%c",b[i]);}putchar('\n');}}/*将字符串倒着输出*/#include<stdio.h>#include<string.h>int main(){int t;char a[10002];scanf("%d",&t);getchar();while(t--){gets(a);strrev(a);printf("%s\n",a);}}第八章一:计算对数#include<stdio.h>#include<math.h>int main(){int a,b;int x,n;double temp;scanf("%d",&n);while(n--){scanf("%d %d",&a,&b);temp=log10(b)*1.0/log10(a);x=(int) temp;printf("%d\n",x);}}。

相关主题