c语言考试编程题练习

2024-09-05

c语言考试编程题练习(共12篇)

c语言考试编程题练习 篇1

关键词:汇编语言,C/C++语言

在计算机系统的应用程序中, 所有汇编任务都由汇编语言来完成, 这样虽然完成任务的效率很高, 但是工作量却非常大, 会影响到对于应用程序的维护。若是所有的程序都是由C/C++语言进行编程, 虽然执行过程比较的简单, 但是这种方式却导致了目标代码的执行任务效率低, 实时性很差。所以在嵌入式系统中, 主要采用的编程方式是汇编语言与C/C++语言混合编程形式, 在编程过程中, 初始化任务由汇编语言来完成, 主要的任务则是由C/C++语言来完成, 从而达到了最大的效果。

1 ARM处理器

ARM处理器主要是利用编译器将汇编语言以及C/C++语言进行相互的切换, 并且ARM制定了相关标准, 来保障切换过程中的顺利实施。

1.1 寄存器使用规则

ATPCS为ARM寄存器进行不同命名, 从而在编程的过程中来利用ATPCS寄存器进行编程。

1.2 堆栈的使用规则

在ATPCS中规定, 堆栈的主要类型是FD, 被称为满递减堆栈, 所以必须要利用STMFD/LDMFF进行堆栈的操作。

1.3 参数传递规则

参数传递的规则不一样, 利用参数的数量可以将子程序分为参数数量固定, 以及参数数量不固定的子程序, 对于参数变化的子程序, 若参数的数量少于四个, 那么要利用寄存器来进行参数的传递, 若参数的数量多余四个, 那么必须要利用堆栈来进行参数的传递, 所以参数之间传递的规则不同。

2 C语言

2.1 汇编语言调用C语言

在对计算机程序的开发中, 前期由汇编语言进行初始化的编程, 然后在进行C语言之间的切换, 对于C语言的切换, 主要是通过BL来实现的。以下是调用的字符:

汇编语言的集成环境如图1所示。

2.2 C语言调用汇编语言

在程序中, 使用“C++”程序来调用C程序, 以下是调用C程序的字符:

2.3 汇编程序调用C++程序

在汇编语言与C++程序的切换时, 必须要利用关键词进行声明, 在C++程序的结构中, 如果没有基类, 则要使相应的存储结构与ARMC相同。并且在汇编过程中将参数的数据放在数据栈中, 只有这样才能使被调用的C++程序访问到相应的参数。

3 混合编程

在进行混合编程的过程中, 若汇编代码较短, 那么可以利用内嵌汇编的方式进行混合编程, 不会直接指定寄存器, 而是直接利用编译器进行分配。主要的内嵌汇编语言如下:

以下是利用字符串复制的方式实现混合汇编:

4 结语

在计算机系统嵌入式应用程序的开发中, 利用ARM汇编语言与C/C++语言相互结合的混合编程方式, 可以在很大程度上提高编程的最佳效果。本文主要举出了ARM汇编语言以及C/C++语言汇编中的实例, 提出了设计的方法, 阐述了ARM汇编语言与C/C++语言相互结混合编程方式的实现。

参考文献

[1]翟乃强, 隋树林.汇编语言与C语言及Visual C++混合编程[J].青岛科技大学学报 (自然科学版) , 2003.

[2]王付山.汇编语言程序设计教学初探[J].福建电脑, 2005.

c语言考试编程题练习 篇2

【摘要】本系统主要研究C语言编程题目中“编译运行结果对比”、“编译错误原因恢复与评阅”、“得分点分割正则动态测试”三种手段,将研究内容运用到自动阅卷系统中,实现对编程题目的自动评分,并实现基于J2EE技术的具有在线考试、自动评分等功能的C语言编程题目自动阅卷考试系统,提高阅卷的准确度的同时能够节省大量的人力物力财力。

【关键词】C语言;编程题;自动评分

随着计算机技术的发展以及互联网的普及,办公自动化已无处不在。作为一门基础课程,C语言考试应用系统也给批阅试卷的工作人员带来了很大的工作量,自上世纪六十年代起,国内外就陆续出现了许多关于语言类课程考试的软件系统,虽然很多已具有基本的随机答卷、上机考试及自动评阅等功能,但只针对客观题,因自然语言的刻画、人工智能、模式识别等核心技术发展缓慢,制约了编程题目阅卷系统研究发展。所以,本系统针对C语言编程题目进行整体规划,致力于做出更精确的C语言编程题自动阅卷的方法,填补自动阅卷软件开发空白,减少人工操作的资源浪费。

1.系统运行环境

智能C语言考试系统、自动评分系统的运行环境是根据我校现有的教学机房的硬件环境(每个机房有70台学生机和一台教师机)规划的,教师端和学生端都采用window 7操作系统,每个机房都采用校园公共网络提供的局域网,运用Myeclipse开发环境、MySQL数据库建立一套具有在线考试、自动评分等功能的C语言编程题目自动阅卷系统,并辅以AJAX技术,确定了用FreeMarker表现层技术增强用户与系统间的交互,加快系统运行效率,同时,尽可能细化评分点,增加准确性。

2.系统运行模式的选择

系统采用B/S三层架构模式,系统的用户可通过Internet网络,客户端不需要手动安装软件,只要有浏览器就可以对系统进行访问和一般操作,本次对阅卷系统主要分析了的C语言编程题目评分功能,充分考虑到系统对灵活性和准确性的要求,并保证安全性的前提下,本系统采用B/S结构以达到轻客户端需求。

3.系统研究内容

通过研究C语言程序结构,从编译原理角度设计评价模型,通过内部运行编译器对比动态运行结果,并且本课题创造性提出利用关键字对比、控制结构判断和正则表达式匹配三种静态测试技术作为结果比对方案的补充,既保证了程序判断的正确性,又确保了相对公正性。

编译结果对比要实现程序内部对C语言编译器的动态调用技术,通过比对测试结果和标准答案进行评分,对于不能编译部分,研究关键字库建立、控制结构规范化和正则表达式建立的具体方案。

其中重点研究C语言编程题目评分标准的两个方面:一是如何检验运行结果的正确性,二是如何评价程序代码包含的分点。

为突出本系统对主观题的评分机制,在试题主观题程序可运行以及不可运行的情况下分别给出了相应的评分策略,以此来一步步细化评分机制。

4.评分核心模块设计

