文档库 最新最全的文档下载
当前位置:文档库 › 单片机C语言作业及上机习题及答案1

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

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

(1)C语言中的标识由字母、数字和下划线组成,以字母和下划线开头,不可使用关键字。

(2)C语言源程序从main 开始执行。每个C语言程序必须有一个且只能有一个主函数,主函数的名字为main。 C程序的函数由函数头和函数体两部分构成,函数头包括函数属性、函数类型、函数名和形参表;函数体由一系列的语句组成,语句由分号结束,函数休包含在一对花括号中。程序中的注释内容是用符号/* */ 界定。

1)C语言函数返回类型的默认定义类型是整型。

(2)函数的实参传递到形参有两种方式:数值和地址。

(3)在一个函数内部调用另一个函数的调用方式称为函数嵌套。在一个函数内部直接或间接调用该函数成为函数递归的调用方式。

(11) 下面程序段的输出结果是。A

int k,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)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7

(1) 在C语言中,引用数组元素时,其数组下标的数据类型允许是C。

A)整型常量B)整型表达式

C)整形常量或整形表达式C)任何类型的表达式

编写一个判断一个数是否是素数的函数,若是返回1,否则返回0。

#include

main()

{int i,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"

float seri_sum(int a)

{

int i;

float f=0;

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

f=f+1.0/(i*2.0-1);

return(f);

}

main()

{

int x=100;

float sum;

sum=seri_sum(x);

printf("sum=%f",sum);

getch();

}

第一次课

熟悉win-TC编译环境、熟悉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, world\n");

return(0);

}

2.

main()/*求两数之和*/

{

int a,b,sum; /* 这是变量定义*/

a=123;b=456;

sum=a+b;

printf(“sum is %d\n”,sum);

}

回答下列问题:

1.计算机上实现C语言程序要经过编辑(产生*. C 文件)、编译(产生*. OBJ文

件)、链接(产生*. EXE文件)和调试四个阶段。

第二次课

熟悉printf()函数、常见转义字符及各种数据类型的输出格式

1.

#include

main()

{

printf("\n12345678901234567890");

printf("\n\n\n\n a few new lines ");

printf("\n\t\tand \nsome \ntabs");

printf("\nand a beep just to be heard.\a\n");

printf("\nthi");

printf("s wor");

printf("ks too\n");

return (0);

}

(1) printf()函数的功能是什么?按指定的格式在屏幕上显示指定的内容

(2)在 printf()函数中’\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%d\n”,a,b);/*57 */

printf(“%3d%3d\n”,a,b);/* 5 7 */

printf(“%f,%f\n”,x,y);/*67.856400,-789.124000*/

printf(“%-10f%-10f\n”,x,y);/*67.856400 ,-789.124000*/

p rintf(“%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("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("%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 = %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

高精度(long double) 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)Float B)signed C)integer D)Char

(4)在以下各组标识符中,合法的标识符是。D

A) A)B01 B)table_1 C)0_t D)k%

B) A)Fast_ B)void C)pbl D)

C) A)xy_ B)longdouble C)*p D)CHAR

D)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 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_name[51];

/* Get the users name */

printf("Enter your name :");

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("G’day %s, you are %d days old\n", user_name,

user_age*365);

return(0);

}

1. 存储用户名的变量名是什么?

2. 改写这个程序使他可以用一个单独的变量以天的形式存储用户的年龄。

3.使用 scanf() 读取多行输入

#include

main()

{

int user_age;

char user_name[51];

/* 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("G’day %s, you are %d days old\n", user_name, user_age*365);

return(0);

}

1. 当你在回答问题时颠倒了年龄和姓名会出现什么情况?

2. 当你在代码中省去了&时会出现什么情况?

4.编程题

(1)已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序来。

#include "Stdio.h"

main(void)

{

int a,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= 3 b= 4 c= 5

x=1.200000,y=2.400000,z=-3.600000

x+y= 3.60 y+z=-1.20 z+x=-2.40

u= 51274 n= 128765

c1=’a’ or 97(ASCII)

c2=’b’ or 98(ASCII)

#include "Stdio.h"

main(void)

{

int a=3,b=4,c=5;

float x=1.2,y=2.4,z=-3.6;

unsigned int u=51274;

long n=128765;

char c1='a',c2='b';

printf("a=%2d b=%2d c=%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= %u n= %ld\n",u,n);

printf("c1='%c' or %d(ASCII)\n",c1,c1);

printf("c2='%c' or %d(ASCII)\n",c2,c2);

getch();

}

(3)输入一个华氏温度,要求输出摄氏温度,公式为:5

(32)9C F =-,取两位小数。

#include "Stdio.h"

main(void)

{

float c,f;

printf("f=");

scanf("%f",&f);

c=5.0/9*(f-32);

printf("c=%.2f f=%.2f\n",c,f);

getch();

}

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++

6.62

(5) i/=j+12 0

(6) k=--i 7

(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 / 2 0

7.写出下面各逻辑表达式的值。设:a=3,b=4,c=5.

(1)a+b>c&&b==c 0

(2)a ||b+c&&b-c 1

(3)!(a>b) && !c || 1 1

(4)!(x=a)&&(y==b)&&0 0

(5)!(a+b) + c –1 && b + c/2 1

第四次课

1.if语句应用

(1)加载,编译并运行下面的程序,先使用一个正整数,然后再使用一个负数。有什么不同?#include

main()

{

int x;

printf("Enter a number between -10 and +10 : ");

scanf("%d", &x);

if (x > 0) {

printf("\nYour number is positive\n");

}

return(0);

}

输入正数:显示“Your number is positive”

输入负数:没有显示。

(2)使用 if语句避免除0

#include

main()

{

float x, y;

printf("Enter a number to be inverted : ");

scanf("%f", &x);

if(x!=0)

{

y = 1/x;

printf("The inverse of %f equals %f\n", x, y);

}

else

Printf(“input error”)

getch();

}

1. 当你输入数字0时结果为多少?程序运行异常,看不到运行结果。

2. 增加一个if语句使它只有当if x不等于0时进行计算。(程序中蓝色部分)

3. 现在你输入0会出现什么情况?仍看不到显示,但程序运行正常,getch()起作用。

4. 改进程序使之可以当输入数字0时打印出警告信息。(程序中红色部分)

(3)编写 if语句

写一个程序用来计算电阻上的功率。功率大小等于电阻上的电压值乘以流过电阻的电流

值。

完成计算后,使用一个if 语句判断功率是否低于0.5 瓦特。如果低于0.5 瓦特则输出“Okey to use half watt resistor”,否则输出“haff watt registor will not be okey”。

下面是程序的开始部分,请添加完成if语句。

#include

main()

{

float power, voltage, current;

printf("Enter the voltage : ");

scanf("%f", &voltage);

printf("Enter the current : ");

scanf("%f, ¤t);

power= voltage*current; /* Calculation here */

if(power<0.5)

printf(“Okey to use half watt resistor\n”);/* if check here */

else

printf(“haff watt registor will not be okey\n”);/* else here */ return(0);

}

