北理C语言作业及答案2
- 格式:doc
- 大小:267.00 KB
- 文档页数:29
北理工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的第一组五位数字,第三行是UPC的第二组五位数字。
输出UPC的校验位提示本题有隐藏测试用例。
如果想多找不同的实例验证你的算法,可以拿身边书或食品背后的条码测试一下。
北理工《C语言程序设计》在线作业试卷总分:100 测试时间:-- 试卷得分:100一、单选题(共40 道试题,共80 分。
)得分:801. 下列程序执行的结果是()。
A=1;b=2;c=3;While(b<a<c){t=a;a=b;b=t;c--;}printf(“%d,%d,%d”,a,b,c);A. 1,2,0B. 2,1,0C. 1,2,1D. 2,1,1正确答案:B 满分:2 分得分:22. 已知“int a=4,b=5,c;”,则执行表达式“c=a=a>b”后变量a的值为()。
A. 0B. 1C. 4D. 5正确答案:B 满分:2 分得分:23. 若有char a[80],b[80];则正确的是()。
A. puts(a,b);B. printf(“%s,%s”a[ ],b[ ]);C. putchar(a,b);D. puts(a);puts(b);正确答案:D 满分:2 分得分:24. 在以下对C语言的描述中,正确的是()。
A. 在C语言中调用函数时,只能将实参数的值传递给形参,形参的值不能传递给实参B. C语言函数既可以嵌套定义又可以递归调用C. 函数必须有返回值,否则不能使用函数D. C语言程序中有定义关系的所有函数都必须放在同一源文件中正确答案:A 满分:2 分得分:25. C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是()。
A. 地址传递B. 值传递C. 由实参传给形参,并由形参传回给实参D. 由用户指定传递方式正确答案:B 满分:2 分得分:26. 执行以下程序段后,c3的值是()。
int c1=1,c2=2,c3; c3=c1/c2;A. 0B. 1/2C. 0.5D. 1正确答案:D 满分:2 分得分:27. C语言结构类型变量在程序执行期间()。
A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在内存中。
34 北理工的恶龙成绩: 10 / 折扣: 0.8背景:最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。
要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。
而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。
校长想花最少的学分数杀死恶龙,于是找到你寻求帮助。
输入:第一行龙头数n , 勇士人数m (1<=n, m<=100 )接下来n 行,每行包含一个整数,表示龙头的直径接下来m 行,每行包含一个整数,表示勇士的身高l输出:如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“ bit is doomed! ”测试输入期待的输出时间限制内存限制额外进程测试用例1 以文本方式显示1. 2 3↵2.5↵3.4↵4.7↵5.8↵6.4↵以文本方式显示1.11↵1秒64M 0测试用例2 以文本方式显示1. 2 1↵2.5↵3.5↵4.10↵以文本方式显示1.bit is doomed!↵1秒64M 0#include<stdio.h>void main(){int s=0,t,i,j,m,n,a[100],b[100],c[100]; for(i=0;i<=99;i++)a[i]=0,b[i]=0,c[i]=0;scanf("%d%d",&m,&n);for(i=0;i<=m-1;i++)scanf("%d",&a[i]);for(i=0;i<=n-1;i++)scanf("%d",&b[i]);if(m>n)printf("bit is doomed!\n");else{for(i=0;i<=m-1;i++)for(j=i;j<=m-1;j++){if(a[i]>a[j]){t=a[i],a[i]=a[j],a[j]=t;}}for(i=0;i<=n-1;i++)for(j=i;j<=n-1;j++){if(b[i]>b[j]){t=b[i],b[i]=b[j],b[j]=t;}}t=0;for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)if(a[i]<=b[j]){c[t]=b[j];t++;b[j]=0;break;}if(t<m)printf("bit is doomed!\n");else{for(i=0;i<=t;i++)s=s+c[i];printf("%d\n",s);}}}35 杀鸡用牛刀——要用递归啊!成绩: 5 / 折扣: 0.8背景:哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。
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.--0f1B.-0XcdfC.-018D.-0x48eg0xfff 017 999 -0680011 12.456 5e2 03f12、下面4个选项中,是不合法的用户标识符的选项是( )。
北理c语言期末考试试题及答案一、选择题(每题2分,共20分)1. 下列哪个选项是C语言中的关键字?A. intB. stringC. floatD. double答案:A2. C语言中,用于定义一个结构体的关键字是?A. structB. unionC. enumD. class答案:A3. 在C语言中,以下哪个不是合法的变量名?A. _myVarB. my_varC. 2myVarD. myVar2答案:C4. 下列哪个选项不是C语言中的运算符?A. %B. &&C. ==D. ::5. C语言中,用于声明一个函数的关键字是?A. functionB. defC. voidD. int答案:C6. 在C语言中,以下哪个是正确的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello, World!D. 'Hello, World!'答案:A7. C语言中,用于执行循环的关键字是?A. loopB. repeatC. whileD. do答案:C8. 下列哪个选项是C语言中的正确注释?A. /* This is a comment */B. // This is a commentC. //* This is a commentD. /* This is a comment答案:A9. C语言中,用于定义一个枚举类型的关键字是?B. typedefC. unionD. struct答案:A10. 在C语言中,以下哪个选项是正确的数组声明?A. int arr[5] = {1, 2, 3, 4, 5};B. int arr[5] = {1, 2, 3};C. int arr[] = {1, 2, 3, 4, 5};D. int arr[5] = {1, 2, 3, 4};答案:A二、填空题(每题2分,共20分)1. 在C语言中,用于定义一个全局变量的关键字是________。
北理工《C语言程序设计》在线作业试卷总分:100 得分:100一、单选题(共40 道试题,共80 分)1.下面程序的输出结果是()。
main(){int i,j;float s;for(i=6;i>4;i--){s=0.0; for(j=i;j>3;j--)s=s+i*j; }printf(“%f ”,s);}A.135.000000B.90.000000C.45.000000D.60.000000答案:C2.在以下对C语言的描述中,正确的是()。
A.在C语言中调用函数时,只能将实参数的值传递给形参,形参的值不能传递给实参B.C语言函数既可以嵌套定义又可以递归调用C.函数必须有返回值,否则不能使用函数D.C语言程序中有定义关系的所有函数都必须放在同一源文件中答案:A3.以下()不是C语言的特点。
A.语言的表达能力B.语言定义严格C.数据结构系统化D.控制流程结构化答案:B4.已知:char s[10],*p=s,则在下列语句中,错误的语句是()。
A.p=s+5;B.s=p+s;C.s[2]=p[4];D.*p=s[0];答案:B5.以下正确的数组定义语句是()。
A.int y[1][4]={1,2,3,4,5};B.float x[3][ ]={{1},{2},{3}};C.long s[2][3]={{1},{1,2},{1,2,3}};D.double t[ ][3]={0};答案:D6.已知:int a,*p=&a; 则下列函数调用中错误的是()A.scanf("%d",&a);B.scanf("%d",p);C.printf("%d",a);D.printf("%d",p);。
34 北理工的恶龙成绩: 10 / 折扣: 0.8背景:最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。
要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。
而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。
校长想花最少的学分数杀死恶龙,于是找到你寻求帮助。
输入:第一行龙头数 n , 勇士人数 m ( 1<=n, m<=100 )接下来 n 行,每行包含一个整数,表示龙头的直径接下来 m 行,每行包含一个整数,表示勇士的身高 l输出:如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“ bit is doomed! ”测试输入期待的输出时间限制存限制额外进程测试用例1 以文本方式显示1. 2 3↵2.5↵3.4↵4.7↵5.8↵6.4↵以文本方式显示1.11↵1秒64M 0测试用例2 以文本方式显示1. 2 1↵2.5↵3.5↵4.10↵以文本方式显示1.bit is doomed!↵1秒64M 0#include<stdio.h>void main(){int s=0,t,i,j,m,n,a[100],b[100],c[100]; for(i=0;i<=99;i++)a[i]=0,b[i]=0,c[i]=0;scanf("%d%d",&m,&n);for(i=0;i<=m-1;i++)scanf("%d",&a[i]);for(i=0;i<=n-1;i++)scanf("%d",&b[i]);if(m>n)printf("bit is doomed!\n");else{for(i=0;i<=m-1;i++)for(j=i;j<=m-1;j++){if(a[i]>a[j]){t=a[i],a[i]=a[j],a[j]=t;}}for(i=0;i<=n-1;i++)for(j=i;j<=n-1;j++){if(b[i]>b[j]){t=b[i],b[i]=b[j],b[j]=t;}}t=0;for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)if(a[i]<=b[j]){c[t]=b[j];t++;b[j]=0;break;}if(t<m)printf("bit is doomed!\n");else{for(i=0;i<=t;i++)s=s+c[i];printf("%d\n",s);}}}35 杀鸡用牛刀——要用递归啊!成绩: 5 / 折扣: 0.8背景:哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。
教材习题答案 习题单项选择题1. C2. B3. B4. C5. D6. A7. C8. A填空题1. 判断条件2. 面向过程编程3. 结构化4. 程序5. 面向对象的程序设计语言6. 基本功能操作、控制结构7. 有穷性8. 直到型循环结构9. 算法 10.可读性11.模块化 12.对问题的分解和模块的划分 习题一 、单项选择题1. B2. D3. C4. B5. A6. A7. B8.C 二、填空题1. 主2. C 编译系统3. 函数、函数4. 输入输出5.头6. .OBJ7. 库函数8. 文本 习题一、单项选择题1. D2. B3. A4. C5. C6. D7. D8. B9. B 10.C 11.A 12.D13.C 14.C 15.C 16.A 17.C 18.C 19.C 20.D 21.A 22.D 23.D 24.D, A 25.D 26.A 27.B 二、填空题1. 补码2. 30810-±(~)30810,15—6 2. 30810-±(~)30810,15—6 3. 逻辑 4. 单目,自右向左 5. 函数调用 6. a 或b(题目有错,小括号后面的c<=98改成(c>=97&&c<=98)就可以得到所给的答案了)7. 1 8. 65,89 习题一、单项选择题 1. D 2. C 3. D 4. A 5. D 6. B7. A 8. C9. B10.B二、填空题 1. 一 ; 2. 5.1690003. (1)-200 2500 (2)i=-200,j=2500 (3)2500200=-=j i4. a=98,b=765.000000,c=4321.0000005.100 25.81 1.89234 ,100 25.81按Enter 键)1.89234,100(按Tab 键)25.81(按Tab 键)1.892346. 0,0,37. 38. scanf(" %lf %lf %lf",&a,&b,&c);9. 13 13.000000 13.00000010.b=a;a=c;c=b;或a=a+b;c=c-b;(对于本题来说,后者的答案更好,不仅使a 与c 的值进行交换而且能保持中间变量b 的值不发生改变)习题一、单项选择题 1. D2. C3. B4. B5. D6. A7. B 8. D二、填空题1. 非零,零2. k= =0 2. k= =03.if(abs(x)>4) Printf(“%d ”,x); elseprintf(“error!”);4. if(x%2==1&&( (x>=1)&&(x<=10)||(x>=200&&x<=210))printf("%d",x);5. k=1(原题最后一行漏了个d,如果认为原题正确,则输出k=%。
北理工C语言答案1-3.磨磨你的砍柴刀:判断三角形的形状成绩: 10 / 折扣: 0.8输入三角型的三条边,判断三角形的形状。
假设输入的三边边长均 >0 。
输入:三角型的 3 条边的长度( int 型)。
输出:三角形形状等边三角形: equilateral triangle. 等腰三角形: isoceles triangle. 不构成三角形: non-triangle. 一般三角形: triangle.友情提示:这个题有点复杂吧,因为用到了分支语句,你参考一下教材P98的程序。
要把a、b、c三条边长度的可能情况都想到。
如果程序运行出现了问题,你尝试用开发工具的单步执行调试工具,检查问题出在哪一句。
什么叫单步执行?老师在课上告诉你们了吗?没讲过?那就读读网络教室的那些文章吧!测试输入期待的输出时间限制内存限制额外进程64M 测试用例 1以文本方式显示 1. 2 2 2?以文本方式显示 1. equilateral triangle.? 1秒64M 测试用例 2以文本方式显示 1. 3 2 2?以文本方式显示 1. isoceles triangle.? 1秒#include main() {int a,b,c;scanf(\ if(a+b>c&&a+c>b&&b+c>a) if(a==b&&a==c)printf(\ else if(a==b||b==c||a==c) printf(\ elseprintf(\ elseprintf(\ getch(); }2-1. 整型数的表示范围编写一个循环程序,输入 N 值,输出 N 的阶乘。
关于循环程序怎么编写,可以参考教材第六章P123的内容。
注意整型数的表示范围,如果当输入的 N 比较大时,例如 N 等于 20 时,输出怎么是负数了?自己想明白吧!1. #include2. main()3. {4. int i,n;测试输入期待的输出时间限制内存限制额外进程测试用例 1 64M 以文本方式显示 1. 5?以文本方式显示 1. 120? 1秒测试用例 4 64M 以文本方式显示 1. 12?以文本方式显示1. 479001600? 1秒测试用例 2 64M 以文本方式显示 1. 20?以文本方式显示1. N is too big!? 1秒5. long m;6. scanf(\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(\14. else15. printf(\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) 的近似值,要求计算的误差小于给定的ε。
1.Hello world.输入:无输出:Hello world.程序:#include<>int main(){printf("Hello world.\n");return 0;}2.Welcome to Beijing.程序:#include <>int main(){printf("Welcome\n");printf("to\n");printf("Beijing.\n");return 0;}3. 求A+B输入:整数1 整数2输出:整数1+整数2=和程序:#include<>int main(){int a,b;scanf("%d",&a);scanf("%d",&b);printf("%d+%d=%d\n",a,b,a+b);return 0;}4. 求 x 的 3次方输入:一个整数。
输出:该整数的 3 次方值。
程序:#include<>int main(){int x;scanf("%d",&x);printf("%d\n",x*x*x);return 0;}5. 学习打印你的第一个图形编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。
程序:#include<>int main(){printf(" *\n");printf(" ***\n");printf(" *****\n");printf("*******\n");return 0;}6. 一年级的算术题输入:接受两个整数,每个整数之间使用空格分隔。
例如输入格式为:123 444 输出:分别输出按照整型数据进行 +、-、*、/、* 之后的运行结果。
34 北理工的恶龙
成绩: 10 / 折扣: 0.8
背景:
最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。
要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。
而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。
校长想花最少的学分数杀死恶龙,于是找到你寻求帮助。
输入:
第一行龙头数n , 勇士人数m (1<=n, m<=100 )接下来n 行,每行包含一个整数,表示龙头的直径接下来m 行,每行包含一个整数,表示勇士的身高l
输出:
如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“ bit is doomed! ”
测试输入期待的输出
时间限制内存限制额外进程
测试用例
1 以文本方式显示
1. 2 3↵
2.5↵
3.4↵
4.7↵
5.8↵
6.4↵
以文本方式显示
1.11↵
1秒64M 0
测试用例
2 以文本方式显示
1. 2 1↵
2.5↵
3.5↵
4.10↵
以文本方式显示
1.bit is doomed!↵
1秒64M 0
#include<stdio.h>
void main()
{
int s=0,t,i,j,m,n,a[100],b[100],c[100]; for(i=0;i<=99;i++)
a[i]=0,b[i]=0,c[i]=0;
scanf("%d%d",&m,&n);
for(i=0;i<=m-1;i++)
scanf("%d",&a[i]);
for(i=0;i<=n-1;i++)
scanf("%d",&b[i]);
if(m>n)
printf("bit is doomed!\n");
else
{
for(i=0;i<=m-1;i++)
for(j=i;j<=m-1;j++)
{if(a[i]>a[j])
{t=a[i],a[i]=a[j],a[j]=t;}}
for(i=0;i<=n-1;i++)
for(j=i;j<=n-1;j++)
{if(b[i]>b[j])
{t=b[i],b[i]=b[j],b[j]=t;}}
t=0;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
if(a[i]<=b[j])
{c[t]=b[j];
t++;
b[j]=0;
break;}
if(t<m)
printf("bit is doomed!\n");
else
{for(i=0;i<=t;i++)
s=s+c[i];
printf("%d\n",s);}
}
}
35 杀鸡用牛刀——要用递归啊!
成绩: 5 / 折扣: 0.8
背景:
哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。