详细设计自动阅卷系统中的关键技术——程序题评分。系统首先采用动态测试技术,编译运行待评价程序,和标准答案进行对比给出分数;需要数值型输入参数的程序,通过均匀分布随机数给出随机输入;需要字符型输入参数的程序,首先在数据库中保存预选文字段,然后随机选取其中的一部分给出随机输入。对于编译运行报错的程序代码,课题会采取错误恢复技术,通过编译信息给出的错误位置尝试以标准答案修复代码,从而给出扣分点。最后对于不能编译运行的代码片段,系统提出关键字对比、控制结构标准化和提取、正则表达式规则匹配相结合的静态测试方法,加入权重处理,分析得分点给出更全面客观的评分结果。

通过对软件模式的对比和分层架构模型的研究,系统拟采用B/S结构,方便用户在线答题和管理操作;在具体实现技术方面,拟采用J2EE技术和SSH开源框架——利用Java语言提供的公开接口开发调用C语言编译器模块和正则表达式匹配模块,利用MySQL数据库完成题库和答案库的建立和开发工作,利用Ajax技术提高系统的整体响应速率,利用FreeMarker表现层技术增强用户与系统之间的交互。

建立计算机矫正机制和完善的评价方案,并对试题多次进行人工阅卷与机器阅卷的对比测试。

5.数据库设计

因需要评测本系统自动阅卷功能和人工阅卷的准确度,给出测评结果,并对仍存在的问题和不足提出进一步改进方案;特别是对系统不能正常评分的特殊题目,建立特例题库,以便在今后的工作进行研究并从中提出新的解决方案。

考生提交试卷首先由c语言编译器自动编译后生成可执行文件并运行输出结果,进行评阅步骤校验结果时,通过试题编号(id)调用试题表数据,对比答案进行准确性校对,调用纠错参考库数据,比对出错原因并根据错因扣除相应分数,通过模糊匹配替代出错关键字,迭代匹配错因至无错,若迭代五次还未改正视为崩溃性错误,不可弥补,判定本段分数为零崩溃性错误,不可弥补,判定本段分数为零,通过题目编号获取相应评分关键点库,通过正则表达式匹配得分点,通过得分点数量给出相应分数,完成试卷评阅。

当程序不能正常编译运行时,系统判定进入系统纠错,系统自动运行修复性算法,代码中个别关键字错误,为此我们把c语言中所有的关键字整理出来,建立关键字库,对错误的关键字进行模糊匹配,通过字符的顺序、相同字符的数量、键盘键位的keycode尽可能的匹配出相似度最高的的关键字替换错误的关键字。

纠错主要是语句拼写错误,我们分了下面三种情况:

1)测试用例由测试输入数据和与之对应的预期输出结果组成,人们常用白盒法和黑盒法设计测试用例,其中白盒法主要是为了检查是否有数据结构或外部数据库访问错误等,对比通过单元测试的模块或组件、编程规范、集成测试来检查测试的准确性。

通过正误判断匹配正误判断表进行结果判定,判定结果是否符合题目,若是则给分,否则进行结果范围判断及结果属性判断,比对结果是否适用本题范围,并进行分数评估。

2)本表主要有三个主要信息id、name、keyword。分别用来存储错误的id、错误的名称、题目中的关键字。Id的数据类型为int(整型),name的数据类型为varchar(字符型),keyword的数据类型为varchar(字符型),id需要主键非空自增,name与keyword非空。通过建立本数据库表可以实现对错误信息的收集归类,同时可以实现判断系统中出现的错误的功能。

定位捕捉错误点,抛出错误原因并与数据库进行比对,并根据错因给予相应分数,运用模糊匹配寻找替代关键词,进行替代继续检查错误,若连续替代五次后仍然不能进行下一步骤视为程序崩溃行错误,不可弥补,判定本段分数为零。

3)正则表达式,又称正规表示法、常规表示法(英语:RegularExpression,在代码中常简写为regex、regexp或RE),正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,在本字段里,正则表达式通常被用来检索、替换那些符合模式的程序段,进行分步得分。

本数据库包含关键字类库,通过正则表达式匹配关键词多寡,大概率的确定了答题者的思路范围及答题思路的正确与否,给以步骤分,极大的提高了批卷的人性化,拉近了机器阅卷与人工阅卷的阅卷水平,更有说明行的体现了机器阅卷更好的使用性。

C语言考试系统已普遍在各高校使用,对于客观题方面,有了相对完善公平的系统,但是在自动评分方面,还有很多不足之处,有待改善,本系统就是针对这一空白区域,设计公平而相对更准确的算法,主要对C语言考试系统中的编程题部分进行得分点分割,对考生的程序一步步细致分析,做到该得分的地方给考生相应的分数,这样避免了某一点小错误导致的大幅度扣分的不公平性,同时,将系统应用到学生的日常学习中后,能够更好地检验教师的教学成果,查找教学过程中需要注意的地方,对于学生,也能够更好地发现自己的错误,及时改正,这样,在学习的过程中,在保证公平的前提下,培养学生注意细节的习惯,最重要的是,应用到高校的二级C语言考试后,能够更好的给考生更公平更合理的考试成绩,同时也使得阅卷更加节约、方便、快捷,这也顺应了如今社会计算机行业的飞速发展,提高办公自动化的程度及效率。

参考文献

[1]K.A.Redish,W.F.Smyth.Pragram style analysis:a natural by-product of prograrn compilation[J].Cornnnunications of the ACM,1986.(3):126-133.

[2]Yasuhiro Ajiro,KazunoriUeda.Kima:An Automated Error Correction System for Concurrent Logic Progrrams.Automated Software Engineering 2002.9(2):67-94.

[3]王甜甜,基于语义相似度的编程题自动评分方法的研究,哈尔滨工业大学硕士论文,2001;1-52.

[4]李永浩,居于程序理解的编程题自动评分系统愤愤研究与应用,哈尔滨工业大学硕士论文,2001:1-60

[5]王华东.刘国柱.基于局域网下C语言考试系统的设计与实现[J].计算机与信息技术,2006.

实验二语言与C语言混合编程 篇3

一、教学目的和要求

 熟悉ADS1.2开发环境编译、下载、调试程序的基本过程; 掌握C和汇编语言混合编程方法。

掌握ATPCS中的寄存器及参数传递规则。

二、实验内容

1、分别编写C程序和汇编程序,要求在C程序中调用汇编程序实现字符串拷贝功能。C程序中设定源字符串及目的字符串;汇编程序实现拷贝功能。

2、分别编写C程序和汇编程序,要求在汇编程序中调用C程序实现4个整型数的求和运算。汇编程序实现变量的赋值及C函数的调用;C程序实现求和运算。

3、编写C程序内嵌汇编语句,对两个整型数a、b进行求和运算,和值存放到变量c中。

(1)要求main()函数完成变量赋值及a、b、c数值信息输出;内嵌汇编语句实现求和计算。

