单片机C语言作业及上机习题仅供参考.docx
- 文档编号:23644740
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:45
- 大小:508.48KB
单片机C语言作业及上机习题仅供参考.docx
《单片机C语言作业及上机习题仅供参考.docx》由会员分享,可在线阅读,更多相关《单片机C语言作业及上机习题仅供参考.docx(45页珍藏版)》请在冰豆网上搜索。
单片机C语言作业及上机习题仅供参考
第一次课
熟悉win-TC编译环境、熟悉C语言程序结构
1.使用C语言编译环境,输入下面的源程序。
将你的程序命名为hello.c,然后编译运
行它。
/*programwritesthewords"Hello,world"tothescreen
*File:
Hello.c
*By:
NJCIT
*Date:
07-03-09
*/#include
main()
{
printf("Hello,world\n");
return(0);
}
2.
main()/*求两数之和*/
{
inta,b,sum;/*这是变量定义*/
a=123;b=456;
sum=a+b;
printf(“sumis%d\n”,sum);
}
问题:
1.一个C语言源程序从哪里开始执行?
2.C程序的函数由几部分构成?
3.ANSIC中的注释内容是用什么符号界定?
第二次课
熟悉printf()函数、常见转义字符及各种数据类型的输出格式
1.
#include
main()
{
printf("\n12345678901234567890");
printf("\n\n\n\nafewnewlines");
printf("\n\t\tand\nsome\ntabs");
printf("\nandabeepjusttobeheard.\a\n");
printf("\nthi");
printf("swor");
printf("kstoo\n");
return(0);
}
(1)printf()函数的功能是什么?
(2)在printf()函数中’\n’的起什么作用?
(3)在printf()函数中’\t’的起什么作用?
(4)在printf()函数中’\a’的起什么作用?
2.main()
{
inta=5,b=7,c=-1;
floatx=67.8564,y=-789.124;
charc=‘A’;
longn=1234567;
unsignedu=65535;
printf(“%d%d\n”,a,b);
printf(“%3d%3d\n”,a,b);
printf(“%f,%f\n”,x,y);
printf(“%-10f%-10f\n”,x,y);
printf(“%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n”,x,y,x,y,x,y);
printf(“%e,%10.2e\n”,x,y);
printf(“%c,%d,%o,%x\n”,c,c,c,c);
printf(“%ld,%lo,%x\n”,n,n,n);
printf(“%u,%o,%x,%d\n”,u,u,u,u);
printf(“%s,%5.3s\n”,”COMPUTER”,”COMPUTER”);
}
3.假设下面的例子都是完整程序的一部分,那么他们每一个将会输出什么?
a.printf("BaaBaaBlackSheep.");
b.printf("Haveyouanywool?
\n");
c.printf("Begone!
\nOcreatureoflard!
");
d.printf("What?
\nNolnBonzo?
\n");
e.intnum;num=2;
f.printf("%d+%d=%d",num,num,num+num);
4.加载,编译并运行下面的程序。
显示输出界面然后回答下面的问题。
#include
main()
{
charch;
intx;
floaty;
doublez;
ch=‘A’;
printf("ch=%canditsasciivalueis%d.WhatisASCIIIwonder?
\n",
ch,ch);
x=10;
printf("x=%d\n",x);
y=3.1415926;
printf("y=%f\n",y);
z=4.75E5;
printf("z=%lf\n",z);
return(0);
}
1.字符的A的ASCII码是多少?
2.“%f”默认情况下小数点后面有几位数字?
3.程序中的字符被指定的值为’A’,为什么不是“A”?
4.改变程序使它以10个字符位宽度和2位小数的形式输出浮点型数据。
5.改变程序使它以6个字符位宽度输出整型数,左对齐。
3.问答题
(1)C语言的基本数据类型有几种,分别是什么,并指出各种数据类型的关键字?
(2)描述C语言中标识符的组成
(3)常量和变量的区别是什么?
(4)在程序中如何使用变量?
(5)从下面列出标识符中选出哪些可以用作合法的C用户定义标识符,哪些不能使用。
为什么?
(1)a3_b3
(2)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(10).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)‘A’
4.选择题
(1)合法的字符常量是。
A)‘\t’B)“A”C)‘a’D)’\x32’
(2)合法的字符常量是。
A)‘\084’B)‘\84’C)‘ab’D)’\x43’
(3)是C语言提供的合法的数据类型关键字。
A)FloatB)signedC)integerD)Char
(4)在以下各组标识符中,合法的标识符是。
A)A)B01B)table_1C)0_tD)k%
B)A)Fast_B)voidC)pblD)
C)A)xy_B)longdoubleC)*pD)CHAR
D)A)sjB)IntC)_xyD)w_y23
(5)属于合法的C语言长整型常量的是。
A)5876273B)0LC)2E10D)(long)5876273
(6)下面选项中,不是合法整型常量的是
A)160B)-0xcdgC)-01D)-0x48a
第三次课
熟悉scanf()函数的使用:
1.用下面的scanf()函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’;
main()
{
inta,b;
floatx,y;
charc1,c2;
scanf(“a=%db=%d”,&a,&b);
scanf(“x=%fy=%e”,&x,&y);
scanf(“c1=%cc2=%c”,&c1,&c2);
printf(“a=%db=%d”,a,b);
printf(“x=%fy=%e”,x,y);
printf(“c1=%cc2=%c”,c1,c2);
}
2.加载,编译并运行下面的程序然后回答下面的问题。
#include
main()
{
intuser_age;
charuser_name[51];
/*Gettheusersname*/
printf("Enteryourname:
");
scanf("%s",user_name);
/*Gettheusersage*/
printf("Enteryourageinyears:
");
scanf("%d",&user_age);
/*Printouttheirnameandageindays*/
printf("G’day%s,youare%ddaysold\n",user_name,user_age*365);
return(0);
}
1.存储用户名的变量名是什么?
2.改写这个程序使他可以用一个单独的变量以天的形式存储用户的年龄。
3.使用scanf()读取多行输入
#include
main()
{
intuser_age;
charuser_name[51];
/*Gettheusersnameandage*/
printf("Enteryournamefollowedbyyourageinyears(egfred23):
");
scanf("%s%d",user_name,&user_age);
/*Printouttheirnameandageindays*/
printf("G’day%s,youare%ddaysold\n",user_name,user_age*365);
return(0);
}
1.当你在回答问题时颠倒了年龄和姓名会出现什么情况?
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=3b=4c=5
x=1.200000,y=2.400000,z=-3.600000
x+y=3.60y+z=-1.20z+x=-2.40
u=51274n=128765
c1=’a’or97(ASCII)
c2=’b’or98(ASCII)
(3)输入一个华氏温度,要求输出摄氏温度,公式为:
,取两位小数。
5.请判断以下表达式是否正确,若正确,写出表达式的值;若不正确,写出出错原因。
各变量的类型说明如下:
inti=8,j=3,k,a,b;
unsignedlongw=5,u;
doublex=1.42,y=5.2,t;
(1)k=i++
(2)(int)x+0.4(3)w+=-2(4)y+=x++(5)i/=j+12
(6)k=--i(7)f=3/2*(t=30.0-10.0)(8)k=(a=2,b=3,a+b)
(9)a+=a-=(b=4)*(a=3)(10)a=2*a=3
(11)u=65535,j=-1,u=u+j(12)++(i+j)(13)2%(-3)(14)-2%(-3)
6.求以下表达式的值,假设所有变量都为整型。
(1)(a=b=4,a+1,b+1,a+b)
(2)(a=2,b=5,a>b?
a++:
b++,a+b)
(3)(x=8,x%=x+5)
(4)30%6/2
7.写出下面各逻辑表达式的值。
设:
a=3,b=4,c=5.
(1)a+b>c&&b==c
(2)a||b+c&&b-c
(3)!
(a>b)&&!
c||1
(4)!
(x=a)&&(y==b)&&0
(5)!
(a+b)+c–1&&b+c/2
第四次课
1.if语句应用
(1)加载,编译并运行下面的程序,先使用一个正整数,然后再使用一个负数。
有什么不同?
#include
main()
{
intx;
printf("Enteranumberbetween-10and+10:
");
scanf("%d",&x);
if(x>0){
printf("\nYournumberispositive\n");
}
return(0);
}
(2)使用if语句避免除0
#include
main()
{
floatx,y;
printf("Enteranumbertobeinverted:
");
scanf("%f",&x);
y=1/x;
printf("Theinverseof%fequals%f\n",x,y);
return(0);
}
1.当你输入数字0时结果为多少?
2.增加一个if语句使它只有当ifx不等于0时进行计算。
3.现在你输入0会出现什么情况?
4.改进程序使之可以当输入数字0时打印出警告信息。
(3)编写if语句
写一个程序用来计算电阻上的功率。
功率大小等于电阻上的电压值乘以流过电阻的电流
值。
完成计算后,使用一个if语句判断功率是否低于0.5瓦特。
如果低于0.5瓦特则输
出“Okeytousehalfwattresistor”,否则输出“haffwattregistorwill
notbeokey”。
下面是程序的开始部分,请添加完成if语句。
#include
main()
{
floatpower,voltage,current;
printf("Enterthevoltage:
");
scanf("%f",&voltage);
printf("Enterthecurrent:
");
scanf("%f,¤t);
/*Calculationhere*/
/*ifcheckhere*/
/*elsehere*/
return(0);
}
如果功率小于0.5瓦特,屏幕输出应该如下所示:
Enterthevoltage:
5
Enterthecurrent:
0.002
okaytousehalfwattresistor.
如果功率大于0.5瓦特:
Enterthevoltage:
5
Enterthecurrent:
200
halfwattresisitorwillnotbeokay.
2.编程练习:
(1)有三个整数a,b,c,由键盘输入,输出其中最大的数。
#include
main()
{
inta,b,c,max;
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
{if(a>c)
max=a;
else
max=c;
}
else
{if(c
max=b;
else
max=c;}
printf("max=%d",max);
}
(2)编程输入整数a和b,若大于100,则输出百位以上的数字,否则输出两数之和。
(3)有一函数:
写一个程序,输入x的值,输出y值。
(4)写一段程序计算两个并联电阻的阻值,使你的程序检查是有短路的(0欧姆)将导致0
作为被除数,使用一个if语句或者三目运算避免这种情况(使用三目运算计算及检查是否
除0)。
提示:
Rt=1/(1/R1+1/R2);
你的输出应该如下所示:
Enterthevalueofresistor1:
45
Enterthevalueofresistor2:
56
45.0ohmsinparallelwith56.0ohmsgives24.95ohms
假如有一个电阻阻值为0的话,结果将如下所示:
Enterthevalueofresistor1:
0
Enterthevalueofresistor2:
45
0.0ohmsinparallelwith45.0ohmsgives0.00ohms
第5次课
1.switch语句应用
(1)加载,编译并运行下面的程序,并回答问题。
2.
#include
main()
{intnum1,num2,ans;
chararithOp;
ans=0;
printf("Enternumber1-->");
scanf("%d",&num1);
printf("Enternumber2-->");
scanf("%d",&num2);
printf("Enteranoperator(+,-or*)-->");
fflush(stdin);
scanf("%c",&arithOp);
switch(arithOp){
case‘+’:
ans=num1+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.添加程序处理除数为零的情况。
加载,编译并运行下面的程序,将文件保存为switch-01.c
(2)加载,编译并运行下面的程序。
#include
main()
{intchoice;
printf("Howmanystars(1to10)doyouwant?
");
scanf("%d",&choice);
switch(choice){
case10:
printf("*");
case9:
printf("*********");
break;
case8:
printf("*");
case7:
printf("*");
case6:
printf("*");
case5:
printf("*****");
break;
case4:
printf("*");
case3:
printf("*");
case2:
printf("*");
case1:
printf("*");
break;
default:
printf("Thenumberyouaskedforisoutofrange\n");
}
return(0);
}
1.打印9颗星和8颗星是不同的。
描述这两种方法。
2.编辑这段程序,使之工作在没有break语句的情况下。
(3)任务1:
完成下面的程序,使用if/else语句,判断输入的数是正数还是负数
任务2:
完成下面的程序,使用switch语句,判断输入的数是正数还是负数,并且要处理输入的数越界的情况。
#include
main()
{
intnum;
printf("Programindicateswhethernumberis+veor-ve\n");
printf("Enteranumberbetween-5and+5:
");
scanf("%d",&num);
/*添加语句*/
return(0);
}
(4)本程序是从键盘输入一个10进制数,根据用户要求输出这个数对应的16进制、8进制或者10进制数。
例:
若用户输入“H”,则输出这个数的16进制数。
任务1:
添加if语句完成程序功能
任务2:
添加switch语句完成程序功能,注意对输入无效数制的处理。
比如输入:
X时,作何处理。
#include
main()
{
intnum;
charchoice;
printf("Programprintsoctalorhexequivalentofnumbers
entered\n");
printf("Enteraninteger:
");
scanf("%d",&num);
printf("DoyouwantDecimal,OctalorHex(H,D,O):
");
fflush(stdin);
choice=getchar();
/*添加程序*/
return(0);
}
(5)给出一百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’。
90分以上为’A’,80-89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为’E’。
(6)从键盘输入三个数,判断这三个数是否能构成三角形,如果是,输出“thethreenumberscouldbethesidesofatriangle”,如果不是输出“thethreenumberscould’tthesidesofatriangle”;并判断这个三角形是不是直角三角形,如果是,输出“thenumberscouldbethesidesofarightangletriangle”,如果不是,输出“thenumberscould’tthesidesofarightangletriangle”。
第6次课循环
1.写一个程序让用户输入一个1~12之间的数,程序将会输出这个数的乘法表。
使用一个循环进行计算并输出一行,屏幕输出应该如下所示:
Enteranumberbetween1and12:
5
5timesmultiplicationtable
1x5=5
2x5=10
3x5=15
4x5=20
5x5=25
6x5=30
7x5=35
8x5=40
9x5=45
10x5=50
11x5=55
12x5=60
2.添加循环语句,计算并输出1~20之间的偶数的和。
#include
main()
{
inti,result;
/*添加语句*/
return(0);
}
#include
main()
{
inti,result;
for(i=1;i<=20;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言 作业 上机 习题 仅供参考