如果功率小于0.5 瓦特,屏幕输出应该如下所示:

Enter the voltage : 5

Enter the current : 0.002

okay to use half watt resistor.

如果功率大于0.5瓦特:

Enter the voltage : 5

Enter the current : 200

half watt resisitor will not be okay.

2. 编程练习:

(1)有三个整数a,b,c,由键盘输入,输出其中最大的数。

#include

main()

{

int a,b,c,max;

printf("a=");

scanf("%d",&a);

printf("b=");

scanf("%d",&b);

printf("c=");

scanf("%d",&c);

max=a;

if(b>max)max=b;

if(c>max)max=c;

printf("max=%d\n",max);

getch();

}

(2)编程输入整数a和b,若大于100,则输出百位以上的数字,否则输出两数之和。#include

main()

{

int a,b,c;

printf("a=");

scanf("%d",&a);

printf("b=");

scanf("%d",&b);

if(a>100 ||b>100)

{

if(a>100)printf("a=%d\n",a);

if(b>100)printf("b=%d\n",b);

}

else printf("a+b=%d\n",a+b);

getch();

}

(3)有一函数:

写一个程序,输入x的值,输出y值。

#include

main()

{

float x,y;

printf("x=");

scanf("%f",&x);

if(x<1) y=x;

else if (x>=1 && x<10) y=2*x-1;

else if (x>=10) y=3*x-11;

printf("y=%f\n",y);

getch();

}

(4)写一段程序计算两个并联电阻的阻值,使你的程序检查是有短路的(0欧姆)将导致0 作为被除数,使用一个if语句或者三目运算避免这种情况(使用三目运算计算及检查是否除0)。提示: Rt = 1 / (1/R1 + 1/R2);

你的输出应该如下所示:

Enter the value of resistor 1 : 45

Enter the value of resistor 2 : 56

45.0 ohms in parallel with 56.0 ohms gives 24.95 ohms

假如有一个电阻阻值为0的话,结果将如下所示:

Enter the value of resistor 1 : 0

Enter the value of resistor 2 : 45

0.0 ohms in parallel with 45.0 ohms gives 0.00 ohms

#include

main()

{

float r1,r2;

printf("Enter the value of resistor 1 :");

scanf("%f",&r1);

printf("Enter the value of resistor 2 :");

scanf("%f",&r2);

if(r1= =0 || r2= =0) printf("%.1f ohms in parallel with %.1f ohms gives 0.00 ohms\n",r1,r2); else printf("%.1f ohms in parallel with %.1f ohms gives %.2f ohms\n",r1,r2,1/(1/r1+1/r2));

getch();

}

第5次课

1.switch语句应用

(1)加载,编译并运行下面的程序,并回答问题。

2.加载,编译并运行下面的程序,将文件保存为switch-01.c

#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 + num2; break;

case ‘-’:ans = num1 - num2; break;

case ‘*’:ans = num1 * num2; break;

case ‘/’:if(num2)ans = num1 / num2;

else { arithOp=0;printf(“devide 0 error\n”);}

break;

default: printf(“operator error\n”);break;

}

If(arithOp)

printf("\n%d %c %d = %d", num1, arithOp, num2, ans);

fflush(stdin);

getchar();

return(0);

}

1. 尝试输入一个不匹配case语句的操作符,会发生什么?表达式右边的运算结果为0

2. 将程序保存为switch-02.c并为“ans”添加乘(*)和除(/)的算法。(蓝色)

3. 添加一个default语句来处理输入的运算符不符合case情况。(红色)

4. 添加程序处理除数为零的情况。(绿色)

(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:

printf("*");

case 1:

printf("*");

break;

default:

printf("The number you asked for is out of range\n");

}

return(0);

}

1. 打印9颗星和8颗星是不同的。描述这两种方法。

9颗星由case 9:printf("*********");break;显示;

8颗星由case 8:printf("*");case 7:printf("*");case 6:printf("*"); case 5:printf("*****");break;显示;

2. 编辑这段程序,使之工作在没有break语句的情况下。

(3)任务1:完成下面的程序,使用if/else语句,判断输入的数是正数还是负数

任务2:完成下面的程序,使用switch语句,判断输入的数是正数还是负数,并且要处理输入的数越界的情况。

#include

main()