(2)要求C程序中main()函数完成变量赋值及a、b、c信息打印,add()函数实现加法

运算;main()函数中的内嵌汇编调用C函数add()进行求和运算。

三、思考题

1、什么是ATPCS?它有哪些规则?

2、C程序调用汇编程序需要进行哪些设置?参数如何传递?

3、汇编程序调用C程序需要进行哪些设置?参数如何传递?

C语言编程个人简历 篇4

C语言编程个人简历、本文由大学生个人简历网编辑,以下推荐一篇相关的、计算机应用与编程个人简历表格、参考!

姓    名:          性    别: 男

年    龄: 22岁 学    历: 本科

工作年限: 应届生 婚姻状况: 未婚

户    口: 长沙市

居 住 地: 湖南省邵阳市近期任职: 实习生

待遇要求: --3500/月 到岗时间: 1周以内

希望地区: 深圳市

希望岗位: 储备干部

自我评论

我待人真诚,做事有上进心,自学能力强。处事自信、认真、肯担当。父母坚毅,朴实的性格无时无刻不在感染着我,生活中对自己是尽量节俭,但工作学习中必须做到“贪得无厌”。我不甘于寂寞,我渴望能和身边的.朋友分享成功的喜悦,更享受经受挫败时一起的越挫越勇。但我又不擅于喧闹,我认为广博的知识必须静心汲取,全心投入的思考。唯有如此才能在技术上面日日进步,精益求精。我憧憬做一个事业成功的人,能凭自己双手给社会造益,能给家人幸福,能给身边人带来快乐。我钟爱一句话,也是驱使我有不懈奋斗的一句话——  “天行健,君子以自强不息。地势坤,君子以厚德载物。”工作经验

某公司   -02 - 2009-04

公司性质:

担任职位:实习生

工作职责和业绩:

在公司主要负责网站的开发与维护 教育经历

邵阳学院  -06 - -06

最高学历:本科

专业名称:信息与计算科学

专业描述:信息与计算科学专业 Information and Computing Sciences 信息与计算科学专业是以信息领域为背景数学与信息,管理相结合的交叉学科专业.该专业培养的学生具有良好的数学基础,能熟练地使用计算机,初步具备在信息与计算科学领域的某个方向上从事科学研究,解决实际问题,设计开发有关软件的能力.毕业生适合到企事业单位、高科技部门、高等院校、行政管理和经济管理部门,从事科研、教学和计算机应用软件的开发和管理工作,也可以继续攻读信息与计算科学及相关学科的硕士学位。

技能专长:

掌握C++、C语言编程,熟悉linux  C语言。Linux系统下文件I/O操作,进程控制,信号,网络编程均有学习。了解ARM平台下linux嵌入式项目开发流程。

it技能专长

技 能:AIX

使用时间:一个月

《高质量c语言编程》读后感 篇5

读完《高质量c语言编程》这本书,对其有了大概的了解:这本书共有十一章,分别讲述了文件的结构 程序的版式 命名的规则 表达式和基本语句 常量 函数设计 内存管理 C++函数的高级特性 类的构造函数 析构函数与赋值函数 类的继承与组合 其他编程经验。

从本书的前言,可以看出作者是一个c编辑的老手,而且当之无愧,书中介绍了好多有关c语言编辑的细节问题,本人认为这些值得那些以后搞编程的同学看看,对其以后更快更高质量的编写c语言会有很大帮助!

本书主要分为两个部分:

1-6章为一个部分:1到6章主要讲述了c++c的编程风格,难度不高,但细节比较多。细节决定成败,只有抓住点点滴滴,才能写出高质量的c语言程序。每一章都有其侧重点,作者精心安排。首先写了文件结构,作者从头文件的结构,定义文件结构,目录结构等方面介绍了文件结构的功能和使用方法,接下来讲了程序的版式和命名规则,比以前学的更注重细节,也对空行,注释,代码行等以前不关注的内容有了进一步的了解。第四章讲了表达式和基本语句,作者精益求精,抓住我们易错的点,将这些编程中的关键点,直白明了的展现出来,是我对这些内容有了更深的了解,也促进了对这些知识的记忆。第五章讲了常量,讲了c语言定义常量的规则并指出c可以用define定义常量,而c++又扩展了const定义常量的方法,虽然不太

懂,但有了大概了解。第6章讲了函数设计。

7-11章为一个部分:第七章讲内存管理,第八章讲C++的高级特性,第九章讲构造函数等内容,第十章讲的继承和组合,第十一章讲了其他的编程经验。这几个部分是个难点,好多部分都看不懂,但书中的思想可以领会一些,希望在以后的学习中能够循序渐进,获得进一步的理解和掌握.记得老师说,指针的学习是c语言的重点,学习指针,不管是看教材,还是看课外书,对我来说都是一大难题,也许照老师说的自己动手写程序会加深记忆在精读课本会有所改善,作者也说道学习指针要养成“使用调试器逐步跟踪程序”的习惯。像平常老师说的只有动手写,动手做才会有所收获,作者捉住重点,抛砖引玉,很多地方都给我们作了详细介绍,并指出c语言编程过程中的注意事项,也提高了我在编程过程中的警惕性。

中技C语言编程教学探讨 篇6

一、中技C语言教学出现的问题

1) 在中技学校中, C语言编程教学举步维艰, 不管是哪种层次的学生, C语言编程教学都出现了一些问题, 许多学校基本都陷入了为开编程课而开编程课的误区, 教师为完成教学任务, 过于注重讲解C语言的语法语句, 致使学生对C语言失去学习的兴趣。

2) 在学习C语言过程中, 大多学生最初还是很感兴趣, 随着C语言编程教学整个过程的不断深入, 分析解决问题和记忆的相关内容难度会逐渐增大, 加上教师缺少必要的教学手段, 使学生在整个学习过程中逐渐失去兴趣, 提不起学习的积极性, 觉得学习C语言非常枯燥, 就算上课听得懂, 一但要他自己独立完成一道编程题, 大部分学生都感觉不知道如何入手。

3) 学习C语言实践方面, 大多都是不停地照着课本上的例题, 从头至尾输入计算机, 得出与书上结果一致的答案就算上机通过, 或是上机输入程序, 运行得到结果抄写下来, 也就完成实验。这样的实验提不起学生的兴趣, 脱离实际, 学生根本不能真正的掌握语句的真正意义和编程的方法, 大多学生都觉得索然无味。

二、C语言编程教学措施探讨

(一) 明确教学目的

