C语言思考题
C语言-函数思考题
函数思考题一、填空题【1】C程序的执行以函数开始,调用其他函数后,流程回到函数,在函数中结束整个程序的运行。
【2】C程序允许函数值类型的缺省定义,函数值系统默认的类型是型。
【3】从用户使用角度看,函数有两种:和。
从函数的形式看,函数分为和。
【4】调用有参函数时,主调函数和被调用函数之间是关系,若形参是数组名,则实参与形参之间传递的是数组的。
【5】在调用一个函数的过程又出现直接或间接地调用该函数本身,这称为函数的。
【6】C语言中,函数返回值的类型由所决定。
【7】只在本函数范围内有效的变量称为,而可以为本文件中其它函数所共用。
形式参数是。
【8】从变量值存在的时间(即生存期)角度来分,可以分为和。
二、判断题【9】C语言函数既可以嵌套定义又可以递归调用。
【10】在C语言中调用函数时,只能将实参的值传递给形参,形参的值不能传给实参。
【7.11】C语言函数可以嵌套调用。
【12】只有在发生函数调用时,形参才被分配内存单元。
【13】实参与形参的类型应相同或赋值兼容。
【14】一个函数中只可以有一个return语句。
【15】C语言规定,凡不加类型说明的函数,一律自动按整型处理。
【16】函数值的类型与return语句中的表达的值不一致时,则以函数类型为准。
【17】若被调用函数中无return语句,则函数不带回任何值。
【18】void表示禁止在调用函数中使用调用函数的返回值。
【19】C语言中,外部变量的隐含类别是自动存储类别。
【20】函数中的局部变量,如不专门声明存储类别,系统自动地动态分配存储空间。
三、读程序选结果【21】# include<stdio.h>main( ){ int x=10;{int x=20;printf(“%d,”,x);}printf(“%d\n”,x);}结果为:。
【22】#include <stdio.h>try( ){ static int x=3;x++;return(x);}main( ){ int i,x;for(i=0;i<=2;i++)x=try( );printf(“%d\n”,x);}结果为:。
C语言基础知识作业(含解答)
基础知识作业解答(1)一、选择题:1.下面叙述错误的是:a)C程序中,各种括号应成对出现。
b)C程序中,赋值号的左边不可以是表达式。
c)C程序中,变量名的大小是有区别的。
d)C程序中,若未给变量赋初值,则变量的初值自动为0。
答案:d)解答:C程序中,若未给变量赋初值,则变量的初值不一定为0。
按变量被定义的位置来区分,变量可分为局部变量和全局变量;在{ … } 之间定义的变量称为局部变量,编译系统对局部变量是不进行初始化的,即,不赋初值。
未赋初值的局部变量的值为机内随机值。
在{ … } 之外定义的变量称为全局变量,编译系统自动对全局变量进行初始化。
未赋初值的全局部变量的值为0。
2.下面叙述正确的是:a)C程序中的变量定义语句可以写在函数体中任何位置。
b)C程序中不能有空语句。
c)C程序中的变量必须先定义后使用。
d)C程序中所有简单数据类型都可以准确无误的表示。
答案:c)解答:C程序中,变量定义语句的作用是通知编译系统为变量分配存储空间,所以必须先定义后使用。
3.以下合法的用户标识符的是:a)long b)\t c)5a d)user答案:d)解答:C程序中,合法的用户标识符的定义是:以字母或下划线开头的由字母、数字和下划线组成的字符串,不可以使用系统的关键字作为用户的标识符。
常见的关键字有:int, float ,char ,double ,long, short,unsigned,if,switch,case,break, continue ,do ,for ,while ,struct ,union, auto, static, extern, register;标准函数名可以用作用户标识符,但不提倡。
4.C程序中,合法的关键字的是:a)Float b)while c)Int d)Integer答案:b)5.下面选项中,优先级最高的运算符是:a)&& b)/= c) ! d)<=答案:c)6.下面选项中,优先级最低的运算符是:a)!= b) || c)++ d),答案:d)7.C程序中,运算对象必须为整型数据的运算符是a)++ b) % c) / d) *答案:b)8.假设x,y,z为整型变量,且x=2,y=3,z=10,则下列表达式中值为1的是:a)x && y||z b)x>z c) (!x && y)||(y>z) d)x && !z ||!(y && z)答案:a)解答:C程序中,进行逻辑运算时,所有的非0数都处理成逻辑真;0处理成逻辑假。
C语言课后习题
C)数组 x 的长度大于数组 y 的长度 D)数组 x 的长度小于数组 y 的长度 8.下面各语句行中,能正确进行赋字符串操作的语句行 是( )。
A)char st[4][5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char s[5];scanf{“%s”,s}; D)char s[5];s=”ABCD” 9.下面程序的输出结果是( )。
3.设有“int x=2,y=3,z;z=(++x>=y--)?((--y==1)?x--:--y):y--;”则 z 的值是__________。
习题三
一、选择题
1.以下程序的输出结果是( )。
#include “stdio.h”
void main()
{ int a=2,b=-1,c=2;
if(a<b)
5.有输入语句 scanf(“i=%d,f=%f”,&i,&f);,要将 100 和 98.5
分别赋给 i 和 f,则正确的输入方式为( )
A)100 98.5<CR>
ቤተ መጻሕፍቲ ባይዱ
B)I=100 f=98.5<CR>
C.i=100,f=98.5<CR>
D)100<CR>98.5<CR>
三、填空题
1.C 语言程序中的语句必须以__________结束。 2.C 语言程序的执行总是从_________函数开始。 3.有输出语句 printf(“a=%5d,b=%6.2f\n”,100,98.546);,则输出结果是___________。
A)‘\’’ ‘\018’ ‘\0’
B)‘\\’ ‘\xb’
C语言习题及思考题.doc
习题及思考题1.思考题(1)请描述头结点、头指针、首元结点之间的区别?(2)顺序存储与链式存储有何异同?各适用于什么场合?(3)在多项式加法运算中,如果要求在创建时自动创建一个有序链表,应如何修改程序?2.选择题(1)以下关于链式存储结构的描述中,()是不正确的。
A. 不必事先估计存储空间的大小B. 逻辑上相邻的结点物理上不必相邻C. 可以通过计算直接确定第i个结点的地址D. 插入删除方便,不必移动结点(2)某线性表中最常用的操作是存取序号为i的元素和在最后进行插入删除运算,则采用()存储方式时间性能最好。
A.双向链表B.双向循环链表C. 单向循环链表D.顺序表(3)假设带头结点的单向循环链表的头指针为head,则该链表为空的判定条件是()A.head= =NULLB.head–>next= =NULLC.head!=NULLD.head–>next= =head(4)已知一个单链表中,指针q指向指针p的前驱结点,若在指针q所指结点和指针p所指结点之间插入指针s所指结点,则需执行()A. q→next=s;p→next=s;B.q→next=s;s→next=p;C. q→next=s;q→next=p;D.q→next=s;s→next=q;(5)设顺序表有19个元素,第一个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为()A.236B.239C.242D.245(6)在线性表的下列运算中,不改变数据元素之间结构关系的运算是()A.插入B.删除C.排序D.定位(7)在双向链表指针p的结点前插入一个指针q的结点操作是()。
A. p->prior=q;q->next=p;p->next->prior=q;q->prier=q;B. p->prior=q;p->prior->next=q;q->next=p;q->prior=p->prior;C. q->next =p;q->prior=p->prior;p->prior->next=q;p->prior=q;D. q->prior=p->prior;q->next=q;p->prior=q;p->prior->nex=q;(8)线性表采用链式存储结构时,要求内存中可用存储单元的地址( )A. 必须是连续的B. 必须是部分连续的C. 一定是不连续的D. 连续和不连续都可以(9)带头结点的单链表head为空的判定条件是()A.head == NULL B.head->next == NULLC.head->next == head D.head != NULL(10)在长度为n的顺序表的第i(1≤i≤n+1)个位置上插入一个元素,元素的移动次数为( )A.n-i+1B.n-iC.iD.i-1(11)对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( )A.顺序表B.用头指针表示的单循环链表C.用尾指针表示的单循环链表D.单链表(12)在双向链表存储结构中,删除p所指结点时须修改指针()A. p->next->prior=p->prior;p->prior->next=p->next;B. p->next=p->next->next;p->next->prior=p;C. p->prior->next=p;p->prior=p->prior->prior;D. p->prior=p->next->next;p->next=p-->prior->prior;(13)在双向循环链表中,在p指针所指的结点后插入一个指针所指向的新结点,其修改指针的操作是()A. p->next=q;q->prior=p;p->next->prior=q;q->next=q;B. p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;C. q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;D. q->next=p->next;q->prior=p;p->next=q;p->next=q;3.判断题(1)通常单链表的存取必须从头指针开始。
单片机C语言版参考答案
入函数 getkey 实现?如果不能使用请说明原因。 2. 在实际的单片机应用系统编程时一般不会使用类似 printf、getchar、getkey 等函数,请分
A.立即数寻址
B.寄存器寻址
C. 直接寻址 D.寄存器间接寻址
7. 直接从指令中获得操作对象地址的方式称为( C )。
A.立即数寻址
B.寄存器寻址
C. 直接寻址 D.寄存器间接寻址
8. 从寄存器中获得操作对象地址的方式称为( D )。
A.立即数寻址
B.寄存器寻址
C. 直接寻址 D.寄存器间接寻址
二. 填空题 1. 计算机系统由 硬件系统 和 软件系统 组成。 2. 依据冯·诺伊曼计算机模型,计算机的硬件系统由 控制器 、 运算器 、
要求使用 C 语言编写程序,并在 μVision4 集成开发环境进行仿真。 提示: ¾ 只要修改程序 3-1,程序 3-2 不需要进行任何修改; ¾ 将 1 号 UART(UART #1)观察窗口设为当前窗口即可通过键盘模拟 UART 的输
入; ¾ UART 收到一个有效数据,RI 将置为 1,可用软件清除。 3. 对例 3-1 的功能进行如下扩展:初始化后等待接收;收到字母 c 或 C 进行发送;收到字 母 n 或 N 暂停发送。
要求使用 C 语言编写程序,并在 μVision4 集成开发环境进行仿真。 提示: ¾ 只要修改程序 3-1,程序 3-2 不需要进行任何修改; ¾ 将 1 号 UART(UART #1)观察窗口设为当前窗口即可通过键盘模拟 UART 的输
入; ¾ UART 收到一个有效数据,RI 将置为 1,可用软件清除; ¾ 当 RI 为 1 时,读取 SBUF(UART 的接收缓存)即可获得键盘输入的值。 4. 将通过 UART 接收到的字符再由 UART 发送出去。
c语言程序设计教程课后题及模拟题参考答案
main()
{ int x,y;
scanf(“%d,%d”,&x,&y);
if (x*x+y*y>1000)
printf(“%d\n”,(x*x+y*y)/100);
else
printf(“%d\n”,x+y);
}
3.输入一个整数,判断它能否同时被3、5、7整除,并输出“yes”或“no”字样。
a1=a%10 ; a=a/10;
a2=a%10; a=a/10;
a3=a%10;
printf(“%d%d%d\n”, a1, a2, a3);
}
4.编写程序,读入3个double型数据,求它们的平均值,保留此平均值小数点后1位数,对小数点后第2位数进行四舍五入,最后输出结果。
#include "stdio.h"
7. (1)10,6,4 (2)6,9,15 (3)3,60,83
8. 55
习题3
3
1-5BDABC6-10ADCAC 11-12BB
3
1.3
2.0261
3.0x10
4. 2, 1互换a,b的值
5.6.6
6.–003
8.7
7.5.0,4,c=3<Enter>
8.i=10,j=20<Enter>
9.(1) 65
#include "stdio.h"
main()
{ float a, b, h, s;
a=10;b=20;
h=5;s=(a+b)*h/2;
printf("s=%f\n" , s );
《C语言程序设计》思考与练习答案
第1章C语言概述一、选择题1.D 2.C 3.D 4.C 5.A 6.C 7.D二、填空题1..c .obj .exe2.需求分析算法设计编写程序编译程序连接程序编写程序文档3./* */三、编程题1.参考代码如下:#include <stdio.h>int main(){printf("***这是我的第一个C语言程序!***\n");return 0;}2.参考代码如下:#include <stdio.h> /*编译预处理指令*/int main() /*主函数的函数头*/{ /*函数体的开始标记*/ printf("***这是我的第一个C语言程序!***\n"); /*输出要显示的字符串*/return 0; /*程序返回值0*/ } /*函数的结束标记*/第2章算法一、选择题1.A 2.A 3.C 4.B二、简答题1.计算n!算法的流程图如图2-1所示。
图2-1 计算n!算法的流程图2.计算n!算法的N-S流程图如图2-2所示。
图2-2 计算n!算法的N-S流程图3.计算两个数a和b最大公约数算法的流程图如图2-3所示。
图2-3 求最大公约数流程图4.计算两个数a和b最大公约数算法的N-S流程图如图2-4所示。
图2-4 求最大公约数N-S流程图第3章数据类型及其运算一、选择题1.A 2.A 3.A 4.B 5.C6.D 7.D 8.C 9.C 10.B二、填空题1.整型浮点型2.03.264.95.1.5 6.76.9,11,9,10三、编程题1.参考代码如下:#include<stdio.h>int main(){int a,b,c;a=10;b=20;c=a;a=b;b=c;printf("a=%d,b=%d\n",a,b);return 0;}2.参考代码如下:#include<stdio.h>int main(){int num,a,b,c;printf("Please input the number:");scanf("%d",&num);a=num/100;b=(num-100*a)/10;c=num-100*a-10*b;a+= b*10+c*100;printf("The result is%d\n",a);return 0;}3.参考代码如下:#define PI 3.14159#include <stdio.h>int main(){float r,l,s,v;printf("请输入圆半径:");scanf("%f",&r);l=2*PI*r;s=PI*r*r;v=4*PI*r*r*r/3;printf("半径为%f的圆周长为%f,面积为%f,圆球体积为%f \n",r,l,s,v);return 0;}第4章顺序结构程序设计一、选择题1.D 2.C 3.D 4.B 5.B二、填空题1.27\n2.123.scanf("%d",&a);三、编程题1.参考代码如下:#include <stdio.h>int main(){int x;float y,s;printf("请输入商品的单价");scanf("%f",&y);printf("请输入购买商品的个数");scanf("%d",&x);s=x*y;printf("商品总价为:%f\n",s);return 0;}2.参考代码如下:#include <stdio.h>int main(){int a,b;printf("请输入a和b的值");scanf("a=%d,b=%d",&a,&b);a=a+b;b=a-b;a=a-b;printf("a=%d,b=%d\n",a,b);return 0;}3.参考代码如下:#include<stdio.h>int main(){printf(" ****\n");printf(" *\n");printf(" * \n");printf(" ****\n");return 0;}4.参考代码如下:#include<stdio.h>int main(){int a=5;float b=1.332;char c='A';printf("a=%4d b=%.3f\n",a,b);printf("a+b=%.1f\n",a+b);printf("c=\'%c\' or %d\n",c,c);return 0;}第5章选择结构程序设计一、选择题1.C 2.D 3.B 4.B 5.D二、填空题1.0 2.a的值为2;b的值为13.20,30,30 4.15.①a>b ②a=b;b=t;三、编程题1.参考代码如下:#include <stdio.h>int main(){int x,y; /*定义整型变量x、y*/printf("Please input x:"); /*输出屏幕提示*/scanf("%d",&x); /*从键盘输入x的值*/if(x<0)y=3*x+2; /*根据x的取值计算y的值*/ elsey=-x+1; /*根据x的取值计算y的值*/ printf("y=%d\n",y); /*输出y的值*/}2.参考代码如下:#include <stdio.h>int main(){int a;printf("Please enter an integer :");scanf("%d",&a);switch(a){case 1:printf("Monday\n");break;case 2:printf("Tuesday\n");break;case 3:printf("Wednesday\n");break;case 4:printf("Thursday\n");break;case 5:printf("Friday\n");break;case 6:printf("Saturday\n");break;case 7:printf("Sunday\n");break;default:printf("Error!\n");}return 0;}3.参考代码如下:#include <stdio.h>int main(){float a,b;printf("inpute the income:");scanf("%f",&a);if(a<=3500)b=0;else if(a<=5000)b=(a-3500)*0.03;else if(a<=9500)b=(5000-3500)*0.03+(a-5000)*0.1;elseb=(5000-3500)*0.03+(9500-5000)*0.1+(a-9500)*0.2;printf("the tax is:%.2f",b);return 0;}4.参考代码如下:#include <stdio.h>int main(){int c,s;float p,w,d,f;printf("Please enter price,weight,distance:"); /*提示输入数据*/scanf("%f,%f,%d",&p,&w,&s); /*输入单价、重量、距离*/if(s>=3000)c=12; /*3000km以上为同一折扣*/elsec=s/250; /*3000km以下各段折扣不同,c的值不相同*/ switch(c){case 0:d=0;break; /*c=0,代表250km以下,折扣d=0*/case 1:d=2;break; /*c=1,代表250km~500km,折扣d=2%*/case 2:case 3:d=5;break; /*c=2和3,代表500km~1000km,折扣d=5%*/ case 4:case 5:case 6:case 7:d=8;break; /*c=4~7,代表1000km~2000km,折扣d=8%*/ case 8:case 9:case 10:case 11:d=10;break; /*c=8~11,代表2000km~3000km,折扣d=10%*/ case 12:d=15;break; /*c=12,代表3000km以上,折扣d=15%*/}f=p*w*s*(1-d/100.0); /*计算总运费*/printf("freight=%10.2f\n",f); /*输出总运费,取两位小数*/return 0;}5.参考代码如下:#include <stdio.h>int main(){int a,i,j,k;printf("inpute the number(100-999):");scanf("%d",&a);if(a%3==0&&a%5==0&&a%7==0)printf("can be divided by 3,5,7 ");else if(a%3==0&&a%5==0)printf("can be divided by 3,5 ");else if(a%3==0&&a%7==0)printf("can be divided by 3,7 ");else if(a%5==0&&a%7==0)printf("can be divided by 5,7 ");else if(a%3==0)printf("can be divided by 3 ");else if(a%5==0)printf("can be divided by 5 ");else if(a%7==0)printf("can be divided by 7 ");elseprintf("not can be divided by 3 or 5 or 7 ");return 0;}第6章循环结构程序设计一、选择题1.D 2.A 3.A 4.D 5.C 6.C 7.C 8.B二、填空题1.do-while语句2.553.10 4.x>05.15三、编程题1.参考代码如下:#include <stdio.h>int main (){int i, k, max;printf("Please input k:");scanf ("%d",&max);for (i=2;i<6;i++){scanf ("%d",&k);if (max<k)max=k;}printf ("max=%d\n",max);return 0;}2.参考代码如下:#include <stdio.h>int main(){int n, i, j, k;for( n=100; n<1000; n++ ) /* 对所有的3位数循环*/{i=n/100; /* 的百位数字*/j=n/10%10; /* 的十位数字*/k=n%10; /* 的个位数字*/if(n==i*i*i+j*j*j+k*k*k){printf ("%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\n",n,i,i,i,j,j,j,k,k,k);break; /* 只要求找第一个满足条件的数,所以找到后立即退出循环*/ }}return 0;}3.参考代码如下:#include <stdio.h>int main(){int n;for( n=10;n<100;n++){if (n%3!=0 || n%5!=0)continue ; /* n不满足要求,结束本次循环*/printf (" %5d", n);}return 0;}4.参考代码如下:#include <stdio.h>int main(){int i,j;for(i=1;i<=10;i++){for(j=1;j<=i;j++)printf("#");printf("\n");}return 0;}5.参考代码如下:#include <stdio.h>int main ( ){int i,j;for(i=1;i<=9;i++) /*外循环控制输出的行数*/{for(j=1;j<=i;j++) /*内循环输出表中的一行*/printf("%d*%d=%-3d",j,i,i*j);printf("\n"); /*换行控制,使下一次的式子输出在新行上*/}return 0;}6.参考代码如下:#include<stdio.h>int main(){int A,B,C,D,E;/*定义5个整型变量*/for(A=1;A<6;A++)/*将A在1~5的名次中循环*/for(B=1;B<6;B++)/*将B在1~5的名次中循环*/if(A!=B)/*判断变量与已有变量值不相等*/for(C=1;C<6;C++)/*将C在1~5的名次中循环*/if(C!=A&&C!=B)/*判断变量与已有变量值不相等*/for(D=1;D<6;D++)/*将D在1~5的名次中循环*/if(D!=A&&D!=B&&D!=C)/*判断变量与已有变量值不相等*/for(E=1;E<6;E++)/*将E在1~5的名次中循环*/if(E!=D&&E!=C&&E!=B&&E!=A)/*判断变量与已有变量值不相等*/if((C!=1)&&(D-E==2)&&(E!=2)&& (A!=1)&&(A!=5)&&(B-C==1))/*根据问题设置的条件*/printf("A=%d,B=%d,C=%d,D=%d, E=%d\n",A,B,C,D,E);/*输出*/return 0;}7.参考代码如下:#include <stdio.h>int main(){int cock,hen,chick; /*定义变量为基本整型*/for (cock=0; cock<=20; cock++) /*鸡翁范围在0到20之间*/ for (hen=0; hen<=33;hen++) /*鸡母范围在0到33之间*/for (chick=3;chick<=99;chick++) /*鸡雏范围在3到99之间*/if (5*cock+3*hen+chick/3==100) /*判断钱数是否等于100*/if (cock+hen+chick==100) /*判断购买的鸡数是否等于100*/if (chick%3==0) /*判断鸡雏数是否能被3整除*/printf("鸡翁:%d只,鸡母:%d只,鸡雏:%d只\n",cock,hen,chick);return 0; }第7章数组一、选择题1.D 2.B 3.A 4.C 5.B 6.B 7.C 8.C 9.A 10.A二、填空题1.2 0 0 2.windows20003.①s=count=0; ②i=0;i<20;i++ ③continue; ④count++;三、编程题1.参考代码如下:#include <stdio.h>#include <math.h>#define N 101int main(){int i,j,line,a[N];for(i=2;i<N;i++)a[i]=i;for(i=2;i<sqrt(N);i++)for(j=i+1;j<N;j++){if(a[i]!=0&&a[j]!=0)if(a[j]%a[i]==0)a[j]=0;}printf("\n");for(i=2,line=0;i<N;i++) {if(a[i]!=0){printf("%5d",a[i]);line++;}if(line==10){printf("\n");line=0;}}return 0;}2.参考代码如下:#include "stdio.h"int main( ){int a[20],i,max,n;for(i=0;i<20;i++)scanf("%d",&a[i]);max=a[0];n=0;for(i=1;i<20;i++)if(max<a[i]){max=a[i];n=i;}printf("max=%d,n=%d",max,n);return 0;}3.参考代码如下:#include<stdio.h>int main(){int i,n,k=16,a[16]={0};printf("Please enter a digit:");scanf("%d",&n);while(n>0) /* 将十进制数转变为二进制数*/{a[--k]=n%2;n=n/2;}for(i=0;i<16;i++)printf("%2d",a[i]);return 0;}4.参考代码如下:#include <stdio.h>int main( ){int month_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}};int year,month,day;int yearday,leap,i;printf("\nEnter year_month_day:");scanf("%d %d %d",&year,&month,&day);leap=((year%4==0)&&(year%100!=0)||(year%400==0));yearday=day;for(i=1;i<month;i++)yearday+=month_tab[leap][i];printf("yearday=%d",yearday);return 0;}5.参考代码如下:#include <stdio.h>int main(){char str1[100],str2[100],c;int i,s;printf("Enter string 1: ");gets(str1);printf("Enter string 2: ");gets(str2);i=0;while((str1[i] == str2[i] && str1[i]!= '\0')) /*比较两字符串第一个不同的字符*/ i++;s=str1[i]-str2[i];printf("%d\n", s);return 0;}第8章函数一、选择题1.A 2.B 3.C 4.A 5.A 6.C 7.C 8.D二、填空题1.5,6 2.11,43.① int fun(int x,int y); ② max=fun(fun(a,b),c);4.① i+1 ② &a[i]三、编程题1.参考代码如下:#include <stdio.h>long rfact(int n){if(n<0){printf("Negative argument to fact!\n");exit(-1);}else if(n<=1)return(1);elsereturn(n*rfact(n-1)); /*递归调用自己*/}int main(){int n;long f;printf("Please input an integral number:");scanf("%d",&n);f=rfact(n);printf("%d!=%ld\n",n,f);return 0;}2.参考代码如下:#include <stdio.h>int main(){double turn(char x[]);char str[10];double a;gets(str);a=turn(str);printf("%f\n",a);return 0;}double turn(char x[]){int i;double m=0;for(i=0;x[i]!='\0';i++)if(x[i]>='0'&&x[i]<='9') m=m*16+x[i]-'0';else if(x[i]>='A'&&x[i]<='F') m=m*16+x[i]-'A'+10;else if(x[i]>='a'&&x[i]<='f') m=m*16+x[i]-'a'+10;return m;}3.参考代码如下:#include <stdio.h>float max=0,min=0; /*定义全局变量,max最高分,min最低分*/ int main(){float average(float array[],int n); /*函数说明*/float ave,score[10];int i;printf("Please enter 10 scores:");for(i=0;i<10;i++)scanf("%f",&score[i]);ave=average(score,10); /*函数调用*/printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave);return 0;}float average(float array[],int n) /*自定义函数*/{int i;float aver,sum=array[0];max=min=array[0];for(i=1;i<n;i++){if(array[i]>max)max=array[i];else if(array[i]<min)min=array[i];sum+=array[i];}aver=sum/n;return(aver);}4.参考代码如下:#include <stdio.h>int main(){int a[10],b[10],i,n=0,m=0,k=0;printf("Please enter array a:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("Please enter array b:\n");for(i=0;i<10;i++)scanf("%d",&b[i]);for(i=0;i<10;i++){if(large(a[i],b[i])==1)n=n+1;else if(large(a[i],b[i])==0)m=m+1;elsek=k+1;}printf("a[i]>b[i] %d times\na[i]=b[i] %d times\n a[i]<b[i] %d times\n",n,m,k);if(n>k)printf("array a is larger than array b\n");else if (n<k)printf("array a is smaller than array b\n");elseprintf("array a is equal array b\n");return 0;}int large (int x,int y){int flag;if(x>y)flag=1;else if(x<y)flag=-1;elseflag=0;return (flag);}5.参考代码如下:#include <stdio.h>double fun (int m){double y=1.0 ;int i ;for(i=2;i<=m;i++)y-=1.0/(i*i);return(y);}int main(){int m;printf("please input m:");scanf("%d",&m);printf("\nThe result is %lf\n", fun(m));return 0;}第9章指针一、选择题1.B 2.D 3.A 4.B 5.C 6.A 7.C 8.C 9.A 10.A二、填空题1.①int *p; ②int *p[4];③int (*p)[4]; ④int *p();⑤int (*p)(); ⑥int **p;2.4 123.8 104.1355.①num=*b; ②num=*c;三、编程题1.参考代码如下:#include <stdio.h>void swap(int *p1,int *p2){int t;t=*p1;*p1=*p2;*p2=t;}int main(){int *a,*b,*c,x,y,z;a=&x;b=&y;c=&z;printf("输入3个整数:");scanf("%d%d%d",a,b,c);printf("%d,%d,%d\n",*a,*b,*c);if(*a<*b)swap(a,b);if(*a<*c)swap(a,c);if(*b<*c)swap(b,c);printf("x=%d,y=%d,z=%d\n",x,y,z);return 0;}2.参考代码如下:#include <stdio.h>int main(){char str[50],*p,*s,c;printf("Enter string:");gets(str);p=s=str; /*指针p和s指向str */while (*p)p++; /*找到串结束标记'\0'*/p--; /*指针回退一个字符,指针p指向字符串中的最后一个字符*/ while(s<p) /*当串前面的指针s<(小于)串后面的指针p时,进行循环*/ {c =*s; /*交换两个指针所指向的字符*/*s++=*p; /*串前面的指针s向后(+1)移动*/*p--=c; /*串后面的指针p向前(-1)移动*/}puts(str);return 0;}3.参考代码如下:#include <stdio.h>int main (){char str1[80],str2[80],str[80];char *p,*q,*r,*s;printf("Enter string1:");gets(str1);printf("Enter string2:");gets(str2);for(p=str1,q=str2,r=str;*p!='\0'&&*q!='\0';) /*完成串合并*/if(*p<*q) /*比较str1和str2中的字符*/ *r++=*p++; /*若str1中的字符较小,则将它复制到str中*/ else*r++=*q++; /*若str2中的字符较小,则将它复制到str中*/ s=(*p!='\0')?p:q; /*判断哪个字符串还没有处理完毕*/ while(*s!='\0') /*继续处理(复制)尚未处理完毕的字符串*/*r++=*s++;*r='\0'; /*向str中存入串结束标记*/printf("Result:");puts(str);return 0;}4.参考代码如下:#include <stdio.h>void inverte(int *x, int n){int *p,temp,*i,*j, m=(n-1)/2; /*声明变量*/i=x; /*变量I存放数组首地址*/j=x+n-1; /*变量j存放数组末尾元素地址*/p=x+m; /*变量P存放数组中间元素地址*/for(;i<=p;i++,j--) /*交换数组前半部分和后半部分元素*/ {temp=*i;*i=*j;*j=temp;}}int main(){int i,a[10]={1,2,3,4,5,6,7,8,9,0}; /*定义数组*/printf("输入数组元素:\n");for(i=0;i<10;i++) /*输出数组*/printf("%d,",a[i]);printf("\n");inverte(a,10); /*使数组元素逆序*/printf("逆序输出数组元素:\n");for (i=0;i<10;i++) /*输出逆序后数组*/printf("%d,",a[i]);printf("\n");return 0;}5.参考代码如下:#include<stdio.h>int main(){int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; /*定义数组*/int *p,(*pt)[4],i,j; /*声明指针、指针型数组等变量*/ printf("显示数组:");for(p=a[0];p<a[0]+12;p++){if((p-a[0])%4==0)printf("\n"); /*每行输出4个元素*/printf("%4d",*p); /*输出数组元素*/ }printf("\n");printf("请输入要输出的位置: i= ,j= \n ");pt=a;scanf("i=%d,j=%d",&i,&j); /*输入元素位置*/printf("a[%d,%d]=%d\n",i,j,*(*(pt+i)+j)); /*输出指定位置的数组元素*/return 0;}6.参考代码如下:#include<stdio.h>#include<string.h>void sort(char *strings[],int n) /*对字符串排序*/{char *temp;int i,j;for (i=0;i<n;i++){for (j=i+1;j<n;j++){if (strcmp(strings[i],strings[j])>0) /*比较字符大小,交换位置*/{temp=strings[i];strings[i]=strings[j];strings[j]=temp;}}}}int main(){int n = 5;int i;char *strings[]={"C language","Basic","World wide","Hello world","One world,one dream!"}; /*构造字符串数组*/sort(strings, n); /*排序*/ for (i=0; i<n;i++)printf("%s\n",strings[i]);return 0;}第10章预处理命令一、选择题1.B 2.B 3.D 4.A 5.C二、填空题1.宏定义、文件包含、条件编译2.不带参数宏带参数宏3.① CIRCLE(R,L,S,V) ② S=PI*R*R;第11章用户自定义数据类型一、选择题1.B 2.A 3.C 4.D 5.A 6.D 7.C 8.D 9.B 10.C二、填空题1.struct DATE d={2018,3,25}; 2.struct student *3.struct node *三、编程题1.参考代码如下:#include<stdio.h>#include<string.h>typedef struct MyComplex{double real;double img;}mc;mc Plus(mc a,mc b){mc result;result.real = a.real + b.real;result.img = a.img + b.img;return result;}mc Sub(mc a,mc b){mc result;result.real = a.real - b.real;result.img = a.img - b.img;return result;}void Show(mc a){if(a.real == 0 && a.img == 0)printf("0.000\n");else if(a.real == 0)printf("%.4fi\n",a.img);else if(a.img == 0)printf("%.4f\n",a.real);else{if(a.img < 0)printf("%.4f%.4fi\n",a.real,a.img);elseprintf("%.4f+%.4fi\n",a.real,a.img);}}int main(){mc a,b;printf("输入第一个复数a:\n");scanf("%lf%lf",&a.real,&a.img);printf("输入第二个复数b:\n");getchar();scanf("%lf%lf",&b.real,&b.img);printf("a b的和: ");Show(Plus(a,b));printf("a b的差: ");Show(Sub(a,b));return 0;}2.参考代码如下:#include <stdio.h>#define N 5typedef struct node{int num;int score1;int score2;}STU;int main(){STU s[N];int sum=0,ave,i;for(i=0;i<N;i++){printf("请输入第%d个学生的信息(学号、数学成绩、英语成绩):\n",i+1);scanf("%d%d%d",&s[i].num,&s[i].score1,&s[i].score2);}printf("所有学生的信息如下:\n");printf(" 学号\t\t数学成绩\t英语成绩\n");for(i=0;i<N;i++)printf("%5d:\t%10d\t%10d\t\n",s[i].num,s[i].score1,s[i].score2);for(i=0;i<N;i++){sum=sum+s[i].score1+s[i].score2;if(s[i].score1==100||s[i].score2==100){printf("学号为%d的学生有满分成绩\n",s[i].num);printf("其信息为:学号:%d,\t数学成绩:%d,\t英语成绩:%d\n",s[i].num,s[i].score1,s[i].score2);}}ave=sum/(N*2);printf("5名学生2门课程的总平均分为:%d\n",ave);return 0;}3.参考代码如下:#include <stdio.h>#include <malloc.h>#define N 5 /*单链表中结点的个数(不包括头结点)*/typedef struct node{int num;int score1;int score2;struct node *next;}STU;STU* creatList(int n) /*尾插法建立单链表,返回值为单链表的头指针*/ {STU *head,*s,*r; /*head为头指针;s指向当前结点;r指向当前结点的前一个结点*/int i=0;if((head=(STU *)malloc(sizeof(STU)))==NULL)/*为头结点分配内存空间,并检测是否分配成功*/ {printf("error!");return(0);}head->next=NULL; /*将头结点的指针域置空*/r=head;for(i=0;i<n;i++){if((s=(STU *)malloc(sizeof(STU)))==NULL)/*s结点总指向当前处理结点*/{printf("error!");return(0);}printf("请输入第%d个学生的信息(学号、数学成绩、英语成绩):\n",i+1);scanf("%d%d%d",&s->num,&s->score1,&s->score2);/*从键盘读入数据,存入当前结点的数据域*/ r->next=s; /*将r的指针域指向s,形成单链表*/r=s;}r->next=NULL;return head;}void printList(STU *L) /*输出链表元素*/{STU *p;p=L->next;printf("所有同学的信息如下:\n");printf(" 学号\t\t数学成绩\t英语成绩\n");while(p!=NULL){printf("%5d:\t%10d\t%10d\t\n",p->num,p->score1,p->score2);p=p->next;}printf("\n");}int main(){int n=N,x,sum=0,ave;STU *s,*t;s=creatList(n);printList(s);t=s->next;while(t!=NULL){sum=sum+t->score1+t->score2;if(t->score1==100||t->score2==100){printf("学号为%d的学生有满分成绩\n",t->num);printf("其信息为:学号:%d,\t数学成绩:%d,\t英语成绩:%d\n",t->num,t->score1,t->score2);}t=t->next;}ave=sum/(n*2);printf("5名学生2门课程的总平均分为:%d\n",ave);return 0;}4.参考代码如下:#include<stdio.h>struct stu{int num;int mid;int end;int ave;} s[3];int main(){int i;struct stu *p;for(p=s;p<s+3;p++){scanf("%d %d %d",&(p->num),&(p->mid),&(p->end));p->ave=(p->mid+p->end)/2;}for(p=s;p<s+3;p++)printf("%d %d %d %d\n",p->num,p->mid,p->end,p->ave);return 0;}5.参考代码如下:#include <stdio.h>#include <stdlib.h> /*包含动态内存分配函数的头文件*/#define N 5 /*单链表中结点的个数(不包括头结点)*/typedef struct node{int data;struct node *next;}STU;struct node *creatList(int n) /*尾插法建立单链表,返回值为单链表的头指针*/ {struct node *head,*s,*r; /*head为头指针,s指向当前结点,r指向当前结点的前一个结点*/int i=0;if((head=(struct node *)malloc(sizeof(struct node)))==NULL)/*为头结点分配内存空间,并检测是否分配成功*/ {printf("error!");return 0;}head->next=NULL; /*将头结点的指针域置空*/r=head; /*r指向头结点*/for(i=0;i<n;i++){if((s=(struct node *)malloc(sizeof(struct node)))==NULL)/*s结点总指向当前处理结点*/{printf("error!");return 0;}scanf("%d",&s->data); /*从键盘读入数据,存入当前结点的数据域*/r->next=s; /*将r的指针域指向s,形成单链表*/r=s; /*r指向s结点*/}r->next=NULL; /*r为尾结点其next指向NULL*/return head; /*返回单链表的头指针*/}void printList(struct node *L) /*输出链表元素*/{struct node *p;p=L->next; /*p指向第一个结点的next*/while(p!=NULL) /*当p不为NULL时循环*/{printf("%5d",p->data); /*输出p所指的结点的数值*/p=p->next; /*使p后移一个结点*/}printf("\n");}void insert(STU *L,int x) /*将元素x插入链表L的尾部*/{STU *s,*p,*q; /*指针s指向要插入的新结点*/if((s=(STU *) malloc(sizeof(STU)))==NULL)printf("error!");s->data=x; /*将元素x赋给新结点s的数据域*/p=L->next; /*p指针首先指向第一个元素*/while(p!=NULL){q=p;p=p->next;} /*p指针顺着单链表的头指针往后找,直到单链表的末尾,q指针指向单链表的最后一个结点*/s->next=q->next; /*把新结点的指针域指向原来p结点的后继结点*/q->next=s; /*p结点的指针域指向新结点,完成在链表末尾插入结点的工作*/ }int main(){int n=N,x;STU *s; /*s为链表头指针*/printf("请输入%d个整型数,建立单链表:\n",n);s=creatList(n);printf("建立的包含%d个元素的单链表如下:\n",n);printList(s);printf("请输入要插入的元素:\n");scanf("%d",&x);insert(s,x);printf("插入一个元素后的单链表如下:\n");printList(s);return 0;}第12章文件一、选择题1.B 2.C 3.B 4.D 5.B 6.D 7.C 8.C二、填空题1.rewind2.①fgetc(fp)!=EOF ②fclose(fp);三、编程题1.参考代码如下:#include<stdio.h>#include<stdlib.h>int main(){FILE *fp;char c,str1[100],str2[100];int i=0;if((fp=fopen("myfile","r+"))==NULL){printf("Cannot open file!");exit(0);}while(!feof(fp)){c=fgetc(fp);if(c>='A'&&c<'Z')c+=32;str1[i++]=c;}str1[i++]='\0';rewind(fp);fputs(str1,fp);rewind(fp);fgets(str2,i-1,fp);puts(str2);fclose(fp);return 0;}2.参考代码如下:#include<stdio.h>#include <stdlib.h>#define BUFFSIZE 5000void main(){FILE *sfp,*dfp;int i;char buf[BUFFSIZE];if((sfp=fopen("sfile.txt","r"))==NULL) /*以只读方式打开*/{printf("Source file cannot be opened\n");exit(0);}if(!(dfp=fopen("dfile.txt","w"))) /*以只写方式打开*/{printf("Destination file cannot be opened\n");exit(0);}i=0;while(!feof(sfp)) /*判断是否文件尾,不是则循环*/ {buf[i++]=fgetc(sfp); /*读出数据送缓冲区*/if(i>=5000) /*若i超出5000,程序设置的缓冲区不足*/{printf("buffer not enough!");exit(0);}}while(--i>=0) /*控制反序操作*/fputc(buf[i],dfp); /*写入目的文件中*/ fclose(sfp);fclose(dfp);}。
c语言期末考试题库完整
习题一一、选择题1.C语言是一种(C )。
A. 低级语言B. 汇编语言C. 高级语言D. 机器语言2.以下不是C语言的特点的是( D )。
A. 语言简洁紧凑B. 可以直接对硬件进行操作C. 数据类型丰富D. 是面向对象的程序设计语言3.一个C程序的执行是从( A )。
A. 本程序的main函数开始,到main函数结束B. 本函数的第一个数开始,到本程序文件的最后一个函数结束C. 本程序的main函数开始,到本程序文件的最后一个函数结束D. 本函数的第一个数开始,到本程序main函数结束4.以下叙述正确的是(C )。
A. 在C程序中,main函数必须位于程序的最前面B. C程序的每行只能写一条语句C. C语言的本身没有输入输出语句D. 在对一个C程序进行编译的过程中,可以发现注释中的拼写错误5.以下叙述不正确的是(D )。
A. 一个C源程序可由一个或多个函数组成B. 一个C源程序必须包括一个main函数C. C程序的基本组成单位是函数D. 在C程序中,注释说明只能位于一条语句的后面6.C语言规定:在一个源程序中,main函数的位置( C )。
A. 必须在最开始B. 必须在系统调用的库函数的后面C. 可以任意D. 必须在最后7.一个C语言程序是由( B )。
A. 一个主程序和若干子程序组成B. 函数组成C. 若干过程组成D. 若干子程序组成8.以下叙述中正确的是( C )。
A. C程序的基本组成单位是语句B. C程序中的每一行只能写一条语句C. C语句必须以分号结束D. C语言必须在一行写完9.以下叙述中正确的是( C )。
A. C程序中的注释只能出现在程序的开始位置和语句的后面B. C程序书写格式严格,要求一行只能写一个语句C. C程序书写格式自由,一个语句可以写在多行上D. 用C语言编写的程序只能放在一个程序文件中10.以下叙述中正确的是( C )。
A. C语言程序将从源程序中第一个函数开始执行B. 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C. C语言规定必须用main作为主函数名,程序从此开始执行,在此结束D. main可作为用户标识符,用以命名任意一个函数作为主函数11.下列叙述中正确的是( A )。
C语言程序设计学习指导与实践教程习题和实验解答(第2章)2
C语言程序设计学习指导与实践教程——第2章习题和实验解答2.1 C语言概述1.【习题解答】1结构化程序有三大基本结构:顺序、分支和循环.2..算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
有穷性:一个算法应包含有限的操作步骤而不能是无限的。
确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的,有零个或多个输入输出,有一个或多个输出。
有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。
对于程序设计人员,必须会设计算法,并根据算法写出程序。
可以用自然语言、流程图、伪代码和计算机语言表示算法。
3.C语言的主要特点有:语言简洁、紧凑,使用方便、灵活。
ANSI C一共只有32个关键字;控制语句丰富,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分;运算符丰富,共有34种;数据结构类型丰富;具有结构化的控制语句;语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。
因此有人把它称为中级语言;生成目标代码质量高,程序执行效率高;与汇编语言相比,用C语言写的程序可移植性好。
4.用传统流程图表达如下:5. 计算机硬件系统的组成:计算机硬件系统主要由运算器、控制器、存储器、输入设备和输出设备构成,运算器和控制器合称为中央处理器(CPU),输入设备和输出设备统称为外部设备。
6.计算机网络常用的传输介质:分为有线介质和无线介质;有线介质包括光纤、同轴电缆和双绞线;无线介质包括红外信号、微波等。
2.2 数据类型与表达式1.【习题解答】一、选择题1.D2.B3.A4.B5.A6.B7.D8.D9.C二、填空题1.整型、实型、字符型、枚举类型2.3.5000003.逗号运算符4.三,自右向左5.1,06.32767三、编程题1.已知球的半径为1.5cm,计算球的体积。
C语言程序设计复习思考题.doc
《C语言程序设计》复习思考题第一漳复习思考题请说明C语言的主要特点。
何谓标识符?标识符有何限制?C语言可以使用哪些数据类型? *C语言屮有哪些算述运算符?C语句有何特点?注释语句的格式和作用是什么?第二章复习思考题2.1.什么叫逻辑表达式?C语言屮有哪些逻辑关系运算符?2.2. for, while和do语句有何异同?2.3. if语句有哪些不同的格式?如何使用?9.1. 4.试说明break语句和continue语句功能和用法。
9.5.如何正确使用switch语句?第三章复习思考题9.请说明C语言程序结构的一般形式?10.2.函数在C语言程序屮的地位和作用是什么?如何定义和说明函数?何谓函数原型法?9.2.3.何谓局部变量?何谓静态变量?何谓全程变量?如何使用?在程序屮,它们应出现在什么位置?可否重名?3.4.函数返冋值的类型如何说明?何谓空类型void?试说明return语句的功能和用法。
3.5.何谓形参?何谓实参?如何正确调用函数?何谓递归调用?第四章复习思考题10.何谓数组?它有何特点?如何定义说明和使用?数组的下标范FEI是什么?4.2.如何对全局数组和静态数组进行初始化?何谓变长数组?4.3.報个数组可否作为函数的参数?数组名传递的是何信息?9.3.4.何谓字符串?何谓字符串常量?如何输入输出字符串?11.5.如何使用标准库屮的字符屮函数和字符函数?字符类型变量如何取值?第五章复习思考题何谓结构?它有何特点?如何定义说明?如何访问结构成员变量?12.2.報个结构可否作为函数的参数或返冋值?结构变最名传递的是何信息?9.4. 3.如何对全局数组和静态结构变量或结构数组进行初始化?5.4.结构可否嵌套?如何定义说明?一个结构为什么不可嵌套白己?5.5.何谓联合?它有何特点?如何定义说明?如何访问联合成员变量?第六章复习思考题6.1.在计算机屮,数据(变量或常量)如何存放?何谓地址空间?每个变量的地址值指是什么*?何谓间接寻址方式存取数据?6.2.何谓指针?它有何特点?如何定义说明?指针的作用是什么?9.5.3.指针变量取什么数值?指针变量运算符&和*的含义是什么?指针变量为何要初始化?如何初始化?指针有哪些算术运算符和关系运算符?按什么规则进行?13.4.用指针作为参数有何好处?何谓"传址"(或〃传名〃)的调用?函数如何冋送信息?不同的冋送信息途径有什么区别?6. 5.用指针和用数组访问内存的方式有何共同处?乂有何重要的差别?何谓字符串指针或字符指针?它与字符数组有什么异同之处?6. 6.何谓指针型函数?函数返冋指针类型变量如何定义和使川?malloc ()凶数功能是什么?如何引用它?6. 7.何谓结构指针?如何定义说明和引用?用结构指针作为参数有何好处?6.&如何构成链表?链表有何用处?如何构成二叉树?如何实现遍历二叉树? *11.1.9.何谓针型数纽?何谓多级针型?何谓两数指针?它们如何定义说明?如何使用它们?第七章复习思考题何谓枚举?如何定义说明?枚举变最収何值?用枚举变量有何好处?11.2.2.何谓位域?如何定义说明?有哪些位操作运算符?如何使用?14.3.什么是寄存器变量?它的使用有何限制?9.6.4.何谓类型定义?其优点是什么?7.5.数据类型自动转换原则是什么?为什么要进行强制的数据类型转换?如何实现?第八章复习思考题& 1.什么是予处理程序?有哪儿种予处理语句?& 2.何谓宏定义和宏替换?何谓宏定义类函数?它与真正的函数有何区别?8.3.何谓文件包含?应用文件包含的目的是什么?& 4.何谓条件编译?如何使用?第九章复习思考题C语言程序的所有输入和输出操作为什么必须通过两数调川來实现?9.2.何谓文件指针?如何取得?3.3.有哪些常川的输入和输出库函数?如何使川?4.4.什么是命令行参数?如何实现?第十章复习思考题5. 1.为何耍用单独编译?何谓外部变量和外部两数?何谓静态的全局变量?何谓静态函数?6. 2.何谓系统调用?如何使用函数system ()来实现?10.3.为什么要用自顶向下的方法来开发C语言程序?如何进行?如何使用make文件?10.4.如何考虑捉高程序的效率?冋顾在编程和调试屮曾出现过的错课并总结经验教训。
c语言期末考试题库解析
习题一一、选择题1.C语言是一种(C )。
A. 低级语言B. 汇编语言C. 高级语言D. 机器语言2.以下不是C语言的特点的是( D )。
A. 语言简洁紧凑B. 可以直接对硬件进行操作C. 数据类型丰富D. 是面向对象的程序设计语言3.一个C程序的执行是从( A )。
A. 本程序的main函数开始,到main函数结束B. 本函数的第一个数开始,到本程序文件的最后一个函数结束C. 本程序的main函数开始,到本程序文件的最后一个函数结束D. 本函数的第一个数开始,到本程序main函数结束4.以下叙述正确的是(C )。
A. 在C程序中,main函数必须位于程序的最前面B. C程序的每行只能写一条语句C. C语言的本身没有输入输出语句D. 在对一个C程序进行编译的过程中,可以发现注释中的拼写错误5.以下叙述不正确的是(D )。
A. 一个C源程序可由一个或多个函数组成B. 一个C源程序必须包括一个main函数C. C程序的基本组成单位是函数D. 在C程序中,注释说明只能位于一条语句的后面6.C语言规定:在一个源程序中,main函数的位置( C )。
A. 必须在最开始B. 必须在系统调用的库函数的后面C. 可以任意D. 必须在最后7.一个C语言程序是由( B )。
A. 一个主程序和若干子程序组成B. 函数组成C. 若干过程组成D. 若干子程序组成8.以下叙述中正确的是( C )。
A. C程序的基本组成单位是语句B. C程序中的每一行只能写一条语句C. C语句必须以分号结束D. C语言必须在一行内写完9.以下叙述中正确的是( C )。
A. C程序中的注释只能出现在程序的开始位置和语句的后面B. C程序书写格式严格,要求一行内只能写一个语句C. C程序书写格式自由,一个语句可以写在多行上D. 用C语言编写的程序只能放在一个程序文件中10.以下叙述中正确的是( C )。
A. C语言程序将从源程序中第一个函数开始执行B. 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C. C语言规定必须用main作为主函数名,程序从此开始执行,在此结束D. main可作为用户标识符,用以命名任意一个函数作为主函数11.下列叙述中正确的是( A )。
C语言课后习题答案(最终).docx
1.将下列十进制数分别转化为二进制数、八进制数和十六进制数:(1)128 (2) 511 (3) 1024 (4) 65535 (5) 1048575答:(1)10000000、200、80(2)111111111> 777> IFF(3)10000000000> 2000、400⑷ 1111111111111111> 177777、FFFF(5) llllllllllllllllllllx 3777777、FFFFF2.将下列二进制数转化为十进制数和十六进制数:(1)1100110101B (2) 101101.1011B答:(1)821、335(2)45.6875、2D.B3.写出下列数的原码、反码、补码:15、-20、-27/32 答:(1) 00001111> 00000000、00001111(2)10010100、11101011> 11101100(3)1.1101100> 1.0010011^ 1.00101004.16位无符号定点整数的数值表示范围为多少?8位补码的表示范围是多少?丄6位补码的表示范围是多少?答:0〜65535、-128 —127^ -32768〜327675・1968年Dijkstra提出结构化程序设计的思想的原因是什么?简要回答结构化程序设计的经典定义。
答:结构化程序设计概念的提出主要是源于程序结构的层次性与模块化使得构造出来的软件具有良好的可理解性和可维护性,随着软件规模的扩大与复杂性的提高,程序的可维护性成为程序设计者们关注的重要问题之一。
如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
6. C程序在内存中存储在哪儿?计算机的内存空间是如何分区的?分区存放不同类型的数据的目的是什么?答:C语言程序属于应用程序,程序代码本身存放在应用程序区,程序运行吋处理的数据存放在应用程序数据区。
数据结构与算法(C语言篇)第2章 习题答案[2页]
习题答案1.填空题(1)线性(2)顺序表(3)单链表(4)数据域、指针域(5)头结点(6)一定(7)不一定2.思考题(1)线性表采用顺序存储通常被称为顺序表。
顺序表指的是集合中数据元素之间的逻辑结构为线性结构,并且数据元素按照逻辑顺序依次存放在地址连续的存储单元中。
一般情况下,线性表中的所有数据结点的类型是相同的。
在C语言中,通常使用一维数组和结构体来表示顺序表。
(2)线性表采用链式存储通常被称为单链表。
单链表指的是集合中数据元素之间的逻辑结构为线性结构,但是数据元素所在的存储单元在内存地址上是不连续的。
单链表中的结点都是由两部分组成,一部分为数据域(data);另一部分为指针域(next)。
简单地说,data域用来存放结点的数据,而next域存放的是一个指针,该指针保存的是下一个结点所在的内存地址,或者说该指针指向下一个结点。
(3)在单链表中,如果需要查找某一个结点的后继时,直接通过指针移动到下一个结点即可。
但是要查找某一结点的前驱时,则需要从结点头开始。
为了提高数据操作的效率,引入双向循环链表。
双向循环链表中结点的结构与单链表不同,每一个结点都有一个指向前一个结点的指针和一个指向后一个结点的指针。
4.编程题(1)int seqlist_insert(seqlist_t *l, int value){if(seqlist_full(l)){ //判断是否为满printf("seqlist full\n");return -1;}l->last++; //数组下标加1,表示要插入数据l->data[l->last] = value; //将需要插入的数据赋值到数组中,表示插入数据 return 0;}(2)int linklist_head_insert(linklist_t *h, datatype_t value){linklist_t *temp;//为新插入的数据结点申请空间temp = (linklist_t *)malloc(sizeof(linklist_t));temp->data = value; //为新插入结点的数据域赋值数据temp->next = h->next; //将头结点指针指向的下一个结点的地址赋值给新结点的指针 h->next = temp; //将头结点指针指向新的结点return 0;}(3)void dlinklist_insert(dlinklist_t *dl, datatype_t value){//使用malloc函数为新插入的结点申请空间dlinklist_t *temp = (dlinklist_t *)malloc(sizeof(dlinklist_t));//为新插入的结点赋值temp->data = value;//获取第一个有数据的结点的地址,地址为dl->next//如果此时只有一个头结点,则假设存在有数据的结点dlinklist_t *pnext = dl->next;//将头结点与新插入的结点建立关系dl->next = temp;temp->prior = dl;//将头结点的下一个结点与新插入的结点建立关系temp->next = pnext;pnext->prior = temp;return ;}(4)使用递归的方法,函数调用自己本身,形成一个函数的复用//参数为指向头结点的指针int show_reverse_linklist(linklist_t *h){if(h->next == NULL){printf(“%d ”, h->data);return 0;}show_reverse_linklist(h->next);printf(“%d ”, h->data);return 0;}。
单片机原理及应用(C语言版)(周国运)习题答案
单⽚机原理及应⽤(C语⾔版)(周国运)习题答案单⽚机原理及应⽤(C语⾔版)思考题与习题答案第1章单⽚机概述1.什么是单⽚机?答:将中央处理器(Central Processing Unit,CPU)、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接⼝电路等微型计算机的主要部件集成在⼀块芯⽚上,使其具有计算机的基本功能,就叫做单⽚微型计算机(Single Chip Micro Computer,SCMC),简称单⽚机。
由于单⽚机的指令功能是按照⼯业控制的要求设计,所以单⽚机⼜称为微控制器(Micro Controller Unit,MCU)。
2.单⽚机有哪些特点?答: (1)单⽚机的存储器ROM和RAM是严格区分的。
ROM称为程序存储器,只存放程序、固定常数及数据表格。
RAM则为数据存储器,⽤作⼯作区及存放⽤户数据。
(2)采⽤⾯向控制的指令系统。
(3)单⽚机的I/O引脚通常是多功能的。
(4)单⽚机的外部扩展能⼒强。
(5)单⽚机体积⼩,成本低,运⽤灵活,易于产品化。
(6)⾯向控制,能有针对性地解决从简单到复杂的各类控制任务,因⽽能获得最佳的性能价格⽐。
(7)抗⼲扰能⼒强,适⽤温度范围宽。
(8)可以⽅便地实现多机和分布式控制,使整个控制系统的效率和可靠性⼤为提⾼。
3.单⽚机的应⽤有哪些?答: (1)⼯业控制。
单⽚机可以构成各种⼯业控制系统、数据采集系统等。
如数控机床、⾃动⽣产线控制、电机控制、测控系统等。
(2)仪器仪表。
如智能仪表、医疗器械、数字⽰波器等。
(3)计算机外部设备与智能接⼝。
如图形终端机、传真机、复印机、打印机、绘图仪、磁盘/磁带机、智能终端机等。
(4)商⽤产品。
如⾃动售货机、电⼦收款机、电⼦秤等。
(5)家⽤电器。
如微波炉、电视机、空调、洗⾐机、录像机、⾳响设备等。
(6)消费类电⼦产品。
(7)通讯设备和⽹络设备。
(8)⼉童智能玩具。
(9)汽车、建筑机械、飞机等⼤型机械设备。
(10)智能楼宇设备。
C语言课后习题解析及答案
第二章数据类型课后习题1.下列哪些是合法的变量名?如果合法,你认为它是一个好的助记符(能提醒你它的用途)吗?(a) stock_code 合法、好的助记符(b) money$ 非法,$为非法字符(c) Jan_Sales 合法、好的助记符(d) X-RAY 非法,–为非法字符(e) int 非法,int为关键字(f) xyz 合法、不是好的助记符(g) 1a 非法,变量名必须以字母或下划线打头(h) invoice_total合法、好的助记符(i) john's_exam_mark非法,’为非法字符(j) default 非法,default为关键字2.请确定下列常量的数据类型:(a) 'x' char(b) -39 int(c) 39.99 double(d) -39.0 double3.下列哪些是合法的变量定义?(a) integer account_code ; 非法,无integer类型(b) float balance ; 合法(c) decimal total ; 非法,无decimal类型(d) int age ; 合法(e) double int ; 非法,int为关键字,不能作为变量名(f) char c ; 合法4.写出下列各小题中的变量定义:(a) 整型变量number_of_transactions和age_in_yearsint number_of_transactions, age_in_years;(b) 单精度浮点型变量total_pay,tax_payment,distance和averagefloat total_pay, tax_payment, distance, average;(c) 字符型变量account_typechar account_type;(d) 双精度浮点型变量gross_paydouble gross_pay;5. 为下列各小题写出最合适的变量定义:(a) 班级中的学生人数int number_of_students;(b) 平均价格float average_price;(c) 自1900年1月1日以来的天数int days_since_1900;(d) 利率百分比float interest_rate;(e) 本页中最常出现的字符char most_common_char;(f) 中国的人口总数(在2010年11月大约为1,339,724,852)int population_of_china;6. 假定有如下定义:int i ;char c ;下面哪些是合法的C语句?c = 'A' ; 合法i = "1" ; 非法,字符串不能赋值给整型i = 1 ; 合法c = "A" ; 非法,”A”为字符串,存储为’A’和’\0’两个字符c = '1'; 合法7. 写一个C程序,给第4题中的变量各赋一个值,然后以每行一个变量的形式显示这些变量的值。
C语言程序设计作业与思考题答案
《C语言程序设计》作业与思考题解答作业一1.合法的标识符: a12 A21 sum2 _fun C_program不合法的标识符: f(x) $a21 21a while2.main( ){ int i, j, s;i=2; j=3;s=i*j;printf(” %d×%d=%d”,i,j,s)}作业二1.指出下列哪些为C语言正确的整型(int)常量、实型(float)常量、字符型(char)常量?正确的整型( int) 常量:0 -325 128 03456正确的实型( float) 常量: 0.0 2. 1.2e-3 5e2正确的字符型( char) 常量: ‘b’‘\108’ ‘\n’ ‘8’2.表示式的结果 (1) 1(2) 0(3) 0(4) 9.5(5) ‘A’(6) 2(7) 4.53. Y=sin(2*x)+(a+b)/(a*b)/(1+a/b)+a*a/24.设m为整数, 用逻辑表示式表示: 能同时被3与7整除或者被5除余2且小于100的整数。
m%3= =0 && m%7= =0 || m%5= =2 && m<100作业三1.华氏温度经过公式C=5/9(f-32)转换成摄氏温度。
试编程并上机调试运行: 从键盘上输入华氏温度, 利用公式计算后输出摄氏温度( 要求: 保留一位小数; 记录调试过程中遇到的问题及解决方法) 。
#include <stdio.h>main( ){ float f,c;scanf(”%f”,&f);c=5.0/9*(f-32);printf(”c=%.1f”,c);}2.用IF语句:#include <stdio.h>#include <math.h>main( ){ float x,y;scanf(”%f”,&x);if (x<0) y=fabs(x);else if (x<10) y=x;else if (x<20) y=3-x/5;else if (x<40) y=3*x-10; else y=0;p rintf(”y=%f’,y);}用switch 语句:#include <stdio.h>#include <math.h>main( ){ float x,y;scanf(”%f”,&x);if (x<0) y=fabs(x);else switch ( int(x/10) ){ case 0: y=x; break;case 1: y=3-x/5;break;case 2,3: y=3*x-10; break;defaut y=0;}printf(”y=%f’,y);}3. 编程序: 输入x 值, 按下列公式计算cos(x):精确到10-5。
C语言程序设计教程(第二版)
``1-1 填空题1. 函数2. 主函数main(),主函数main()3. 主函数main()4. 函数首部,函数体5. {, }6. 顺序结构,选择结构,循环结构7. .c, .obj, .exe2-1 单选题1~5 DBDCA 6~10 DCABA 11~12 CA 2-2 思考题1.2.0000002.1,0.53.9,24.65.100,d6.(1)20 (2)0 (3)607. (1)10,6,4 (2)6,9,15 (3)3,60,838. 553-1 选择题1-5 BDABC 6-10 ADCAC 11-12 BB3-2 填空题1. 32. 02613. 0x104. 2, 1 互换a,b的值5. 6.66. –0038. 77. 5.0,4,c=3<Enter>8. i=10,j=20<Enter>9. (1) 65(2) 65,A(3) 56.123400,123.456001(4) 3.141600``(5) 8765.432(6) 5.864000e+002(7) 3.141600e+000(8) 3.1416(9) 8765(10) 3.1416,8765.4310. a=2 b=5x=8.8 y=76.34c1=65 c2=974-1单选题1~5 AADAD 6~10 ACB BB 11~12BA4-2填空题1. 12. (1) a>0 || b>0 (2) x>0 && x<=10(3) a==1.5 && b==1.5 && c==1.5 (4)p<a || p<b || p<c3.(1)0 (2)1 (3)1(4)0 (5)14. (max=a>b?a:b)>c?max:c5.-46.17.5,0,38. (1) (a==0) (2) (b==0)(3) (disc<0)5-1单选题1~5 CDABA 6~10 ABDDB11~14 DBCB5-2填空题1.202.3333.(1) i<10 (2) j%3!=04. (1) flag*(float)k/(k+1) (2) flag=-flag5.(1) max=x (2) x!=-1 (3) scanf("%d", &x)6-1单选题1-5 CBBAD 6-10 DBCCD 11-15 DCABC6-2填空题1. 1202. x``3 . 3,2,2,3 4. fac/i 5. 8,176. 97. 1.0/(i*i)8. fun-in:30,20,10fun-end:1015,35,1050 10,20,309. 012345 10. 936367-1单选题1-5 DBCCB 6-8 BDC7-2填空题1. c2. 603. 1000 104. 16 习题88-1单选题1~15 CADAC6~10 CCDAB11~15 CBBCD8-2填空题1 (1)2345 (2) 10010 (3) QuickC (4)2. (1) j+=2 (2) a[i]>a[j]3. (1) r+b[k] (2) *x9-1单选题1~5 DDACB6~10 ACBAD11~15CDB CC9-2填空题1 . (1) 2,1 (2) 10#30#(3) FOUR ,O(4) 602. (1) 49 (2) 2(3)2(4) 7 5 3 1 9 (5)15(6)10000010000010000010000011,1,1, 1,1 3,3,3, 3,3``(7)3. (1) *x (2) t4. (1) '\0'或0 (2) n++或n+=1或n=n+15. 02410-1单选题1-5 CDBBB6-10 BBBAD11-15 CCBDA10-2填空题1. 所有结构体成员所占存储空间的总和2. 与占用存储空间最大的那个成员相等3. (1) 结构体 (2) 3 (3) sa.a (4) 9 (5) psa=&sa4. 805. struct node6. 011-1单选题1-4 BADD11-2填空题1. 3d3d3302. (1) 28 (2) 20 (3) 0 (4) -93. (1) 251 (2) 42 (3) 209 (4) –295 (5) 84812-1单选题1-5 BCDCA 6-8 ADA 12-2 填空题1. rewind(文件指针)2. "d1.dat","rb"3. stdin4. 文本文件 二进制文件5. (1)"w" (2) str[i]-32 (3) "r"6. fopen7. Hell8. (1) "r" (2) fgetc(fp) (3) time++1 00 0 10 1 0 1 00 0 1 0 00 1 0 1 011``模拟试卷(一)参考答案一.选择题(1~30每题1分,31~50每题2分,共70分)12345678910C BD C D D B A C A 11121314151617181920B B DC A B C C A C 21222324252627282930A B B B B C D D A C 31323334353637383940C D D C B B B A B A 41424344454647484950C CD C C B C C D C 二.填空题(每空2分,共30分)空序号答案空序号答案【1】main()【9】10 20 0【2】11 6 4【10】 1 B【3】5【11】 4 3 3 4【4】 1 1 0 1【12】0 10 1 11 2 12【5】i<=9 或i<10【13】yes【6】k%3【14】-f【7】0【15】 1 3 7 15【8】b模拟试卷(二)参考答案一.选择题(共35道小题,70分,每题2分)12345678910A A A CB D A BC D11121314151617181920C D A A B B B D A C21222324252627282930A A DB D A A B D A3132333435D A B B C``二.填空题(每空2分,共30分)题空号答案题空号答案【1】double【2】x==0【3】0【4】–f 或f*-1 或–1*f 或f*(-1) 或(-1)*f 【5】fun(10)【6】x【7】a=1.0;b=1.0;s=1.0;【8】-1 或(-1)【9】*sn 或sn[0]【10】&a[i]【11】a[i] 或*(a+i)【12】row【13】a[row][colum]【14】!(s[i]>='0' && s[i]<='9') 或s[i]<'0' || s[i] > '9'【15】'\0' 或0。
c语言第四版课后习题答案
c语言第四版课后习题答案C语言第四版课后习题答案在学习C语言第四版课程后,许多学生都会遇到各种各样的问题和疑惑。
为了帮助大家更好地掌握C语言的知识,我们整理了一些课后习题的答案,希望能够对大家有所帮助。
1. 什么是C语言?C语言是一种通用的高级程序设计语言,它广泛应用于系统软件、应用软件、驱动程序、网络通信等领域。
C语言具有高效、灵活、可移植等特点,是程序员必备的基本技能之一。
2. C语言的基本语法有哪些?C语言的基本语法包括数据类型、变量、运算符、控制语句、函数等。
学习C 语言首先要掌握这些基本语法,才能够编写出正确的程序。
3. 如何定义一个变量?在C语言中,可以使用关键字“int”、“float”、“char”等来定义不同类型的变量。
例如:int a; // 定义一个整型变量afloat b; // 定义一个浮点型变量bchar c; // 定义一个字符型变量c4. 如何进行条件判断?在C语言中,可以使用“if”、“else”、“switch”等关键字来进行条件判断。
例如:if (a > b) {printf("a大于b");} else {printf("a小于等于b");}5. 如何定义一个函数?在C语言中,可以使用关键字“void”、“int”、“float”等来定义不同类型的函数。
例如:int max(int a, int b) {if (a > b) {return a;} else {return b;}}通过学习C语言第四版课程,我们可以更好地理解和掌握C语言的知识,提高自己的编程能力。
希望大家能够通过不断练习和实践,掌握C语言的基本原理和技巧,成为一名优秀的程序员。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、机器语言:机器语言及其指令是计算机能够直接识别的执行的一组二进制代码。
一条机器指令通常由操作码和操作数两部分构成。
2、汇编指令:是机器语言的符号化表示MOV3、汇编语言:由汇编指令、汇编伪指令及汇编语言的语法规则组成。
4、汇编语言源程序:用汇编语言编写的程序5、汇编程序:把汇编语言源程序翻译成目标程序的加工程序MASM6、二、十、十六进制转换(掌握<256)练习1:117=(1110101)B练习2:1000 1011 B=(139)D练习3:1011 1000 0000 0101 B=(B805)H7、机器数:是指计算机中的数据,可以分为无符号数和有符号数字长为N位时无符号数表示范围0≤N≤2N-1 当N=8时0≤N≤2558、原码(8位):最高位为符号位(正数用0表示,负数用1表示),其他位为数值位如X=+45=+0010 1101B [X]原=0010 1101B 如X=-45=-0010 1101B [X]原=1010 1101B9、补码(8位):正数的补码与原码相同,负数的补码是将符号位取1,数值位逐位取反,未位加1。
如X=+45=+0010 1101B [X]补=0010 1101B 如X=-45=-0010 1101B [X]补=1101 0011B10、补码运算:是指对一个补码表示的数按位求反后再在末尾加1,可以得到与此数相应的符号相反的数的补码。
例、已知[117]补=0111 0101B,[-117]补=1000 1011B,对[117]补作补码运算。
解:因为[117]补=0111 0101B,按位求反后得1000 1010B,末尾加1得1000 1011B=[-117]补。
[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补+[-Y]补12、BCD码:BCD码用4位二进制数表示1位十进制数。
常用8421BCD码例:写出十进制314所对应的BCD码13、8086/8088CPU:16位微处理器和16位数据总线,20位地址总线(寻址空间为1MB)。
8088微处理器内部16位数据,外部8位数据,也称准16位机。
8086/8088CPU的组成(功能方面):运算器、控制器、寄存器组14、寄存器是CPU内部临时存放数据的部件,速度比内存快。
(1)数据寄存器4个16位寄存器AX,BX,CX,DX,每个寄存器还可以拆成2个8位寄存器使用。
AX累加器:算术运算寄存器,用于存放操作数或运算结果。
I/O指令中通过AX与外部交换数据。
在乘除运算中指定存放被乘数与被除数,系统功能调用号。
AX累加器可以分为AH、AL分别使用。
BX基址寄存器:可作为通用寄存器使用。
在计算内存地址是,常作基址寄存器,作为通用寄存器还可以分为BH、BL分别使用。
CX数据寄存器:可作为通用寄存器使用。
在循环和串操作指令中作隐含计数器。
作为通用寄存器还可以分为CH、CL分别使用。
DX数据寄存器:可作为通用寄存器使用。
在I/O操作中,DX用来存放I/O端品地址。
在乘除法运算中与AX组合一起存放双字型数据。
作为通用寄存器还可以分为DH、DL 分别使用。
(2)变址寄存器(2 个16位):SI 源变址寄存器.DI 目的变址寄存器BP基址寄存器:用于存放栈中的操作数的偏移地址。
SP堆栈指针寄存器:用来指示栈顶的当前位置(偏移地址)。
IP 指令指针寄存器(程序计数器):用于存放下一条指令所在偏移地址。
与CS配合,用来确定程序中下一条指令的物理地址。
15、PSW程序状态字寄存器(标志寄存器):8088微处理器使用16位中的9位设置了9个标志。
标志位SF、OF、CF、ZF的含义0010 1001B+1110 1000B=1 0001 0001B CF=1 OF=0 SF=0 ZF=016、段地址寄存器:段表示一块内存空间(大小可变),最大为64K字节,最小为16字节。
CS代码段寄存器,存放代码段的段地址。
IP与其配合使用。
DS数据段寄存器,存放数据段的段地址。
BX,SI、DI默认与其配合使用。
DS附加段寄存器。
SS堆栈段寄存器,存堆栈段的段地址。
SP、BP与其配合使用。
17、数据在内存储器的存放方式:存储字数据小端方式原则:(1)1个字占据2个相邻的存储单元;(2)低位字节存入低位地址,高位字节存入高位地址,(高高低低);(3)字的地址由其低地址来表示。
18、物理地址:8088有20根地址线,所以有220=1MB地址,地址编号从00000H,00001H,……,FFFFEH,FFFFFH。
19、逻辑地址:段的起始值必须是16的整倍数。
1M地址最多可以有65536个段,最少为16个段。
段的数值可以用段寄存器CS、DS、ES、SS来存放。
20、逻辑地址与物理地址的转换:物理地址=段地址×16+偏移地址(二进制)例:逻辑地址为1234H:5678H ,求物理地址。
解:物理地址=12340H+5678H =12340H+5678H=179B8H例:1个有6字节的数据区,它的起始地址为70A0:DDF6H,写出这个数据区的首物理地址和末字节的逻辑地址。
解:数据区的首物理地址为70A0:DDF6H=70A00+DDF6H=7E7F6H 数据区的末逻辑地址为70A0:DDFCH21、立即寻址(立即数寻址):立即寻址指的是操作数直接包含在指令中,数可以是8位或16位,也可是各种数制,还可以带单引号的字符。
mov ax,1234h22、寄存器寻址:寄存器寻址指的是操作数放在CPU内部的寄存器中,其寄存器名称在指令中给出。
8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL 。
16位操作数,寄存器可以是AX、BX、CX、DX 。
MOV BX, AX 。
MOV AH, BL 23、直接寻址:操作数存放在存储器中,操作数的偏移地址(有效地址EA)在指令中直接给出。
默认段寄存器DS,mov ax,[1234h]24、寄存器间接寻址:寄存器间接寻址的操作数在存储器中,指令使用的基址寄存器BX、BP或变址寄存器SI、DI存放操作数的有效地址。
mov ax,[bx]25、寄存器相对寻址:寄存器相对寻址方式的操作数在存储器中,操作数的有效地址由指令中给出的1个基址或变址寄存器的内容加上1个8位或16位位移量。
mov ax,[bx+12]26、基址变址寻址:基址BX,BP 变址SI,DI 。
形式有:[BX+SI],[BX+DI],[BP+SI],[BP+DI] 。
[BX][SI],[BX][DI],[BP][SI],[BP][DI] 。
mov ax,[bx+si]27、基址变址相对寻址:基址BX+变址SI+8或16位偏移地址。
或基址BP+变址SI+8或16位偏移地址。
mov ax,[bx+si+12]28、下例指令的功能和助记词:指令:JMP、MOV、PUSH、POP、RET、LEA、ADD、ADC、INC、SUB、SBB、DEC、MUL、DIV、JE(JZ)、JNE(JNZ)、JA、JAE、JB、JBE、LOOP 伪指令:DB、DW、DUP、SEGMENT、ASSUME、ENDS、PROG、ENDP、END 汇编和连接:MASM、LINK 例定义一个字的伪指令是(dw )29、子程序:是一段代码,并且这段一段代码可供多个程序调用。
特点是:1、每个子程序都对应有惟一的入口(即子程序名称),子程序以RET指令作为结束,以便正确返回主程序。
2、子程序应具有通用性。
子程序的操作对象通常采用寄存器或寄存器间接寻址等寻址方式,而不用立即寻址。
3、子程序具有可浮动性。
子程序中的转移指令应使用相对转移指令,而不能用绝对转移指令。
4、进入子程序需要对现场进行保护,而在返回时应恢复现场子程序的代码部分结构:(1)保护现场(即将可能用到的寄存器进栈);(2)根据入口参数,取得要处理的数据;(3)进行算法处理(即对数据的加工处理);(4)根据出口参数,将处理后的数据送至指定区域;(5)恢复现场;(6)用RET指令返回主程序。
30、DOS系统功能调用(1)01H功能入口参数:无调用方式:mov ah,1int 21h出口参数:al中为输入字符的ASCII值功能:从标准输入设备(键盘)读入一个字符,将该字符回显到标准输出设备上,并将读入字符的ASCII码送到AL寄存器中。
(2)02功能入口参数:DL寄存器的内容,为要显示字符的ASCII码。
调用方式:mov ah,2 int 21h出口参数:无功能:将DL寄存器中的字符送到标准输出设备(如显示器)输出。
(3)09功能入口参数:DS:DX存放要显示的字符串首地址调用方式:mov ah,9 int 21h出口参数:无功能:显示以“$”(不含$)为结束标志的字符串。
(4)10功能入口参数:DX为存放要接收字符串缓冲区首地址调用方式:mov ah,10 int 21h出口参数:无功能:从键盘输入字符串到指定的缓冲区,直到输入回车符为止。
31、基本程序代码Data segmentdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov ah,4chint 21hcode ends end start。