{

int num;

printf("Program indicates whether number is +ve or -ve\n");

printf("Enter a number between -5 and +5 :");

scanf("%d", &num);

/* 添加语句 */

if(num>=0 && num<=5) printf("the number is +ve \n");

else if (num>=-5 && num<0 printf("the number is -ve \n");

else printf("the number is out of rager \n");

getch();

}

#include

main()

{

int num;

printf("Program indicates whether number is +ve or -ve\n");

printf("Enter a number between -5 and +5 :");

scanf("%d", &num);

/* 添加语句 */

Switch(num)

{

case 5:

case 4:

case 3:

case 2:

case 1: printf("the number is +ve \n");break;

case 0: printf("the number is zero\n");break;

case -1:

case -2:

case -3:

case -4:

case -5: printf("the number is -ve \n");break;

default: printf("the number is out of rager \n");break;

}

getch();

}

(4)本程序是从键盘输入一个10进制数,根据用户要求输出这个数对应的16进制、8进制或者10进制数。例:若用户输入“H”,则输出这个数的16进制数。

任务1:添加if语句完成程序功能

任务2:添加switch语句完成程序功能,注意对输入无效数制的处理。比如输入:X时,作何处理。

#include

main()

{

int num;

char choice;

printf("Program prints oct al or hex equivalent of numbers

entered\n");

printf("Enter an integer : ");

scanf("%d", &num);

printf("Do you want Decimal, Octal or Hex (H, D, O) : ");

fflush(stdin);

choice = getchar();

/* 添加程序 */

if(choice ==?H?)printf(“Hex form of choice is%x\n”,chioce);

else if(choice ==?D?)printf(“decimal form of choice is%d\n”,chioce);

else if(choice ==?O?)printf(“Octal form of choice is%o\n”,chioce);

else printf(“output form error”);

getch();

#include

main()

{

int num;

char choice;

printf("Program prints oct al or hex equivalent of numbers

entered\n");

printf("Enter an integer : ");

scanf("%d", &num);

printf("Do you want Decimal, Octal or Hex (H, D, O) : ");

fflush(stdin);

choice = getchar();

/* 添加程序 */

switch(chioce)

{

case …H?: printf(“Hex form of choice is%x\n”,chioce);break;

case …D?: printf(“decimal form of choice is%d\n”,chioce);break;

case 3: printf(“Octal form of choice is%o\n”,chioce);break;

default: printf(“output form error break;”);

getch();

C语言上机作业

1.输入十个整数,分别输出这10个数再计算并输出它们的和。 源程序: #include void main() { int i,sum=0; int a[10]; printf("input 10 intergers:\n"); for(i=0;i<=9;i++) { scanf("%d",&a[i]); } for(i=0;i<=9;i++) { sum+=a[i]; printf("%d ",a[i]); } printf("sum=%d\n",sum); } 运行结果: 2.输入10个不同的数,将它们存入数组a中,在输入一个数x。然后在数组中查找x。如果找到,则输出相应下标,否则输出“not found”。 源程序:#include void main() { int a[10],i,j,x; printf("Input data of a[10]:\n"); for(i=0;i<10;i++) { scanf("%d",&a[i]);

} printf("Input x:"); scanf("%d",&x); for(j=0;j<10;j++) { if(x==a[j]) { printf("%d\n",j); goto L1; } } printf("not found\n"); L1: ; } 运行结果:

3.输入一个整数n(1 void main() { int n,i,s,min,a[10]; printf("Input a interger n(1a[i]) min==a[i]; } for(i=0;i

西工大C语言上机考试题库

1:2:3 #include #include int main() { int i=0,j=0,k=0,a=0,b=0,c=0,l=0,m=0,n=0,d=0,p=0,q=0; for(i=1;i<=3;i++) { for(j=1;j<=9;j++) { if(i!=j) { for(k=1;k<=9;k++) { if(k!=j&&i!=k) { a=i*100+j*10+k; b=a*2; c=a*3; l=b%10,d=c%10; m=(b%100)/10,p=(c%100)/10; n=b/100,q=c/100; if(l!=0&&m!=0&&n!=0&&d!=0&&p!=0&&q!=0) if(i!=l&&i!=m&&i!=n&&j!=l&&j!=m&&j!=n&&k!=l&&k!=m&&k!=n) if(i!=d&&i!=p&&i!=q&&j!=d&&j!=p&&j!=q&&k!=d&&k!=p&&k!=q) if(l!=d&&l!=p&&l!=q&&m!=d&&m!=p&&m!=q&&n!=d&&n!=p&&n!=q) printf("%d %d %d\n",a,b,c); } }

} } } return 0; } 8 #include"stdio.h" int main() { int a,b[10],m=0,n=0,p; int i,j,k; scanf("%d",&a); for(i=1;i<=a;i++) { m=0; n=0; p=i; for(j=0;p!=0;j++) { b[j]=p%10; p=p/10; } for(k=0;k

单片机课后习题解答

练习练习练习 第二章单片机结构及原理 1、MCS-51单片机内部包含哪些主要功能部件?它们的作用是什么? 答:(1)一个8bit CPU是微处理器的核心,是运算和逻辑计算的中心。 (2)片内震荡器及时钟电路:提供标准时钟信号,所有动作都依据此进行。 (3)4K ROM程序存贮器:存贮程序及常用表格。 (4)128B RAM 数据存贮器:存贮一些中间变量和常数等。 (5)两个16bit定时器/计数器:完全硬件定时器 (6)32根可编程I/O口线:标准8位双向(4个)I/O接口,每一条I/O线都能独立地作输入或输出。 (7)一个可编程全双工串行口。 (8)五个中断源。 2、什么是指令?什么是程序? 答:指令是规定计算机执行某种操作的命令。 程序是根据任务要求有序编排指令的集合。 3、如何认识89S51/52存储器空间在物理结构上可以划分为4个空间,而在逻辑上又可以划分为3个空间? 答:89S51/52存储器空间在物理结构上设有4个存储器空间:片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器。在逻辑上有3个存储器地址空间:片内、片外统一的64KB程序存储器地址空间,片内256B数据存储器地址空间,片外64KB的数据存储器地址空间。 4、开机复位后,CPU使用的是哪组工作寄存器?他们的地址是多少?CPU如何确定和改变当前工作寄存器组? 答:开机复位后,CPU使用的是第0组工作寄存器,地址为00H~07H,CPU通过改变状态字寄存器PSW中的RS0和RS1来确定工作寄存器组。 5、什么是堆栈?堆栈有何作用?在程序设计时,有时为什么要对堆栈指针SP重新赋值?如果CPU 在操作中要使用两组工作寄存器,SP应该多大? 答:堆栈是一个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。堆栈指针SP复位后指向07H单元,00H~1FH为工作寄存器区,20H~2FH为位寻址区,这些单元有其他功能,因此在程序设计时,需要对SP重新赋值。如果CPU在操作中要使用两组工作寄存器,SP应该至少设置为0FH。 6、89S51/52的时钟周期、机器周期、指令周期是如何分配的?当振荡频率为8MHz时,一个单片机周期为多少微秒? 答:时钟周期为时钟脉冲频率的倒数,他是单片机中最基本的、最小的时间单位。机器周期是指完成一个基本操作所需要的时间,一个机器周期由12个时钟周期组成。指令周期是执行一条指令所需要的时间,由若干个机器周期组成。 若fosc=8MHz,则一个机器周期=1/8×12μs=1.5μs 7、89S51/52扩展系统中,片外程序存储器和片外数据存储器共处同一地址空间为什么不会发生总线冲突? 答:访问片外程序存储器和访问数据存储器使用不同的指令用来区分同一地址空间。 8、程序状态字寄存器PSW的作用是什么?常用状态标志有哪些位?作用是什么? 答:程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。各个标志位的意义如下: PSW.7(C y):进位标志位。 PSW.6(AC):辅助进位标志位,又称为半进位标志位。 PSW.5(F0):用户标志位。

单片机作业及答案 共13页

1.CS-51系列单片机串行口中断标志TI和R I在执行中断程序后,能否自动清零,这样设 计的意图是什么? 答:不能,由于串行通信的收发电路使用一个中断源,因而,有利于单片机查询是接收中断还是发送中断。同时有利于全双工通信。 2.写出8051单片机的复位及5个中断服务程序的入口地址。 答:(1)复位入口地址:0000H; (2)外部中断0中断服务程序入口地址为0003H; (3)定时器/计数器0中断服务程序入口地址为000BH; (4)外部中断1中断服务程序入口地址为0013H; (5)定时器/计数器1中断服务程序入口地址为001BH; (6)串行口中断服务程序入口地址为0023H。 3.简述MCS-51单片机的工作寄存器的分布结构(包括:几个区、如何选择、每个区几个 寄存器、如何表示)? 答:(1)四个通用寄存器区; (2)通过PSW的RS1、RS0选择: 00--0区、01—1区、10—2区、11—3区; (3)每个区有8个工作寄存器R0—R7; 4.MCS-51单片机的P0口作为一般的I/O口使用时应注意什么? 答:应注意: ①由于P0口的输出级是漏极开路的开漏电路,所以作为一般的I/O口使用时需 接外部上拉电阻; ②P0口的输出级的输出驱动能力,可以驱动8个LS的TTL电路,使用必须确 认是否能驱动的外部电路,否则应加驱动电路; ③由于P0口为准双向口,在读引脚时,应先把口置1。 5.画出MCS-51单片机的三总线图(控制总线应包括三条)并注明几条数据线、几条地址 线、各个控制线的意义。 答:(1) (2)8条数据线、16条地址线 (3)/RD:对外部RAM及I/O口的读允许; /WR:对外部RAM及I/O口的写允许; /PSEN:对外部ROM的读允许; 6.MCS-51系列单片机内部有哪些主要逻辑部件组成?(书) 答:CPU、RAM、程序存储器、定时器、I/O接口、中断系统、串行接口等。 7.简述P3口的特殊专用功能(第2功能)。 答:P3.0----串行通信收;P3.1-----串行通信发;P3.2-----外部中断0;P3.3-----外部中断1;P3.4----- T0的计数输入;P3.5----- T1的计数输入;P3.6-----外部数据区写有效; P3.7-----外部数据区读有效。

5-6次C语言上机作业

实验5 函数(1) 【实验题5-1】以下程序的功能:从键盘输入两个数,计算出他们的和,并将结果输出在屏幕上。调试运行程序,观察出现了什么错误,提出两种修改方案。 【实验题5-2】下程序的功能:输出3~1000之的间的素数。请选择合适的内容填入程序的空白处,并调试运行程序。

【实验题5-3】从键盘输入一个整数n,计算n^3,并将结果输出在屏幕上。要求计算n^3用函数实现。 【实验题5-4】从键盘输入一个整数n,计算2n+1与++n之和。要求计算两数之和用函数

实现。 注意写计算表达式的时候3*n之间的乘号不要丢掉,否则会提示:invalid suffix “n” on integer constant. 调用用户自定义函数是只写ifun=fun(n); 就可以了,不要在括号里加上int。Ifun=fun(int n) × 【实验题5-5】编写程序,计算Cmn=n!/(n-m)!m!。要求如下: 1)编写一个函数计算n!; 2)编写主函数,输入n和m, 调用第1)项中的函数完成计算; 3)输出并计算C58、C712的结果。