对于中技学校的学生来说, 不能为开编程课而开编程课, 不能把C语言作为一种程序设计语言进行授课, 这种授课的方式仅需介绍C语言的格式和功能, 重点注意一些不同点就可以了, 是为已具备程序设计基础的人介绍新语言的做法, 大学本科生来学习尚且有难度, 更不用说中技生了。因此对于中技生应该将其作为一种培养学生分析问题、解决问题的能力, 掌握程序设计思想与方法的课程来讲授, 适当降低设计能力的要求, 这是较为符合中技生的现状, 因此必须调整教材结构和内容, 明确教学目的以应对现在的中技教育。

(二) 提高学生学习C语言的兴趣

兴趣是最好的老师, 培养和提高学生学习C语言的信心和兴趣, 比什么都重要!

对于计算机语言的学习来说, 由于许多学生以前并未接触过, 认为计算机语言是很深奥、很难学的, 对计算机语言的学习缺乏信心。随着C语言学习的深入, 加之中技生的数学、英语基础普遍较差, 学习的主动性、自觉性不足, 基本上是被动上课, 由于学习的主动性和探索性不够, 学生几乎不提问题或提不出问题, 对不懂的学习内容也难以表达哪里不懂, 为什么不懂, 逐渐也就对学习C语言提不起兴趣了。

那么如何培养和提高学生学习C语言的信心和兴趣呢?

首先要明确教学目的, 正确引导学生对C语言的认识:学习C语言对今后的专业学习的重要性;学习C语言重要的是培养自己的逻辑思维, 掌握程序设计思想, 锻炼自己的分析、解决问题的能力。帮助学生克服心理障碍, 逐步树立学生对学习C语言的信心, 在课堂上可通过演示一些简单例题, 帮助学生消除心理障碍, 例如:

Void m ain ()

{printf (“w e lcom e w orld!”) ;}

同时请学生上台自己编写, 输出自己想要的结果, 当学生看到自己也能轻松编写程序时, 学习C语言的信心自然大大增强。

其次可通过演示一些有趣的程序, 例如贪吃蛇、万年历、电子时钟等以提高学生学习C语言的兴趣, 更重要的是在讲课的过程中, 应避免为编程而编程, 对于语句的格式、运算符等尽量简单化, 例如在讲授s canf () 输入语句时, 其有多种格式, 应用较为复杂, 对于暂时不会用到, 等到要用时或碰到时再回头学习, 以保持学生学习C语言的信心和兴趣。

(三) 提高学生分析问题、解决问题的能力, 形成程序设计过程理念

学习C语言, 大多中技生都有这样的感觉:上课能听明白, 自己动手编程却不知如何入手。造成这种“听得懂, 写不出”的原因主要是学生缺乏分析问题、解决问题的能力, 没有形成程序设计理念。

要想学生能独自编写出简单的程序, 掌握程序设计过程, 可以把整个程序的编写分解成一小步一小步, 让学生能够一步步写出程序来。

首先让学生明白程序的本质:对数据处理, 也即“程序=数据结构+算法”, 所以编程的第一步就是定义变量, 即要处理的是什么样的数据及存放的地方, 编程就像厨师炒菜一样, 菜就是数据, 首先是炒什么样的菜 (即数据的类型) 及菜放在哪里, 放在碟子里 (碟子即是变量) ;第二步获取数据, 通常是通过给变量赋值或键盘输入 (一般使用s canf () 函数) 等获取;第三步是解决问题的方法和步骤, 即算法, 这是最关键的一步, 是整个程序的灵魂;第四步输出结果, 一个程序通常都必需输出结果, 输出结果一般使用printf () 函数等输出函数。

通过如此一步一步的分解, 反复讲解和练习, 从教学效果来看, 大多数学生起码懂得了如何入手编写和编写出简单的程序。

学习C语言, 算法分析与设计是核心。算法的分析与设计实际上也就是学生分析问题、解决问题的能力。提高学生分析问题、解决问题的能力可以通过多种教学的方法逐渐提高, 例如:1) 任务驱动教学法, 2) 案例分析教学法, 3) 问题教学法, 4) 讨论教学法等, 通过这些方法, 充分发挥学生的积极性与主动性, 实现理论与实践相结合, 培养学生探索问题和解决问题的能力。

三、结语

对于中技的学生来说, 学习语法不是学习C语言的真正目的, 应该在掌握语法的基础上, 通过上机实践, 真正的让学生学会使用程序设计语言来解决各种实际问题。在课堂教学中采用多种教学方法, 充分调动学生的学习兴趣, 使学生在学习的过程中提高分析问题、解决问题的能力, 形成程序设计过程理念, 培养良好的编程习惯, 逐步提高编程能力。教学的效果也得到了提升。

摘要:面对新形势下的技工教育和新时代的机遇及挑战, 如何提高技工学校的《C语言程序设计》课程的教学效果, 提高学生分析问题、解决问题的能力, 形成程序设计过程理念, 是计算机教师亟待解决的问题。本文结合教学实际, 对《C语言程序设计》课程编程教学进行了探讨。

关键词:C语言,程序设计,教学措施

参考文献

[1]汪临伟, 肖芳惠.C语言程序设计.中国传媒大学出版社, 2011.

[2]谭浩强.C程序设计第四版.清华大学出版社, 2010.

c语言考试编程题练习 篇7

关键词 C语言 编成技巧 应用 研究

中图分类号:TP3 文献标识码:A

0前言

在大学计算机教学的过程中,C语言占据重要地位,由于C语言自身的特殊性质,逻辑性强、难度较大,因此,大部分学生对C语言学习存在畏惧心理。在学习C语言的过程中,编成技巧对学生发展至关重要,因此,现阶段,教师面临的主要任务是如何在C语言学习过程中,应用编成技巧。

1C语言学习现状

(1)学生基础薄弱

通常情况下,学校将C语言课程安排在大一,由于C语言课程难度较大、逻辑性较强,大一学生刚刚经历过高考,在短时间内,无法快速适应C语言课程。此外,由于C语言课程要求学生应将理论基础转变为实践应用,由于学生在高中期间,接触计算机的机会较少,因此,学生的实践应用能力较差,长此以往,学生的学习积极性较低,这不利于获得良好的教学效果。

(2)课时较少

现阶段,相比于其它课程,学校安排C语言课程的课时较少,因此,教师为完成教学任务,在每一节课中会逐渐增加教学内容,由于C语言自身的特殊性质,教师内容的增多,会加大学生的学习压力,在短时间内,学生无法快速理解教师讲授的内容,导致学生产生厌倦心理。

(3)学习方法落后

