C程序设计项目教程习题答案.docx_第1页
C程序设计项目教程习题答案.docx_第2页
C程序设计项目教程习题答案.docx_第3页
C程序设计项目教程习题答案.docx_第4页
C程序设计项目教程习题答案.docx_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目一项目考核一、选择题16:ACCCD C二、简答题1机器语言、汇编语言、高级语言各有什么特点? 机器语言机器语言是以二进制代码(0和1)表示机器指令的一种语言,用机器语言编写的程序能被计算机直接执行。但使用机器语言编写程序非常繁琐,程序代码很难读懂且不通用。 汇编语言汇编语言用易懂的符号代替二进制代码,使得编程技术前进了一大步。计算机并不能直接执行,需要借助汇编编译器将它翻译成二进制机器代码。 高级语言高级语言屏蔽了机器的细节,更接近于自然语言和数学语言,给编程带来了极大的方便,如FORTRAN、BASIC、C、C+、Java、C#等。2简述执行C语言程序的基本过程。C语言程序都采用编译方式运行,一般分为编辑、编译、连接和运行过程。高级语言源程序编译机器语言目标程序连接可执行程序运行运行结果编译程序连接程序(.obj)(.exe) 编写源代码使用C语言编写实现特定功能的程序代码,源代码必须遵循C语言的规范。 编译编译阶段是将我们编写的源代码翻译为计算机能够理解的二进制目标代码。 连接连接过程便是将目标文件与函数合并成完整的可执行文件,即生成.exe文件,这样程序就可以在计算机上直接运行了。 运行即执行连接成功后得到的可执行程序。3简述C程序的基本结构。 C语言程序由函数构成 程序中包含对库函数的引用 程序有良好的编码格式 编写程序注释 友好的人机交互提示4简述调试C程序的基本步骤。第一步 设置断点单击工具栏按钮即可添加断点,此时该行前端将出现一个断点标志。第二步 开始调试程序打开“组建”下拉菜单,执行“开始调试”“GO”命令(或直接按【F5】键),程序会进入调试模式,并且会在断点处暂停。第三步 单步运行不断按【F10】键,程序会一步一步地向前执行。项目实训略项目二项目考核一、选择题112:DAAAB BDCAB AC二、简答题1在程序中定义数据类型的目的是什么?C语言提供了哪些基本数据类型?答:为了在程序中存储不同类型的数据,并节省空间。C语言提供了以下数据类型:数据类型基本类型构造类型整型短整型长整型整型双长整型浮点型字符型布尔型空类型单精度双精度长双精度枚举类型、数组类型、结构体类型、共同体类型、指针类型、函数类型2常量和变量有何区别?字符常量和字符串常量有何区别?答:常量是指在程序执行过程中值保持不变的量,变量是指在程序运行过程中值可以改变的量,每个变量都必须在声明时明确定义其数据类型,并且需要用标识符标识。字符串常量与字符常量有所不同。字符型常量在内存中只占一个字节;字符串是按照串中字符的排列顺序存放的,每一个字符占一个字节,并在末尾添加“0”作为字符串结尾标志或结束标志。3在C语言中如何表示不同进制的整数?答: 十进制整型常量:由正、负号和数字09组成,但数字部分不能以0开头,如12、7、0等。 八进制整型常量:由正、负号和数字07组成,数字部分以0开头,如0408、07761等。 十六进制整型常量:由正、负号,数字09和字母AF(或af)组成,数字部分以0X或0x开头,AF(或af)分别表示数值1015,如0XFFFF、0x2D等。4下列标识符中哪些是合法的?并指出系统自定义的标识符p 2a a# t3 _hit int答:合法标识符:t3 _hit int(为系统自定义标识符)5写出下面程序的输出结果#include void main()int i,j,m,n;i=5;j=10;m=+i;n=j+;printf(i = %d, j = %d, m = %d, n = %dn,i,j,m,n);结果为i=6,j=11,m=6,n=10项目实训#include stdio.hvoid main() int num,i; char name10 ;/字符串用数组方式存储,下同 int age; int base_salary; float ratio,salary,yj,sum_age,sum_salary; sum_age=sum_salary=0; printf(*n); printf(输入与输出职工工资信息n); printf(*n); for(i=0;i3;i+) /输入并存储职工工资信息 printf(nn);printf(请输入员工编号:n);scanf(%d, &num);printf(请输入姓名:n);scanf(%s, &name);printf(请输入年龄:n);scanf(%d, &age);fflush(stdin);/清空缓存printf(请输入基本工资:n);scanf(%d, &base_salary);printf(请输入级别系数:n);scanf(%f, &ratio);printf(请输入销售额:n);scanf(%f, &yj);/计算每个人工资总额 salary=base_salary+yj*0.01*ratio; /输出职工工资信息printf(nn下面输出职工工资信息n);printf(员工编号:%dn,num);printf(姓名:%sn,name);printf(年龄:%dn,age);printf(工资总额为:%fn,salary); sum_age=age+sum_age; sum_salary=salary+sum_salary; printf(nn); printf(平均年龄为:%fn,sum_age/3); printf(平均工资为:%fn,sum_salary/3); 项目三项目考核一、选择题1-2 A A二、简答题1. 将任务一【例3-2】的算法用流程图表示出来。2. 计算的值,设计算法并尝试写出程序进行调试。自然语言描述如下: S1: sigh=1 S2: sum=1 S3: deno=2 S4: sigh=(-1)sigh S5: term= sigh(1/deno ) S6: sum=sum+term S7: deno= deno +1S8:若 deno100,返回 S4;否则,结束。流程图描述如下:输出sum的值开始deno100?sigh=(-1)sighterm= sigh(1/deno )sum=sum+termdeno= deno +1初始化变量sigh=1,sum=1,deno=2结束参考程序代码如下:#include stdio.hvoid main() int sigh,deno; long double sum,term; sigh = 1; deno = 2; term=sum=0; for(;deno=100;deno+) sigh=(-1)*sigh; term= sigh*(1/deno); sum=sum+term; printf(表达式的值为:%.20lf,sum);NY项目实训#include int main() int sushu(int x); int n; printf(请输入一个大于1的整数:n); scanf(%d,&n); sushu(n); return 0; int sushu(int x) int i; for(i=2;ix;i+) if(x%i=0)break; if(i=x) printf(是素数n); else printf(不是素数n);return 0;程序运行结果项目四项目考核一、选择题1-5 DBCCC二、简答题1简述逻辑运算符与条件运算符的使用方法。逻辑运算符的使用方法表4-2 逻辑运算符及其用法逻辑运算符名称说明示例结果!逻辑非一元运算符,真变假,假变真! 6 40|逻辑或两操作数同假结果为假,否则为真。但当左操作数为真,其结果则为真,不再计算右操作数的值ef = ef | ac = bd1条件运算符的使用方法条件运算符“?:”也称三元运算符,它根据布尔型表达式的值返回两个值中的一个,其格式如下:条件 ? 第一个表达式 : 第二个表达式;如果条件为 true,则计算第一表达式并以它的计算结果为整个条件表达式的值;如果为 false,则计算第二表达式并以它的计算结果为整个条件表达式的值。2简述C语言中switch语句的特点。 switch语句中的表达式通常为整型或字符型,配套的常量类型也应该是字符型或整型。此外,如果常量类型是字符型,一定要用单引号括起来(如A),而不能使用双引号(A)。 每个case后面的常量表达式必须各不相同,否则会出现矛盾,即一个值有多种选择。 各个case语句和default语句出现的顺序对执行结果没有影响。 每个分支的语句可以是单条语句,也可以是多条语句,多条语句不用加花括号。 通常情况下,每个分支语句后都要加一个break语句,表示跳出switch语句。程序在执行完该分支的语句后,如果有break语句,则结束switch语句,否则,继续执行下面的语句,直到遇到break语句或整个switch语句结束。项目实训实训一#include void main() float weight, price; printf(请输入您行李的重量!); scanf(%f,&weight); if (weight0) printf(您输入的数据有误!); else if (weight=20) printf(您可以免费托运行李!); else if (weight=30) price = (weight-20) * 30; printf(您的托运费用为%f元!,price); else if (weight=40) price = (30 - 20) *30+(weight-30)*40; printf(您的托运费用为%f元!, price); else if (weight = 50) price = (30 - 20) * 30 + (40 - 30) * 40+(weight-40)*50; printf(您的托运费用为%f元!,price ); else printf(您托运的行李超出了最高上限,不允许托运!); 实训二#include void main() float sales, bonus; printf(请输入您的销售额!); scanf(%f,&sales); bonus = sales = 15000 ? sales * 0.1 :sales = 10000 ? sales * 0.08 :sales = 8000 ? sales * 0.05 :sales = 5000 ? sales * 0.03 : 0; if (sales 0) printf(您输入的金额有误!, 奖金); else printf(您获得的奖金为:%f元!,bonus );项目五项目考核一、选择题1-5 ABBAA二、简答题1简述for语句的使用方法。for语句中变量初始化部分只在开始时执行一次,然后判断条件表达式,若为true,则执行代码块循环体,然后执行控制变量更新表达式,再回头来判断条件表达式是否成立,以决定下一次循环;若条件表达式为false,则结束整个循环。2简述break语句和continue语句的区别。break语句用于终止当前循环的执行,直接执行当前循环语句的下一语句。当循环有多层时,break语句只能跳出本层循环,外层循环仍会继续。continue语句只能用于循环语句内部,用于结束本次循环,即跳过本次循环体中余下的尚未执行的语句,再一次进行循环条件判断,以便执行下一次循环。项目实训实训一#include void main() char c; int n=0; printf(请输入一行字符:); do scanf(%c,&c); if(c=A&c=a & c=z) n+; while(c!=n); printf(该行英文字母的个数为:%dn,n); 实训二#include void main() int x = 1; while (x+ = 100) if (x % 3 = 0) printf(%d ,x); scanf(%d);项目六项目考核一、选择题1-10 CCACC BCBDD二、简答题1简述函数进行嵌套调用时函数的执行顺序。当函数进行嵌套调用时,程序首先从主函数开始执行,到达调用函数语句时流程转到第一个被调用函数;第一个被调用函数执行到调用函数的语句时转入第二个被调用函数,依此类推,直到最后一个被调用函数;最后一个被调用函数执行到return语句时,返回调用该函数的函数中,执行调用函数语句下面的语句,依此类推,直到最后返回到主函数中。2简述不同变量的作用域。 局部变量局部变量只在该函数范围内有效。也就是说,只有在该函数内才能使用这些变量。 全局变量在函数外部定义的变量称为全局变量,其作用范围是从定义变量的位置开始到本源文件结束。项目实训实训#include int CommonFactors(int a, int b);main()int sub,x,y;printf(请输入用于计算公约数的两个整数值(中间通过空格分隔):n);scanf(%d %d,&x,&y);while(sub=CommonFactors(x, y) 0)static int counter=1;printf(Common factor %d is %dn, counter+, sub);/* 函数功能: 指明计算哪两个数的公约数 函数入口参数: 两个整型数 函数返回值: 公约数*/int CommonFactors(int a, int b)static int num1=-1;static int num2=-1;static int curFactor;if (a 0 | b b ? b : a;/* curFactor置为两个数中较小的那个 */while(curFactor0)if ( a%curFactor = 0 & b%curFactor = 0 )return curFactor-;/* 如果不减1,则下次还会测试这个数 */curFactor-;return -1;项目七项目考核一、选择题1-10 DDCCD BACAD二、简答题1简述二维数组的存储形式。尽管二维数组由若干行、列构成,而实质上,二维数组最终也是在硬件存储器的一维线性空间上实现的。在语言中,二维数组是按行排列的,如图7-6所示。图7-6 数组a在内存中的组织形式2简述使用数组元素和数组名作为函数参数时的区别。用数组元素作实参时,只要数组类型和函数的形参变量的类型一致即可,并不要求函数的形参也必须是下标变量,即对数组元素的处理是按普通变量对待的。用数组名作函数参数时,则要求形参和相对应的实参必须是类型相同的数组,都必须有明确的数组说明。当形参和实参二者不一致时,就会发生错误。项目实训实训源码#include #include string.h char names10; int score107; int max10,min10; double average10; int no10=0,1,2,3,4,5,6,7,8,9; void main() char names1010; /*定义二维字符数组存放选手名字*/ int i; for(i=0;i10;i+) printf(please input the name of the No. %d singern,i+1); /*提示用户输入编号为i+1的选手的名字*/ gets(namesi); /*将用户输入的字符串作为该选手的名字*/ int score107,j; for(i=0;i10;i+) printf(nplease input the score of the No. %d singern,i+1); /*提示用户输入编号为i+1的选手的成绩*/ for(j=0;j7;j+) scanf(%d,&scoreij); for(i=0;i10;i+) maxi=scorei0; for(j=1;jmaxi) maxi = scoreij; printf(the highest score of the No.%d singer is:%dn, i+1, maxi);for(i=0;i10;i+) mini=scorei0; for(j=1;j7;j+) if(scoreijmini) mini = scoreij; printf(the lowest score of the No.%d singer is:%dn, i+1, mini);int sum,temp; /*清零*/for(i=0;i10;i+) sum=0; for(j=0;j7;j+) sum+=scoreij; /*累加*/ sum=sum-maxi-mini; /*去掉最高和最低分*/ averagei = (double)sum/5; /*计算平均分*/ printf(the average score of the No.%d singer is:%lfnn, i+1, averagei);for(i=1;i=6;i+) for(j=0;j7-i;j+) /*比较的averagenoj,而不是noj本身*/ if(averagenojaveragenoj+1) temp=noj; noj=noj+1; noj+1=temp; /*交换排名位置*/ for(i=0;i10;i+) printf(%d : %s(number:%d) get %lfn,i,namesnoi,noi+1,averagenoi);项目八项目考核一、选择题1-5 DDABA二、简答题以下程序的执行结果:(1)(2)(3)项目实训实训一#include #include main()char str80, *pStart, *pEnd;int len;printf(Input string: );gets(str);len = strlen(str);pStart = str;pEnd = str + len - 1;while (*pStart = *pEnd) & (pStart pEnd)pStart+;pEnd-;if (pStart pEnd)printf(No!n);elseprintf(Yes!n);实训二#include main ()char *ballColor=RED,YELLOW,BLUE,WHITE,BLACK;int i,j,k,m=0;for(i=0;i5;i+)for(j=i+1;j5;j+)for(k=j+1;k5;k+)m+;printf(%d: %s , %s , %sn,m,ballColori,ballColorj,ballColork);项目九项目考核一、选择题1-4 BCDD二、简答题1简述共用体与结构体数据类型的不同。共用体与结构体的定义形式相似,但它们的含义不同。结构体变量所占内存长度是各成员所占内存长度之和,每个成员分别占有自己的内存单元;而共用体变量所占的内存长度等于最长的成员的长度。2简述单链表的插入与删除结点的步骤。插入结点在单链表中,插入结点同样有三种情况,如图9-8所示。即插入到链表的中间、插入到链表头结点前、接到链表的尾结点后。图9-8 链表结点的插入 插入到中间结点p3和p2之间时,只要将其前一个结点p3的指针指向要插入的接点p1,然后将p1的指针指向p2,就完成了结点p1的插入; 若要插入到第一个结点之前,只要将head直接指向新结点p1,然后将p1的指针指向老的首结点即可; 若要插入到最后一个结点之后,则只要将最后的p2的指针直接指向新结点即可。下面我们通过一个例子来学习链表的插入,假定链表中的各结点已经按照学号由小到大顺序排列,现要插入一个新结点,要求按学号的顺序插入。插入的结点要依次与表中结点相比较,找到合适的插入位置。删除结点如图9-9所示,从链表中删除一个结点有三种情况,即删除链表的中间结点、删除链表头结点、删除链表的尾结点。图9-9 链表结点的删除 删除中间结点s时,只要将其前一个结点p的指针指向s的下一个接点,即完成了将结点s从链表中分离的目的,再将其内存释放,就完成了结点s的删除; 若要删除的是第一个结点,只要将head直接指向第二个结点,然后将第一个结点的内存释放即可; 若要删除的是最后一个结点,则只要将p的指针直接指向NULL,然后释放s的内存即可。项目实训实训#include #include struct stackint data;struct stack *next;typedef struct stack STACK;STACK *head,*pr;int nodeNumber = 0;/* 堆栈节点数寄存器 */* 函数功能:生成一个新的节点,并为该节点赋初值函数参数:整型变量unm,是要给新节点赋的初值函数返回值:指向新的节点的指针*/STACK *CreateNode(int num)STACK *p;p = (STACK *)malloc(sizeof(STACK);/* 动态申请一段内存 */if(p = NULL) /* 如果返回空指针,申请失败,打印错误信息并退出程序 */printf(No enough memory to alloc);exit(0);/*结束程序运行*/p-next = NULL;/* 为新建的节点指针域赋空指针 */p-data = num; /* 为新建的节点数据区赋值 */return p;/*函数功能:压栈函数 函数参数:整型变量num,表示要保存到栈里的数据函数返回值:指向链表新节点的指针*/STACK *PushStack(int num)if(nodeNumber=0) /* 如果是第一个节点,保留该节点首地址在head中*/head = CreateNode(num);pr = head;nodeNumber+;/* 堆栈节点数寄存器+1 */else /* 不是第一个节点,将新建节点连到链表的结尾处*/pr-next = CreateNode(num);pr = pr-next;nodeNumber+;/* 堆栈节点数寄存器+1 */return pr;/*函数功能:弹出堆栈 函数参数:无函数返回值:当前堆栈中存储的数据*/int PopStack(void)STACK *p;int result;p = head;for(;)if(p-next = NULL) /* 查找最后一个节点 */break;elsepr = p;/* 记录最后一个节点的前一个节点的地址*/p = p-next;nodeNumber-;/*堆栈节点数寄存器-1 */if(nodeNumber = 0) return -1;/* 如果是最后一个节点,返回错误代码*/pr-next = NULL;/*将最后一个节点的前一个节点的地址的指针域赋空指针*/result = p-data;free(p);/*释放内存*/return result;main ()int pushNum10=111,222,333,444,555,666,777,888,999,10000;int popNum10;int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论