【实验题6-1】以下程序功能:用已知三角形三边,求三角形面积。但程序有错,请上机调试并改正错误。

【实验题6-2】以下程序运行的结果应该是a=14, b=15,temp=0。在程序空白处填写适当的编译预处理命令。 【实验题6-3】用for循环输出20个0~99之间的随机数。要求没输出五个随机数换一行。 【实验题6-4】从键盘输入一个字母,如果是大写字母就转换成小写字母输出;如果是小写字母就转换成大写字母输出。要求用库函数实现。

C语言上机题库百科园第2章!南信大!

第二章 若有数学式3ae bc,则不正确的C语言表达式是() A.3*a*e/b*c B.a/b/c*e*3 C.3*a*e/b/c D.a*e/c/b*3 设:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b) && (n=c>d)后n的值为()。 A.4 B.3 C.2 D.1 下列表达式中,不满足"当x的值为偶数时值为真,为奇数时值为假"的要求的是() A.(x/2*2-x)==0 B.!(x%2) C.!(x%2==0) D.x%2==0 表达式18/4*sqrt(4.0)/8值的数据类型为()。 A.char B.double C.不确定 D.float 在C语言中,要求运算数必须是整型的运算符是( ) A.% B./ C.++ D.!= 若x,i,j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为()。 A.4

C.16 D.52 C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( ) A.必须为下划线 B.必须为字母 C.可以是字母、数字和下划线中的任意一种 D.必须为字母或下划线 若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是( ) A.不知道a的值,不能确定 B.0 C.2 D.1 判断字符型变量c1是否为数字字符的正确表达式为( ) A.(c1>='0')&&(c1<='9') B.(c1>=0)&&(c1<=9) C.('0'>=c1)||('9'<=c1) D.'0'<=c1<='9' 下面四个选项中,均是合法的用户标识符的选项是()。 A._123 temp INT B.A p_o do C.b-a goto int D.float lao _A 以下关于C语言数据类型使用的叙述中错误的是( ) A.若要处理如"人员工资"的相关数据,单精度类型 B.若只处理"真"和"假"两种逻辑值,应使用逻辑类型 C.若要保存带有多位小数的数据,应使用双精度类型 D.若要准确无误差的表示自然数,应使用整数类型 假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是()。 A.7 B.8 C.6 D.2 下面正确的字符常量是()

单片机应用技术课后习题参考答案

1 习题1答案 1.2 填空题 (1)单片级应用系统是由硬件系统、软件系统组成的 (2)除了单片机和电源外,单片机最小系统包括时钟电路、复位电路 (3)除了电源和电线引脚外,XTAL1、XTAL2、RST、EA引脚信号必须连接相应电 路 (4)51系列单片机的存储器主要有4个物理存储空间,即片内数据存储器、片内程序存储器、片外数据存储器、片外程序存储器 (5)51系列单片机的XTAL1和XTAL2引脚是时钟电路 (6)51系列单片机的应用程序一般存放在程序存储器 (7)片内RAM低128单元,按其用途划分为工作寄存器组、位寻址区、用户RAM区(8)但振荡脉冲频率为12MHz时,一个机器周期为1us,当振荡脉冲频率为6MHz时,一个机器周期为2us (9)51系列单片机的复位电路有两种,即上电复位电路、按键复位电路 (10)输入单片机的复位信号需延续2个机器周期以上的高电平即为有效。 1.3 (4)什么是机器周期?机器周期和晶振频率有何关系?当晶振频率为6MHz时,机器周期是多少? 答: 规定一个机器周期的宽度为12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。 当振荡脉冲频率为6 MHz时,一个机器周期为2 μs。 (5)51系列单片机常用的复位方法有哪几种?画电路图并说明其工作原理。 答: (a)上电复位电路(b)按键复位电路 单片机常见的复位电路 图(a)为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RST端的电位

