当前位置:文档之家› C语言程序70题

C语言程序70题

C语言程序70题
C语言程序70题

循环

1.键盘输入正整数n,求出n与其反序数之和并输出。例如,输入2038,输出应为 2038+8302=10340。

2.利用迭代公式:

计算实数x的立方根,当|yn+1-yn|≤ε时,yn+1为的近似值。

3. 输入正整数i和n,由程序负责从i开始找起,连续找出n个素数并显示在屏幕上。如输入10和8后,输出的8个素数应为:11,13,17,19,23,29,31,37。

4. 求下述三个序列的累加和(每一序列各累加n项,正整数n通过cin从键盘输入)。

s1 = 1/5 + 1/4 + 3/11 + 2/7 + 5/17 + 3/10 + 7/23 + …

s2 = 2/1 + 3/2 + 5/3 + 8/5 + 13/8 + 21/13 + 34/21 + …

s3 = 1/1 - 3/(1+4) + 5/(1+4+7) - 7/(1+4+7+10) + 9/(1+4+7+10+13) - …

5. 对于n=2,5,8,11,…,20,23,分别求出E(n) = 1/1! + 1/2! + … + 1/n! 之值并输出它们。要求按如下三种方式来进行求解,并对它们的运行速度及优劣性进行比较。

(1)使用如下轮廓的三重循环来实现:

for(int n=2; n<=23; n+=3) //求出多个不同的E

for (int i=1; i<=n; i++) //共累加n个项

for (int j=1; j<=i; j++) //每个项中用到j的阶乘

(2)去掉最内层用来求阶乘的循环,而改为使用二重循环的实现方法:for(int n=2; n<=23; n+=3) //求出多个不同的E

for (int i=1; i<=n; i++) //共累加n个项

(3)改写成使用一重循环的实现方法:除了去掉用来求阶乘的最内层循环外,还要在求E(5)时接着使用(而不再重新计算)已算出的E(2)值,求E(8)时接着使用已算出的E(5)值,如此等等。

for(int n=1; n<=23; n++) //从第1项开始,一共(最多)累加23项

… //当累加到2,5,8,…,20,23项时,输出当时的累加结果E值

6. 求满足下述两个条件的最小自然数n:

(1) n的个位数字为8;

(2)将n的个位数字8移到其它各位数字之前(如205128移过后为820512),所得的新数恰为n的4倍。

点评:若将n的个位数字改为6时(如153846移过后为615384),求解方法完全类似。

思考:可否任意指定个位数(的数值),以求解相同性质的更具有一般性的问题?

7. 任意输入10个正整数,求出其中互不相同的数的个数num,以及此num 个数中哪一个数的出现次数最多,共出现了几次。

8.编程序,输入字符串s,而后统计出s中各数字字符的出现次数并输出结果。

9 编程序,输入任意一个字符串s1,而后由s1形成另两个字符串s2和s3并显示在屏幕上。其中s2是s1甩掉其尾部的所有非字母字符后得到的字符串,而s3则由s2甩掉其前导的所有非字母字符后形成的字符串。例如,程序执行后的屏幕

显示结果可为:

Input s1:36 262/x+y*z-a D007 END! %%% 60++=--!

s2=36 262/x+y*z-a D007 END

s3=x+y*z-a D007 END

10. 将输入的2进制数(一个非“0”即“1”的字符串)化为10进制数。

提示:用字符数组a盛放所输入的二进制数;而后从后往前逐一计算每一位的“位权”w (2的0次方、2的1次方、...),再计算“位权”乘以“位值”并累加到一个初值为0的变量value上,最后输出该value。

思考:如何把8进制数或16进制数化为10进制数。更进一步,如何把某一个k进制的数化为10进制数呢?

11. 将输入的罗马数据化为10进制数。假设罗马数据中只使用如下7个“基值”字母:M、D、C、L、X、V、I,分别用来表示1000、500、100、50、10、5、1。如,罗马数据LXXXVII表示10进制的87。

12. 将输入的10进制正整数化为2进制数。

提示:可采用“逐次除以2,倒者排余数”的方法实现。即是说,使用一个int型数组a盛放逐次得到的各余数,最后将数组a中的各余数倒着输出来。

思考:如何把10进制正整数化为8进制数或16进制数。更进一步,如何把10进制正整数化为某一个k进制的数呢?

13. 将输入的10进制正整数转换为罗马数据。假设罗马数据中只使用“基值”字母:M、D、C、L、X、V、I,分别用来表示1000、500、100、50、10、5、1。

14. 由20个正整数排成一圈,编一个程序找出连续的四个数,其和是最大的(不小于圈上任何其它连续的四个数之和)。

提示:说明一个int型数组来存放那20个正整数,而后通过循环,从累加出的20个不同和数中找出其中的最大者。注意,由于将数组看成是“圈状”的,最后一个数的“后继”应是第一个数,所以要用到取模的运算。

15. 对于整型数组a[10]和b[10],编制程序完成下列任务:

(1)由用户从键盘为两个数组输入值;

(2)求出两个数组的最大元和最小元;

(3)把数组a和b中的整数分别从小到大和从大到小排序;

(4)把两个有序的数组a和b组成一个长度为20的有序数组c[20]。

16. 用折半查找方法,在元素呈升序排列的具有15个元素的数组a中查找值为key的那一元素的序号即下标号并输出(其中的key值通过键盘输入)。若数组中没有值为key的元素,则提示信息“No such element!”。

所谓的折半查找方法如下:先用key值与处于15个元素之“中间”的那一元素进行比较,若恰好相等,则那一“中间”元素的序号即为所求;若key值大于那一“中间”元素,则将查找范围缩小到数组的后一半去继续查找,否则将查找范围缩小到前一半去继续查找。

17. 设计一个程序,它可以把最近的20天的气温值以柱形图的形式显示出来,假设气温在22~35度之间(取整),温度的高低以由“*”组成的“柱”的高低来表示。

提示:在“文本模式”的“字符屏幕”上“画图”时,通常将“字符屏幕”与程序中的一个二维字符数组建立对应关系,而后按某种计算方法(或计算公式)算出应该在“字符屏幕”的哪些位置处“画点”,最后将已准备好的当前字符数组各元素的值显示到“字符屏幕”上。

18. 设有4行4列的数组b,其元素b[i][j]=3*i+2*j-6(i、j = 0,1,2,3)。编程序,实现:

(1)求第二行4元素的累加和;

(2)求第四列4元素之平均值;

(3)求主对角线4元素中负数的个数。

19. 设有二维字符数组dig[10][10],其元素值均为数字字符('0', '1',…,'9'),编程序,首先通过使用rand函数来为数组dig设置初值,而后统计出其中10个数字字符各自出现的次数。

提示:通过“rand()%10+48”可生成一个随机数字字符值。

20. 说明5个行列数有关系的二维数组用于表示矩阵A、B、C、D、E。首先给

A、B二矩阵赋初值,而后计算A、B的和矩阵C,乘积矩阵D,以及A的转置矩阵E,并显示出各运算结果。

21. 用户从键盘输入任意一个正整数n,程序负责将该正整数转换为如下形式的“混英表示字符串”并显示出来:如输入n为302时,输出:three(100)-zero(10)-two(1);输入n为14895时,相应的输出应为:one(10000)-four(1000)-eight(100)-nine(10)-five(1)。

提示:说明如下一个二维数组eng并在转换过程中使用。