编成方法是学习C语言课程的主要目的,但是,由于在初学C语言的过程中,教师没有积极引导学生掌握正确的学习方法,学生仍旧按照其它课程的学习方法,即掌握基本的语法知识,不注重实践应用,不能够将理论基础转变为实践应用,导致学生在实践的过程中,经常会出现各种问题。

2C语言学习过程中编成技巧的应用

在学习C语言课程过程中,虽然难度较大、逻辑性较强,但是,只要学生能够熟练掌握编成技巧,不仅能够提高编成效率,还能够使自己更好的投入到C语言课程学习过程中。

2.1单片机C语言编成技巧

在学习C语言编成技巧的过程中,单片机C语言编成技巧已经成为发展的必然趋势,并且编成的技术性越来越高,内部的存储容量也在不断扩大,不管是在代码量、运行速度方面,单片机C语言编成都不落后于汇编语言。但是二者在编成技巧方面,仍旧存在较大的差别,以下是单片机C语言编成技巧:

(1)数据类型的选择

在单片机C语言编成的过程中,学生应充分利用程序存储器资源,为C语言编成提供更多的数据种类。在众多数据类型中,C语言能够识别的只有bit和char。这两种数据类型生成的代码相对较短,相比于bit和char,浮点型、整型数据类型,机器无法识别,如果想要识别这两种数据类型,学生需要借助其它工具,例如,函数以及与之相关的程序等等,此类数据类型生成的代码相对较长。在C语言编成的过程中,从表面分析,部分程序比较简单,但是在实际编成的过程中,却非常复杂,并且生成的代码较长。因此,为最大限度的缩短代码的长度,学生选择数据类型的过程中,应当依据实际情况,选择与之相适应的数据类型。

(2)优化算法

在确定选择何种数据类型过后,学生应优化程序算法,主要优化两个方面,即运行速度和程序代码量,运行速度代表时间的复杂,程序代码量代表空间的复杂,二者是成反比关系。例如,如果空间复杂度变低,时间复杂度就会逐渐增加,因此,学生在优化的过程中,应当依据实际情况,取二者的平均值。在评价二者性能的过程中,通常情况下,由开发人员自己进行评估。代码效率是指:代码从发出、使用以及返回过程中,所花费的时间,在优化时间复杂度方面,学生应当依赖代码执行的具体时间。在计算执行时间的过程中,学生可以通过计时器计算。也可以利用示波器。

2.2数据存储器的分配

在单片机运行的过程中,由于RAM容量相对较小,伴随数据信息的不断增多,要求扩展存储空间,以适应数据信息的增多,因此,这就要求教师应科学、合理的分配存储空间,进而不断提高利用效率。在C语言程序运行的过程中,主要应用存储器的覆盖技术,能够最大限度的节省存储空间。此外,内部寄存器负责参数之间的传递,如果存储器的剩余空间较小,会严重影响程序运行,因此,要求学生应处理好生成语句的长短,以免占据更多存储空间。

3结论

综上所述,通过分析C语言编成技巧在C语言课程教学中的应用,我们能够看出,学好C语言的关键是掌握编成技巧,但是,由于受到多种因素限制,学生并没有完全掌握编成技巧。因此,这就要求教师应转变以往的教学理念,积极引导学生将C语言理论基础转变为实践应用,进而不断提高学生的编成能力。

参考文献

[1] 段煅,刘建波,李丽丽.C语言编程技巧在C语言学习中的应用[J].电脑编程技巧与维护,2010,18(03):259-261.

[2] 李自清,崔玉刚.浅谈C语言编程中的常见错误和解决方法[J].科技信息(科学教研),2012,20(05):12-14.

[3] 王杰,王梦生,张筱雨.浅谈C语言编成技巧在C语言学习中的应用研究[J].电子技术与软件工程,2011,10(8):158-159.

c语言考试编程题练习 篇8

程序功能:找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数并且Mp也是素数时,称Mp为默森尼数,例如,p=5, Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;而Mp=2^11-1=2047,11是素数,2047不是素数,因此2047不是默森尼数.【编程要求】

1.编写函数void Mersenne(long a[ ],int m),其功能是求出前m个默森尼数并以此将它们保存到a指向的数组中,2.编写main函数,调用Mersenne函数并保存前7个默森尼数,将运行结果输出到屏幕及结果文件myf2.out中,最后将考生的考号也保存到结果文件myf2.out中

【测试数据与运行结果】

37311278191***7

2009春上机试题2(编程)

用一组整数验证命题,任意一个百位数字与个位数字不同的三位正整数n1在经过以下操作后一定会变换到1089:将n1的百位数与个位数字交换得到n2,求n1和n2差的绝对值得到n3,将n3的百位数字与个位数字交换得到n4;求n3与n4的和得到n5,n5一定是1089,若n1、n3是一位数或两位数,则在高位补0使其成为三位数

例如:n1:123,n2:321,n3:198(321,-123),n4:891,n5:1089(198+891)

【编程要求】

1.编写函数int fun(int a[ ],int b[ ], int n),其功能是用n指向数组的前n个整数验证上述命题,将所有符合命题的整数所在数组元素的下标依次保存到b指向的数组中,函数返回b数组中数据的个数

2.编写main函数,声明a数组并用测试数据初始化,用a数组作为实参调用fun函数,将a数组中所有符合命题的整数输出到屏幕及结果文件myf2.out中,最后将考生本人的准考证号字符串也保存到结果文件myf2.out中

【测试数据与运行结果】

测试数据:123765***31676963589

C语言练习卷-虚拟人生 篇9

一、语言和环境

1.实现语言:C语言。

2.环境要求:devC++。

二、实现功能

开发一套虚拟人生C语言系统,具体实现如下功能:

1.打开系统显示欢迎界面,以及功能菜单,用户输入需要操作的功能序号,根据用户选择的需要进行相应界面

如图1所示。

图1

功能菜单

2.当用户输入序号1时进入到超市购物界面,从数组中读取3个商品信息并进行显示,并提示用户选择需要购买的商品序号。如图2所

图2

显示商品信息

3.当用户选择商品序号后,显示购买的商品名称并提示“是否确认购买?”,当用户输入“Y”代表确认购买,判断用户余额是否充足,如果余额不足则提示余额不足,如果余额充足则进行购买并从余额中扣除相应的金额以及商品库存进行相减。如图3,图4所示

图3

购买余额不足提示

图4

购买余额充足进行余额相减并减少库存

4.当用户选择菜单按键2时可以查询账号的余额

如图5所示

图5

查询账号余额

5.当用户选择菜单按键3时进入打工界面并可以进行赚钱,按照用户输入的时间数字进行余额的增加,1秒钟加500元,累加的过程需要间隔1秒钟显示

如图6所示

图6

打工赚钱