与VCC相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复位。 图(b)为按键复位电路。该电路除具有上电复位功能外,若要复位,只需按图(b)中的RESET键,此时电源VCC经电阻R1、R2分压,在RST端产生一个复位高电平。 习题3 答案 3.2 填空题 (2)用C51编程访问51单片机的并行I/O口是,可以按字节,寻址操作,还可以按位操作(4)C51中定义一个可位寻址变量FLAG访问P3口的P3.1引脚的方法是s bit FLAG=P3^1; (10)下面的while循环执行了无限次空语句。 i=3; While(i!=0); (15)在以下的数组定义中,关键字“code”是为了把tab数组存储在程序存储器ROM中 Unsigned char code b[]={}; 3.3 上机操作题 (1) //xiti3_3_1.c——第三章习题3.3上机操作题(1) #include void delay(unsigned char i); //延时函数声明 void main() //主函数 { while(1){ P1=0x55; //按状态1的方式点亮8个LED delay(200); //延时 P1=0xaa; //按状态2的方式点亮8个LED delay(200); //延时 } } void delay(unsigned char i) //延时函数参见任务1程序ex1_1.c (2) //xiti3_3_2.c——第三章习题3.3上机操作题(2) #include //包含头文件REG51.H void delay(unsigned char i); //延时函数声明 void main() //主函数 { unsigned char i,l,r; while(1){ l=0x10; // 高4位灯的位置初值为00010000B r=0x08; // 低4位灯的位置初值为00001000B

单片机试题及答案

单片机原理与接口技术习题答案 习题与思考题1 1-1 微型计算机通常由哪些部分组成?各有哪些功能? 答:微型计算机通常由控制器、运算器、存储器、输入/输出接口电路、输入设备和输出设备组成。控制器的功能是负责从内部存储器中取出指令并对指令进行分析、判断、并根据指令发出控制信号,使计算机有条不紊的协调工作;运算器主要完成算数运算和逻辑运算;存储器用于存储程序和数据;输入/输出接口电路完成CPU与外设之间相连;输入和输出设备用于和计算机进行信息交流的输入和输出。 1-2 单片微型计算机与一般微型计算机相比较有哪些区别?有哪些特点? 答:与通用微型计算机相比,单片机的硬件上,具有严格分工的存储器ROM和RAM和I/O端口引脚具有复用功能;软件上,采用面向控制的指令系统和硬件功能具有广泛的通用性,以及品种规格的系列化。单片机还具备体积小、价格低、性能强大、速度快、用途广、灵活性强、可靠性高等特点。 1-3 简述计算机的工作过程。 答:计算机的工作是由微处理器以一定的时序来不断的取指令、指令译码和执行指令的过程。 1-4 单片机的几个重要指标的定义。 答:单片机的重要指标包括位数、存储器、I/O口、速度、工作电压、功耗和温度。 1-5 单片微型计算机主要应用在哪些方面? 答:单片机的主要应用领域有智能化产品、智能化仪表、智能化测控系统、智能化接口等方面。 1-6 为什么说单片微型计算机有较高的性能价格比和抗干扰能力? 答:因为单片微型计算机主要面向特定应用而设计,设计者在硬件和软件上都高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,具备较高的性能、价格比;单片机嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中,另外单片机体积小,可以放入屏蔽设备中,从而使其具有较高的抗干扰能力。 1-7 简述单片机嵌入式系统的定义和特点。 答:单片机嵌入式系统是嵌入到对象体系中的专用计算机系统;其特点是面向特定应用、与各个行业的具体应用相结合、硬件和软件高效率、软件固化在存储器芯片或单片机本身和不具备自举开发能力。 习题与思考题2 2-1 MCS-51单片机内部包含哪些主要功能部件?它们的作用是什么? 答:MCS-51单片机在一块芯片中集成了CPU、RAM、ROM、定时/计数器、多功能I/O口和中断控制等基本功能部件。 单片机的核心部分是CPU,CPU是单片机的大脑和心脏。 程序存储器用于存放编好的程序或表格常数。数据存储器用于存放中间运算结果、数据暂存和缓冲、标志位等。 定时/计数器实质上是加法计数器,当它对具有固定时间间隔的内部机器周期进行计数时,它是定时器;当它对外部事件进行计数时,它是计数器。 I/O接口的主要功能包括:缓冲与锁存数据、地址译码、信息格式转换、传递状态(外设状态)和发布命令等。 中断控制可以解决CPU与外设之间速度匹配的问题,使单片机可以及时处理系统中许多随机的参数和信息,同时,它也提高了其处理故障与应变能力的能力。 2-2 MCS-51单片机的核心器件是什么?它由哪些部分组成?各部分的主要功能是什么? 答:单片机的核心部分是CPU,可以说CPU是单片机的大脑和心脏。它由运算器、控制器和布尔(位)处理器组成。 运算器是用于对数据进行算术运算和逻辑操作的执行部件。

7~8次C语言上机作业

实验7 数组(1) 【实验题7-1】此程序的功能:给数组元素赋值并进行输出。但程序中有错误,请查找原因,并调试程序以实现程序功能。 【实验题7-2】以下程序的功能:求整型数组中元素的最大值及其下标。请选择合适的内容填入程序中空白处。 【实验题7-3】以下程序的功能:把整型数组里的元素按逆序进行排序并输出。请选择合适的内容填入程序中空白处。 【实验题7-4】编写一个程序,定义一个有五个元素的一维数组,从键盘对该数组的元素进行赋值后再显示在屏幕上。 【实验题7-5】编写程序对整型数组iA的各元素进行从大到小排序。 【实验题7-6】在数组iA和数组iB中分别存放了na和nb个由小到大的有序数。编写程序,完成把两个数组中的元素按从小到大的顺序归并存放在数组iC中。 【实验题7-7】假设数组iA中的元素按由小到大的顺序存放。编写程序把数组iA中相同的元素删除至一个,然后按照每行六个元素的形式输出数组iA中的各个元素值。 【实验题7-8】在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素为该二维数组的一个鞍点。编写程序要求从键盘输入一个二维数组,当鞍点存在时,把鞍点找出来。 #include #define M 3 #define N 4 int main(){ int a[M][N],i,j,k; printf("\n请输入二维数组的数据:\n"); for(i=0;i for(j=0;j scanf("%d",&a[i][j]); for(i=0;i for(j=0;j

