北京理工大学乐学C语言编程汇编.docx
《北京理工大学乐学C语言编程汇编.docx》由会员分享,可在线阅读,更多相关《北京理工大学乐学C语言编程汇编.docx(167页珍藏版)》请在冰点文库上搜索。
![北京理工大学乐学C语言编程汇编.docx](https://file1.bingdoc.com/fileroot1/2023-6/10/ffb2b264-313c-40a4-b437-09d0546038cf/ffb2b264-313c-40a4-b437-09d0546038cf1.gif)
北京理工大学乐学C语言编程汇编
2018学年第一学期C语言试题汇编
目录:
(O(∩_∩)O同学们乐学C语言学习的好助手来啦!
)
19.判断三角形形状
20.【小学生】计算时钟的夹角
22.【小学生】找出最大素数
24.再算日期(根据星期求日期)
25.【小学五年级】确定母亲节
27.【中学】寻找特殊偶数
28.【中学】寻找阿姆斯特朗数
30.【中学】求最后3位数值
31.【图形】数字菱形
32.【图形】空心的倒三角型
34.【日期】计算后续日期
35.【中学】零钱换整钱
36.【图形】空心数字梯形*
37.晕(回形方阵)
38.【中学】科学记数法*
39.【中学】整数问题
40.数制转换
41.计算通用产品代码(UPC)的校验位
42.五年级小学生的题目
43.【日期】黑色星期五(数组)
H【日期】的奥秘*
H高精度加减法*
44.判断二进制对称数
45.【字符】合并字符串
46.猜数字
47.【大学】北理工的恶龙
48.【数列】等值数列段
49.扫雷
50.【字符】压缩文本文件
H.安全的密码*
H.子数整除*
51.小蜜蜂
52.回文字符串——递归
53.计算子字符串个数
54.【小学递归】杀鸡用牛刀——要用递归啊!
55.【中学】求最大公约数——递归
56.【大学递归】求解平方根
57.【数列递归】求序列之和——递归
H铺地板*(之字方阵)
58.车辆限行
59.采用指针对数组进行排序*
60.合并排序
61.对一个整数数组排序
H二维数组排序*
62.全能战士
63.三角形是一个永不过时的话题
64.学生成绩排序
65.大家一起做游戏*
66.【大学】恭喜发财利是窦来
67.建立正序链表
68.链表排序
69.链表移动
70.求循环节
H.链表处理*
其它:
1.期中测试1
2.期中测试2
3.期中测试3
4.期中测试(周青班)1
5.期中测试(周青班)2
6.期中测试(周青班)3
7.计算字符串中某字符串出现次数
8.编写程序:
从键盘输入两个字符串,找出其中没有同时出现在两个字符串中的字符。
9.合并删除并排序
10.拱猪积分
11.合并果子
12.大数分解(分解质因数)
13.在指定字符后添加字符串
14.合伙捕鱼
15.统计字符串中各字符的数量
16.从指定位置开始删除字符
17.按要求生成矩阵
18.谁能出线
19.数列Sum
20.仲君小组:
排列字符串
21.字符M
22.数字三角形
23.另一种空心数字梯形
24.字符X
25.字符X升级版
26.矩阵转置45°
27.hybest:
A+B
28.寻找矩阵鞍点
29.洗牌
30.整数拆分
正文部分:
19.判断三角形形状:
要求:
输入三角型的三条边,判断三角形的形状。
假设输入的三边边长均>0。
(提示:
本题中应该要用到if语句嵌套)
输入:
三角型的3条边的长度(int型)。
输出:
等边三角形:
equilateraltriangle.
等腰三角形:
isocelestriangle.
不构成三角形:
non-triangle.
一般三角形:
triangle.
测试输入
期待的输出
以文本方式显示
1.2 2 2↵
以文本方式显示
1.equilateral triangle.↵
以文本方式显示
1.3 2 2↵
以文本方式显示
1.isoceles triangle.↵
以文本方式显示
1.1 3 1↵
以文本方式显示
1.non-triangle.↵
以文本方式显示
1.3 4 5↵
以文本方式显示
1.triangle.↵
#include
main()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a+b<=c||a+c<=b||b+c<=a)
printf("non-triangle.\n");
else
if(a==b||b==c||a==c)
if(a==b&&b==c&&c==a)
printf("equilateraltriangle.\n");
else
printf("isocelestriangle.\n");
else
printf("triangle.\n");
}
20.计算时钟夹角:
输入:
每组测试数据包含两个数字:
第一个数字代表小时(大于0小于等于12),第二个数字代表分(在区间[0,59]上)。
输出:
对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。
输出格式如下所示。
再看一看,想一想:
是否可以不用if语句,只使用printf函数来简化你的程序?
#include
#include
main()
{
inta,b;
floatc,e;
scanf("%d%d",&a,&b);
if(b==0)
{
e=180-30*abs(a-6);
printf("At%d:
00theangleis%.1fdegrees.\n",a,e);
}
else
{
c=30*a-5.5*b;
if(c<-180)
{
e=-c-180;
printf("At%d:
%02dtheangleis%.1fdegrees.\n",a,b,e);
}
if(c>=-180&&c<0)
{
e=-c;
printf("At%d:
%02dtheangleis%.1fdegrees.\n",a,b,e);
}
if(c>=0&&c<=180)
printf("At%d:
%02dtheangleis%.1fdegrees.\n",a,b,c);
if(c>180)
{
e=360-c;
printf("At%d:
%02dtheangleis%.1fdegrees.\n",a,b,e);
}
}
}
22.找出最大素数:
输入:
取值围
输出:
该围的最大素数
#include
main()
{
inta,b,c;
scanf("%d",&a);
b=a-1;
while(b>=2)
{
c=a%b;
if(c==0)
{
a--;
b=a-1;
}
else
b--;
}
printf("Themaxprimenumberis%d.\n",a);
}
24.再算日期:
再次给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。
输入:
年月日
输出:
0~6。
星期日用0表示,星期一用1表示,星期二用2表示......星期六用6表示。
假设年份大于1900。
先想一想:
我们现在只会使用if语句,该如何建立数学模型?
#include
main()
{
inta,b,c,e,f,g;
longs=1;
scanf("%d%d%d",&a,&b,&c);
if(b>12||b<1)
printf("monthiserror.\n");
else
{
while(a!
=1900||b!
=1||c!
=1)
{e=(a-1900)%4;
f=(a-1900)%100;
g=(a-1600)%400;//这三个每次都要算!
if(s==1)
{
if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
if(c>31||c<1)
s=0;
if(b==4||b==6||b==9||b==11)
if(c>30||c<1)
s=0;
if(b==2)
if(g==0||f!
=0&&e==0)
if(c>29||c<1)
s=0;
else
if(c>28||c<1)
s=0;
if(s==0)
{printf("dayiserror.\n");
break;
}
}
s++;
c--;
if(c==0)
{
if(b==5||b==7||b==10||b==12)
c=30;
if(b==1||b==2||b==4||b==6||b==8||b==9||b==11)
c=31;
if(b==3)
if(g==0||f!
=0&&e==0)
c=29;
else
c=28;
b--;
}
if(b==0)
{
b=12;
a--;
}
}
if(s!
=0)
printf("%ld\n",s%7);
}
}
25.确定母亲节:
母亲节是每年的五月第二个星期天,针对输入的年份,计算该年的哪一天是母亲节。
输入:
年份
输出:
日期(5月的哪一天)
#include
main()
{
inta,ri,c;
intd,f,g,e;
scanf("%d",&a);
d=(a-1900)%4;
f=(a-1900)%100;
g=(a-1600)%400;
if(g==0||f!
=0&&d==0)
{
ri=365*(a-1900)+(a-1900)/4-(a-1900)/100+(a-1600)/400+121;
e=ri%7;
if(e!
=0)
c=15-e;
else
c=8;
printf("%d\n",c);
}
else
{
ri=365*(a-1900)+(a-1900)/4-(a-1900)/100+(a-1600)/400+121;
e=ri%7;
if(e!
=0)
c=15-e;
else
c=8;
printf("%d\n",c);
}
}
27.寻找特殊偶数:
背景
有一种特殊偶数,它每一位上的数字都两两不相同。
我们现在需要找出四位数中某一区间的这类偶数。
输入
所要寻找的四位偶数的围。
每组输入有两个数字:
第一个数字是最小围;第二个数字是最大围。
如果输入遇到0,输入结束。
输出
列出此围的所有特殊偶数,并且列出此围特殊偶数的个数。
#include
main()
{
inta,b,i,j=0;
intd,e,f,g;
scanf("%d%d",&a,&b);
while(a!
=0&&b!
=0)
{
if(a<1000||b>9999||a>b)
printf("Error\n");
else
{
i=a;
while(i<=b)
{
g=i%10;
f=i/10%10;
e=i/100%10;
d=i/1000;
if(g==f||g==e||g==d||f==e||f==d||e==d)
i=i+2;
else
{
j++;
printf("%d",i);
i=i+2;
}
}
printf("\n");
printf("counter=%d\n",j);
j=0;
}
scanf("%d%d",&a,&b);
}
}
28.寻找阿姆斯特朗数:
请编写一个程序寻找一种特殊整数:
一个n位的正整数等于其各位数字的n次方之和。
例如:
407=4×4×4+0×0×0+7×7×7。
所以407就是一个特殊数。
输入:
正整数的位数n(n<=6)。
输出:
所有此n位特殊数。
每个数占一行。
若不存在符合条件的特殊数,则输出提示:
"Nooutput.”;若存在,则从小到大进行输出。
#include
main()
{
inta,b,c,d,e,f,g;
into=1,p=1,q=1,r=1,s=1,t=1;
intn;
intshang,xia;
inti=1,j,h=0,k=1,l=1;
scanf("%d",&n);
while(i<=n)
{
k=10*k;
i++;
}
shang=k-1;
xia=k/10;
j=xia;
while(j<=shang)
{
a=j%10;
b=j/10%10;
c=j/100%10;
d=j/1000%10;
e=j/10000%10;
f=j/100000%10;
while(l<=n)
{
o=a*o;p=p*b;q=q*c;r=r*d;s=s*e;t=t*f;
l++;
}
g=o+p+q+r+s+t;
if(j==g)
{
printf("%d\n",j);
h++;
}
j++;
l=1;
o=1,p=1,q=1,r=1,s=1,t=1;
}
if(h==0)
printf("Nooutput.\n");
}
31.打印数字菱形:
这是非信息类2013年出的题目,大家来看看,你会做吗?
输入n的值,输出如下例(n=4)所示的数字菱形。
4
434
43234
4321234
43234
434
4
输入:
n
输出:
数字菱形
友情提示:
同学们总结一下打印星号组成的实心图形程序的编程思路:
第一步,打印星号组成的正方形;第二步,改变每行星号的个数,打印每行星号数量不一样的图形;如果是空心图形,每行第一个和最后一个位置输出星号,其他位置输出空格。
现在我们练习输出变化的字符,在打印星号图形的基础上,原来输出*号的位置,将printf("*");改为printf("%2d",x);当然,原来输出一个*号的地方只占一个字符的位置,现在都要改为2个字符的位置,如果输出的是数字且多于2个,则要是%3d或%4d了。
x是多少呢?
则要寻找其规律,就是该输出位置与所在行列的关系。
注意给出的测试用例,输出的数字是左对齐啊。
不用数组就可以完成。
#include
main()
{inti=1,j=1,n,m;
scanf("%d",&n);
m=n;
while(i<=2*n-1)
{
for(;i<=n;i++)
{
for(;j<=n-i;j++)
printf("");
for(m=n;j>n-i&&j<=n;j++)
{printf("%-2d",m);m--;}
for(m=n+1-i;j>n&&j<=n+i-1;j++)
{m++;printf("%-2d",m);}
printf("\n");
j=1;
}
for(;i>n&&i<=2*n-1;i++)
{
for(;j<=i-n;j++)
printf("");
for(m=n;j>i-n&&j<=n;j++)
{printf("%-2d",m);m--;}
for(m++;j>n&&j<=3*n-1-i;j++){
m++;printf("%-2d",m);}
printf("\n");
j=1;
}
}
}
32.打印空心倒三角形:
测试输入
期待的输出
测试用例1
以文本方式显示
1.3↵
以文本方式显示
1.*****↵
2. * *↵
3. *↵
测试用例2
以文本方式显示
1.5↵
以文本方式显示
1.*********↵
2.* *↵
3. * *↵
4. * *↵
5. *↵
#include
main()
{
inti=2,j=1,h;
scanf("%d",&h);
for(;j<=2*h-1;j++)
printf("*");
printf("\n");
if(h>1)
{
while(i<=h)
{
for(j=1;j
for(;j==i;j++)printf("*");
for(;j>i&&j<2*h-i;j++)printf("");
for(;j==2*h-i;j++)printf("*");
printf("\n");
i++;
}
}
}
34.计算后续日期:
我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。
现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。
输入:
年月日
N
输出:
(年月日+N天后的)年.月.日
#include
main()
{inta,b,c;intnian,yue,ri;intm;
scanf("%d%d%d%d",&a,&b,&c,&m);
nian=a;yue=b;ri=c;
while(m>0)
{
switch(yue)
{case1:
case3:
case5:
case7:
case8:
case10:
case12:
{if(ri<=31){ri++;}
if(ri>31){ri=1;yue++;}
}break;
case4:
case6:
case9:
case11:
{if(ri<=30){ri++;}
if(ri>30){ri=1;yue++;}
}break;
case2:
{if(nian%400==0||nian%100!
=0&&nian%4==0)
{if(ri<=29){ri++;}
if(ri>29){ri=1;yue++;}
}
else
{if(ri<=28){ri++;}
if(ri>28){ri=1;yue++;}
}
}break;
}m--;
if(yue==13){nian++;yue=1;ri=1;}
}
printf("%d.%d.%d\n",nian,yue,ri);
}
35.零钱换整钱:
小明手中有硬币,小红手中有若干10元的纸币。
已知1角硬币厚1.8mm,5角硬币厚1.5mm,1元硬币厚2.0mm。
小红拿出若干10元的纸币,小明要将1角的硬币放成一摞,将5角的硬币放成一摞,将1元的硬币放成一摞,如果3摞硬币一样高,且三摞硬币的金额之和正好等于小红要求的面值,则双方交换,否则没有办法交换。
输入:
小红希望交换几10元的纸币
输出:
1角的数量,5角的数量,1元的数量
#include
main()
{
inta,d,e,f;
floatx,y,z;
scanf("%d",&a);
x=25.0/4*a;
y=15.0/2*a;
z=45.0/8*a;
d=x;
e=y;
f=z;
if(x!
=d||y!
=e||z!
=f)
printf("Nochange.\n");
else
printf("%d,%d,%d\n",d,e,f);
}
36.空心数字梯形
输入行数n和首数字字符,在屏幕上输出由数字围起的高和下底宽度均n的空心梯形。
要求:
输出的数字是循环的,即输出数字9后再输出的数字是0。
输入:
行数n和首字符
输出:
空心梯形
测试输入
期待的输出
以文本方式显示
1.5 5↵
以文本方式显示
1.5 6 7 8 9 0 1 0 9 8 7 6 5↵
2. 6 6↵
3. 7 7↵
4. 8 8↵
5. 9 0 1 0 9↵
以文本方式显示
1.1 0↵
以文本方式显示
1.0↵
以文本方式显示
1.2 9↵
以文本方式显示
1.9 0 0 9↵
2. 0 0↵
以文本方式显示
1.3 1↵
以文本方式显示
1.1 2 3 4 3 2 1↵
2. 2 2↵
3. 3 4 3↵
以文本方式显示
1.6 6↵
以文本方式显示
1.6 7 8 9 0 1 2 3 3 2 1 0 9 8 7 6↵
2. 7 7↵
3. 8 8↵
4. 9 9↵
5. 0 0↵
6. 1 2 3 3 2 1↵
以文本方式显示
1.9 9↵
以文本方式显示
1.9 0 1 2 3 4 5 6 7 8 9 0 1 0 9 8 7 6 5 4 3 2 1 0 9↵
2. 0 0↵
3. 1 1↵
4. 2 2