char eng[10][6]={"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

函数,函数与运算符的重载

22. 编无参函数,void print(),它负责完成固定功能:在屏幕的同一行上连续显示40个“+”符号。并编制主函数main,对该函数进行具体调用。

23. 编一参函数,void print(int k),它负责显示出k行“+”符号,其中每行均显示连续的6个“+”符号。并编制主函数main,对该函数进行具体调用。

24. 编2参函数,void print(int k, int n),它负责显示出k行“+”符号,且每行均显示连续的n个“+”符号。并编制主函数 main,对该函数进行具体调用。

6.编无参函数,void print(),并结合使用全局变量k与n,使每调用一次该函数,总显示出k行“+”符号来,且每行均显示连续的n个“+”符号。并编制主函数 main,对该函数进行具体调用。

25. 编一个返回真假值(布尔值)的函数p,其函数原型为:bool p(int x);

具有如下功能:若正整数x的各位数字之积等于x*x-10*x-22的话,返回true,否则返false。并编主函数,通过调用p,找出1000以内的满足上述关系的所有x。

26. 编写具有如下原型的函数:bool f(long x);

其功能为:若整数x仅由偶数字(0、2、4、6、8)组成时(如x=26480),函数返回true,否则返回false(如当x=22034时)。并编制主函数对它进行调用。

27. 编写一个将10进制正整数n化为x进制数并输出结果的函数(如x可为2或8或16等),具有如下原型:

void Chg10Tox(int n, int x);

并编写主函数对它进行调用来验证其正确性。

28. 编写一个将x进制正整数化为10进制数并输出结果的函数,具有如下原型:

void ChgxTo10(char a[], int x);

参数a中放的是x进制正整数的各位数字字符(如x可为2或8或16等),要

将其化为10进制数并输出。并编写主函数对它进行调用以验证其正确性。

提示:注意检查a数组中x进制数的合法性。

29. 编一个返回真假值(布尔值)的函数symm,实现如下功能:若正整数n 为“回文数”(正读与反读为相同大小的数)的话,返回true,否则返false。

其函数原型为:bool symm(long n);

并编主函数,通过调用symm,求出1000以内所有满足下述特征的m: m 和7*m以及3*m*m都是“回文数”,如1,11,88,… (因为m=1,7*m=7,3*m*m=3;m=11,7*m=77,3*m*m=363; m=88,7*m=616,3*m*m=23232;… )。

30. 编写具有如下原型的函数:void myFunc(char str1[], char str2[]);

实现下述功能并输出所得结果:数组str1中出现了哪些字母(不区分大小写)? str1和str2两个数组中同时出现的字母(不区分大小写)有哪些?

并编制主函数,调用myFunc以验证其正确性。

31. 编写如下原型的函数:unsigned long AscToLong(char a[]);

负责将参数a带来的ASCII码的数字字符串(如“1359028”)转化即“拼装”为一个unsigned long型的整数并返回(要求程序检查数字字符串的合法性)。并编写主函数对它进行调用,而后将结果数据输出。

32.编写如下原型的函数:void LongToAsc(unsigned long n, char a[]);

负责将无符号长整数n转化为与其“等值”的ASCII码的数字字符串,并将结果放于参数数组a中返回。并编写主函数对它进行调用,而后将结果数据输出。

33. 设计递归函数double fib(int n);用于求出Fibonacci数列的第n项(的具体项值)并返回,而后编制主函数对它进行调用。

34. 编写递归和非递归两种函数power(a,n),用于求出实数a的n次方。并编制主函数,输入不同的实数a及正整数n,而后通过调用power函数来进行求解。

提示:可按如下公式来编制递归处理函数

power(a,n)=a;若n等于1

power(a,n)=a * power(a,n-1);若n大于1。

35. 编写递归和非递归两种函数gcd(m,n),用于求出正整数m和n的最大公约数。并编制主函数,输入不同的m和n,而后通过调用gcd函数来进行求解。

提示:可按如下公式来编制递归处理函数

gcd(m,n)=n;若m%n等于0

gcd(m,n)=gcd(n,m%n);若m%n不等于0。

36. 编写具有如下函数原型的递归与非递归两种函数fun,负责求出累加和n1+(n1+1)+…+n2并作为函数值返回(其中的n1和n2为正整数,且n2不小于n1)。并编制主函数对它进行调用,以验证其正确性。

int fun(int n1, int n2);

提示:编写递归函数时,按如下方式来实现求和:若n2等于n1,则返回n1而递归出口;若n2>n1时,则函数返回值为“n1+fun(n1+1,n2)”或者为“n2+fun(n1,n2-1);”。

21.分析如下两个自递归函数,判断函数调用f1(19)以及函数调用f2(12709)会输出两个什么样的结果。

void f1(int n) {

if(n>1) f1(n/2);

cout<

}

void f2(int n) {

if(n>0) {

char t=n%10+65;

cout<

f2(n/10);

}

}

思考:若将f2函数的if句体中的“char t=n%10+65; cout<

37. 编写具有如下函数原型的递归与非递归两种函数myMin,负责求出a数组中前n个整数中的最小者并返回该值。并编制主函数,通过调用它来验证其正确性。

int myMin(int a[], int n);

提示:递归函数中,n等于1时最小者即为a数组的第1个元素(即a[0]),递归出口;当n大于1时,首先通过递归调用来求出a数组的前n-1个元素中的最小者tmp,则函数返回值应为如下表达式之值:“a[n-1]

38. 编写具有如下函数原型的递归与非递归两种函数myf,负责判断s字符数组的从idx1下标到idx2下标所构成的那一段字符是否为“回文”(是否正读与反读完全相同),是则返回true,否则返回false。并编制主函数,由用户任意输入一些字符串,而后通过调用myf来判断它们是否为“回文”。

bool myf (char s[], int idx1, int idx2);

提示:编写递归函数时,可按如下方式来分解并处理问题,若“idx1>=idx2”(即s串只有一个字符或根本没字符时)则返回true而递归出口;当s串至少有两个字符时,若“最两头”的二字符不相同,则整个s串非“回文”,要返回false,否则进行递归调用(传去实参s、idx1+1与idx2-1,去判断甩掉“最两头”二字符后的“小串”字符是否为“回文”),并返回递归调用的结果(与原串的是否性相同)。

39. 读下面的程序,其中出现了函数的间接递归调用,请写出程序执行后的输出结果。进一步考虑,若把函数f1的两个引用型参数“int& x1, int& t1”改为赋值参数“int x1, int t1”的话,还会输出相同的结果吗?

#include

void f2(int& x2, int& t2);

void f1(int& x1, int& t1) {

t1++;

if (x1<88) {

x1+=10; f2(x1,t1);

}

}

void f2(int& x2, int& t2) {

cout<<"t2="<

x2+=2; f1(x2, t2);

}

void main() {

int x=63, n=22;

f1(x,n);

cout<<"n="<

cout<<"x="<

}

40. 分析下述程序执行后的输出结果。注意其中对“文件级”作用域全局变量以及对“函数级”作用域的局部变量的使用区别。

#include

int k=888; char c='T';

void f1() {

int i=31; float k=3.1;

cout<<"f1: k,c,i =>"<

}

void f2() {

int i=52; double c=5.2;

cout<<"f2: k,c,i =>"<

}

void main() {

cout<<"main: k,c =>"<

f1(); f2();

}

41. 下述程序中使用了全局变量g、具有static存储类别的局部变量x,以及某些自动(auto)局部变量,请仔细阅读,并给出程序执行后的屏幕显示结果。

#include

int g=321;

void display(int g, int x, int y) {

cout<<"g="<

}

void main() {

int x=-66, y=555;

cout<<"main1: "; display(g,x,y);

y=y+8; f();

cout<<"main2: "; display(g,x,y);

g=g+5; f();

}

42. 输入两个二进制正整数(两个非“0”即“1”的字符串),而后输入一个运算符(“+”、“-”、“*”、“/”),按int型整数运算方式求出这两个二进制整数的运算结果并输出。

提示:设计将2进制数化为10进制数、以及将10进制数化为2进制数的函数“int Chg2To10(char a[]);”和“ void Chg10To2(int n, char result[]);”,而后在主函数中通过调用Chg2To10先将两个输入串转化为10进制数,而后对这两个10进制数进行指定运算,再将运算结果通过Chg10To2转化为2进制数(结果在result)而后输出。

思考:按照上述处理方式也能对两个罗马数据进行相应的四则运算。

43. 编制具有如下原型的函数dif:

long dif(int y1, int m1, int d1, int y2, int m2, int d2);

它负责计算出两个日期的间隔天数并返回。其中的y1、m1、d1表示第一个日期的年、月、日;而y2、m2、d2表示第二个日期的年、月、日。而后编制主函数,对dif进行调用,以验证它的正确性。

指针,引用与动态内存分配

44.假设在main函数中有如下的说明(数组a中存放了n个字符串,即名字):const int n=10;

char a[n][31] = {"guo li", "li na", "li qi", "liu yan", "ma jing", "sun li juan", "wang le", "wu da", "yang ke", "zhang yi fu" };

编制具有如下原型的自定义函数:

int search(char (*p)[31], int n, char* name);

负责在字符串数组p的前n个字符串(名字)中,查找给定串name的出现位置(下标值)并返回,若p中不出现name的话,返回-1。

并编制主函数,输入要查找的某个名字(字符串)name,而后通过如下形式的语句对上述函数进行调用,之后输出相关结果(出现位置,即下标值):int idx = search(a, n, name);

//从a数组的第一个名字(0下标,第1行)开始查找

int idx = search(a+3, n, name);

//从a数组的第四个名字(3下标,第4行)开始查找

提示:函数search的第一个参数p为指向一维数组的指针,按照“char (*p)[31]”所说明的p实际上可看作是一个二维字符数组,即是说,p[i]即*(p+i)为一个一维字符数组(字符串,至多可存放31个字符);要查找给定串name在p 中的出现位置(下标值),可使用如下形式的if语句来实现“if( strcmp(p[i], name) == 0 ) return (i);”。

点评:若将形参说明“char (*p)[31]”修改为“char p[][31]”,而且其他一切都不必修改,同样可实现本题所给出的求解任务,从而可体会到指向一维数组的指针形参p与二维形参数组p的密切关系。

若将a数组中的名字(字符串)按照“字典序”进行了升序排列的话,search 函数中除可使用顺序查找方式之外,还可按照折半法(二分法)来进行查找。

45.编制具有如下原型的函数FindPlace,该函数返回字符串str中第一次出现字符c的位置(地址值,即指向字符c的指针)。如果没有c字符则返回空指针

NULL。并编制主函数对它进行调用以验证其正确性。

char * FindPlace(char *str,char c);

注意:若返回的字符指针值为p的话,那么,通过“cout<

思考:若寻找并返回c字符在字符串str中最后一次出现的位置的话,实现方式与此类似。

46.编制具有如下原型的函数findFirst以及 findLast,而后编制主函数,任意输入两个字符串,将它们用作实参来调用这两个函数,以验证其正确性。

char * findFirst(char * sourceStr, char * subStr);

char * findLast(char * sourceStr, char * subStr);

findFirst函数的功能为:返回源串sourceStr中第一次出现subStr子字符串的头字符位置(地址值)。如果源串sourceStr的长度小于subStr子字符串的长度,或者源串sourceStr中根本就不出现subStr子字符串的话,返回空指针值NULL。findLast函数则要返回源串sourceStr中最后一次出现subStr子字符串的头字符位置。且要求实现程序中不可使用“string.h”头文件内有关寻找子串的标准库函数。

提示:findFirst函数中,首先把subStr子串的头位置j0=0(j0表示subStr 字符数组的下标)与sourceStr源串的头位置j1=0(j1表示sourceStr字符数组的下标)“对齐”,而后逐字符地对两个串进行比较(从左到右),若一直比到了子串的结束各字符均相同时,则意味着在源串中找到了子串,此时返回子串在源串中的头字符位置(地址值);若逐字符进行比较时发现有不相同,则要进一步将subStr子串的头位置j0=0与sourceStr的新头位置j1=1“对齐”,而后又一次逐字符地对两个串进行比较(相当于子串整体“右平移”一个字符后再一次比较),如此等等。findLast则要首先将子串与源串的右后部“对齐”进行比较,而后子串逐步整体“左平移”。

47.编程序,含有如下形式的循环语句,用于理解并测试new与delete的功能。

double *p; unsigned long n; cin>>n;

for (int i=0; i

p = new double[32767];

cout<<"p="<

delete p;

}

当输入不同的n时,输出结果有什么不同吗?若将循环改写为“for (int i=0; ; i++){…}”即改成为无限循环的话,程序会无限循环而永不停止吗?

进一步,将其中的“delete p;”语句删除掉后再执行,输出的结果会有什么不同?再进一步,不仅删除delete,而且改为无限循环的话,又会出现什么情况呢?

提示:若删除delete且将for语句改成为无限循环的话,程序最终是会出现错误的。其原因是,由于总通过new分配新内存空间,但又从不归还它们,所以迟早会出现再也没有动态存储空间可供分配的时候(此时通过new返回的指针值为NULL),那时将会出现运行错误。

注意:程序中凡通过new动态申请的存储空间,都应该在使用结束后,用相应的delete将它们释放掉(归还给系统),否则就有可能产生所谓的“内存泄漏”。

48.下面的程序片段首先通过指针配合new运算符生成了一个动态的二维数组a(其行数lin及列数col通过cin临时输入),而后又为数组各元素赋了值。请在此基础上编制完整程序并上机进行调试运行,并输出结果。

int lin,col,i,j;

cin>>lin>>col; //任意输入行数lin及列数col

int **a;

a = new int*[lin]; //lin(行数)个int* 指针

for(i=0;i

b[i]=new int[col]; //每行有col(列数)个int数

for(i=0;i

for(j=0;j

a[i][j]=i+j;

//注意a[i][j]等同于*(a[i]+j),又等同于*( *(a+i)+j)

点评:C++对数组的说明(定义)必须是静态(固定)大小的,而通过本题提供的方法则可实现动态大小的数组。如,试图通过“int n; cin>>n; int a[n];”来说明(定义)动态大小之数组a的方法是错误的(语法错,要求n必须是常量)!

49.编程序,按如下方法求A矩阵的转置矩阵B:输入两个正整数m和n,而后通过使用指针配合new运算符生成一个m行n列的二维动态数组A以及另一个n 行m列的二维动态数组B,之后为A输入数据(A矩阵数据),进而求出其转置矩阵B(数据放动态数组B中)并输出结果。

50.编程序,按如下要求来求解n元一次线性方程组(假设方程组具有唯一解)。

(1)方程个数n之值由用户通过键盘输入;

(2)方程组存放在“增广矩阵”A之中,而n行n+1列的A存储空间通过new来动态分配,且A的各元素值也由用户通过键盘输入;

(3)方程组的解存放于“向量”B之中,而具有n个元素的B存储空间也通过new来动态分配。

提示:将整个求解任务(总任务)进行“分解”,设计出多个各负其责的自定义函数以完成各子任务。

求解n元一次线性方程组,实际上是要对增广矩阵A进行“同解变换”,并最终将求出的解存放于B数组之中。而所谓的“同解变换”主要使用如下的变换方法:“将某一行的各数据乘以适当的倍数加到另一行的对应各元素上去”,从而可首先将系数矩阵消为“上三角”,而后再进行所谓的“回代过程”,最后完成求解任务。

类与对象

51.队列是一种程序设计中常用的数据结构。它的结构和栈类似,但队列中的数据是先进先出。仿照7.1节对栈stack的定义,自定义一个队列类queue(队列中需要保存并处理的那一批同类型数据,也用一个数组来实现)。

如,可设计私有数据成员如下:

float data [maxsize]; //data中存放队列的实际数据

int front, rear; //元素放在data[front+1]到data[rear]

之中

其公有函数成员如下:

queue(void)//构造函数,置front=rear=-1,意味着队列为空

~queue(void)//析构函数

bool Empty(void)//判断队列是否为空

bool Full(void)//判断队列是否已满

void Add(int a)//往队列尾部加入一个数据

float Delete(void)//从队列首部取出一个数据

52.读程序,分析它执行后的输出结果,并上机进行测试验证。注意:全局对象I0在执行main前被构造(“诞生”),main结束时“死亡”。main中函数级别(局部性)对象I1,在说明时被构造(“诞生”),在函数出口时“死亡”。块级别(auto局部性)对象I2,每次入块后都被重新构造(重新分配空间并初始化),出块时结束“生命期”。块级别局部静态对象I3,其作用域局部于块,但其“生命期”与全局对象相同,只在第一次遇见时分配空间并初始化。

#include

#include

class MyCla1 {

char *str;

public:

MyCla1( char *s );

~MyCla1() {

cout << "Destructor: Destroying=> " << str << "\n";

delete str;

}

void print(){cout<<" --- printed by => "<

};

MyCla1::MyCla1( char *s ){

cout << "Constructor: Initializing=>" << s << "\n";

str = new char[ strlen( s ) + 1 ];

strcpy( str, s );

}

MyCla1 I0( "Global I0" );

void main() {

I0.print(); MyCla1 I1( "Function_Local I1" );

int cond=2; I1.print();

while(cond) {

cout << "In block.\n";

MyCla1 I2( "Block_Local I2" );

I2.print();

static MyCla1 I3( "Static I3" );

cond--;

}

cout << "Exited block.\n";

}

53.自定义一个示意性的复数类型complex,其中含有若干个成员函数,使用该类可以完成复数的加法以及对复数的输出。请完成类定义,并编制主函数,说明complex类对象,对定义的各成员函数进行调用。

class complex{

double real; //复数实部

double imag; //复数虚部

public:

complex(); //无参构造函数

complex(double r, double i); //2参构造函数

complex addCom(complex c2); //调用者对象与对象c2相加,返回complex类对象

void outCom (); //输出调用者对象的有关数据(各分量)};

进一步,在类中添加对复数进行其他基本运算(如,复数减、乘、除、取模等)的相应成员函数,并通过主函数处的调用来验证各函数的使用正确性。

54.设计一个学生类(CStudent),它具有的私有数据成员是:注册号、姓名、数学、外语、计算机课程的成绩。具有的公有成员函数是:求三门课总成绩的函数sum;求三门课平均成绩的函数average;显示学生数据信息的函数display;设置学生数据信息的函数setData。然后通过主函数,从键盘对学生对象的数组(全班学生信息)进行输入,而后求出每一学生的总成绩、平均成绩,并显示全班学生总成绩最高者那一同学的全部数据信息。

55.自定义一个简单的时间类TimeType,它具有数据成员h、m、s,用来表示当前时间的时、分、秒。而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。

例如,下面给出的“雏形”可用来实现对时分秒的增加、判断两个时间是否相等以及对时间的输出等操作。请完成各类成员函数,并编制主函数,说明TimeType 类对象,对定义的各成员函数进行调用,以验证它们的正确性。

class TimeType { //自定义的时间类TimeType int h,m,s; //私有数据成员,表示当前时间的时、分、秒

public:

TimeType(int h0=0, int m0=0, int s0=0);

//构造函数,设定时、分、秒;并设置参数默认值void incrementSec(int sec); //增加若干秒,sec>0

void incrementMin(int min); //增加若干分,min>0

void incrementHou(int hrs); //增加若干小时,hrs>0 bool equal(TimeType t2); //判断二时间是否相等

void printTime(); //屏幕输出时间对象的有关数据(时、分、秒)

};

注意,对时分秒的增加要涉及到所谓的“进位”处理问题:秒数超过60要“进位”到分;超过60分则要“进位”到时;而超过24时后要“甩掉”24以上的部分等。

思考:可对该类增加你所考虑到的其他功能,如,对时间进行输入,计算二时

间的间隔秒数,对两个时间进行其他五种比较运算,一次就可以增加若干小时、若干分、若干秒,以Am(上午)或Pm(下午)的格式在屏幕上输出时间对象等。

56.自定义一个简单的日期类DateType,它具有数据成员y、m、d,用来表示当前日期的年、月、日。而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。

例如,下面给出的“雏形”可用来实现对天的增加,比较两个日期是否相等,以及对日期的输出等操作。请完成各类成员函数,并编制主函数,说明DateType 类对象,对定义的各成员函数进行调用,以验证它们的正确性。

class DateType { //自定义的日期类DateType int y,m,d; //数据成员,表示当前日期的年、月、日public:

DateType(int y0=1, int m0=1, int d0=1);

//构造函数,设定年、月、日;并设置参数默认值

void incrementDay(); //增加1天

b ool equal(DateType dt2); //判断二日期是否相等

void printDate(); //屏幕输出日期对象的有关数据(年、月、日)

};

注意,当对日期增加1天后,也会涉及所谓的“进位”问题:首先算出本“日”所在的月份具有的天数N,若加1之后的“日”数值超过所在的月份具有的天数N 时,“进位”到月,而月份若超过12时还要“进位”到年。

思考:可对该类增加你所考虑到的其他功能,如,对日期进行输入,计算二日期的间隔天数,计算某日期为星期几,打印对象当前数据的y年m月的月历,一次增加若干天,对两个日期进行其他比较运算等。

57.自定义如下形式的一个称为point的类,其对象表示平面上的一个点(x,y),并通过类成员方式对该类重载二目运算符“+”和“^”,用来求出两个对象的和以及两个对象(平面点)的距离。各运算符的使用含义(运算结果)如下所示:

(1.2, -3.5) + (-1.5, 6) = (-0.3, 2.5);

(1.2, -3.5) ^ (-1.5, 6) = 9.87623。

并编制主函数,说明类对象,而后通过类对象实现所定义的相关运算(以验证其正确性)。

class point {

double x,y;

public:

point (double x0=0, double y0=0){x=x0; y=y0;}

point operator + (point pt2);

double operator ^ (point pt2);

void display();

};

继承与派生

58. 请用类的派生来重新组织下面的数据。

动物,哺乳动物,鸟,人,鸭子,鸟目,灵长目,猴子,节肢动物,蚯蚓,蜈蚣。

(自定义数据结构,要求能将上述动物的特性进行合理的表示)

59. 利用虚函数手段,按照3种不同的计算方法来求出Fibonacci数列的第n项(的具体项值)并输出。具体地说,可通过在基类baseCla及其派生类fib1Cla、fib2Cla和fib3Cla中说明如下的同一个虚函数“virtual double fib(int n);”,来实现求Fibonacci数列第n项值并返回的3种不同求解方法。例如,可设计并使用已经在第4和第5章的练习中所实现的求解方法:简单变量“数据平移”法、使用数组的实现法以及使用递归函数的实现法。

下面给出具体的“实现程序骨架”。

class baseCla { //自定义的基类baseCla

public:

virtual double fib(int n)=0; //基类baseCla中说明了一个虚函数fib,且为纯虚函数

};

class fib1Cla:public baseCla { //由基类baseCla派生出的fib1Cla类

public:

virtual double fib(int n); //派生类中说明同一个虚函数fib(简单变量“数据平移”法)

};

class fib2Cla:public baseCla { //派生类fib2Cla

public:

virtual double fib(int n); //派生类中说明同一个虚函数fib(使用数组的求解法)

};

void fun(baseCla *p, int n) {

//自定义函数fun,形参p为指向基类的指针,其对应实参

//可为不同派生类对象的地址;n指明要求出数列的第n项

double d = p->fib(n); //根据p指针值的不同,将调用不同派生类的虚函数fib

cout.flags(ios::scientific);

cout.precision(15);

cout<<"fib("<

}

void main() {

fib1Cla obj1; //fib1Cla类对象obj1

fib2Cla obj2; //fib2Cla类对象obj2

fib3Cla obj3; //fib3Cla类对象obj3

cout<<"------------ fib1Cla ------------"<

fun(&obj1, 1476); //简单变量“数据平移”求解方法,求fib(1476)

cout<<"------------ fib2Cla ------------"<

fun(&obj2, 888); //数组求解方法,求fib(888)

cout<<"------------ fib3Cla ------------"<

fun(&obj3, 35); //递归求解方法,求fib(35)

}

程序执行后,屏幕显示结果为:

------------ fib1Cla ------------

fib(1476)=1.306989223763399e+308

------------ fib2Cla ------------

fib(888)=1.704274475850073e+185

------------ fib3Cla ------------

fib(35)=9.227465000000000e+006

模板

60. 编写一个对具有n个元素的一维数组进行从大到小排序的函数模板。并编制主函数,通过使用不同类型的实参数组对它进行调用以验证其正确性。例如,可设计该函数模板的原型为:

template void sort(Type * A, int n);

其中一维数组A的元素类型为Type(要求Type为可进行比较运算的某种任意类型),实参n指出要对数组A的前n个数据进行排序。

61. 编写一个具有如下功能的函数模板:求出一维数组B中前n个元素的最大值、最小值以及平均值并显示在屏幕上。假设该函数模板的原型为:

template void myFunTpt(Type * B, int n);

而后编制主函数,对函数模板进行调用,以实现对不同类型一维数组的处理过程。注意,本题假定Type为可通过运算符“<”以及“>”来进行比较、且可以求平均值的一种可变化类型。

62. 编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为:

template void maxMin (Type *A, int m, int n );

其中二维数组A的元素类型为Type,数组A具有m行n列。

注意:函数模板maxMin中要处理二维数组A的m行n列的诸元素,但设计第一参数传递过来的是Type*类型的首元素指针,所以具体处理时可以按照如下的“一维数组”方式来进行(共处理m乘以n个数据 -- 也即二维数组A的m行n列的诸元素。注意,二维数组的诸元素在内存中是按行连续存放的,所以才能够这样来进行处理)。

for (int i=0; i

for(int j=0; j

对A[i*m+j]进行处理;

//按“一维数组”来对待处理A中第i行第j列的数据

}

63. 编写一个具有如下样式的类模板tmplt,用于实现所谓的反序输出问题,其中使用了类型参数T(使所处理的元素类型可变化)以及普通参数n(元素个数也可变化):

template class tmplt {

T arr[n]; // n个T类型的数据存放于数组arr之中public:

void dataIn(); //从键盘输入n个T类型数据放入arr数组中

void reverseOut(); //将arr数组中的数据按输入的相反顺序输出};

而后编制主函数,将类模板实例化为某个具体的类并说明类对象,之后通过对象调用其负责输入数据的成员函数,再通过对象调用另一成员函数按反序输出那些输入数据。

输入输出流

64.利用get与put成员函数完成文件的拷贝工作,假设被拷贝的“源文件”以及拷贝到的“目的文件”的名字与路径均由命令行参数来提供。下面给出实现程序“构架”:

void main(int argc, char* argv[ ]) {

ifstream fin(argv[1]); //命令行参数1提供被拷贝的“源文件”

ofstream fout(argv[2]); //命令行参数2提供拷贝到的“目的文件”

char ch;

fin.get(ch);

while(!fin.eof()){ //从头读到文件结束(当前符号非文件结束符时继续)

fout.put(ch); //对流fout进行写

fin.get(ch); //对流fin进行读

}

}

注意:在VC6集成开发环境下,运行这种main带参数的程序之前,要使用菜单命令,通过如下步骤来设置命令行参数(程序参数):Project → Settings → Debug → 在“Program arguments:”框内,输入以空格分割的各命令行参数,如,“aa.cpp bb.cpp”(该框为空时,表示没有命令行参数)→ OK。

65.编程序,对k=1,2,3,…,14,15,按下式分别计算出15组(i,d,c):整数i=2*k-1;实数d=k*k+k-9.8;字符c='H'+k。将上述15组数据看成15个结构体(要自定义结构类型,其分量具有i、d和c),并通过使用成员函数write将它们保存到自定义的binary型磁盘文件fb.bin之中;而后再通过使用成员函数read 将上述磁盘文件中的数据读出来并显示到屏幕上。

66.通过使用write与read成员函数,对自定义的binary型磁盘文件进行如下的指定操作。

(1)对i=1,2,3,...,15,计算d=i*i+0.5,并将15个结果写出到自定义的binary型磁盘文件f1.bin中(注意,f1文件中的数据从小到大有序);

(2)对i=1,2,3,...,10,计算d=10*i+0.5,并将10个结果写出到自定义的binary型磁盘文件f2.bin中,而后再写出第11个数:357.9(注意,f2文件中的数据也从小到大有序);

(3)读出文件f1.bin以及f2.bin中的数据,用来形成binary型磁盘文

件f3.bin,但要求存放于f3.bin中的数据仍然是有序的(按照从小到大的顺序);

(4)从头到尾读出f3.bin中的数据显示在屏幕上。

67.编程序CompFile,首先让用户输入两个文件名及其路径(二文件均为text 文件),而后通过使用类成员函数getline逐行读入这两个指定文件的内容并进行比较。若发现有不同,则在屏幕上显示出相异二行的行号及其内容,并暂停下来询问用户是否需要继续比较后继行,直到用户回答不需要继续进行比较,或者已经比到了二文件的结束时停止处理。

思考:也可改写程序,将“让用户输入两个文件名及其路径”改为从命令行参数处获取这两个文件名及其路径。

68.使用getline成员函数读入某个text文件中的“一篇文章”(如可以是一个C++源程序,文件名由用户从键盘输入),而后将该文件的各空行以及各程序行中的注解均删除掉(认为该行中从第一个双撇符号“//”开始直至行末的所有符号为注解),并将删除注解后的结果行写出到另一个文件中,并同时数出结果文件的总行数totalLine,以及结果文件中最长行和最短行的行长maxLineLen与minLineLen。

69.编程序,从键盘输入某个C++源程序文件名,而后通过getline依次读入该文件中的各行(假设每行都不超过100个字符),并统计显示出该源程序文件中出现了哪些你所关心的C++关键字,以及各关键字出现的次数(所关心的那一批关键字由程序进行指定)。

提示:可将m个所关心的关键字存放在一个二维字符数组A之中,而后从各读入行中“分解”出每一个“字”,并依次与A中的各关键字进行比较。若二维字符数组A中的关键字是按“从小到大”的顺序存放的话,则还可以使用折半查找方法在A中进行“查找”以提高速度。

70.从键盘输入k个实数,先将它们写出(存放)到一个binary型文件f.bin 之中,而后再使用随机访问方式“从后往前”读入每一个数据并显示在屏幕上(即按照与输入相反的顺序读入并显示)。

提示:可使用“seekg”先定位到最后写出的那一数据处并使用“read”将其读入,再往下是倒数第二靠后的、...,直至全部读入并处理完毕。

c语言编程 题目及答案

**********************************考试形式:上机考试(60分钟) 考试题型说明:10个单选题+2个编程题 下面是编程题目的复习题型,期末考试的编程题型及难易程度与此相近,请大家认真复习,强化练习,打下坚实基础,顺利通过考试。 ********************************** 1、编写一计算阶乘的函数fac,在主函数中从键盘输入一个正整数,调用阶乘函数fac计算阶乘并输出计算结果。 2、编写一个求x的y次幂的函数pw,在main函数中从键盘输入a、b的值,然后调用pw函数求a的b次幂,并输出结果。 3、写一函数max,计算三个数中最大数。在主函数中输入三个数,调用该函数求出其中最大数并输出。(要求:三个数为实数) 4、写一个函数计算两个正整数的最大公约数,在主函数中用scanf输入m, n两个正整数,调用函数后,打印函数返回值(即这两个正整数的最大公约数)。 5、编写一个函数,该函数的功能是判断一个整数是不是素数,在main函数中 调用该函数,输出200以内所有的素数。 6、请编一个自定义函数,功能:将给定的字符串中的所有字母改为小写字母。字符串在主函数中从键盘任意输入(容许包含空格) 7、编写一个函数,该函数的功能是判断一个整数是不是素数,在main函数

中输入一个整数,调用该函数,判断该数是不是素数,若是则输出“yes”, 否则输出“no” 8、将1--1000中所有21的倍数存到一个一维数组中,再按每行5个数据输出到屏幕上。 9、在屏幕上打印以下图案:(要求打印N行,N用符号常量定义为7) * ** *** **** ***** ****** ******* 10、输出所有在正整数200和300之间能被6整除、但不能被4整除的数,并统计这样的数有多少个。 11、求S=1/1+1/2+1/3+……+1/100(精确到小数点后三位)。 12、编程计算1到20的平方和,并输出结果。(要求用for循环) 13、编写一个程序从键盘任意个整数,求均值及低于均值的个数,输出到屏幕。 14、编写一个程序从键盘输入10个学生的成绩到数组score中,将最高分、最低分输出,要求将该程序以文件名test1.c保存到K盘根目录。 15、在main()函数中输入一个人的年龄和性别,女士55岁退休,男士60岁退休。编写一个函数根据年龄和性别判断一个人士工作还是退休,若工作,则输出“Working!”,退休则输出“Retired!” 161、编写一个程序从键盘输入10个学生的成绩到数组score中,将最高分、最低分输出。 17、编写一个函数求一个实数的绝对值。然后在main函数中用scanf输入 任意个实数,调用该函数求它的绝对值并输出。 18、编写一个求1——n内的偶数和的函数,在main()函数中输入n,然后 调用该函数求1——n的偶数和并输出。 19、编写一个求1——n内的奇数和的函数,在main()函数中输入n,然后

汇编语言程序设计练习题

汇编语言程序设计练习题 一、字符与串处理类 1.逆序输出字符串“BASED ADDRESSING”。 2.试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。 3.编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 4.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。 5.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。)放在STRING中,试编制一个程序测试字符串中是否存在数字。如有,则把CL的第5位置1,否则将该位置置0。 6.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。),将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。 7.试编制一个程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为buffer的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。 8.试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NO MATCH”。 9.试编写一段程序,要求输入两个字符串,如两个字符串相等则显示“MATCH”, 否则显示“NO MATCH”。 10.试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。 11.在内存区域0B800:0000-0B800:0FFFF(都是16进制数)内查找首地址为SOURCE的串(SOURCE的首字节为串长度),如果找到,则把AL的第0位置0,否则将该位置置1。 12.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中。 13.在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一个程序:在数组中查找该数,如果找到此数,则把它从数组中删除。 二、数字输入输出类 1. 试编制一个程序,把BX寄存器内的二进制数以十六进制数的形式在屏幕上显示出来。 2. 试编制一个程序,把BX寄存器内的二进制数以八进制数的形式在屏幕上显示出来。 3. 试编制一个程序,把BX寄存器内的二进制数以十进制数的形式在屏幕上显示出来。 4.从键盘上输入2个一位数,求出它们的和(假设和不超过1位)。 5.试编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 6.试编写一段程序,从键盘接收一个0-65535间的十进制无符号数,并在终端上显示与它等值的二进制数。 7.试编写一段程序,从键盘接收一个-32768-32767间的十进制有符号数,并在终端上显示与它等值的二进制数。 8.编写一个程序,从键盘输入一个0~65535之间的10进制无符号数,然后以16进制

汇编语言程序的设计试卷与答案

汇编语言程序设计试卷 一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分) 1.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。 ① 无符号十进制数136 ② 带符号十进制数-120 ③ 压缩型BCD码十进制数88 ④ 8位二进制数-8的补码表示 2.指令指针寄存器是()。 ① IP ② SP ③ BP ④ PSW 3.当执行指令ADD AX,BX后,若AX的内容为2BA0H, 设置的奇偶标志位PF=1,下面的叙述正确的是()。 ① 表示结果中含1的个数为偶数 ② 表示结果中含1的个数为奇数 ③ 表示该数为偶数 ④ 表示结果中低八位含1的个数为偶数 4.完成将累加器AL清零,并使进位标志CF清零, 下面错误的指令是()。 ① MOV AL,00H ② AND AL,00H

③ XOR AL,AL ④ SUB AL,AL 5.下列指令执行后总是使CF=0,OF=0的是()。 ① AND ② NEG ③ NOT ④ INC 6.完成同指令XCHG AX,BX相同功能的指令或指令序列是()。 ① MOV AX,BX ② MOV BX,AX ③ PUSH AX POP BX ④ MOV CX,AX MOV AX,BX MOV BX,CX 7.设AH=0,AL=06H,BL=09H,执行指令 ADD AL,BL AAA 之后,其结果应是()。 ① AH=01,AL=05 ② AH=1 AL=15 ③ AH=0 AL=0FH ④ AH=0 AL=05 8.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为

C语言程序设计期末考试试题(含答案)

C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是( ) 。 #include main(){ int x; float y; scanf("%3d%f",&x,&y); } A、12345 B、123 C、45 D、345 8、若有以下定义int a,b; float x,则正确的赋值语句是( ) A、a=1,b=2 B、b++; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是( )

#include { int i=10,j=10; printf("%d,%d\n",++i,j--); } A、11,10 B、9,10 C、11,9 D、10,9 10、巳知字母A的ASCII码是65,以下程序的执行结果是( ) #include main() { char c1='A',c2='Y'; printf("%d,%d\n",c1,c2); A、A,Y B、65,65 C、65,90 D、65,89 11、下列运算符中优先级最高的是( ) A、< B、十 C、% D、!= 12、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0是( ) 。 A、’x’&&’y’ B、x<=y C、x||y+z&&y-z D、!((x<y)&&!z ||1) 13、判断char型变量cl是否为小写字母的正确表达式为( ) A、’a’<=c1<=f’z’ B、(c1>=a)&&(c1<=z) C、(‘a’>=c1) (‘z’<=c1) D、(c1>=’a’)&&(c1<=’z’) 14、字符串"a"在内存中占据的字节个数为( ) A、0 B、 1 C、 2 D、 3 15、下面有关for循环的正确描述是( ) A、for循环只能用于循环次数已经确定的情况 B、for循环是先执行循环体语句,后判定表达式 C、在for循环中,不能用break语句跳出循环体 D、for循环体语句中,可以包含多条语句,但要用花括号括起来 16、下面程序的运行结果是( ) #include main() {int num=0; while(num<=2) {num++; printf(“%d ,num); } } A、 1 B、 1 2 C、 1 2 3

汇编语言程序设计练习题及答案

一、单项选择题(在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。) 1.为在一连续的存储单元中,依次存放数据41H,42H,43H,44H,45H,46H,可选用的数据定义语句是(D) A.DB 41,42,43,44,45,46 B.DW 4142H,4344H,4546H C.DW ‘AB’,‘CD’,‘EF’D.DW ‘BA’,‘DC’,‘FE’ 2.DA2 DB‘AB’,‘CD’ ┇ MOV AX,WORD PTR DA2+1 上述语句执行后AX中的值是(D) A.‘AD’B.‘BC’ C.‘DA’D.‘CB’ 3.下列数据定义语句中可实现留空20H个字节存储单元的是(D) A.DB 20 DUP(?) B.DW 20H DUP(?) C.DB 10H DUP(4 DUP(?)) D.DD 08H DUP(?) 4.如某存储器分段时,表示偏移地址是17位二进制代码,那么一个段最多的存储单元数是(D) A.32K字节B.32K字 C.64K字节D.64K字 5.下列寄存器中用来指示堆栈中任意数据区的偏移地址的是(B)A.BX B.BP C.SI D.DI 6.下列指令中有语法错误的是(C) A.PUSH AX B.PUSH [20H+SI+BX] C.POP CS D.PUSH CS 7.执行PUSH BP指令时,目的操作数的物理地址表达式是(D) A.16*SS+BP B.16*DS+BP C.16*CS+IP D.16*SS+SP 8.把BL中的数据输出到端口8CH中正确指令是(C) A.OUT 8CH,BL B.IN 8CH,BL C.MOV AL,BL D.MOV AL,BL OUT 8CH,AL IN 8CH,AL 9.结果为零的条件转移指令,其测试条件是(A) A.ZF=1 B.ZF=0 C.SF=l D.SF=0 10.下面程序段完成测试DA-BYTE字节单元中数是否为负数,若是则将全l送DH中,否则全0送DH中,那么程序段中方框里应填的语句是 MOV CH,0 MOV CH,0FFH ZERO:MOV DH,CH(C) A.JNZ ZERO B.JS ZERO

汇编语言程序设计期末考试题

汇编语言程序设计期末考试题 学院(系):学号: 姓名: 计分: 一、项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号 内。每小题1分,共10分) 1.CPU发出的访问存储器的地址是( ) A.物理地址 B.偏移地址C.逻辑地址D.段地址 2.将高级语言的程序翻译成机器码程序的实用程序是( ) A.编译程序 B.汇编程序 C.解释程序 D.目标程序 3.DEC BYTE PTR[BX]指令中的操作数的数据类型是( ) A.字 B.双字C.字节D.四字 4.在下列语句中,BUFFER称为( ) BUFFER DB 01H,0AH A.符号 B.变量 C.助记符D.标号 5.串操作指令中,源串操作数的段地址一定在( )寄存器中。 A. CS B. SS C. DS D. ES 6.使计算机执行某种操作的命令是( ) A.伪指令B.指令 C.标号D.助记符 7.将数据5618H存放在存储单元中的伪指令是( ) A. DATA1 DW 1856H B. DATA1 DB 18H,56H C. DATA1EQU 5618H D. DATA1 DB 18H,00H,56H,00H 8.若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=( ) A.1400H B. 77F8H C. 0000H D. 0FFFFH 9.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍 采用的是( )码。 A. BCD码 B.二进制码 C.ASCII码D.十六进制码 10.用指令的助记符、符号地址、标号和伪指令、宏指令以及规定的格式书写程序的语 言称为( ) A.汇编语言 B.高级语言 C.机器语言 D.低级语言 二、填空题(每空1分,共20分) 1.在8086/8088汇编语言中,有五条串操作指令,其中搜索字符串指令的助记符是______。 2.通常所说的计算机系统包括________和________两大部分。 3.8086/8088存储器分四个段,这四个段的段名所对应的段寄存器分别是________、_____ ___、________、________。 4.现有AX=2000H,BX=1200H, DS=3000H, DI=0002H, (31200H)=50H,(31201H)=02H, (31202H)=40H,请写出下列各条指令独立执行完后有关寄存器及存储单元的内容,并指出标 志位ZF、CF的值。 A.ADDAX,1200H;问AX=________H,ZF=________

C语言经典程序100题(完整版)

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。#include "stdio.h" #include "conio.h" main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } getch(); } ============================================================== 【程序2】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 #include "stdio.h" #include "conio.h" main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0. 1; bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); getch(); } ============================================================== 【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: #include "math.h" #include "stdio.h" #include "conio.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); /*x为加上100后开方后的结果*/ y=sqrt(i+268); /*y为再加上168后开方后的结果*/

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

汇编语言程序设计试题A卷

陕西电子信息职业技术学院考试试卷(A) 2011至2012学年度第一学期 期末 班级: 09成教 课程: 汇编语言程序设计 题 号 一 二 三 四 五 合分人 分 数 总 分 (考试时间:120分钟 满分100分) 一、单项选择题(本大题共10小题,每小题2分,共20分) 1. 计算机硬件中最核心的部件是( )。 A. 运算器 B. 主存储器 C. CPU D. 输入 / 输出设备 2. 指令指针寄存器(IP )中存放的内容( )。 A. 指令 B. 指令地址 C. 操作数 D. 操作数地址 3. 寄存器间接寻址方式中,要寻找的操作数位于( )中。 A. 通用寄存器 B. 内存单元 C. 段寄存器 D. 堆栈 4. I/O 端口的编址方式分为统一编址和( )。 A. 独立编址 B. 选择编址 C. 设置编址 D. 控制编址 5. 汇编语言程序中可执行的指令位于( )中。 A. 数据段 B. 堆栈段 C. 代码段 D. 附加数据段 6. 循环结构设计中,要考虑的核心问题是( )。 A. 循环的控制 B. 选择循环结构 C. 设置循环参数初始值 D. 修改循环控制参数 7. 在汇编中用于管理和控制计算机相关功能的指令是( )。 A. 伪指令 B. 机器指令 C. 宏指令 D. 目标指令 班级 姓名 学号 — — — — — — — — — — — — — — — — 密 — — — — — — — — — 封 — — — — — — — — — — 线 — — — — — — — — — — — — — — — —

8. 识别中断源的方法包括查询中断和()共两种类型。 A. 指令中断 B. 故障中断 C. 矢量中断 D. 实时时钟中断 9. CPU与I/O设备之间需要传输的信息通常包括()、状态信息 和控制信息。 A. 编址信息 B. 格式信息 C. 中断信息 D. 数据信息 10. 一般情况下,汇编源程序应由数据段、()和代码段共三个逻 辑段组成。 A. 逻辑段 B. 堆栈段 C. 指令段 D. 类型段 二、名词解释(本大题共5小题,每小题4分,共20分) 11. 微处理器: 12. 寻址方式: 13. 伪指令: 14. 中断源:

c语言编程例题及答案

实验报告三 (四学时) 2.1 实验目的 (1)掌握函数的定义和调用; (2)了解函数间的参数传送; 2.2 基础实验 【题目3-1】编写函数实现将输入的字母转换成大写字母(若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母”)。 算法分析: 1、输入:通过键盘接收一个字符; 2、条件判断:调用判别函数 3、函数功能为:蒋所输入字符进行判别处理,若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母” 4、程序结束。 【实验3-1】代码及运行结果:

【题目3-2】从键盘输入若干个同学计算机课程期末考试成绩(学生人数可由用户输入),求该课程的期末成绩的平均分并输出。 函数功能要求:实现若干(例如5名)同学的的期末成绩输入,并统计出平均分。 算法分析: 1、输入:通过键盘接收同学个数; 2、调用求平均分函数 3、输出平均成绩 4、程序结束。 【实验3-2】代码及运行结果: 【题目3-3】请用函数编写程序实现:计算3 到100 之间所有素数的平方根之和,并输出。s=148.874270。

算法分析: 1、编写函素数判别函数,确定返回标记,如果是素数返回1,否则返回0 2、编写主函数,用一重循环遍历100以内所有数据 2.1、通过素数判别函数对循环的数据进行是否为素数的判别 2.2、返回判别为真的整数,并输出 3、程序结束。 【实验3-3】代码及运行结果: #include #include int Prime(int x) { int i ; if(x<=1) return 0; for(i=2;i<=x-1;i++) { if(x%i==0) { return 0; } } return 1; } int main() { double i,sum; i=3; sum=0; while(i<=100) { if(Prime(i)) { sum=sum+sqrt(i); } else { sum=sum+0; } i++; } printf("sum=%f\n",sum); return 0; }。

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

C语言编程题(带答案)

1、求100之内自然数中最大的能被17整除的数。 2、已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值。 3、计算并输出200-400之间不能被3整除的整数的和。 4、从键盘输入10个数,统计非负数的个数,并计算非负数的和 5、求100之内自然数中偶数之和。 6、输入5个数,求和并输出。要求编写求和的函数。 7、编程计算1*2*3+3*4*5+5*6*7+……+99*100*101的值。 8、编写程序,将用户输入的字符串中所有的字符a用*代替,然后输出。 9、编写程序,将一个一维数组的元素逆序存放并输出。例如,原顺序为1,2,3,4,5,逆序后为5,4,3,2,1。 10、求3行3列矩阵a[3][3]={1,2,3,4,5,6,7,8,9}非对角线上元素之和。 11、编程判断输入的整数的正负性和奇偶性。如果为正数,输出z;如果为负数,输出f;如果为偶数,输出o;如果为奇数,输出j 12、计算并输出1-200之间不能被5整除的整数的和。 13、从键盘输入n和a的值,计算a+aa+aaa+……+aa……a(n个a)的值。 14、输入5个数,求它们中最大值和平均值并输出。 15、输出所有200-400之间能被3整除且个位数字为6的整数 16、编写程序,将用户输入的字符串中所有的字符a去掉,然后输出剩余的字符。 17、计算并输出200-400之间不能被7整除的整数的和。 18.计算并输出200-400之间不能被5整除的整数的和 19、从键盘输入10个数,统计非正数的个数,并计算非正数的和 20、输入一串字符,将其中的大写字母变成对应的小写字母并输出。 21、打印所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数。例如,153就是一个水仙花数,因为153=1*1*1+5*5*5+3*3*3。 22、一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求当它第10次落地时,共经过了多少米,第10次反弹多高? 23、输出所有0-200之间能被3整除且个位数字为6的整数。 24、输入一个正整数,输出它的阶乘。 25、编写程序,判断从键盘输入的字符中数字字符的个数、大写字母的个数、小写字母的个数及其它字符的个数,以*作为字符输入结束标志。 26、编写程序,使用循环结构输出下列图形: * * * * * * * * * * * * * * * * * * * * 27、输入一串字符,逆序输出。要求使用数组实现。 28、求1-1/2+1/3-1/4+……+1/99-1/100的值。 29、输入3个学生4门课的成绩{(60,70,65,75),(75,80,75,90),(95,75,90,65)},计算每个学生的总分和平均成绩并输出,结果保留一位小数。 30、求两个正整数的最大公约数。 31、求100之内自然数中奇数之和。 32、输出所有200-400之间能被3整除且个位数字为7的整数。 33、编程计算1*2*3+4*5*6+……+97*98*99的值

汇编语言程序设计试题

汇编语言程序设计试题 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.设SS=2050H,SP=0140H,则栈顶存贮单元的物理地址是( A ) A.20640H B.2063EH C.2063FH D.21900H 2.使用DOS功能调用时,子程序编号应放在( B ) A.AL B.AH C.AX D.任意指定 3.没有 ..语法错误的输出指令是( B ) P76 A.OUT AX,30H B.OUT DX,AL C.OUT AL,DX D.OUT 30H,AH 4.用MOV指令将十进制数89以非压缩BCD码格式送入AX,可使用的指令是( B ) A.MOV AX,89 B.MOV AX,0809H C.MOV AX,89H D.MOV AX,0809 5.设AX=8765H,DX=4321H,执行CWD指令后,DX中的内容是( B ) P117 A.4321H B.0FFFFH C.8000H D.0001H 6.设CL=05H,要获得CL=0AH,可选用的指令是( A) A.XOR CL,0FH B.NOT CL C.OR CL,0AH D.AND CL,0FH 7.假设执行ADD指令后AL=8CH,再执行DAA指令,AL中的值是( A ) A.92H B.0104H C.74H D.8CH 8.MOV AL,79H ADD AL,B1H 上面指令执行后,设置的标志位CF和ZF的值是( D ) A.CF=0,ZF=1 B.CF=l,ZF=1 C.CF=0,ZF=0 D.CF=1,ZF=0 9.TEST DL,55H P123 JZ NEXT NEXT:…… … 上述程序段,执行JZ指令时能产生转移的情况是( D ) A.DL>55H B.DL<55H C.DL=55H D.DL中第0、2、4、6位均为0 10.假设AL=28H, 执行ROL AL,1 指令之后的情况是( D ) P125 A.AL=14H, CF=1 B.AL=50H, CF=1 C.AL=14H, CF=0 D.AL=50H, CF=0 11. 98的BCD码是(B) A)10011001 B) 10011000 C) 10011010 D) 10001010 12. –0110110 的补码是(A) A) 11001010 B) 11001001 C) 10110110 D) 00110110

