收藏 分享(赏)

单片机C语言作业及上机习题及答案.doc

上传人:HR专家 文档编号:11424852 上传时间:2020-04-20 格式:DOC 页数:37 大小:464.50KB
下载 相关 举报
单片机C语言作业及上机习题及答案.doc_第1页
第1页 / 共37页
单片机C语言作业及上机习题及答案.doc_第2页
第2页 / 共37页
单片机C语言作业及上机习题及答案.doc_第3页
第3页 / 共37页
单片机C语言作业及上机习题及答案.doc_第4页
第4页 / 共37页
单片机C语言作业及上机习题及答案.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、第一次课熟悉winTC编译环境、熟悉C语言程序结构1.使用C 语言编译环境,输入下面的源程序。将你的程序命名为hello.c,然后编译运行它。/* program writes the words Hello, world to the screen*File : Hello.c* By : NJCIT* Date : 07-03-09*/#include main()printf(Hello, worldn);return(0);2.main() /*求两数之和*/ int a,b,sum; /* 这是变量定义*/ a=123;b=456; sum=a+b; printf(“sum is %

2、dn”,sum); 回答下列问题:1. C语言中的标识由 字母 、 数字 和 下划线 组成,以 字母 和 下划线 开头,不可使用 关键字 。2. C语言源程序从 main 开始执行?每个C语言程序必须有一个且只能有一个主函数,主函数的名字为 main 。 C程序的函数由 函数头 和 函数体 两部分构成,函数头包括 函数属性 、 函数类型 、 函数名 和 形参表 ;函数体由一系列的语句组成,语句由 分 号结束,函数休包含在一对 花 括号中。程序中的注释内容是用符号 /* */ 界定。2. 计算机上实现C语言程序要经过 编辑 (产生*. C 文件)、 编译 (产生*. OBJ 文件)、 链接 (产

3、生*. EXE 文件)和 调试 四个阶段。第二次课熟悉printf()函数、常见转义字符及各种数据类型的输出格式1.#include main()printf(n12345678901234567890);printf(nnnn a few new lines );printf(nttand nsome ntabs);printf(nand a beep just to be heard.an);printf(nthi);printf(s wor);printf(ks toon);return (0);(1) printf()函数的功能是什么?按指定的格式在屏幕上显示指定的内容(2) 在 pr

4、intf()函数中n的起什么作用?回车换行(3) 在 printf()函数中t的起什么作用?水平跳格(4) 在 printf()函数中a的起什么作用?蜂呜器响2. main() int a=5,b=7,c=-1;float x=67.8564,y=-789.124;char c=A;long n=1234567;unsigned u=65535;printf(“%d%dn”,a,b);/*57*/printf(“%3d%3dn”,a,b); /* 5 7*/printf(“%f,%fn”,x,y); /*67.856400,-789.124000*/printf(“%-10f%-10fn”,x

5、,y); /*67.856400 ,-789.124000*/printf(“%8.2f,%8.2f,%.4f,%.4f,%3f,%3fn”,x,y,x,y,x,y);/* 67.85, -789.12,67.8564,-789.1240,67.856400,-789.124000*/printf(“%e,%10.2en”,x,y);/*6.78564e+01, -7.9e+02*/printf(“%c,%d,%o,%xn”,c,c,c,c);/*A,65,101,41*/printf(“%ld,%lo,%xn”,n,n,n);/*1234567,4553207,d687*/printf(“%

6、u,%o,%x,%dn”,u,u,u,u);/*65535,177777,ffff,-1*/printf(“%s,%5.3sn”,”COMPUTER”,”COMPUTER”);/*COMPUTER, COM*/3. 假设下面的例子都是完整程序的一部分,那么他们每一个将会输出什么?a. printf(Baa Baa Black Sheep.);b. printf(Have you any wool?n);c. printf(Begone!nO creature of lard!);d. printf(What?nNolnBonzo?n);e. int num;num = 2;f. printf(

7、%d + %d = %d, num, num, num + num);4.加载,编译并运行下面的程序。显示输出界面然后回答下面的问题。#include main()char ch;int x;float y;double z;ch = A;printf(ch = %c and its ascii value is %d. What is ASCII I wonder?n,ch, ch);x = 10;printf(x = %dn, x);y = 3.1415926;printf(y = %fn, y);z = 4.75E5;printf(z = %lfn, z);return(0);1. 字符