6.当用户选择菜单按键4时可以把屏幕文字进行清理

三、具体要求及推荐实现步骤

1.定义结构体保存,商品信息(商品名称,商品价格,商品库存,商品说明),定义商品结构体数组保存3个商品。定义变量保存用户余额默认为0。

2.在main函数中加入商品初始化代码,手动向结构体数组中添加3个商品信息

3.进入超市购买商品

a)

循环把结构体数组中的3个商品显示在控制台中

b)

当用户选择需要购买的商品序号进行判断

i.如果余额充足则根据商品价格对余额进行减少,并对库存进行减一

ii.如果余额不充足则提示“余额不足”

4.赚钱

a)

当用户余额不足可以通过打工的方式赚钱,用户可以输入1-24这样的数字表达打工的小时数,每小时增加500元,当用户输入10时代表10个小时,利用循环对余额进行增加,每隔一秒钟显示一次。

5.清理屏幕文字

a)

当用户选择清理屏幕文字时可以通过代码把屏幕文字清空

四、评分标准

标准:虚拟人生

该项目的评分标准如下:

变量定义及初始化

定义结构体和结构体数组

定义函数对结构体数组初始化3个商品信息

主函数中能够循环进行菜单中的相关操作,并选择退出能自动退出程序

超市购买功能

正确定义商品购买函数

正确显示商品信息并提示用户输入商品序号

正确实现商品购买(判断余额是否充足和对库存减少)

赚钱

正确定义打工赚钱函数

正确显示打工界面并获取用户输入的打工时间

正确对时间进行循环并增加余额

查询余额和清理屏幕

正确显示余额

正确针对屏幕进行清空

总分

C语言填空题的解法 篇10

关键词:C语言 解题技巧 变量 一般方法

大多数学生都有学好C语言的愿望,但由于学习方法不对,最终事与愿违。有没有一种方法能够将学生这种好学的愿望转变成学习动力,真正将知识转变成学生行万里路的智慧呢?

笔者从自己的教学实践出发,以一道C语言填空题的解题方法为例,与广大同行共同进行探讨。

例:10个小孩围成一圈来分糖果,教师分发给每个小孩的糖果数依次为12、2、8、22、16、4、10、6、14、20,然后所有的小孩同时把自己的糖果分一半给右边的小孩,糖果数变为奇数的小孩向老师补要一块,问经过多少次调整后每个小孩的糖果数都一样,此时的糖果数为多少?请填空。

#include

void main()

{int i,k,f,y,b[10],a[10]=

{12,2,8,22,16,4,10,6,14,20};

k=1;f=0;

while(f!=1)

{ ①;

for(i=0;i<=9;i++)

{ ②;

b[i]=a[i];}

for(i=0;i<=9;i++)

{y= ③;

a[y]=a[y]+b[i];

if(a[y]%2!=0) ④; }

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

if(a[0]!=a[i]){f=0;break;}

k++;}

printf(“k=%d,a[0]=%d”,k,a[0]);}

C语言的填空题首先要从变量入手,弄懂变量的作用,然后通读整个程序,读懂程序的算法,接下来再结合一些技巧和经验来解答,问题就能迎刃而解了。

要读懂变量的作用,应该从变量的初值入手。对于变量的初值,笔者做了一些总结,如某一变量的初值为0(假如s=0),那么变量s一般情况下可以用来求和、进行统计、状态变量、数组下标等。如果出题者严格遵循变量名的命名规则,那么学生应该可以很快读懂变量的作用。有时初值为1的变量也可以用来进行统计,关键要善于归纳、总结。特别要提醒的是,如果初值作为状态变量的话,那么该变量的数值一定是在0和1之间变化的。

另外,变量k是用来统计分糖果的次数,变量f是一个状态变量。既然这样,状态肯定在1和0之间变化。而整个程序只有一处f=0,那么肯定有一空是变量f=1,不然这道题就成了一个死循环。结合程序,第①空应该填写f=1。

a数组第一次用来存放最初的糖果数,循环之后就变成用来存放分糖果后自己以及左面小孩给的总糖果数。统一起来a数组就是用来存放每次分之前各个小孩的糖果数。因为题目中要求同时分糖果,程序b数组是用作一个中间数组,用来存放每个小孩要分给右面小孩的糖果数,即每个小孩手中糖果数的一半,故b[i]=a[i]。所以,第②空可填成“a[i]=a[i]/2”。

经过仔细审题,再结合程序,第④空的答案也就显而易见了。故此空可填“a[y]++”。另外,学生在解题时,要注意体会题目中的“同时”一词。

经过前面的几个步骤之后,学生就会发现第二个for语句是真正意义上的分糖果的过程。学生很快得出答案“y=i+1”。但是,这个答案是错误的。把两个变量的变化关系写出来,为:

y=1时 i=0

y=2时 i=1......

y=9时 i=8

y=0时 i=9

前面9处两个变量间的关系均可以写成“y=i+1”。但最后一处如果也用这样的关系,那么得出“y=9+1=10”。显然此处的变量y不等于10。这时就要采用取余方法,就得出答案为“y=(i+1)%10”。

参考文献:

[1]谭浩强.C程序设计语言[M].

北京:清华大学出版社,2005.

[2]方明.陶行知教育名篇[M].北京:教育科学出版社,2006.

[3]李崇泰.C语言案例教程[M].

北京:电子工业出版社,2005.

c语言考试编程题练习 篇11

1 汇编语言和C语言的特点

1.1 汇编语言

汇编语言是人们基于初级计算机语言,也就是二进制语言的基础,将原本“0”和“1”组成的二进制字符串,换用较符合人类思维逻辑的符号来表达,比如,用“ADD”代表加法指令,用“ADC”代表加进位的加法指令,用“INC”代表加1指令,以更简明的方式来表达指令要求的符号化计算机语言。

由于符号化表达更符合人类思维逻辑的特征,也更易读易编写,汇编语言比二进制语言更易理解,人们在编程时更容易及时发现错误并修正错误,且后期的软件维护也变得相对简单。根据计算机的硬件系统来编制完成的汇编语言程序,可以将计算机不能识别的汇编语言翻译成计算机可以识别的二进制语言,从而完成信息指令的传输。用汇编语言进行编程时,数值运算比较复杂,数据处理的工作量大而繁琐。但汇编语言的优点在于编程效率高,可以充分发挥计算机硬件系统的功能,程序相对精准简练,软件质量比较高,所以汇编语言依旧是现在进行软件开发的重要工具。

1.2 C语言

