北京理工大学乐学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型)。

输出:

等边三角形:equilateral triangle.

等腰三角形:isoceles triangle.

不构成三角形: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()

{

int a,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("equilateral triangle.\n");

else

printf("isoceles triangle.\n");

else

printf("triangle.\n");

}

20.计算时钟夹角:

输入:

每组测试数据包含两个数字:第一个数字代表小时( 大于0 小于等于12) ,第二个数字代表分( 在区间[0, 59] 上) 。

输出:

对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。

再看一看,想一想:是否可以不用if 语句,只使用printf 函数来简化你的程序?

#include

#include

main()

{

int a,b;

float c,e;

scanf("%d %d",&a,&b);

if(b==0)

{

e=180-30*abs(a-6);

printf("At %d:00 the angle is %.1f degrees.\n",a,e);

}

else

{

c=30*a-5.5*b;

if(c<-180)

{

e=-c-180;

printf("At %d:%02d the angle is %.1f degrees.\n",a,b,e);

}

if(c>=-180&&c<0)

{

e=-c;

printf("At %d:%02d the angle is %.1f degrees.\n",a,b,e);

}

if(c>=0&&c<=180)

printf("At %d:%02d the angle is %.1f degrees.\n",a,b,c);

if(c>180)

{

e=360-c;

printf("At %d:%02d the angle is %.1f degrees.\n",a,b,e);

}

}

}

22.找出最大素数:

输入:

取值围

输出:

该围的最大素数

#include

main()

{

int a,b,c;

scanf("%d",&a);

b=a-1;

while (b>=2)

{

c=a%b;

if(c==0)

{

a--;

b=a-1;

}

else

b--;

}

printf("The max prime number is %d.\n",a);

}

24.再算日期:

再次给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。

输入:

年月日

输出:

0~6。

星期日用0 表示,星期一用1 表示,星期二用2 表示......星期六用6 表示。假设年份大于1900。先想一想:我们现在只会使用if 语句,该如何建立数学模型?

#include

main()