8、的A的ASCII码是多少?652. “%f”默认情况下小数点后面有几位数字?6位3. 程序中的字符被指定的值为A,为什么不是“A”?A为字常量,A为字符串常量4. 改变程序使它以10个字符位宽度和2位小数的形式输出浮点型数据。%f改为%10.2f5. 改变程序使它以6个字符位宽度输出整型数,左对齐。%d改为-6d%3.问答题(1)C语言的基本数据类型有几种,分别是什么,并指出各种数据类型的关键字?(2)描述C语言中标识符的组成(3)常量和变量的区别是什么?(4)在程序中如何使用变量?(5)从下面列出标识符中选出哪些可以用作合法的C用户定义标识符,哪些不能使用。为什么?(1) a3_b3 (2)

9、void (3) _123 (4)123_ (5) IF (6) INT (7) For (8) printf (9) WORD (10) define (11) _abc (12) sizeof (13) answer (14) to (15)signed (16) Case (17)_if (18) extern (19) putchar (20) _double(6)请选出正确的数值和字符常量,说明类型;对于不正确的数,说明原因(1) 0.0 (2) 5L (3) o13 (4) 0Xff (5) oxaa (6) 018 (7) 9861 (8) 011 (9) 3.987E-2 (1

10、0) .987 (11) 0xab (12) 50. (13) 8.9e1.2 (14) 1e1 (15)0xFF00 (16) 0.825e2 (17)473 (18) OX4 (19) “c” (20)t (21) ” (22)0 (23)0 (24) A4选择题(1)合法的字符常量是 。A) t B) “A” C) a D)x32(2) 合法的字符常量是 。A) 084 B) 84 C) ab D)x43(3)是C语言提供的合法的数据类型关键字。A) Float B) signed C) integer D)Char(4)在以下各组标识符中,合法的标识符是。A) A)B01 B)tabl

11、e_1 C) 0_t D) k%B) A)Fast_ B) void C)pbl D)C) A)xy_ B)longdouble C)*p D)CHARD) A) sj B)Int C)_xy D)w_y23(5)属于合法的C语言长整型常量的是 。A)5876273 B)0L C)2E10 D)(long)5876273(6)下面选项中,不是合法整型常量的是A)160 B)0xcdg C)01 D)0x48a第三次课熟悉scanf()函数的使用:1. 用下面的scanf()函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=A,c2=a;main() int a,b; float

12、 x,y; char c1,c2; scanf(“a=%d b=%d”,&a,&b); scanf(“ x=%f y=%e”,&x,&y); scanf(“ c1=%c c2=%c”,&c1,&c2);printf(“a=%d b=%d”,a,b); printf(“ x=%f y=%e”,x,y); printf(“ c1=%c c2=%c”,c1,c2);2.加载,编译并运行下面的程序然后回答下面的问题。#include main()int user_age;char user_name51;/* Get the users name */printf(Enter your name :)

13、;scanf(%s, user_name);/* Get the users age */printf(Enter your age in years :);scanf(%d, &user_age);/* Print out their name and age in days */printf(Gday %s, you are %d days oldn, user_name, user_age*365);return(0);1. 存储用户名的变量名是什么?2. 改写这个程序使他可以用一个单独的变量以天的形式存储用户的年龄。3.使用 scanf() 读取多行输入#include main()i

14、nt user_age;char user_name51;/* Get the users name and age*/printf(Enter your name followed by your age in years (eg fred 23) :);scanf(%s %d, user_name, &user_age);/* Print out their name and age in days */printf(Gday %s, you are %d days oldn, user_name, user_age*365);return(0);1. 当你在回答问题时颠倒了年龄和姓名会出