C语言是面对过程的程序语言,摆脱了对计算机硬件系统的依赖,移植性比较强,在不同型号的计算机上都已成功移植,应用范围广且数据处理能力强。加上C语言处理数据的灵活性强,在各领域的实际软件应用编程时都普遍采用了C语言,例如单片机软件系统开发、三维图编写、动画编写等。

1.3 混合编程的意义

在进行程序设计时,C语言可以高效地生成目标代码,但是汇编语言生成的目标码质量更高,而且利用汇编语言完成对计算机硬件的特殊操作更快捷准确。利用汇编语言编程时,数据运算较繁琐,但C语言具有强大的库函数,可以高速完成对数据的处理。所以合理地混合使用两种语言进行程序设计,可以有效提高工作效率和工作质量。在混合编程时,C语言的主程序和汇编语言的主程序允许互相调用其子程序,也将汇编子程序插进C语言程序中,同时如何进行参数传递及确定调用关系非常重要,也要考虑到不同功能模块之间的连接问题。运用混合编程技术既可以发挥汇编语言的精确性优势及充分运用计算机硬件的功能,又可以利用C语言强大的数据处理能力,可以有效解决在大型程序设计中遇到的问题[1]。

2 混合编程的注意事项

2.1 注意保护堆栈和寄存器,以完成参数传递

汇编语言程序利用寄存器来完成参数信息的传递,C语言程序利用堆栈传递参数数据给汇编语言程序。C语言程序在调用汇编语言的变量和过程时,按下述的过程输送数据:C语言调用程序将参数按顺序压入堆栈→汇编语言用BP寄存器加上对应的偏移量来存取堆栈中C语言程序传递过来的参数→汇编语言进行程序转换→C语言从堆栈按顺序弹出的参数中获得操作数据。

所以在编程之前,应充分熟悉并掌握所用编程语言的多类别的堆栈的结构、生成和入栈模式。对汇编语言而言,应根据变量和过程的参数个数来选择合适的寄存器。当参数小于或等于4个时,将参数数据按次序一一传送到R0、R1、R2和R3寄存器;当子程序的参数个数大于4个时,将多出的参数数据按照原次序的反方向分别传送到数据栈[2]。

在C语言程序调入使用汇编变量和过程时要注意保护各种重要的寄存器,如DS、BP、SI、DI、AX和DX等,根据需要将数据用PUSH指令压入堆栈来保护,以保证参数的顺畅传递,否则会导致出现失误。

2.2 注意汇编子程序的返回值

返回值通过AX和DX寄存器来传递。少于16位二进制的返回值存放于AX,而32位的返回值中的低16位仍存放于AX,而其余的高16位则存放于DX寄存器中。大于32位(如浮点)的返回值存放于静态变量存储区[3]。

2.3 应统一两种语言的存储模式

汇编语言是使用Model来生成符合用户已选存储模式的段定义。而C语言则有6种存储模式可供选择,所选择的存储模式不同,其定义的代码段就不同。在混合编程时,汇编语言和C语言最好选择统一的存储模式,例如汇编语言选用Model Small模式来适应C语言的Small模式,以确保不同功能模块的准确衔接。

2.4 变量和函数的互相调用时命名方式的约定

在运用C语言进行程序设计的过程中,如需要使用汇编语言程序的过程和变量,汇编语言应加public标识,并在过程和变量名前加下划线,比如public_fun。

而汇编程序在调用C语言程序的函数或者变量时,应在调用部分的代码前添加下划线,并在汇编语言程序的命名时用extern加以说明,其格式分别是:extern_变量名:变量类型或者extern_函数名:函数类型[4]。

3 汇编语言和C语言混合编程方法

在完成功能复杂的软件的设计时,需首先将软件划分成不同的功能模块,每个功能模块以子程序或函数的形式存在,针对每个功能模块的不同特征,合理选用恰当的计算机语言来单独编程,而后将每个模块编译为相应的目标文件,所有文件组合后形成所需命令。

3.1 C语言程序直接插入单独汇编指令

C语言程序可执行汇编语言的ASM指令,故可运用ASM在C语言程序中嵌入所需汇编指令,不同的情况下,嵌入格式不同。

单个语句插入格式为:

“asm汇编语言指令代码”

如语句多,格式应为:

格式要求:(1)必须在对应的汇编程序代码前加入ASM;(2)必须按照C语言的环境要求使用分隔符“;”与注释分界符“/*”和“*/”。

这种混合编程方法虽然简单易行,但是直接插入的模式一旦出现细微偏差,就会影响原来的C语言环境,出现差错。所以此方法适用于需要汇编语言程序为程序实现一些特殊的硬件功能,且汇编程序简短时采用。此方法不适用于嵌入较复杂的汇编程序[5]。

3.2 以C语言为主,插入汇编语言

在运用C语言编程时,如果出现需要用汇编语言编程来实现特定功能的情况,且对应的汇编语言程序较为复杂,需要大量的汇编语言才能实现软件所需功能,则不应选择直接嵌入的方式,而应考虑将这部分软件程序划分为独立的功能模块,用汇编语言独立编制程序代码后,整体插入C程序对应位置。

在C语言主程序调入使用汇编语言的子程序的过程中,必须保证汇编源代码的正确性,才能确保调入使用过程的正确,最终顺利实现软件所需功能。因此,汇编源程序要严格依照系统要求来编制。

二者对照如表1所示。

必须用public和下划线来标明汇编子程序的外部函数属性,也就是严格按照下述格式:public_变量类型(或者变量名称),以保证C语言顺利地调入使用汇编子程序。

3.3 以汇编语言为主,C语言为辅

汇编语言具有在输入程序时能够直接采取二进制数据、控制硬件操作等C语言不具备的编程特长,因此汇编语言允许以主程序的方式调入使用C语言的函数和过程。

在调入使用时,要注意如下事项:(1)在被调用C语言函数前要加上extern标识,以表明其外来性质,以免跟原程序的代码弄混;(2)注意在调用时,要按照反向顺序依次将C语言函数的参数压入对应的任务堆栈,也就是保证最后子程序的最末位参数首先压入堆栈;(3)同时,在汇编主程序中用“call near ptr函数名”的形式完成调入使用C函数,不再加入原针对堆栈的指令[6]。

操作示例:

C子程序:

其过程为:前4个参数保存在r1-r4中→后两个参数留在堆栈用b1指令调用C程序模块→r0中得出结果。

4 结语

对于一些特殊领域的特殊应用需求的软件而言,混合编程可以解决很多难题。整个编程过程中交互使用两种语言,完成数据模型的搭建和数据的共享,以按照软件的功能需求,最终成功地完成程序编制。

摘要:C语言虽是高级计算机语言,但汇编语言可以高效率、高质量地发挥计算机硬件操作系统的功能,在程序编写时将二者有机结合并加以利用,可以事半功倍。