{

int a,b,c,e,f,g;

long s=1;

scanf("%d %d %d",&a,&b,&c);

if(b>12||b<1)

printf("month is error.\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("day is error.\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()

{

int a,ri,c;

int d,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()

{

int a,b,i,j=0;

int d,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位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:"No output.”;若存在,则从小到大进行输出。

#include

main()

{

int a,b,c,d,e,f,g;

int o=1,p=1,q=1,r=1,s=1,t=1;

int n;

int shang,xia ;

int i=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("No output.\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()

{ int i=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()

{

int i=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()

{ int a,b,c; int nian,yue,ri; int m;

scanf("%d %d %d %d",&a,&b,&c,&m);

nian=a; yue=b;ri=c;

while(m>0)

{

switch ( yue )

{ case 1:case 3:case 5:case 7:case 8:case 10:case 12:

{ if(ri<=31) { ri++;}

if(ri>31) { ri=1;yue++;}

} break;

case 4:case 6:case 9:case 11:

{ if(ri<=30) { ri++;}

if(ri>30) { ri=1;yue++;}

} break;

case 2:

{ 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()

{

int a,d,e,f;

float x,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("No change.\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↵

5. 3 3↵

6. 4 4↵

7. 5 5↵

8. 6 6↵

9. 7 8 9 0 1 0 9 8 7↵

以文本方式显示1. 3 9↵以文本方式显示

1.9 0 1 2 1 0 9↵

2. 0 0↵

3. 1 2 1↵

#include

main()

{

int i,j,k,n,m; //k为操作数

scanf("%d %d",&n,&m);//n行,m首

for(i=0;i

{

if(i==0)

{

for(j=0;j<=(3*n-3)/2;j++)

printf("%-2d",(m+j)%10);

if(n%2==1)

j-=2;

else

j--;

for( ;j>=0;j--)

{ if(j!=0)

printf("%-2d",(m+j)%10);

else

printf("%d\n",m);

}

}

else

if(i==n-1)

{

for(j=1;j

printf(" ");

for(j=0;j<=(n-1)/2;j++)

printf("%-2d",(m+i+j)%10);

if(n%2==1)

j-=2;

else

j--;

for( ;j>=0;j--)

{

if(j==0)

printf("%d\n",(m+i)%10);

else

printf("%-2d",(m+i+j)%10);

}

}

else

{

for(j=0;j

printf(" ");

printf("%-2d",(m+i)%10);

for(j=1;j<=3*n-4-2*i;j++)

printf(" ");

printf("%d\n",(m+i)%10);

}

}

}

37.晕(回形方阵):

n。正方形的边长

输出:

边长为n 的数字回形方阵。

期待的输出时间限制

以文本方式显示1.3↵以文本方式显示

1. 1 2 3↵

2. 8 9 4↵

3. 7 6 5↵

以文本方式显示1.4↵以文本方式显示

1. 1 2 3 4↵

2. 12 13 14 5↵

3. 11 16 15 6↵

4. 10 9 8 7↵

#include

main()

{ int a[10][10];

int i=0,j=0,n,k,b,m=1; //i、j行列,m计数字,k为循环总数,b为循环次数。

scanf("%d",&n);

k=(n+1)/2;

for( b=1;b<=k;b++)

{ for(i=b-1,j=b-1;j<=n-b;m++,j++)

a[i][j]=m;

i++;

for(j=n-b;i<=n-b;m++,i++)

a[i][j]=m;

j--;

for(i=n-b;j>=b-1;m++,j--)

a[i][j]=m;

i--;

for(j=b-1;i>=b;m++,i--)

a[i][j]=m;

j++;

}

for(i=0,j=0;i<=n-1;i++)

for(j=0;j<=n-1;j++)

{

if(j

printf("%3d",a[i][j]);

if(j==n-1)

printf("%3d\n",a[i][j]);

}

}

38.科学记数法:

对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的2.3×106(计算机中的科学记数法表示为:2.3E6),或者9.18×10-5 (科学记树法表示:9.18E-5)这种类型的数据。

输入:

用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。

输出:

该数据的双精度表示

说明:

输入数据的精度不高于小数点后50位。

输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。

结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。输入输出

以文本方式显示

1. 1.2345 E 3↵以文本方式显示

1.1234.50000000↵

以文本方式显示

1. 1.2345 e-3↵以文本方式显示

1.0.00123450↵

以文本方式显示

1. 2.123456789 e 20↵以文本方式显示

1.9123.45678900↵

以文本方式显示1. 1 E 0↵以文本方式显示

1. 1.00000000↵

以文本方式显示2.90 E 1↵以文本方式显示22.34567890↵

#include

#include

main()

{

char a[100];

char temp;

int i,j,k;

scanf("%s %*c %d",&a,&i);

k=strlen(a);

for(j=k;j<=99;j++)

a[j]='0'; //注意变量围if(i>0)

{

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

a[j]=a[j+1];

a[1+i]='.';

f or(j=0;j<=9+i;j++)

printf("%c",a[j]);

}

if(i<0)

{

i=-i;

for(j=k-1;j>=2;j--)

a[j+i]=a[j];

a[i+1]=a[0];

for(j=0;j<=i;j++)

a[j]='0';

a[1]='.';

for(j=0;j<=9;j++)

printf("%c",a[j]);

}

if(i==0)

printf("1.00000000\n");

}

39.整数问题

请输出满足以下条件的n 位正整数的个数:

要求该n位整数的从高位开始前1 位可以被1 整除,前2 位可以被2*2 整除,前3 位可以被3*3 整除,前4 位可以被4*4 整除......。即该整数前k 位都可被k 平方整除。

例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12, 16, 20, 24, 28, 32, 36, 40, 44, 48,52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2 可以被1整除;前2位24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。

输入:

n(0<=n<9)

输出:

符合该条件的n位正整数的数量

(本题目为软件学院2007年保研学生初试上机试题。本题可以不用数组)

#include

main()

{

int w,i=0; // w为位数,i为计数器

long powerf(int );

long p,h,k,x,t,n; //h为操作数,k为余数,x为前t位操作数

scanf("%d",&w);

if(w>3)

{

for(h=p=powerf(w-1);h<10*p;h++)

{

for(x=h,t=w-1;t>1;x=x/10,t--)

{

k=x%(t*t);

if(k!=0)

break;

}

if(t==1)

for(n=10*h;n<10*h+10;n++)

if(n%(w*w)==0)

i++;

}

}

else

for(h=p=powerf(w);h<10*p;h++)

{

for(x=h,t=w;t>1;x=x/10,t--)

{

k=x%(t*t);

if(k!=0)

break;

}

if(t==1)

i++;

}

printf("%d\n",i);

}

long powerf(int n) // n是位数

{ long i=1;

if(n==0)

return i;

else

for(n--;n>0;n--)

i*=10;

return i;

}

40.数制转化:

我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。

这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如12 和5 ,在十进制下它们是不等的,但若12 使用3 进制而5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制,12 和5 就可以是相等的。

2019-北京理工大学-成教-《c语言程序设计》期末测试卷(4)

[试题分类]:C语言程序设计 1.下列叙述中,错误的是 A. 一个C语言程序必须有且只有一个主函数 B. C语言程序的注释必须位于语句之后 C. 一个C语言程序可以有多个函数 D. C语言程序的基本结构是函数 答案:B 题型:单选题 知识点:第2章 C语言概述 难度:1 2.下列选项中,所有符号均为C语言关键字的选项是 A. enum,if B. include,else C. scanf,struct D. continue,repeat 答案:A 题型:单选题 知识点:第2章 C语言概述 难度:1 3.下列选项中,可以正确表示字符型常数的是 A. 297 B. "a" C. "\n" D. '\t' 答案:D 题型:单选题 知识点:第3章数据类型与运算规则 难度:1

4.下列C语言运算符中,要求操作数必须是int类型的是 A. ++ B. -- C. % D. / 答案:C 题型:单选题 知识点:第3章数据类型与运算规则 难度:1 5.若有定义“int w=1,x=2,y=3,z=4;”,则条件表达式“w>x w : y

if((++i<0) && !(j--<0)) printf("%d %d\n",i,j); else printf("%d %d\n",j,i); A. -1 1 B. 0 0 C. 0 1 D. 1 0 答案:D 题型:单选题 知识点:第5章选择结构的程序设计 难度:2 8.下列叙述中,错误的是 A. 循环语句中使用continue语句是为了结束本次循环,而不是终止整个循环 B. 循环语句中使用break语句是为了使流程跳出循环体,提前结束循环 C. switch语句中使用break语句或continue语句的作用是相同的 D. break语句不能用于循环语句和switch语句以外的其他语句 答案:C 题型:单选题 知识点:第5章选择结构的程序设计 难度:2 9.若有定义“int x=10,i;”,则下列语句执行后的结果是 for (i=0; x>8; ) printf ("%d ",--x); A. 10 9 B. 9 8 C. 死循环 D. 语句错误 答案:B 题型:单选题 知识点:第6章循环结构的程序设计

C语言程序设计下mooc标准答案

C语言程序设计下mooc答案

————————————————————————————————作者:————————————————————————————————日期:

2016.03.28—06.30 北京理工大学 MOOC C语言程序设计(下)网上作业答案 第一周编程作业 1、求最大公约数和最小公倍数(15分) 题目内容: 编写程序,在主函数中输入两个正整数 a,b,调用两个函数 fun1() 和 fun2(),分别求a 和 b 的最大公约数和最小公倍数,在主函数中输出结果。 输入格式: 两个正整数 输出格式: 最大公约数和最小公倍数 输入样例: 12,40[回车] 输出样例: 最大公约数:4[回车] 最小公倍数:120[回车] 时间限制:500ms内存限制:32000kb Code: #include int fun1(int m,int n) { int r;

r=m%n; return r==0?n:fun1(n,r); } int fun2(int m,int n) { int t; t=m*n/fun1(m,n); return t; } int main() { int t,m,n; scanf("%d,%d",&m,&n); if(m

北京理工大学乐学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.整数拆分

2019-北京理工大学-成教-《C语言程序设计》期末测试卷 (3)

[试题分类]:C语言程序设计 1.下列选项中,不属于C语言特点的是 A. 能实现汇编语言的大部分功能 B. 语言简洁、紧凑、使用方便 C. 数据类型丰富,可移植性好 D. 有较强的网络操作功能 答案:D 题型:单选题 知识点:第2章 C语言概述 难度:1 2.下列选项中,正确的C语言标识符是 A. \n B. %d C. _123 D. #define 答案:C 题型:单选题 知识点:第2章 C语言概述 难度:1 3.在C语言中,错误的int类型常数是 A. 0 B. 038 C. 0xAF D. 32765 答案:B 题型:单选题 知识点:第3章数据类型与运算规则难度:1

4.若有定义“int x=5,y=5,z=5;”,执行语句“x%=y+z;”后,x的值是 A. 6 B. 5 C. 1 D. 0 答案:B 题型:单选题 知识点:第3章数据类型与运算规则 难度:2 5.若有定义“int x=3,y=4,z=5;”,则下列表达式中值不为1的是 A. 'x'&&'y' B. x<=y C. x||y+z&&y-z D. !((x

if(i++==1&&(++j==3||k++==3)) printf("%d %d %d\n",i,j,k); A. 1 2 3 B. 2 3 4 C. 2 2 3 D. 2 3 3 答案:D 题型:单选题 知识点:第5章选择结构的程序设计 难度:2 8.{ 若有定义“int x=1,y=1,m=1,n=0;”,则执行下列语句后,变量x和y的值分别是 switch (m) \{ case 0: x=x*2; case 1: switch (n) \{ case 1: x=x*2; case 2: y=y*2; break; default: x++; \} case 2: x++; y++; case 3: x*=2; y*=2; break; default: x++;y++; \} } A. x=6,y=4 B. x=2,y=1 C. x=3,y=2 D. x=7,y=5 答案:A

c语言图形编程教程

c语言图形编程教程 C语言图形编程是指利用C语言进行图形界面的开发和绘图操作。它可以帮助开发者实现各种图形界面应用程序,如游戏、绘图工具、数据可视化等。 要进行C语言图形编程,首先需要选择一个合适的图形库来进行开发。目前,常见的图形库有Windows GDI、OpenGL、SDL等。其中,Windows GDI适用于Windows平台的开发,OpenGL适用于跨平台开发,而SDL则是一个跨平台的图形库,可以在多个操作系统上进行开发。 在开始图形编程之前,需要了解如何初始化图形环境、创建窗口和处理用户输入等基本操作。具体的步骤包括引入相应的头文件、初始化图形环境、创建窗口和消息循环等。这些操作可以使用相应的图形库提供的函数来实现。 一旦图形环境初始化完成,就可以使用相应的图形库提供的函数来绘制各种图形。例如,可以使用线段函数来绘制直线,使用矩形函数来绘制矩形等。此外,图形库还提供了颜色设置、文字绘制等功能,可以帮助开发者实现更加丰富和多样化的图形效果。 在进行图形编程时,还需要了解坐标系统的概念。在大多数图形库中,坐标系统的原点一般位于左上角,X轴正方向向右,Y轴正方向向下。通过了解坐标系统的概念,可以更加准确地控制图形的位置和大小。

除了基本的图形绘制外,C语言图形编程还可以进行动画效果 的实现。例如,可以通过循环不断地改变图形的位置和大小,从而实现图形的移动效果。此外,还可以对图形进行旋转、缩放等操作,实现更加复杂和生动的动画效果。 总结起来,C语言图形编程是一种实现各种图形界面应用程序 的方法。它通过选择合适的图形库,初始化图形环境,使用相应的函数进行图形绘制,实现丰富和多样化的图形效果。同时,还可以进行动画效果的实现,提升程序的交互性和视觉效果。通过学习和掌握C语言图形编程,开发者可以更加便捷地实 现自己的创意和想法。

汇编语言与c语言混合编程

汇编语言与c语言混合编程 汇编语言与C语言混合编程是一种程序设计方法,它将汇编语言和C 语言结合起来使用,以实现更高效、更灵活的程序设计。在这种编程方法中,汇编语言主要用于实现底层操作,而C语言则用于实现高层逻辑。下面将详细介绍汇编语言与C语言混合编程的基本原理、优点及注意事项。 一、基本原理 在汇编语言与C语言混合编程中,通常采用的方法是通过汇编代码调用C函数或者将C函数嵌入到汇编代码中。具体来说,可以使用以下两种方式: 1. 汇编代码调用C函数 在这种方式下,首先需要定义一个extern类型的函数声明,并在需要调用该函数的地方使用call指令进行调用。例如: extern int add(int a, int b); ... mov eax, 1

mov ebx, 2 call add ... 其中add是一个C函数,在汇编代码中通过extern关键字进行声明,并使用call指令进行调用。 2. 将C函数嵌入到汇编代码中 在这种方式下,可以使用asm关键字将一段汇编代码嵌入到C函数中。例如: int main() { int a = 1; int b = 2; asm("mov eax, %0\n" "add eax, %1\n" "mov %0, eax\n" : "+r" (a) : "r" (b) : "eax"); return a;

} 在这个例子中,使用asm关键字将一段汇编代码嵌入到了main函数中。该汇编代码实现了对a和b的相加操作,并将结果保存在a中。 二、优点 汇编语言与C语言混合编程具有以下几个优点: 1. 提高程序效率 汇编语言可以直接操作硬件,因此在需要进行底层操作或者对性能要求较高的场合下,使用汇编语言可以提高程序的效率。 2. 增强程序灵活性 C语言具有良好的可移植性和易读性,而汇编语言则具有更高的灵活性。通过将两者结合起来使用,既可以充分利用C语言的优点,又可以发挥汇编语言的灵活性,从而增强程序的灵活性。 3. 便于调试 在使用纯汇编语言进行开发时,由于其代码量较大且难以理解,因此

嵌入式实验:C语言与汇编语言编程实验

C语言与汇编语言编程实验 一、实验内容 编写程序实现如下目的:从汇编语言切换到C语言代码,然后在C代码中分别使用内嵌汇编语言和回报子函数的方法实现同一功能。 二、实验代码 ①新建asse2.s文件,并参考如下代码编辑该文件: */ global_start global asse_add text EQU num,20 */ */ _start; MOV sp,#0x31000000 B Main */ Asse_add; ADD r0,ro,r1 MOV pc,1r End ②Main.c文件,参考代码: Extern int asse_add(intx,inty); Ixnt embed_add(int x,int y); V oid Main() { Int x,y; X=asse_add(10,20); Y=embed_add(10,20); } Int embed_add(int x,int y) { _asm_(“add r0,r0,r1 ”) } 三、实验结果及分析 1.测试asse2工程,下载程序后,单步执行程序,执行过程中打开寄存器窗

口和变量观察窗口观察Main函数中x和y的变化,如图1-1和图1-2所示。 图1-1 图1-2

四、实验体会 这次实验主要是让我们掌握ADT IDE中编写汇编语言和C语言混合编程程序。并将这两种语言相互调用的过程了解,明白GNU中内嵌汇编语言的编程方法。在实验过程中需要我们从汇编语言切换到C语言,并在C代码中分别使用内嵌汇编语言和汇编子函数的方法实现同一功能,实验的内容比较容易理解,但对于实验的中所包含的知识还需要进一步的学习和掌握。

C语言与汇编语言的代码互转研究

C语言与汇编语言的代码互转研究 在计算机科学中,C语言和汇编语言都是非常重要的编程语言。C语言具有高层语言的特性,有较强的可读性和可维护性,适合编写大型软件项目。而汇编语言则是一种底层语言,能够直接管理计算机硬件资源,适合编写高性能的程序。 在某些情况下,需要将C语言和汇编语言进行互转。这种转换可以使得C语言编写的程序更加高效,也可以帮助汇编语言程序员更好地理解和调试代码。一、C语言转换为汇编语言 C语言转换为汇编语言的方法有两种:手动转换和自动转换。 手动转换是指人工将C语言代码逐行转换为汇编语言代码,这需要程序员对汇编语言有较深的理解和掌握。手动转换的好处是能够精确地控制程序的执行过程,但是代价是耗费时间和精力。 自动转换是指使用专门的工具将C语言代码转换为汇编语言代码。目前市面上有很多C语言编译器可以直接将C代码转换为汇编代码,如GCC、Clang等。这种方法的好处是省时省力,但是可能存在性能损失,转换后的代码可能不够优化。 二、汇编语言转换为C语言 汇编语言转换为C语言的方法也有两种:手动转换和自动转换。 手动转换是指程序员通过阅读汇编代码,尝试将其代码转换为C语言代码。这种方法需要对汇编语言和C语言都有较深的理解和掌握。 自动转换是指使用专门的工具将汇编代码转换为C语言代码。目前市面上有很多反汇编工具可以将汇编代码转换为C语言代码,如IDA Pro、Ghidra等。这种方法能够节省程序员的时间和精力,但是转换的C语言代码可能不够优化,需要进行手动调整。

三、代码互转的注意事项 在进行C语言和汇编语言的代码互转时,需要注意一些问题: 1. 不同的编译器可能会产生不同的汇编代码,因此需要保证编译器的一致性。 2. 汇编代码中一些指令可能是平台相关的,需要根据不同的处理器架构进行适配。 3. C语言和汇编语言的数据表示方式可能不同,需要进行类型转换和位运算。 4. 在代码转换后,需要进行性能测试和调优,以保证程序的高效性。 总之,C语言和汇编语言的代码互转是一项非常有用的技术,能够为程序员提供更多的思路和选择。但是需要好的理解和掌握,才能将这项技术应用到实际的软件开发中。

C语言经典编程100例

C语言经典编程100例 程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假设兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 2.程序源代码: main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控制输出,每行四个*/ f1=f1+f2; /*前两个月加起来赋值给第三个月*/ f2=f1+f2; /*前两个月加起来赋值给第三个月*/ } } ============================================================== 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 如此明确此数不是素数,反之是素数。 2.程序源代码: #include "math.h" main() { int m,i,k,h=0,leap=1; printf("\n"); for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) {printf("%-4d",m);h++; if(h%10==0) printf("\n"); } leap=1; } printf("\nThe total is %d",h); } 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进展分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

2022年北京理工大学公共课《C语言》科目期末试卷B(有答案)

2022年北京理工大学公共课《C语言》科目期末试卷B(有答案) 一、填空题 1、假设变量a和b均为整型,以下语句可以不借助任何变量把a、b中的值进行交换。请填空。 a+=_______;b=a-_______;a-=_______; 2、在C语言源程序中,一个变量代表【】。 3、一个C语言源程序由若干函数组成,其中至少应含有一个________ 4、若x和n均是int型变量,且x和n的初值均为5,则执行表达式x+=n++后x的值 为_______,n的值为_______。 5、若a是int型变量,则表达式(a=4*5,a*2),a+6的值为_______。 6、测试char型变量a第6位是否为1的表达式是_______(设最右位是第1位)。 7、函数swap(int x,inty)可完成对x和y值的交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为_______,原因是_______。 a[o]=1;a[1]=2; swap(a[o],a[1]); 8、字符串"ab\n\\012\\\"”的长度是_______。 9、下面程序段将输出computer。请填空。 char c[]="It is a computer"; for(i=0;_______;i++) {_______;printf("%c",c[j]);}

10、以下程序段通过指针变量q,但不移动q,将如图所示连续动态存储单元的值,从第一个元素起依次输出到终端屏幕。请填空。(假设程序段中的所有变量均已正确说明。) for(k=0;k<10;k++) printf("%d,",_______); printf("\n"); 二、选择题 11、下面4个选项中,是不合法的整型常量的选项是 ( )。 A.--0f1 B.-0Xcdf C.-018 D.-0x48eg 0xfff 017 999 -0680 011 12.456 5e2 03f 12、下面4个选项中,是不合法的用户标识符的选项是( )。 A.A B.float C.b-a D._123 P_01 a0 goto temp Do A int INT 13、以下叙述不正确的是( ) A.一个C源程序可由一个或多个函数组成 B.一个C源程序必须包含一个main函数 C.C程序的基本组成单位是函数 D.在C程序中,注释说明只能位于一条语句的后面 14、以下叙述正确的是

北理工C语言编程网上作业答案

北理工C语言编程网上作业答案 H1:计算通用产品代码(UPC)的校验位(选作) 成绩: 5 / 折扣: 0.8 背景 许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。这种被称为通用产品代码(Universal Product Code,缩写UPC)的条码可以识别生产商和产品。超市可以通过扫描产品上的条码来确定支付此项商品的费用。每一个条码由十二位数字构成,通常这些数字会显示在条码下面。例如,包装为26盎司的Morton牌碘化盐所用条码下的数字是: 0 24600 01003 0 第一个数字表示商品的种类(0表示大部分的食品杂货,2表示需要称量的货品,3表示药品或和健康相关的商品,而5表示优惠券)。接下来的一组五位数字用来识别生产商。而第二组五位数字则用来区分产品类型(其中包括包装尺寸)。最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。 下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton 碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。把第一组加法值乘以3后再加上第二组加法值得到的结果是30。再减去1,结果变为29。再把这个值除以10取余数为9。9在减去余数结果9,最终值为0。 输入 每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC

北京理工大学C语言编程

时间限制内存限制额外进程测试输入期待的输出

时间限制内存限制额外进程测试输入期待的输出

4.int i,n; 5.long m; 6. scanf("%d",&n); 7. i=1; 8. m=1; 9.do{m=m*i; 10. i=i+1; 11. }while(i<=n); 12.if(m>=0) 13. printf("%ld\n",m); 14.else 15. printf("N is too big!\n"); 16.} 2-2. 求正弦函数值 成绩: 10 / 折扣: 0.8 已知求正弦sin(x) 的近似值的多项式公式为: sin(x) = x - x3/3! + x5/5! - x7/7!+ …… + (-1)n x2n+1/(2n+1)! + … 编写程序,要求输入x (单位是弧度)和ε,按上述公式计算sin(x) 的近似值,要求计算的误差小于给定的ε。 此题当然要用到循环语句,到第六章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和上次计算的值的差小于给定的ε。求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在math.h里。 友情提示:给定的误差值ε越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。如果出现死循环的情况,可以用+键退出程序。 测试输入期待的输出时间限 制 内存限 制 额外进 程

#include #include main() { int i; double x,e,a,b,sin; i=3; scanf("%lf %lf",&x,&e); a=x; sin=x; do{a=a*x*x/i/(i-1); a=-a; i=i+2; sin+=a; b=fabs(a); } while(b>=e); printf("%f\n",sin); } 2-3. 判断输入的字符的类型 成绩: 10 / 折扣: 0.8 我们将字符分为五类:大写字母、小写字母、数字、控制字符、其他字符。 编写程序,从键盘输入一个字符,输出字符所属的类型:大写字母时输出capital letters,小写字母时输出small letters,数字是输出figures,控制字符时输出control characters,其他字符时输出others。 时间限制内存限制额外进程测试输入期待的输出

c语言基础编程训练题

c语言基础编程训练题注意:部分代码双引号中英文有问题,自己调整! 1.输入2个整数,求两数的平方和并输出。 #include main() { int a,b,s; printf("please input a,b:\n"); scanf("%d%d",&a,&b); s=a*a+b*b; printf("the result is %d\n",s); } 2. 输入一个圆半径(r)当r>=0时,计算并输出圆的面积和周长,否则,输出提示信息。 #include #define PI 3.14 main() { float r ,s , l; printf("please input r:\n"); scanf("%f",&r);

if (r>=0) {s=pi*r*r; l=2*i*r ; printf("the area is %f\n",s); printf("the circumference is %f\n",l);} else printf("input error!\n"); } 3、函数y=f(x)可表示为: 2x+1 (x<0) y= 0 (x=0) 2x-1 (x>0)编程实现输入一个x值,输出y值。 main() {int x,y; scanf("%d",&x); If(x<0)y=2*x+1; If(x>0)y=2*x-1;

If(x==0) y=0; printf(“%d”,y);} 4、编写一个程序,从4个整数中找出最小的数,并显示此数。 main( ) {int a,b,c,d,t; scanf ("%d,%d,%d,%d",&a,&b,&c,&d); if (a>b) {t=a; a=b; b=t;} if (a>c) {t=a; a=c; c=t;} if (a>d) {t=a; a=d; d=t;} printf ("min = %d \n",a); } 5.有一函数当x<0时y=1,当x>0时,y=3,当x=0时y=5,编程,从键盘输入一个x值,输出y值。 main() {int x,y; scanf("%d",&x); if (x<0) y=1;

c语言 编程及答案

1、输入一个字符,判断它是否是大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。 #include int main() { char c1; printf("input a latter:\n"); scanf("%c",&c1); if(c1>='A'&&c1<='Z') c1=c1+32; printf("%c",c1); return 0; } 2、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include int main() { char c; int letters=0,space=0,digit=0,other=0; printf("Please input letters:\n"); while((c=getchar())!='\n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c>='0'&&c<='9') digit++; else if(c==' ') space++; else other++; } printf("字母数:%d\n数字数:%d\n空格数:%d\n其他字母数:%d\n",letters,digit,space,other); return 0; } 3、编写一个函数,求数列1+1/2+1/3+1/4+1/5+...1/n,利用主函数调用这个函数并输出结果。#include int main() { int n;float c; float sum(int n); scanf("%d",&n); c=sum(n); printf("%f\n",c);

C语言程序设计下mooc答案

—06.30北京理工大学M O O C C语言程序设计(下)网上作业答案 第一周编程作业 1、求最大公约数和最小公倍数(15分) 题目内容: 编写程序,在主函数中输入两个正整数 a,b,调用两个函数 fun1() 和 fun2(),分别求 a 和 b 的最大公约数和最小公倍数,在主函数中输出结果。 输入格式: 两个正整数 输出格式: 最大公约数和最小公倍数 输入样例: 12,40[回车] 输出样例: 最大公约数:4[回车] 最小公倍数:120[回车] 时间限制:500ms内存限制:32000kb Code: #include int fun1(int m,int n) { int r; r=m%n;

return r==0?n:fun1(n,r); } int fun2(int m,int n) { int t; t=m*n/fun1(m,n); return t; } int main() { int t,m,n; scanf("%d,%d",&m,&n); if(m

10个整数 输入样例: 2,3,1,5,6,76,89,31,90[回车] 7[回车] 输出样例: 1,2,3,5,6,7,31,76,89,90[回车] 时间限制:500ms内存限制:32000kb Code: #include int main() { int t,j,i,n[10]; for(i=0; i<9; i++) { scanf("%d", &n[i]); if(i<8) scanf(","); } scanf("%d",&n[9]) ; for(i=0;i<9;i++) { for(j=0;j<= 8-i;j++) { if(n[j] > n[j+1]) { t = n[j];

相关文档
最新文档