15、现什么情况?2. 当你在代码中省去了&时会出现什么情况?4编程题(1) 已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序来。(2)若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=a,c2=b。想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。a= 3 b= 4 c= 5x=1.200000,y=2.400000,z=-3.600000x+y= 3.60 y+z=-1.20 z+x=-2.40u= 51274 n= 128765c1=a or 97(ASCII)c2=b or 98(ASCII)(3)输入一个

16、华氏温度,要求输出摄氏温度,公式为:,取两位小数。5.请判断以下表达式是否正确,若正确,写出表达式的值;若不正确,写出出错原因。各变量的类型说明如下:int i=8, j=3, k, a, b;unsigned long w=5, u;double x=1.42 , y=5.2 , t ;(1) k=i+ 8 (2) (int)x+0.4 1.4 (3) w+=-2 3 (4) y+=x+ ? (5) i/=j+12 0(6) k=-i 7 (7) f=3/2*(t=30.0-10.0) 30.0 (8) k=(a=2,b=3,a+b) 5(9) a+=a-=(b=4)*(a=3) -18 (

17、10) a=2*a=3?(11) u=65535, j=-1,u=u+j (12) +(i+j) ? (13) 2%(-3) 2 (14) -2%(-3) 26. 求以下表达式的值,假设所有变量都为整型。(1) (a=b=4,a+1,b+1,a+b)(2) (a=2,b=5,ab?a+:b+,a+b)(3) (x=8,x%=x+5)(4) 30 % 6 / 27.写出下面各逻辑表达式的值。设:a=3,b=4,c=5.(1)a+bc&b=c(2)a |b+c&b-c(3)!(ab) & !c | 1 (4)!(x=a)&(y=b)&0(5)!(a+b) + c 1 & b + c/2 第四次课1

18、. if语句应用(1)加载,编译并运行下面的程序,先使用一个正整数,然后再使用一个负数。有什么不同?#include main()int x;printf(Enter a number between -10 and +10 : );scanf(%d, &x);if (x 0) printf(nYour number is positiven);return(0);(2)使用 if语句避免除0#include main()float x, y;printf(Enter a number to be inverted : );scanf(%f, &x);y = 1/x;printf(The in

19、verse of %f equals %fn, x, y);return(0);1. 当你输入数字0时结果为多少?2. 增加一个if语句使它只有当if x不等于0时进行计算。3. 现在你输入0会出现什么情况?4. 改进程序使之可以当输入数字0时打印出警告信息。(3)编写 if语句写一个程序用来计算电阻上的功率。功率大小等于电阻上的电压值乘以流过电阻的电流值。完成计算后,使用一个if 语句判断功率是否低于0.5 瓦特。如果低于0.5 瓦特则输出“Okey to use half watt resistor”,否则输出“haff watt registor willnot be okey”。下面是

20、程序的开始部分,请添加完成if语句。#include main()float power, voltage, current;printf(Enter the voltage : );scanf(%f, &voltage);printf(Enter the current : );scanf(%f, ¤t);/* Calculation here */* if check here */* else here */return(0);如果功率小于0.5 瓦特,屏幕输出应该如下所示:Enter the voltage : 5Enter the current : 0.002okay

21、to use half watt resistor.如果功率大于0.5瓦特:Enter the voltage : 5Enter the current : 200half watt resisitor will not be okay.2. 编程练习:(1) 有三个整数a,b,c,由键盘输入,输出其中最大的数。(2) 编程输入整数a和b,若 大于100,则输出 百位以上的数字,否则输出两数之和。(3) 有一函数:写一个程序,输入x的值,输出y值。(4)写一段程序计算两个并联电阻的阻值,使你的程序检查是有短路的(0欧姆)将导致0作为被除数,使用一个if语句或者三目运算避免这种情况(使用三目运算

22、计算及检查是否除0)。提示: Rt = 1 / (1/R1 + 1/R2);你的输出应该如下所示:Enter the value of resistor 1 : 45Enter the value of resistor 2 : 5645.0 ohms in parallel with 56.0 ohms gives 24.95 ohms假如有一个电阻阻值为0的话,结果将如下所示:Enter the value of resistor 1 : 0Enter the value of resistor 2 : 450.0 ohms in parallel with 45.0 ohms gives