全国1月高等教育自学考试汇编语言程序设计试题历年试卷

做试题,没答案?上自考365,网校名师为你详细解答! 全国2005年1月高等教育自学考试 汇编语言程序设计试题 课程代码:02321 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填 在题干的括号内。每小题1分,共16分) 1.已知某操作数的物理地址是2117AH,则它的段地址和偏移地址可能是( )。 A.2025∶0F2A B.2108∶00EA C.2000∶017A D.2100∶117A 2.某程序装入内存后,DS=1200H,CS=1400H,则程序中数据段中的数据最多是( )字节。 A.2K B.4K C.8K D.16K 3.以寄存器DI间接寻址的存储器字节单元内容加1的指令是( )。 A.INC [DI] B.INC DI C.INC BYTE PTR[DI] D.ADD [DI],1 4.有语句:COUNT EQU 256,下列四种叙述中,正确的是( )。 A.COUNT是变量 B.COUNT占用一个字节存储单元 C.COUNT是符号常数 D.COUNT占用二个字节存储单元 5.下面指令中,源操作数的寻址方式为立即寻址的是( )。 A.MOV AX,OFFSET A B.MOV AX,A C.MOV AX,A+1 D.MOV AX,A[BX] 6.已知SP=2110H,执行POP AX后,SP寄存器的值是( )。 A.2111H B.2112H C.210FH D.210EH 7.将AX中有符号数除以2的正确指令是( )。 A.SHR AX,1 B.SAR AX,1 C.ROR AX,1 D.RCR AX,1 8.比较BX和SI中的两个存储器地址,若BX≥SI转向HIGH的正确指令是( )。 A.JAE HIGH B.JBE HIGH C.JEG HIGH D.JLE HIGH 9.指令SCASB操作数的段地址一定在( )寄存器中。 A.CS B.DS C.ES D.SS 10.有数据定义语句BUF DW 0ABH,1,10 DUP(3 DUP(1,0),2)汇编后,为变量BUF分配 的存储单元字节数是( )。 A.48H B.90H C.120 D.60 11.下列指令执行后,不改变AL寄存器内容的指令是( )。 1