printf("M",a[i][j]); printf("\n"); } for(i=0;i k=0; for(j=1;j if(a[i][j]>a[i][k]) k=j; for(j=0;j if(a[j][k] break; if(j==M) printf("%d,%d,%d\n",a[i][k],i,k); } return 0; } 上面这个题代码运行不了,可又找不到问题所在,头疼!!! 实验8 数组(2) 【实验题8-1】此程序的功能:过滤字符数组中数字并进行输出。但程序中有错误,请查找原因,并调试程序以实现程序功能。 【实验题8-2】此程序的功能:统计字符数组中出现字符“s”的次数,并进行输出。但程序中有错误,请查找原因,并调试程序以实现程序功能。 【实验题8-3】以下程序的功能:连续输入一批“#”结束的字符串,遇“##”则全部结束,统计并输出每个字符串的有效长度。请选择适当的内容填入空白处。 【实验题8-4】

C语言上机题库

C语言习题集 3.11输入'A'~'F'中的一个字母,代表一个十六进制数,将其转换为十进制数,求该数与15的和并输出。 输入格式: B 输出格式: 26 #include int main(void) { char ch; int sum; ch=getchar(); sum=ch-'A'+10+15; printf("%d\n",sum); return 0; } 3.12输入三个整数,求其平均值。 输入格式: 3 5 7 输出格式: 5 #include int main(void) { int a,b,c,aver; scanf("%d %d %d",&a,&b,&c); aver=(a+b+c)/3; printf("%d\n",aver); return 0; } 3.13根据c=5/9*(f-32) 公式,输入华氏温度f,求摄氏温度c,结果精确到小数点后两位。 输入格式: 80.0 输出格式: 26.67 #include int main(void) { float f,c; scanf("%f",&f); c=5.0/9*(f-32); printf("%.2f\n",c); return 0; } 3.14输入一个四位正整数,求其各位数字之和。例如,1357的各位数字之和为1 + 3 + 5 + 7 = 16。 输入格式: 1357 输出格式: 16 #include int main(void) { int num; int a,b,c,d,total; scanf("%d",&num); a=num/1000; b=(num-a*1000)/100; c=(num-a*1000-b*100)/10; d=num-a*1000-b*100-c*10; total=a+b+c+d; printf("%d\n",total); return 0; } 3.15输入一大写字母,输出对应的小写字母。 输入格式: A 输出格式: a #include int main(void) { char c1,c2;

单片机课后习题答案解析

一)填空题 1. 十进制数14对应的二进制数表示为(1110B),十六进制数表 示为(0EH)。十进制数-100的补码为(9CH),+100的补码为(64H)。 2. 在一个非零的无符号二进制整数的末尾加两个0后,形成一个新的无符号二进制整数,则新数是原数的(4)倍。 3. 8位无符号二进制数能表示的最大十进制数是(255)。带符号二进制数11001101转换成十进制数是(-51)。 4. 可以将各种不同类型数据转换为计算机能处理的形式并输送到计算机中去的设备统称为(输入设备)。 5. 已知字符D的ASCII码是十六进制数44,则字符T的ASCII码是十进制数(84)。 6. 若某存储器容量为640KB,则表示该存储器共有(655360)个存储单元。 7. 在计算机中,二进制数的单位从小到大依次为(位)、(字节)和(字),对应的英文名称分别是(bit)、(Byte)和(Word)。 8. 设二进制数A=10101101,B=01110110,则逻辑运算A∨B=(11111111),A ∧B=(00100100),A⊕B=(11011011)。 9. 机器数01101110的真值是(+110),机器数01011001的真值是(+89),机器数10011101的真值是(+157或-115),机器数10001101的真值是(+206或-50)。(二)单项选择题 1. 用8位二进制补码数所能表示的十进制数范围是(D) (A)-127 ~ +127 (B)-128 ~ +128 (C)-127 ~ +128 (D)-128 ~ +127 2. 下列等式中,正确的是(B) (A)1 KB = 1024×1024 B (B)1 MB = 1024×1024 B (C)1 KB = 1024 M B (D)1 MB = 1024 B 3. 程序与软件的区别是(C) (A)程序小而软件大(B)程序便宜而软件昂贵 (C)软件包括程序(D)程序包括软件 4. 存储器中,每个存储单元都被赋予惟一的编号,这个编号称为(A) (A)地址(B)字节(C)列号(D)容量 5. 8位二进制数所能表示的最大无符号数是(B) (A)255 (B)256 (C)128 (D)127 6. 下列4个无符号数中,最小的数是(B) (A)11011001(二进制)(B)37(八进制) (C)75(十进制)(D)24(十六进制) 7. 下列字符中,ASCII码最小的是(B) (A)a (B)A (C)x (D)X 8. 下列字符中,ASCII码最大的是(C) (A)a (B)A (C)x (D)X 9. 有一个数152,它与十六进制数6A相等,那么该数是(B) (A)二进制数(B)八进制数(C)十进制数(D)十六进制数 第2章80C51单片机的硬件结构 (一)填空题

单片机试题及答案1

一、填空题 已知x的补码数10110111B,x的真值是___201D。 进制转换:134D=__10000110B;=______86H。 32K存储容量对应的地址范围从0000H-7FFFH_。 CPU与内存或I/O接口相连的系统总线通常由_控制总线__、数据总线__、地址总线___等三种信号组成。MCS-51单片机上电复位时PC=_0000_H,SP=_07_H;工作寄存器缺省采用第___________组,这组寄存器的地址范围是从______H~_____H。 MCS-51单片机系列有__5__个中断源,可分为___2__个优先级。上电复位时外部中断0__中断源的优先级别最高。 MCS-51单片机内部RAM共分为______2__个功能区,其高端128个字节的地址空间称为特殊功能寄存器_区,其中仅有________个字节有实际意义。 8255可编程芯片通常作为_并行接口_______扩展之用;8253可编程芯片通常作为_定时器_______扩展之用。8155可编程芯片通常作为_并行接口计数器和存储器______扩展之用;8279可编程芯片通常作为_键盘/显示控制器________扩展之用。 MCS-51 的并行I/O口信息有____读引脚________和____读锁存_________两种读取方法,读一改一写操作是针对并行I/O口内的锁存器进行的。 74LS273通常用来作为简单______输出__________接口扩展;而74LS244则常用来作为简单________输入_______接口扩展。 不带输入数据锁存器的D/A转换器,CPU必须通过______锁存或寄存__器件与D/A转换器传送数据;无三态输出功能的A/D转换器,应当通过_____三态___器件与CPU传送数据。 若用并行口来扩展一个有36只按键的行列式键盘,最少需__12_根I/O线。 74LS138是具有3个输入的译码器芯片,其输出作为片选信号时,最多可以选中___八_块芯片。 MCS-51单片机访问外存储器时利用_____ALE_______信号锁存来自_____P0_____口的低八位地址信号。在MCS-51系统中,当晶振频率采用12MHz时,一个机器周期等于_1__微秒。 8051的T0作为计数器用时,其计数频率不能超过晶振频率的___二十四分之一__。 二、选择题 通常所说的主机是指( C )。 (A)硬件和软件(B)CPU和磁盘存储器 (C)CPU和主存(D)运算器和控制器

c语言上机题库 (1)

1、给定n 个数据, 求最小值出现的位置(如果最小值 出现多次,求出第一次出现的位置即可)。 2、编写程序求无理数e 的值并输出。计算公式为: e=1+1/1!+1/2!+1/3!+......+1/n! 当1/n!<0.000001时e=2.718282。 3、求一批数中最大值和最小值的积。 4、某一正数的值保留2位小数,对第三位进行四舍 五入。 5、从键盘上输入任意实数x,求出其所对应的函数值。 z=(x-4)的二次幂(x>4) z=x 的八次幂(x>-4) z=z=4/(x*(x+1))(x>-10) z=|x|+20(其他) 6、求出N ×M 整型数组的最大元素及其所在的行坐标 及列坐标(如果最大元素不唯一,选择位置在最前面 的一个)。 例如:输入的数组为: 1 2 3 4 15 6 12 18 9 10 11 2 求出的最大数为18,行坐标为2,列坐标为1。 7、求一个n 位自然数的各位数字的积。(n 是小于10的 自然数) 8、计算n 门课程的平均值,计算结果作为函数值返回。 例如:若有5门课程的成绩是:92,76,69,58,88, 则函数的值为76.599998。 9、求一批数中小于平均值的数的个数。 10、编写函数判断一个整数m 的各位数字之和能否被7整除, 可以被7整除则返回1,否则返回0。调用该函数找出 100~200之间满足条件的所有数。

11、请编一个函数void fun(int tt[M][N],int pp[N]), tt指向一个M行N列的二维数组,求出二维数组每列 中最大元素,并依次放入pp所指一维数组中。二维 数组中的数已在主函数中赋予。 12、编写函数fun用比较法对主程序中用户输入的具有10 个数据的数组a按由大到小排序,并在主程序中输出 排序结果。 13、编写main程序调用函数fact求解从m个元素选n 个元 素的组合数的个数。计算公式是:组合数=m!/(n!.(m-n)!)。 要求:m不能小于n,否则应有容错处理。 说明:函数fact(x)的功能是求x!。 14、找出一批正整数中的最大的偶数。 15、实现两个整数的交换。 例如:给a和b分别输入:60和65,输入为: a=65 b=60 16、将字符串中的小写字母转换为对应的大写字母, 其它字符不变。 17、求一个四位数的各位数字的立方和。 18、求一组数中大于平均值的数的个数。 例如:给定的一组数为1,3,6,9,4,23,35,67,12,88时,函数值为3。 19、对任意输入的x,用下式计算并输出y 的值。 5 x<10 y= 0 x=10 -5 x>10 20、求给定正整数m以内的素数之和。 例如:当m=20时,函数值为77。 21、判断整数x是否是同构数。若是同构数,函数返回1; 否则返回0。x的值由主函数从键盘读入,要求不大

单片机课后习题答案

1.1 计算机经过了哪些主要发展阶段? 解:单片机的发展大致经历了四个阶段: 第一阶段(1970—1974年),为4位单片机阶段; 第二阶段(1974—1978年),为低中档8位单片机阶段; 第三阶段(1978—1983年),为高档8位单片机阶段; 第四阶段(1983年至今),为8位单片机巩固发展阶段及16位单片机、32位单片机推出阶段。 1.2 写出下列机器数的真值: (1)01101110 (2)10001101 (3)01011001 (4)11001110 解:(1)01101110的真值=+110 (2)10001101的真值=+141或-115 (3)01011001的真值=+89 (4)11001110的真值=+206或-50 说明:机器数是指计算机中使用的二进制数,机器数的值称为真值。机器数可表示为无符号数也可表示为带符号数,其中计算机中的带符号数一般为补码形式。10001101若为无符号数。则其真值为+141;若为带符号数,由于最高位(符号位)为1.所以为负数(补码形式),则其真值为-115。 1.4 写出下列二进制数的原码、反码和补码(设字长为8位)。 (1)010111 (2)101011 (3)-101000 (4)-111111 解:(1) [x]原=00010111 [x]反= 00010111 [x]补= 00010111 (2)[x]原=00101011 [x]反= 00101011 [x]补= 00101011 (3)[x]原=10101000 [x]反= 11010111 [x]补= 11011000 (4)[x]原=10111111 [x]反= 11000000 [x]补=11000001 1.5 已知X=10110110,Y=11001111,求X 和Y 的逻辑与、逻辑或和逻辑异或。 解:10000110X Y ?= 11111111X Y += 01111001X Y ⊕= 1.6 已知X 和Y ,试计算下列各题的[]X Y +补和[]-X Y 补(设字长为8位)。 (1)X=1011 Y=0011 (2)X=1011 Y=0101 (3)X=1001 Y=-0100 (4)X=-1000 Y=0101 (5)X=-1100 Y=-0100 解:(1)X 补码=00001011 Y 补码=00000011 [X+Y]补=00001110 [X-Y]补=00001000 (2)X 补码=00001011 Y 补码=00000101 [X+Y]补=00010000 [X-Y]补=00000110 (3)X 补码=00001001 Y 补码=11111100 [X+Y]补=00010000 [X-Y]补=00000110

C语言上机作业题及答案

实验一: 1、已知华氏温度,根据转换公式计算相应的摄氏温度。 摄氏温度= 5*(华氏温度-32)/9 2.任意输入一个有五位数字的正整数,逆序输出每一数位上的数字。 如: 输入 12345 输出 5 4 3 2 1 #include"stdio.h" main() { double t,T; printf ("已知华氏温度,根据转换公式计算相应的摄氏温度"); scanf ("%lf",&t); T=(5*(t-32)/9); printf ("摄氏温度=%lf",T); } #include"stdio.h" main() { int value,a,b,c,d,e,m,n,h; printf ("任意输入一个有五位数字的正整数,逆序输出每一数位上的数字"); scanf ("%d",&value); a=value/10000; m=value%10000; b=m/1000; n=m%1000; c=n/100; h=n%100; d=h/10; e=h%10; printf ("%d%d%d%d%d",e,d,c,b,a); } 实验二: 1.一个成年人的身高与其父母的身高密切相关,根据以下人体标准身高预测公式计算自己或某个同学的身高,并跟实际身高比较,给出结论是否符合该公式(误

差在3厘米范围内即视为相符)。 男性身高=(父亲身高+母亲身高)×1.08÷2(厘米) 女性身高=(父亲身高×0.923+母亲身高)÷2(厘米) 2.从键盘上输入税前收入,根据以下公式及规则,计算个人所得税税额并输出。应纳个人所得税税额=(税前收入—起征点额度)*适用税率—速算扣除数 其中,起征点额度是3500元,其他如下: 应纳税所得额税率速算扣除数 不超过1500元的部分 3% 0 超过1500元至4500元的部分 10% 105 超过4500元至9000元的部分 20% 555 超过9000元至35000元的部分 25% 1005 超过35000元至55000元的部分 30% 2755 超过55000元至80000元的部分 35% 5505 超过80000的部分 45% 13505 如:某人月收入5000元,则应纳个人所得税税额为(5000-3500)* 10% - 105 = 45元。 #include #include main() { float A,a,H,h,b; printf("父亲身高(厘米)\n"); scanf("%f",&A); printf("母亲身高(厘米)\n"); scanf("%f",&a); printf("孩子实际身高(厘米)\n"); scanf("%f",&H); printf("请选择孩子性别:女=0,男=1\n"); scanf("%f",&b); if(b) h=(A+a)*1.08/2; else h=(A*0.923+a)/2; if(fabs(H-h)<=3) printf("实际身高符合该公式\n"); else

