北理工C语言三四五章答案参考.docx
- 文档编号:10051908
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:22
- 大小:22.73KB
北理工C语言三四五章答案参考.docx
《北理工C语言三四五章答案参考.docx》由会员分享,可在线阅读,更多相关《北理工C语言三四五章答案参考.docx(22页珍藏版)》请在冰豆网上搜索。
北理工C语言三四五章答案参考
第三章:
3-1.打印菱形图形
成绩:
10/折扣:
0.8
输入n,输出如下例(n=3)所示的边长为n的菱形:
*
***
*****
***
*
输入:
边长n
输出:
边长为n的菱形
#include"stdio.h"
main()
{intn,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{for(j=1;j<=n-i;j++)printf("");
for(j=1;j<=2*i-1;j++)printf("*");
printf("\n");}
for(i=1;i<=n-1;i++)
{for(j=1;j<=i;j++)printf("");
for(j=1;j<=2*n-2*i-1;j++)printf("*");
printf("\n");}
}
3-2.打印平行四边形
成绩:
10/折扣:
0.8
输入图形的高n和首字符c,输出如下例(c='A',n=5)所示的图形.
ABCDE
BCDEF
CDEFG
DEFGH
EFGHI
输入:
高n和首字符c
输出:
高为n和首字符为c的平行四边形
#include"stdio.h"
main()
{intn,i,j;
charc;
scanf("%d,&c",&n,&c);
c=getchar();
for(i=1;i<=n;i++)
{for(j=1;j<=i-1;j++)printf("");
for(j=1;j<=n;j++)putchar(c+i+j-2);
printf("\n");}
}
3-3.求和
成绩:
10/折扣:
0.8
输入整数m和正整数n,按下列公式计算s:
s=m-(m+1)+m+2-(m+3)+……+(-1)n(m+n)。
输入:
m和n
输出:
s
#include"stdio.h"
main()
{intm,n,s,k,i,j;
scanf("%d%d",&m,&n);
s=m;
for(i=1;i<=n;i++)
{k=m+i;
for(j=1;j<=i;j++)k=(-1)*k;
s=s+k;}
printf("s=%d\n",s);
}
3-4字符加密输出
成绩:
10/折扣:
0.8
从键盘上输入一个字符,进行加密以后再输出在屏幕上。
加密规律是:
输入小写英文字母时,输入a输出Z、输入b输出Y、输入c输出X、...、输入z输出A。
输入大写英文字母时,将该字母ASCII码值再加上该值的1/2后输出所对应的字符,例如数字A的ASCII码值是65,加上其值的1/2后是98(小数四舍五入),则输出字符‘b’。
输入数字时,将该数字原ASCII码值再加上该值十进制的十位上的数后输出,例如数字9的ASCII码值是57,加上十位上的数5后是62,则输出字符‘>’。
输入其他字符时原样输出。
友情提示:
整数之间运算的结果要取整,例如5/2的结果是2,而5.0/2.0对小数四舍五入的结果就是3.0了。
所以输入大写英文字母时的输出要仔细考虑。
#include"stdio.h"
main()
{charc;
c=getchar();
if(c>=97&&c<=122)putchar(187-c);
elseif(c>=65&&c<=90)
{if(c%2==0)putchar(c*3/2);
elseputchar(c*3/2+1);}
elseif(c>=48&&c<=57)putchar(c+c/10%10);
elseputchar(c);
printf("\n");
}
3-5.计算时钟的夹角
成绩:
10/折扣:
0.8
背景:
钟面上的时针和分针之间的夹角总是在0度~359度之间。
举例来说,在十二点的时候两针之间的夹角为0度,而在六点的时候夹角为180度,在三点的时候为90度。
本题要解决的是计算12:
00到11:
59之间任意一个时间的夹角。
输入:
每组测试数据包含两个数字:
第一个数字代表小时(大于等于0小于等于12),第二个数字代表分(在区间[0,59]上)。
输出:
对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。
输出格式如下所示。
输入:
1230
输出:
At12:
30theangleis165.0degrees.
友情提示:
以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。
#include"stdio.h"
main()
{inta,b;
floatx;
scanf("%d%d",&a,&b);
if(a<12)x=30*a+0.5*b-6*b;
elsex=0.5*b-6*b;
if(x<0)x=-x;
if(b>=10)printf("At%d:
%dtheangleis%.1fdegrees.\n",a,b,x);
elseprintf("At%d:
0%dtheangleis%.1fdegrees.\n",a,b,x);
}
3-6.求亲密数
成绩:
10/折扣:
0.8
若正整数A的全部约数(包括1,不包括A本身)之和等于B;且整数B的全部约数(包括1,不包括B本身)之和等于A,则A、B为亲密数。
编程,输入正整数A,输出亲密数A,B(A<=B),若不存在亲密数,则输出“Nooutput(回车)”。
例如:
220和284就是一对亲密数。
220的约数是:
1、2、4、5、10、11、20、22、44、55、110,约数之和是284;284的约数是:
1、2、4、71、142,约数之和是220。
#include"stdio.h"
main()
{intA,B=0,C=0,i,k;
scanf("%d",&A);
for(i=2;i<=A;i++)
{k=A/i;
if(A%i==0)B=B+k;}
for(i=2;i<=B;i++)
{k=B/i;
if(B%i==0)C=C+k;}
if(A==C){if(A
elseif(A>B)printf("%d-%d\n",B,A);}
elseprintf("Nooutput\n");
}
4-1打印空心等腰梯形
成绩:
10/折扣:
0.8
输入n值,输出如下例(n=4)所示的高和上底均为n的等腰梯形:
****
**
**
**********
输入:
高n
输出:
高和上底均为n的等腰梯形
#include"stdio.h"
intmain()
{intn,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{if(i==1||i==n)
{for(j=1;j<=n-i;j++)printf("");
for(j=1;j<=n+2*i-2;j++)printf("*");}
elsefor(j=1;j<=2*n+i-2;j++)
{if(j==n-i+1||j==2*n+i-2)printf("*");
elseprintf("");}
printf("\n");}
}
4-2.反序输出整数
成绩:
10/折扣:
0.8
输入一个整数N,要求以相反的顺序输出该数,例如,N=-1234,输出-4321。
输入:
整数N
输出:
N的反序数
#include"stdio.h"
intmain()
{intN,M=0,L,i=1,k=1,j,a[100],b[100];
scanf("%d",&N);
if(N>=0)L=N;
elseL=-N;
while(L/k*10>=10)
{a[i]=L/k%10;b[i]=k;k=10*k;i++;}
for(j=1;j<=i-1;j++)M=a[j]*b[i-j]+M;
if(N<0)M=-M;
printf("%d\n",M);
}
4-3.求最大、次大、最小和次小值
成绩:
10/折扣:
0.8
输入n和n个整数及其序号(如:
15,145,2...),依次输出n个整数的最大值、次大值、最小值、次小值及其原始序号。
输入:
n和n个整数及其序号
输出:
n个整数的最大值、次大值、最小值、次小值及其原始序号
#include"stdio.h"
intmain()
{intn,i,a[100],b[100],max,min,x,y;
scanf("%d\n",&n);
for(i=0;i<=n-1;i++)scanf("%d,%d",&a[i],&b[i]);
x=y=max=min=0;
for(i=0;i<=n-1;i++){if(a[i]>a[max])max=i;
if(a[i] if(x==max)x=min;if(y==min)y=max; for(i=0;i<=n-1;i++){if(a[i]>a[x]&&a[i] if(a[i]a[min])y=i;} printf("%d,%d%d,%d\n",a[max],b[max],a[x],b[x]); printf("%d,%d%d,%d\n",a[min],b[min],a[y],b[y]); } 4-4.10进制数转换为16位二进制数 成绩: 10/折扣: 0.8 将任一正整数(<32768)转换为16位二进制形式。 输入: 正整数 输出: 正整数的16位二进制数 #include"stdio.h" intmain() {intN,i=1,k=1,j,a[16]; scanf("%d",&N); while(N/k*2>=2) {a[i]=N/k%2;k=2*k;i++;} for(j=1;j<=17-i;j++)printf("0"); for(j=1;j<=i-1;j++)printf("%d",a[i-j]); printf("\n"); } 4-5.打印实心正方形 成绩: 10/折扣: 0.8 上次你已经打印了一行*号,这次在屏幕上输出一个由星号组成的n行n列的正方形。 程序输入n值,输出如下例(n=4)所示的高和上底均为n的正方形: **** **** **** **** 输入: 高n 输出: n行n列的正方形 #include"stdio.h" intmain() {intn,i,j; scanf("%d",&n); for(i=1;i<=n;i++) {for(j=1;j<=n;j++)printf("*"); printf("\n");} } 4-6.学习成绩归类 成绩: 10/折扣: 0.8 学生的学习成绩是百分制,成绩的归类标准是: 90<=成绩<=100为"super"; 80<=成绩<90为"good"; 70<=成绩<80为"ok"; 60<=成绩<70为"pass" 成绩<60为"nogood"。 编写程序。 输入若干个成绩,输出成绩和相应的等级。 输入成绩为负时,程序结束,输入成绩大于100分,显示“inputerror”。 #include"stdio.h" intmain() {inta; do{scanf("%d",&a); if(a>100)printf("%d\"inputerror\"\n",a); if(a>=90&&a<=100)printf("%d\"super\"\n",a); if(a>=70&&a<80)printf("%d\"ok\"\n",a); if(a>=80&&a<90)printf("%d\"good\"\n",a); if(a>=60&&a<70)printf("%d\"pass\"\n",a); if(a>=0&&a<60)printf("%d\"nogood\"\n",a);} while(a>=0); } 4-7.输出星期几的英文表示 成绩: 10/折扣: 0.8 输入用数字(1--7)表示的星期几,输出星期几的英文表示,输入的数字有误,输出单词"Error(回车)"。 #include"stdio.h" intmain() {intn; scanf("%d",&n); if(n==1)printf("Monday\n"); elseif(n==2)printf("Tuesday\n"); elseif(n==3)printf("Wednesday\n"); elseif(n==4)printf("Thursday\n"); elseif(n==5)printf("Friday\n"); elseif(n==6)printf("Saturday\n"); elseif(n==7)printf("Sunday\n"); elseprintf("Error\n"); } 4-8.求最大数和最小数的算数运算结果 成绩: 10/折扣: 0.8 输入若干个整数,及其要进行的算术运算(+|-|*|/)符号,输出最大整数与最小整数进行给定的算术运算的结果。 输入的整数范围是(0~65535),输入等号作为输入的结束,输出格式见例题。 输入: 整数序列及其运算序号 输出: 最大数与最小数的算术运算式 #include"stdio.h" intmain() {charch; intn=0,max,min,i0,n0,i=n0=0;i0=100;ch=48; while((ch=getchar())! ='=') {if(ch>='0'&&ch<='9'){n=10*n+ch-48;i=10*i+ch-48;} else{if(ch==',') {if(n>n0)max=n;elsemax=n0; if(i i0=min;n0=max; i=0;n=0;} else{switch(ch) {case'+': printf("%d+%d=%d\n",max,min,max+min);break; case'-': printf("%d-%d=%d\n",max,min,max-min);break; case'*': printf("%d*%d=%d\n",max,min,max*min);break; case'/': if(min! =0)printf("%d/%d=%d\n",max,min,max/min); elseprintf("Error! \n");}break;} } } ch=getchar(); } 4-9.黑色星期五 成绩: 10/折扣: 0.8 在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。 所以,不管哪个月的13日又恰逢星期五就叫“黑色星期五”。 输入某年年号和该年的元旦是星期几(1-7),输出该年所有的“黑色星期五”的日期(年/月/日)。 输入: 4位年号和该年元旦是星期几 输出: 所有的“黑色星期五”的日期(年/月/日) #include"stdio.h" intmain() {inta,b,k; scanf("%d%d",&a,&b); if(a%100%4==0)k=29; elsek=28; {if((12+b)%7==5)printf("%d/1/13\n",a); if((12+b+31)%7==5)printf("%d/2/13\n",a); if((12+b+31+k)%7==5)printf("%d/3/13\n",a); if((12+b+31+k+31)%7==5)printf("%d/4/13\n",a); if((12+b+31+k+31+30)%7==5)printf("%d/5/13\n",a); if((12+b+31+k+31+30+31)%7==5)printf("%d/6/13\n",a); if((12+b+31+k+31+30+31+30)%7==5)printf("%d/7/13\n",a); if((12+b+31+k+31+30+31+30+31)%7==5)printf("%d/8/13\n",a); if((12+b+31+k+31+30+31+30+31+31)%7==5)printf("%d/9/13\n",a); if((12+b+31+k+31+30+31+30+31+31+30)%7==5)printf("%d/10/13\n",a); if((12+b+31+k+31+30+31+30+31+31+30+31)%7==5)printf("%d/11/13\n",a); if((12+b+31+k+31+30+31+30+31+31+30+31+30)%7==5)printf("%d/12/13\n",a);} } 第五章: 5-1.打印空心菱形 成绩: 10/折扣: 0.8 输入图形的高n和顶行字符c。 输出如下例(c='A',n=5)所示的图形。 A BB CC DD EE DD CC BB A 输入: 高n和顶行字符c 输出: 空心菱形 #include"stdio.h" main() {intn,i,j; charc; scanf("%d,%d",&n,&c); c=getchar(); for(i=1;i<=n;i++) {for(j=1;j<=n+i-1;j++) {if(j==n-i+1||j==n+i-1)putchar(c+i-1); elseprintf("");} printf("\n");} for(i=1;i<=n-1;i++) {for(j=1;j<=2*n-i-1;j++) {if(j==i+1||j==2*n-i-1)putchar(c+n-i-1); elseprintf("");} printf("\n");} } 5-2.求各位数字之和等于5且能被5整除的整数 成绩: 10/折扣: 0.8 输入正整数M和N(M,N均小于10000),输出M和N之间所有满足下列条件的所有整数: 整数的各位数字之和等于5且能被5整除。 若没有满足条件的整数,则输出: Nooutput 输入: 整数区间m,n 输出: 各位数字之和等于5且能被5整除的所有整数 #include"stdio.h" intmain() {intM,N,K,a,b,c,d,p=0; scanf("%d%d",&M,&N); for(K=M;K<=N;K++) {a=K/1000;b=K/100%10; c=K/10%10;d=K%10; if(a+b+c+d==5&&K%5==0) {printf("%d\n",K);p=1;}} if(p==0)printf("Nooutput\n"); } 5-3.学生成绩排序 成绩: 10/折扣: 0.8 按学生的序号输入n名学生的成绩,按照分数由高到低的顺序输出学生的名次、序号和成绩,要求成绩相同的学生具有相同的名次。 输入: 学生人数和n名学生的成绩 输出: 按分数由高到低的顺序输出学生的名次、序号和成绩 #include"stdio.h" intmain() {intn,i,j,k,a[20],b[20]; scanf("%d\n",&n); for(i=0;i b[0]=b[n-1]=a[0]; for(i=0;i if(a[i] for(i=1;i for(i=0;i if(a[j]b[i+1])b[i+1]=a[j];} for(i=0;i for(j=0;j<=i;j++){for(k=0;k if(a[k]==b[j])printf("%d: %d,%d\n",j+1,k+1,a[k]);} } 5-4.打印×空心菱形 成绩: 10/折扣: 0.8 输入图形的高,输出如下例(n=5时)所示的图形。 * ** ** ** ** ** ** ** * 输入: 高n 输出: 空心菱形 友情提示: 第一步,先输出由*号组成的n行的实心正三角形和n-1行的实心倒三角形; 第二步,通过判断原每行的第一个和最后一个输出*号,其余位置输出空格。 #include"stdio.h" intmain() {intn,i,j; scanf("%d",&n); for(i=1;i<=n;i++) {for(j=1;j<=n+i-1;j++) {if(j==n-i+1||j==n+i-1)printf("*"); elseprintf("");} printf("\n");} for(i=1;i<=n-1;i++) {for(j=1;j<=2*n-i-1;j++) {if(j==i+1||j==2*n-i-1)printf("*"); elseprintf("");} printf("\n");} } 5-5.马戏团观众人数 成绩: 10/折扣: 0.8 一个马戏团表演,n个座位全满,全部门票收入是120元,现在知道,男人每人5元,女人每人2元,小孩每人1角。 编程,输入总人数n,输出满足要求的男人、女人和小孩人数的全部方案。 若n人无法满足条件,则输出“Nooutput\n”。 输入: 人数n 输出: 男人、女人和小孩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北理工 语言 三四 答案 参考