23、 0.00 ohms第5次课1. switch语句应用(1)加载,编译并运行下面的程序,并回答问题。#include main()int num1, num2, ans;char arithOp;ans=0;printf(Enter number 1 - );scanf(%d, &num1);printf(Enter number 2 - );scanf(%d, &num2);printf(Enter an operator (+, - or *) - );fflush(stdin);scanf(%c, &arithOp);switch (arithOp) case +:ans = num1

24、+ num2; break;case -:ans = num1 - num2; break;case *:ans = num1 * num2; break;printf(n%d %c %d = %d, num1, arithOp, num2, ans);fflush(stdin);getchar();return(0);1. 尝试输入一个不匹配case语句的操作符,会发生什么?2. 将程序保存为switch-02.c并为“ans”添加乘(*)和除(/)的算法。3. 添加一个default语句来处理输入的运算符不符合case情况。4. 添加程序处理除数为零的情况。2. 加载,编译并运行下面的程序

25、,将文件保存为switch-01.c(2)加载,编译并运行下面的程序。#include main()int choice;printf(How many stars (1 to 10) do you want? );scanf(%d, &choice);switch (choice) case 10:printf(*);case 9:printf(*);break;case 8:printf(*);case 7:printf(*);case 6:printf(*);case 5:printf(*);break;case 4:printf(*);case 3:printf(*);case 2:p

26、rintf(*);case 1:printf(*);break;default:printf(The number you asked for is out of rangen);return(0);1. 打印 9颗星和8颗星是不同的。描述这两种方法。2. 编辑这段程序,使之工作在没有break语句的情况下。(3)任务1:完成下面的程序,使用if/else语句,判断输入的数是正数还是负数任务2:完成下面的程序,使用switch语句,判断输入的数是正数还是负数,并且要处理输入的数越界的情况。#include main()int num;printf(Program indicates wheth

27、er number is +ve or -ven);printf(Enter a number between -5 and +5 :);scanf(%d, &num);/* 添加语句 */return(0);(4)本程序是从键盘输入一个10进制数,根据用户要求输出这个数对应的16进制、8进制或者10进制数。例:若用户输入“H”,则输出这个数的16进制数。任务1:添加if语句完成程序功能任务2:添加switch语句完成程序功能,注意对输入无效数制的处理。比如输入:X时,作何处理。#include main()int num;char choice;printf(Program prints o

28、ctal or hex equivalent of numbersenteredn);printf(Enter an integer : );scanf(%d, &num);printf(Do you want Decimal, Octal or Hex (H, D, O) : );fflush(stdin);choice = getchar();/* 添加程序 */return(0);(5) 给出一百分制成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。(6) 从键盘输入三个数,判断这三个数是否能构成三角形,如果是,输出

29、“the three numbers could be the sides of a triangle”,如果不是输出“the three numbers couldt the sides of a triangle”;并判断这个三角形是不是直角三角形,如果是,输出“the numbers could be the sides of a right angle triangle”,如果不是,输出“the numbers couldt the sides of a right angle triangle”。第6次课 循环1. 写一个程序让用户输入一个112之间的数,程序将会输出这个数的乘法表。

30、使用一个循环进行计算并输出一行,屏幕输出应该如下所示:Enter a number between 1 and 12: 55 times multiplication table1 x 5 = 52 x 5 = 103 x 5 = 154 x 5 = 205 x 5 = 256 x 5 = 307 x 5 = 358 x 5 = 409 x 5 = 4510 x 5 = 5011 x 5 = 5512 x 5 = 602. 添加循环语句,计算并输出120之间的偶数的和。#include main()int i, result;/* 添加语句 */return(0);3. Break 语句的使用

31、为程序添加语句,使得输入的数据在110之间时,退出循环,否则输出“the number is out of range”#include main()int num;while (1) printf(Enter a number between 1 and 10 :);scanf(%d, &num);/* if ( - Complete here) */printf(Your number was %dn, num);return(0);任务1:添加程序,使得其在从注释A开始到注释C之间循环,并提示用户输入“0”退出循环;任务2:添加程序,使得注释B到注释C之间的语句在一个循环之内,从而判断从

