北京理工大学乐学C语言编程参考答案及解析(中)31-50题.docx

北京理工大学乐学C语言编程参考答案及解析(中)31-50题.docx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

北京理工大学乐学C语言编程参考答案及解析中(31-50题)

第四周31-36题

31.数字菱形

输入n的值,输出如下例(n=4)所示的数字菱形。

4

434

43234

4321234

43234

434

4

输入:

???n

输出:

??数字菱形

友情提示:同学们总结一下打印星号组成的实心图形程序的编程思路:第一步,打印星号组成的正方形;第二步,改变每行星号的个数,打印每行星号数量不一样的图形;如果是空心图形,每行第一个和最后一个位置输出星号,其他位置输出空格。

现在我们练习输出变化的字符,在打印星号图形的基础上,原来输出*号的位置,将printf(*)改为printf(%2d,x);当然,原来输出一个*号的地方只占一个字符的位置,现在都要改为2个字符的位置,如果输出的是数字且多于2个,则要是%3d或%4d了。

x是多少呢?则要寻找其规律,就是该输出位置与所在行列的关系。

注意给出的测试用例,输出的数字是左对齐啊。不用数组就可以完成。

解析//将菱形理解为两个倒三角形分开打印,同时打印图形类题目注意输出的格式

参考代码:

#includestdio.h

intmain()

{

intn,i,j;

scanf(%d,n);

for(i=1;i=n;i++)//上半部分第1~n行共n行

{

for(j=1;j=n-i;j++)printf();//第i行出现第一个数字前会有n-i个空位

for(j=n;jn-i;j--)printf(%-2d,j);

//第i行最小数字是n-i+1打印第i行中的前半部分n~n-i+1

for(j=n-i+2;j=n;j++)printf(%-2d,j);//打印第i行中后半部分n-i+2~n

printf(\n);

}

for(i=n-1;i0;i--)//下半部分第n+1~2n-1行共n-1行

{

for(j=1;j=n-i;j++)printf();//利用第i行与第2n-i行对称

for(j=n;jn-i;j--)printf(%-2d,j);

for(j=n-i+2;j=n;j++)printf(%-2d,j);

printf(\n);

}

return0;

}

32.空心的倒三角型

请根据要求打印空心倒三角形。

输入:

???输入三角形的高度(h0)。

输出:

打印相应的空心倒三角形。图样参见测试用例。

解析//注意将第一行与其它行分类讨论

参考代码:

#includestdio.h

intmain()

{

intn,i,j;

scanf(%d,n);

for(i=1;i=n;i++)//直接打印i行

{

if(i==1)for(j=1;j2*n;j++)printf(*);//区分比较特殊的第1行

elseif(i==n)//区分比较特殊的第n行

{

for(j=1;jn;j++)printf();

printf(*);

}

else//打印第2~n-1行用for直接控制打印*或空格

{

for(j=1;ji;j++)printf();

printf(*);

for(j=i;j2*n-i-1;j++)printf();

printf(*);

}

printf(\n);

}

return0;

}

33.组成最大数

任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入1593,则输出为9531。

这道题可以用数组。

输入:自然数n

输出:各位数字组成的最大数

解析//数组中的冒泡排序应用问题

参考代码:

#includestdio.h

intmain()

{

chars[30],t;

inti,j,n=0;

scanf(%s,s);

while(s[n]!=\0)n++;//判断输入结束格式

for(i=0;in-1;i++)//冒泡排序法

{

for(j=i+1;jn;j++)

{

if(s[i]s[j]){t=s[i],s[i]=s[j],s[j]=t;}

}

}

printf(%s\n,s);

return0;

}

34.计算后续日期

我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。

输入:

?年月日

?N

输出:

(年月日+N天后的)年.月.日

解析//蔡勒公式变式的推广应用,相较于再算星期会更加复杂一些

参考代码:

#in

您可能关注的文档

文档评论(0)

Clomitius Swan + 关注
实名认证
内容提供者

愿海风与你同在,即便在没有我的地方

1亿VIP精品文档

相关文档