关键词:汇编语言,C语言,嵌入,相互调用,程序调试,混合编程

参考文献

[1]史斌.ARM汇编语言和C/C++语言混合编程的方法[J].电子测量技术,2006,(6).

[2]陈百良.单片机C语言与汇编语言的混合编程[J].科技信息,2008,(6).

[3]牟淑杰.C语言与汇编语言的混合编程[J].电大理工,2004,(1).

[4]杨加国.单片机C语言与汇编语言的混合编程[J].成都大学学报(自然科学版),2008,(3).

[5]左艳丽.C语言和汇编语言混合编程的方法和实现[J].职教与经济研究,2008,(3).

C语言面试题大12 篇12

#include

#include

#include

int main()

{

char str[] = “ABCD1234efgh”;

int length = strlen(str);

char * p1 = str;

char * p2 = str + length - 1;

while(p1 < p2)

{

char c = *p1;

*p1 = *p2;

*p2 = c;

++p1;

--p2;

}

printf(“str now is %s”,str);

system(“pause”);

return 0;

}

2、有一分数序列:1/2,1/4,1/6,1/8……,用函数调用的方法,求此数列前20项的和

#include

double getValue()

{

double result = 0;

int i = 2;

while(i < 42)

{

result += 1.0 / i;//一定要使用1.0做除数,不能用1,否则结果将自动转化成整数,即0.000000

i += 2;

}

return result;

}

int main()

{

printf(“result is %f”, getValue());

system(“pause”);

return 0;

}

Top

回复人:free131(白日?做梦!) ( ) 信誉:100 -4-17 10:18:33 得分:0

?

有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置,

以7个数为例:

{0,1,2,3,4,5,6,7} 0-->1-->2(删除)-->3-->4-->5(删除)-->6-->7-->0(删除),如此循环直到最后一个数被删除。

方法1:数组

#include

using namespace std;

#define null 1000

int main()

{

int arr[1000];

for (int i=0;i<1000;++i)

arr[i]=i;

int j=0;

int count=0;

while(count<999)

{

while(arr[j%1000]==null)

j=(++j)%1000;

j=(++j)%1000;

while(arr[j%1000]==null)

j=(++j)%1000;

j=(++j)%1000;

while(arr[j%1000]==null)

j=(++j)%1000;

arr[j]=null;

++count;

}

while(arr[j]==null)

j=(++j)%1000;

cout<<< p>

return 0;

}方法2:链表

#include

using namespace std;

#define null 0

struct node

{

int data;

node* next;

};

int main()

{

node* head=new node;

head->data=0;

head->next=null;

node* p=head;

for(int i=1;i<1000;i++)

{

node* tmp=new node;

tmp->data=i;

tmp->next=null;

head->next=tmp;

head=head->next;

}

head->next=p;

while(p!=p->next)

{

p->next->next=p->next->next->next;

p=p->next->next;

}

cout

return 0;

}

方法3:通用算法

#include

#define MAXLINE 1000 //元素个数

/*

MAXLINE 元素个数

a[] 元素数组

R[] 指针场

suffix 下标

index 返回最后的下标序号

values 返回最后的下标对应的值

start 从第几个开始

K 间隔

*/

int find_n(int a[],int R[],int K,int& index,int& values,int s=0) {

int suffix;

int front_node,current_node;

suffix=0;

if(s==0) {

current_node=0;

front_node=MAXLINE-1;

}

else {

current_node=s;

front_node=s-1;

}

while(R[front_node]!=front_node) {

printf(“%d”,a[current_node]);

R[front_node]=R[current_node];

if(K==1) {

current_node=R[front_node];

continue;

}

for(int i=0;i< p>

front_node=R[front_node];

}

current_node=R[front_node];

}

index=front_node;

values=a[front_node];

return 0;

}

int main(void) {

int a[MAXLINE],R[MAXLINE],suffix,index,values,start,i,K;

suffix=index=values=start=0;

K=2;

for(i=0;i

a[i]=i;

R[i]=i+1;

}

R[i-1]=0;

find_n(a,R,K,index,values,2);

printf(“the value is %d,%d”,index,values);

return 0;

}

试题:

void test2()

{

char string[10], str1[10];

int i;

for(i=0; i<10; i++)

{

str1[i] = “a”;

}

strcpy( string, str1 );

}

解答:对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10 分;

str1不能在数组内结束:因为str1的存储为:{a,a,a,a,a,a,a,a,a,a},没有“�”(字符串结束符),所以不能结束

strcpy( char *s1,char *s2)他的工作原理是,扫描s2指向的内存,逐个字符付到s1所指向的内存,直到碰到“�”,因为str1结尾没有“�”,所以具有不确定性,不知道他后面还会付什么东东,

正确应如下

void test2()

{

char string[10], str1[10];

int i;

for(i=0; i<9; i++)

{

str1[i] = “a”+i; //把abcdefghi赋值给字符数组

}

str[i]=“�”;//加上结束符

strcpy( string, str1 );

}

第二个code题是实现strcmp

int StrCmp(const char *str1, const char *str2)

做是做对了,没有抄搞,比较乱

int StrCmp(const char *str1, const char *str2)

{

assert(str1 && srt2);

while (*str1 && *str2 && *str1 == *str2) {

str1++, str2++;

}

if (*str1 && *str2)

return (*str1-*str2);

elseif (*str1 && *str2==0)

return 1;

elseif (*str1 = = 0 && *str2)

return -1;

else

return 0;

}

int StrCmp(const char *str1, const char *str2)

{

//省略判断空指针(自己保证)

while(*str1 && *str1++ = = *str2++);

return *str1-*str2;

}

第三个code题是实现子串定位

int FindSubStr(const char *MainStr, const char *SubStr)

做是做对了,没有抄搞,比较乱

int MyStrstr(const char* MainStr, const char* SubStr)

{

const char *p;

const char *q;

const char * u = MainStr;

//assert((MainStr!=NULL)&&( SubStr!=NULL));//用断言对输入进行判断

while(*MainStr) //内部进行递增

{

p = MainStr;

q = SubStr;

while(*q && *p && *p++ == *q++);

if(!*q )

{

return MainStr - u +1 ;//MainStr指向当前起始位,u指向

}

MainStr ++;

}

return -1;

}

分析:

int arr[] = {6,7,8,9,10};

int *ptr = arr;

*(ptr++)+=123;

printf(“ %d %d ”, *ptr, *(++ptr));

输出:8 8

上一篇:行车操作规程下一篇:土木工程材料 读书报告题及要求 提交稿 12-8-1