单片机C语言作业及上机习题及答案1.docx
- 文档编号:8927981
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:45
- 大小:41.61KB
单片机C语言作业及上机习题及答案1.docx
《单片机C语言作业及上机习题及答案1.docx》由会员分享,可在线阅读,更多相关《单片机C语言作业及上机习题及答案1.docx(45页珍藏版)》请在冰豆网上搜索。
单片机C语言作业及上机习题及答案1
(1)C语言中的标识由字母、数字和下划线组成,以字母和下划线开头,不可使用关键字。
(2)C语言源程序从main开始执行。
每个C语言程序必须有一个且只能有一个主函数,主函数的名字为main。
C程序的函数由函数头和函数体两部分构成,函数头包括函数属性、函数类型、函数名和形参表;函数体由一系列的语句组成,语句由分号结束,函数休包含在一对花括号中。
程序中的注释内容是用符号/**/界定。
1)C语言函数返回类型的默认定义类型是整型。
(2)函数的实参传递到形参有两种方式:
数值和地址。
(3)在一个函数内部调用另一个函数的调用方式称为函数嵌套。
在一个函数内部直接或间接调用该函数成为函数递归的调用方式。
(11)下面程序段的输出结果是。
A
intk,a[3][3]={1,2,3,4,5,6,7,8,9};
for(k=0;k<3;k++)printf(“%d”,a[k][2-k]);
A)357B)369C)159D)147
(1)在C语言中,引用数组元素时,其数组下标的数据类型允许是C。
A)整型常量B)整型表达式
C)整形常量或整形表达式C)任何类型的表达式
编写一个判断一个数是否是素数的函数,若是返回1,否则返回0。
#include
main()
{inti,m;
scanf("%d",&m);
for(i=2;i<=m;i++)
if(m%i==0)
break;
if(i==m)
printf("1");
else
printf("0");
}
编写一个函数,计算下面算式前100项之和,并将计算结果返回到主调函数。
1+1/3+1/5+1/7+......
#include"Stdio.h"
floatseri_sum(inta)
{
inti;
floatf=0;
for(i=1;i<=a;i++)
f=f+1.0/(i*2.0-1);
return(f);
}
main()
{
intx=100;
floatsum;
sum=seri_sum(x);
printf("sum=%f",sum);
getch();
}
第一次课
熟悉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语言程序要经过编辑(产生*.C文件)、编译(产生*.OBJ文件)、链接(产生*.EXE文件)和调试四个阶段。
第二次课
熟悉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);/*57*/
printf(“%3d%3d\n”,a,b);/*57*/
printf(“%f,%f\n”,x,y);/*67.856400,-789.124000*/
printf(“%-10f%-10f\n”,x,y);/*67.856400,-789.124000*/
printf(“%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n”,x,y,x,y,x,y);
/*67.85,-789.12,67.8564,-789.1240,67.856400,-789.124000*/
printf(“%e,%10.2e\n”,x,y);/*6.78564e+01,-7.9e+02*/
printf(“%c,%d,%o,%x\n”,c,c,c,c);/*A,65,101,41*/
printf(“%ld,%lo,%x\n”,n,n,n);/*1234567,4553207,d687*/
printf(“%u,%o,%x,%d\n”,u,u,u,u);/*65535,177777,ffff,-1*/
printf(“%s,%5.3s\n”,”COMPUTER”,”COMPUTER”);/*COMPUTER,COM*/
}
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码是多少?
65
2.“%f”默认情况下小数点后面有几位数字?
6位
3.程序中的字符被指定的值为’A’,为什么不是“A”?
'A'为字常量,"A"为字符串常量
4.改变程序使它以10个字符位宽度和2位小数的形式输出浮点型数据。
%f改为%10.2f
5.改变程序使它以6个字符位宽度输出整型数,左对齐。
%d改为-6d%
3.问答题
1)C语言的基本数据类型有几种,分别是什么,并指出各种数据类型的关键字?
变量类型
字节长度
值范围
无符号数(unsigned)
有符号数(signed)
字符(char)
1
0~255或ASCⅡ码
-128~127
整形(int)
2
0~65535
-32768~32767
短整形(short)
2
0~65535
-32768~32767
长整形(long)
4
0~4294967295
-2147483648~2147483647
浮点(float)
4
3.4×10-38~3.4×10+38
双精度(double)
8
1.7×10-308~1.7×10+308
高精度(longdouble)
10
3.4×10-4937~1.1×10+4932
2)描述C语言中标识符的组成:
标识符由字母(A~Z、a~z)、数字(0~9)和下划线组成,标识符必须以字母和下划线开始。
不可使用关键字。
3)常量和变量的区别是什么?
常量:
在程序运行过程中,其值不能被改变的量。
变量:
在程序运行过程中其值可以改变的量。
4)在程序中如何使用变量?
在程序中,首先根据所需处理的数据类型选择合适的变量类型定义变量,然后用合适的运算符、表达式、函数对变量进行操作。
5)从下面列出标识符中选出哪些可以用作合法的C用户定义标识符,哪些不能使用。
为什么?
(1)a3_b3合法
(2)void非法:
关键字
(3)_123合法
(4)123_非法:
数字开头
(5)IF合法:
但不好,容易与if混淆
(6)INT合法:
但不好,容易与int混淆
(7)For合法:
但不好,容易与for混淆
(8)printf合法:
但不好,与库函数printf同名
(9)WORD合法:
(10)define合法:
但不好,容易与宏命令#define混淆
(11)_abc合法:
(12)sizeof非法:
关键字
(13)answer合法:
(14)to合法:
(15)signed非法:
关键字
(16)Case合法:
但不好,容易与case混淆
(17)_if合法:
(18)extern非法:
关键字
(19)putchar合法:
但不好,与库函数putchar同名
(20)_double合法:
6)请选出正确的数值和字符常量,说明类型;对于不正确的数,说明原因
(1)0.0正确:
浮点数
(2)5L正确:
长整形
(3)o13错误:
八进制数开头用数字0,而不是字母o
(4)0Xff正确:
整形数的十六进制形式,相当于十进制数255;
(5)oxaa错误:
十六进制数开头用数字0加x,而不是字母o加x
(6)018错误:
八进制数中的数字应在0-7的范围内
(7)9861正确,整形数的十进制形式
(8)011正确,整形数的八进制形式
(9)3.987E-2正确:
浮点数的指数形式
(10).987正确:
浮点数小数点前如为0,可省略
(11)‘\0xab’正确:
表示十六进制值为0xab的ASCII码字符
(12)50.正确:
浮点数小数点后如为0,可省略
(13)8.9e1.2错误:
浮点数的指数应为整数
(14)1e1正确:
浮点数的指数形式
(15)0xFF00正确:
整形数的十六进制形式
(16)0.825e2正确:
浮点数的指数形式
(17)473正确,整形数的十进制形式
(18)OX4错误:
十六进制数开头用数字0加x,而不是字母o加x
(19)“c”错误:
字符常量应用单引号,双引号是字符串
(20)‘t’正确:
字符常量,表示字母t的ASCII码
(21)‘\’”错误:
右侧使用了双引号
(22)‘0’正确:
字符常量,表示数字0的ASCII码
(23)‘\0’正确:
字符常量,表示十进制值为0的ASCII码
(24)‘A’正确:
字符常量,表示字母A的ASCII码
4.选择题
(1)合法的字符常量是。
A、C、D
A)‘\t’B)“A”C)‘a’D)’\x32’
(2)合法的字符常量是。
D
A)‘\084’B)‘\84’C)‘ab’D)’\x43’
(3)是C语言提供的合法的数据类型关键字。
B
A)FloatB)signedC)integerD)Char
(4)在以下各组标识符中,合法的标识符是。
D
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两个变量中的值互换的程序来。
#include"Stdio.h"
main(void)
{
inta,b,c;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
printf("a=%d,b=%d\n",a,b);
c=a;
a=b;
b=c;
printf("a=%d,b=%d\n",a,b);
getch();
}
(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)
#include"Stdio.h"
main(void)
{
inta=3,b=4,c=5;
floatx=1.2,y=2.4,z=-3.6;
unsignedintu=51274;
longn=128765;
charc1='a',c2='b';
printf("a=%2db=%2dc=%2d\n",a,b,c);
printf("x=%f,b=%f,c=%f\n",x,y,z);
printf("x+y=%.2f,y+z=%.2f,z+x=%.2f\n",x+y,y+z,z+x);
printf("u=%un=%ld\n",u,n);
printf("c1='%c'or%d(ASCII)\n",c1,c1);
printf("c2='%c'or%d(ASCII)\n",c2,c2);
getch();
}
(3)输入一个华氏温度,要求输出摄氏温度,公式为:
,取两位小数。
#include"Stdio.h"
main(void)
{
floatc,f;
printf("f=");
scanf("%f",&f);
c=5.0/9*(f-32);
printf("c=%.2ff=%.2f\n",c,f);
getch();
}
5.请判断以下表达式是否正确,若正确,写出表达式的值;若不正确,写出出错原因。
各变量的类型说明如下:
inti=8,j=3,k,a,b;
unsignedlongw=5,u;
doublex=1.42,y=5.2,t;
(1)k=i++8
(2)(int)x+0.41.4
(3)w+=-23
(4)y+=x++6.62
(5)i/=j+120
(6)k=--i7
(7)f=3/2*(t=30.0-10.0)20.0
(8)k=(a=2,b=3,a+b)5
(9)a+=a-=(b=4)*(a=3)-18
(10)a=2*a=3错,赋值语句的左边应为变量,不可为表达式,2*a为表达式。
(11)u=65535,j=-1,u=u+j
(12)++(i+j)?
错,可对变量进行自增运算,不可对表达式进行自增运算,i+j为表达式。
(13)2%(-3)2
(14)-2%(-3)-2
6.求以下表达式的值,假设所有变量都为整型。
(1)(a=b=4,a+1,b+1,a+b)8
(2)(a=2,b=5,a>b?
a++:
b++,a+b)8
(3)(x=8,x%=x+5)8
(4)30%6/20
7.写出下面各逻辑表达式的值。
设:
a=3,b=4,c=5.
(1)a+b>c&&b==c0
(2)a||b+c&&b-c1
(3)!
(a>b)&&!
c||11
(4)!
(x=a)&&(y==b)&&00
(5)!
(a+b)+c–1&&b+c/21
第四次课
1.if语句应用
(1)加载,编译并运行下面的程序,先使用一个正整数,然后再使用一个负数。
有什么不同?
#include
main()
{
intx;
printf("Enteranumberbetween-10and+10:
");
scanf("%d",&x);
if(x>0){
printf("\nYournumberispositive\n");
}
return(0);
}
输入正数:
显示“Yournumberispositive”
输入负数:
没有显示。
(2)使用if语句避免除0
#include
main()
{
floatx,y;
printf("Enteranumbertobeinverted:
");
scanf("%f",&x);
if(x!
=0)
{
y=1/x;
printf("Theinverseof%fequals%f\n",x,y);
}
else
Printf(“inputerror”)
getch();
}
1.当你输入数字0时结果为多少?
程序运行异常,看不到运行结果。
2.增加一个if语句使它只有当ifx不等于0时进行计算。
(程序中蓝色部分)
3.现在你输入0会出现什么情况?
仍看不到显示,但程序运行正常,getch()起作用。
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);
power=voltage*current;/*Calculationhere*/
if(power<0.5)
printf(“Okeytousehalfwattresistor\n”);/*ifcheckhere*/
else
printf(“haffwattregistorwillnotbeokey\n”);/*elsehere*/
retur
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言 作业 上机 习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)