32、num开始到1之间所有的素数。#include main()int i, num;char isPrime;printf(Program checks to see if a number is primen );printf(Enter the integer : ); /* A */scanf(%d, &num);isPrime = 1; /* B */for (i = num - 1; i 1; i-) if (num % i = 0) isPrime = 0;printf(Number %d is divisible by %d and is not primen, num,i);br

33、eak;if (isPrime)printf(Number %d is PRIMEn, num); /* C */return(0);5.求爱因斯坦数学题。有一条长阶,若每步跨2阶,则最后剩余1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7步,最后正好一阶不剩。6.计算斐波那契分数序列前n项之和(n是某个常数).( 2/1,3/2,5/3,8/5,13/8,21/13,. 前一项的分子作为后一项的分母。前一项的分子、分母之和作为后一项的分子。)。7.问答题(1) 下面循环错在哪里?for (i = 1; i 5; i+) x /=2;(2)下

34、面循环错在哪里?for (i = 10; i 2; i+) x *=2;(3) 这个for循环的输出结果是多少?for (i = 3; i -2; i-) printf(%d , i);(4) 这个while循环的输出结果是多少?i = 0;while (i ; i-) printf(My name is );综合练习一:打印ASC码表在这个项目中,我们想去打印所有的ASCII码字符及相关联的十进制和二进制值。关于ASCIIASCII表示美国信息交换标准码,正如它的名字所暗示的, 它是由美国的一个代码指定的数字每个信息存储或传输计算机来完成。这里是关于ASCII码的重点:l 每个键盘字符都可以

35、映射到数字从32127;l 数字从0 到31用于特殊字符,如制表符、铃、换行符等;l 扩展ASCII范围从128 至255,含有专门128 个字符,如边框线等;l 扩展的ASCII字符是非标准化,可能会从一个操作系统类型到另一个(如PC和MAC与Linux);l 标准的 ASCII是标准化的,同样都可以跨越不同的操作系统类型。第一步写出程序的基本框架任何C程序都具有以下的基本框架/* Title : Print Standard and Extended ASCII chart* Source : print_ascii.c* Author : Some Student* Version :

36、1.0*/#include main()第二步添加一个具有一个变量的循环语句我们想去打印所有的标准和扩展ASCII码的值,这就意味着循环从0至255/* Title : Print Standard and Extended ASCII chart* Source : print_ascii.c* Author : NJCIT* Version : 1.0*/#include main()int i;for (i=1; i=255; i+) return(0);第三步不同数据格式打印变量值我们现在想使用十进制和十六进制和ASCII字符打印每个字符。/* Title : Print Standa

37、rd and Extended ASCII chart* Source : print_ascii.c* Author : NJCIT* Version : 1.0 - Initial release*/#include main()int i;for (i=1; i=255; i+) printf(%d %x %cn, i, i, i);return(0);第四步打印标题并将每列对齐现在,我们将每一个字符打印出来,使它变得整洁些并给每一栏加一个标题,注意如何选择适当的宽度打印每一栏。我们也会修改一些在我们试图打印一些如“n/a”的控制符代替一些ASCLL码字符(这些字符是一些不可打印的字符)

38、出现的问题。/* Title : Print Standard and Extended ASCII chart* Source : print_ascii.c* Author : NJCIT* Version : 1.1*/#include main()int i;printf(DEC HEX ASCIIn);for (i=1; i=255; i+) if (i 32)printf(%3d %3x %5sn, i, i, n/a);elseprintf(%3d %3x %5cn, i, i, i);return(0);第五步使它更适应屏幕现在你可能注意到,没有太多的屏幕是被用来横跨宽.不仅如

39、此, 你必须退回通过输出缓冲区以便看到更低的数字. 这样效率更高, 如何255行被分割成5栏52行的话就更容易阅读。/* Title : Print Standard and Extended ASCII chart* Source : print_ascii.c* Author : NJCIT* Version : 2.0*/#include main()int i;printf(| DEC HEX ASC | DEC HEX ASC | DEC HEX ASC );printf(| DEC HEX ASC | DEC HEX ASC |n);for (i=1; i=51; i+) if (i 32)printf(| %3d %3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报