第四章MCS-51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

汇编语言程序设计试题

汇编语言程序设计试题 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。每小题2分,共50分) 1.CPU发出的访问存储器的地址是( A ) A.物理地址 B.偏移地址 C.逻辑地址 D.段地址 2.使计算机执行某种操作的命令是( B ) A.伪指令 B.指令 C.标号 D.助记符 3.若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=(A) A. 1400H B. 77F8H C. 0000H D. 0FFFFH 4.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍采用的是( C)码。 A. BCD码 B.二进制码 C.ASCII码 D.十六进制码 5.下列关于8086CPU的工作原理的描述错误的是__C___。 A.汇编程序员可以通过对各种寄存器中内容的修改实现对CPU的控制。B.CPU在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理地址。 C.任意时刻,CS:IP指向的内容即是此刻CPU正在执行的指令。 D.传送指令能够更改所有通用寄存器的内容。 6.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是(C) A.12CFBH B.12B6BH C.12C5BH D.12BFEH 7. 16位结构的CPU 不一定具备的特性是(D)。 A. 运算器一次最多可以处理16位的数据 B. 寄存器的最大宽度为16位 C. 寄存器和运算器之间的通路为16位 D. 地址总线为16根 8. 下列指令的书写正确的是(C)。 A. push al B. mov cs:[0],ds:[10] C. pop si D. mov ds:[0],2 9.在DEBUG工具中,显示寄存器内容的命令是( D )。 A. G B. D C. T D. R 10. 能够将ax中的内容送到内存0000:0200H处的指令序列是(D)。