c语言上机考试训练题库及答案

上机考试习题集 1.编写程序,一次输入5个学生的3门课成绩,每输入一个学生的3门成绩后,立即统计并输出该学生的总分和平均分。 #include "stdio.h" void main() { int score[5][3], i,j; float sum[5],average[5]; printf("请分别输入三个学生的成绩:\n"); for(i=0;i<5;i++) { sum[i]=0; for(j=0;j<3;j++) {scanf("%d",&score[i][j]); average[i]=0; sum[i]+=score[i][j]; average[i]=sum[i]/5; } } for(i=0;i<5;i++) printf("第%d个学生的总分为:%f,平均成绩为:%f\n",i+1,sum[i],average[i]); } 2 、编写程序,提示用户从键盘输入一个double类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入处理,然后在显示器上输出此数,以便验证处理是否正确。 #include #include double rounding(double x,int n); void main() { double x,x1; int n; printf("请输入一个浮点数:\n"); scanf("%lf",&x); printf("请输入给定的小数位:\n"); scanf("%d",&n); x1=rounding(x,n); printf("圆整后的数为:\n%.*lf\n",n,x1); } double rounding(double x,int n)

单片机课后习题-答案~

习题答案 习题0 1.单片机是把组成微型计算机的各功能部件即(微处理器(CPU))、(存储器(ROM 和RAM))、(总线)、(定时器/计数器)、(输入/输出接口(I/O口))及(中断系统)等部件集成在一块芯片上的微型计算机。 2.什么叫单片机?其主要特点有哪些? 将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)、中断系统和其他多种功能器件集成在一块芯片上的微型计机,称为单片微型计算机,简称单片机。 单片机的特点:可靠性高、便于扩展、控制功能强、具有丰富的控制指令、低电压、低功耗、片内存储容量较小、集成度高、体积小、性价比高、应用广泛、易于产品化等。 3. 单片机有哪几个发展阶段? (1)第一阶段(1974—1976年):制造工艺落后,集成度低,而且采用了双片形式。典型的代表产品有Fairchild公司的F8系列。其特点是:片内只包括了8位CPU,64B的RAM 和两个并行口,需要外加一块3851芯片(内部具有1KB的ROM、定时器/计数器和两个并行口)才能组成一台完整的单片机。 (2)第二阶段(1977—1978年):在单片芯片内集成CPU、并行口、定时器/计数器、RAM和ROM等功能部件,但性能低,品种少,应用范围也不是很广。典型的产品有Intel 公司的MCS-48系列。其特点是,片内集成有8位的CPU,1KB或2KB的ROM,64B或128B的RAM,只有并行接口,无串行接口,有1个8位的定时器/计数器,中断源有2个。片外寻址范围为4KB,芯片引脚为40个。 (3)第三阶段(1979—1982年):8位单片机成熟的阶段。其存储容量和寻址范围增大,而且中断源、并行I/O口和定时器/计数器个数都有了不同程度的增加,并且集成有全双工串行通信接口。在指令系统方面增设了乘除法、位操作和比较指令。其特点是,片内包括了8位的CPU,4KB或8KB的ROM,128B或256B的RAM,具有串/并行接口,2个或3个16位的定时器/计数器,有5~7个中断源。片外寻址范围可达64KB,芯片引脚为40个。代表产品有Intel公司的MCS-51系列,Motorola公司的MC6805系列,TI公司的TMS7000系列,Zilog公司的Z8系列等。 (4)第四阶段(1983年至今):16位单片机和8位高性能单片机并行发展的时代。16位机的工艺先进,集成度高,内部功能强,运算速度快,而且允许用户采用面向工业控制的专用语言,其特点是,片内包括了16位的CPU,8KB的ROM,232B 的RAM,具有串/并行接口,4个16位的定时器/计数器,有8个中断源,具有看门狗(Watchdog),总线控制部件,增加了D/A和A/D转换电路,片外寻址范围可达64KB。代表产品有Intel公司的MCS-96系列,Motorola公司的MC68HC16系列,TI公司的TMS9900系列,NEC公司的783××系列和NS公司的HPC16040等。然而,由于16位单片机价格比较贵,销售量不大,大量应用领域需要的是高性能、大容量和多功能的新型8位单片机。 近年来出现的32位单片机,是单片机的顶级产品,具有较高的运算速度。代表产品有Motorola公司的M68300系列和Hitachi(日立)公司的SH系列、ARM等。 4.在实际应用中,如何选择单片机的类型? 选择原则:主要从指令结构、运行速度、程序存储方式和功能等几个方面选择单片机。 MCS-51为主流产品。 Motorola是世界上最大的单片机厂商。品种全、选择余地大、新产品多。其特点是噪声低,抗干扰能力强,比较适合于工控领域及恶劣的环境。 Microchip单片机是市场份额增长较快的单片机。它的主要产品是PIC系列8位单片机。其特点是运行速度快,低价位,适用于量大、档次低、价格敏感的产品。 美国德州仪器(TI)公司生产的MSP430系列单片机是一种特低功耗的Flash微控制器。主要用于三表及超低功耗场合。

相关文档