C语言编程练习题

1.编程实现求三个数的平均值,三个数可以在定义时初始化,也可以在声明后 赋值,自行选择合适的数据类型。输出时加上恰当的信息。 2.输入一个三位正整数,然后将其转换为倒序输出,如输入248,输出842. 3.Fibonacci数列如下:1,1,2,3,5,8......,即从数列的第三项开始,每项的值是其 前两项之和,编程输出该数列的前20项。 4.编程求n!,要求从键盘输入n的值,然后计算出结果并在显示器上显示出来。 5.水仙花数是指3位数的各位数字的立方和等于这个三位数本身,试编程输出 所有的水仙花数。如153=1*1*1+5*5*5+3*3*3。 6.输入20个学生的某门课程的成绩,求出其中大于平均成绩学生的人数,并 对成绩按从高到低进行排序。 7.寻找能满足被3整除余2,被5整除余3,被7整除余4的最小整数w,要 求用do-wihle循环。 8.输入一个不大于6位的整数,将其逆序输出。例如输入123456,则输出为 654321 9.编写函数:求出一个整数各位的数字之和,例如2345各位数字之和为 2+3+4+5=14。 10.输入任意大小的3个整数,判断其中是否有两个奇数一个偶数,若是则输出 YES,不是则输出NOT。 11.百钱买百鸡问题:一百元钱买一百只鸡了,小鸡一元钱3只,母鸡三元钱一 只,公鸡5元钱一只,问可买小鸡、母鸡、公鸡各多少只。 12.编写子函数void change_data(int* a,int* b)将主调函数传来的两个整数进行交 换,并将交换结果在主函数中输出。 13..编程打印如下图形,输出行数n由键盘输入,要求使用循环实现。 ***** **** *** ** * 14输出指定行数的杨辉三角。

相关主题
文本预览
相关文档 最新文档