c语言编程题大全

2024-05-05

c语言编程题大全(精选10篇)

篇1:c语言编程题大全

考查的是结构体和数组的内存布局情况。

#include

#include

typedef struct array1{

int ID;

struct array1* next;

}A;

typedef struct array2{

int ID;

int a;

int b;

int c;

}* B;

int main

{

A s1[15];

A* s2;

B s3;

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

{

s1[i].ID=i+64;

}

s2=s1+3;

s3=(B)s2;

printf(”%d/n“,s3->b);

return 0;

}

篇2:c语言编程题大全

#include

#include

#include

char *GetMemory(char *p)

{

p = (char *)malloc(100);

return p;

}//当调用此函数时,会在栈里分配一个空间存储p, p指向堆当中的一块内存区,当函数调用结束后,若函数没有返回值,

//系统自动释放栈中的P

void Test(void)

{

char *str = NULL;

str=GetMemory(str);

strcpy(str, ”test“);

printf(”%s/n“,str);

}

char *GetMemory1(void)

{

char *p = ”Test1“;

return p;

}//若换成char p=”hello world“; 就会在函数调用结束后,释放掉为”Test1“的拷贝分配的空间,返回的P只是一个野指针

void Test1

{

char *str = ”“;

str=GetMemory1;

printf(”%s/n“,str);

//str=GetMemory;

}

void GetMemory2(char p, int num)

{

*p = (char *)malloc(num);

}//当调用此函数时,会在栈里分配一个空间存储p, p指向栈中的一变量str,在此函数中为str在堆当中分配了一段内存空间

//函数调用结束后,会释放p, 但str所在的函数Test2还没运行完,所以str此时还在栈里.

void Test2(void)

{

char *str = NULL;

GetMemory2(&str, 100);

strcpy(str, ”hello“);

printf(”%s/n“,str);

}

void Test3(void)

{

char *str=(char *)malloc(100);

strcpy(str, ”hello“);//此时的str指向的是拷贝到栈里的”hello“,所以当释放掉str指向的堆空间时,str指向的栈里的值还是不变

free(str);

if(str != NULL)

{

strcpy(str, ”world“);

printf(”%s/n",str);

}

}

int main

{

Test;

Test1;

Test2;

Test3;

篇3:c语言编程题大全

二级C语言考试由笔试和上机两部分。笔试考察的是应试者对基础知识和基本理论的掌握情况,而上机考试主要测试的是应试者的逻辑思维能力和运用C语言的能力,一般包括3种题型:填空题、改错题、编程题。该文对考试题库中编程题作出归纳,总结,希望对应试者有所帮助。

1 上机编程题的知识点

上机考试的知识点大概可以有5个,分别是:基本运算、循环、数组、字符串、结构体。以下对这5个知识点分别举例说明。

1.1 基本运算

例如有以下编程题:

编写函数fun,它的功能是:将两个两位正整数a, b中个位数和十位数合并成一个新的整数放在c中。合并的方式是:将a中的十位和个位依次放在变量c的百位和个位上,b中的十位和个位依次放在变量c的十位和千位上。

例如:当a=45, b=12。调用函数后c=2415。

注意:部分源程序存在文件PROG1.C中,数据文件IN.DAT中的数据不得修改。请勿改动主函数main () 和其他函数中的任何内容,仅在函数fun的花括号中填写编写的如干语句。

程序如下:

分析:这类基础题主要是考察应试者对基本运算的掌握。针对这个题关键是把这两个数的个位和十位求出来,然后再重新组合成一个新数。表示两位数a的个位数的方法是:a对10取余,即a%10;表示两位数a的十位数的方法是:a先除10后在对10取余,即a/10%10。

本题的答案为:c=b%10*1000+a/10*100+b/10*10+a%10;

1.2 循环

循环中最主要的应用就是迭代和遍历。迭代一般是用来解决累加、累乘的问题,可用for语句来实现。

例如有以下编程题:

编写函数fun,它的功能是计算并输出以下多项式的值:

例如:当在主函数中从键盘给n输入5,则输出为:s=-0.28333。

注意:要求n的值大于1但不大于100。部分源程序存在文件PROG1.C中,数据文件IN.DAT中的数据不得修改。请勿改动主函数main () 和其他函数中的任何内容,仅在函数fun的花括号中填写编写的如干语句。

程序如下:

分析:这类题主要是考察应试者对迭代的掌握。关键是找出迭代公式、变量的起始值和最大值。本题中表达式的每一项是都是一个分数,分子都是1,分母初始值是2,最大值是n, 而且每项增1,所以可设一整型变量i, 用for语句实现:for (i=2;i<=n;i++) 。表达式的值用变量s表示,s的初始值为1,每一项之间用减号连接,所以迭代公式,也就是循环语句可表示为s=s-1/i。除此以外,还应注意两点1。变量s的类型,因为表达式的值是实数,所以变量s应定义为double。2.注意基本算术运算中,两整数相除结果为整数,而题目中每一项要得到的结果为实数,所以应用算术运算中数据类型的转换将s=s-1/i改为s=s-1.0/i。

本题的答案为:

1.3 数组

数组可以分为一维数组和二维数组。

1.3.1 一维数组

编写函数fun, 它的功能是:找出一位整型数组中元素的最大值和它所在的下标,最大值和下标通过形参传回。数组元素中的值已在主函数中赋予。

主函数中的x是数组名,n是x中的数据个数,max存放最大值,index存放最大值的下标。

程序如下:

分析:这类题是遍历在数组中的应用。要找出数组中的最大值,必须对数组中每一个元素查找一遍,同时要进行比较。编程思想:可设一变量max, 假设数组中的第一个元素a[0]是最大的,然后后面的元素依次和max进行比较,只要比当前max的值大,就把它放在max中。

本题的答案为:

1.3.2 二维数组

编写程序,实现矩阵的转置。

例如:输入下面的矩阵:

分析:这类题是关键是解决两个问题:1.怎样对二维数组元素的遍历。2.怎样完成矩阵的转置法。因为二维数组元素表示要用到两个下标即行标和列标,所以遍历数组元素用到两层循环。矩阵的转置就是对应行和变成对应列,换句话说就是关于主对角线的对应元素交换。

本题的答案为:

1.4 字符串

例如有以下编程题:

规定函数中只包含字母和*。请编写函数fun, 它的功能是:删除字符串中的所有*。在编写函数时,不得使用字符串函数。

例如:字符串中的内容为:****A*BC*DEF*G*****,删除后,字符串中的内容为:ABCDEFG。

分析:这类题要对字符串中所有字符遍历,把不是*的字符保留下来。本题要解决两个问题:1.怎样判断字符串结束。2.怎样把不是*的字符放在原来的字符串中。字符串都是以’�’作为结束标志,可以把字符串中元素是不是’�’作为判断字符串结束的依据。可设一变量j作为字符串的新下标,初始值为0,只要原字符串中的元素不是’�’, j就加1,特别注意要在最后加上’�’最为字符串结束标志。

本题的答案为:

1.5 结构体

例如有以下编程题:

学生的记录是有学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun, 它的功能是:把分数最低的学生数据放在数组b中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。

程序如下:

分析:这类问题其实编程思想和前面的没有太大的差别,主要考察的是对结构体成员的引用,其引用形式为:结构体变量名.成员名。

本题的答案为:

2 结论

本文只是对计算机等级考试二级C语言的上机题作了简单的分析和总结,仅过分析可以看出,考察的知识点总共有5个,但是基本上都是循环的两方面的应用:迭代、遍历。

参考文献

[1]未来教育与教学研究中心.全国计算机等级考试二级C语言上机考试题库[M].北京:金版电子出版社, 2007.

篇4:c语言编程题大全

【摘要】本系统主要研究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.

篇5:C语言题集

⒈36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块。要一

次搬完。问:男、女、小孩要多少?

⒉ 找出1000以内的完数,所谓完数是指该数的各因子之和等于

该数,如6=1+2+3。

⒊证明6到200以内的数,符合哥德巴赫猜想(一个大于6的偶

数,可以分解成两个质数之和)。

⒋奇妙的算式:用字母代替十进制数字写出如下算式.EAGL

L

请找出这些字母代表的数字.LGAE

⒌求自然数m和n的最大公约数(用while循环实现)。提示:①比较m和n的大小,如n>m,两者交换; ②求m被n除的余数k;

③如果k为0,除数n为最大公约数;

④如果k不为0,原除数作为新的被除数m,余数作为新除数,继续②。

⒍用迭代法求cosX。

⒎求Fibonacci级数

1,1,2,3,5,8,13,21,34….⒏用牛顿迭代法求方程f(x)=0的根。(必做!)

⒐通过梯形法求y = (x2x3)dx2

0 输出结果。

⒑求1000以内能被73或127整除的自然数平方根之和。⒒求100----200之间的所有能被3以及7整除的自然数的平方根

之和。

⒓求级数a=2/1 + 3/2 + 5/3 +8/5 +13/8+21/13…的前30项之和。⒔求数列41+n(n –1)最小非素数项的序号(n > 2)。

⒕求满足以下条件的数:

该数大于100小于1000;

其个位数与十位数的平方和等其百位数的立方。

⒖求级数e=1+1/1!+1/2!+1/3!+…

要求:求n项(n由键盘输入)或最后一项小于10-6结束。⒗输入三边a、b、c判断是否能构成三角形,如能构成三角形,要求通过海伦公式计算其面积。

注:⑴海伦公式

sp(pa)(pb)(pc),pabc

⑵构成三角形的条件:任意两边只和大于第三边。

⒘求1500内的最大五个素数之和。

⒙一包海鲜单价为46.5元,如果购买100包至300包则按95%优

惠;若购买301包至500包,则按85%优惠;如果购买501包至1000

包,则按80%优惠;若购买1000包以上,按70%优惠。试编写一个

计算顾客购买X包海鲜所需金额,且打印购买数量、单价和总金额的程序。

⒚编程输出1~1000中所有个位数是7的素数,统计其个数,并

求满足该条件数的和,输出结果。

⒛编写程序求:

y11

121

23...1

n(n1)

21.父亲今年30岁,儿子今年6岁,问多少年后,父亲的年龄是 儿子的2倍?

22.将1元人民币换成5分、2分、1分的硬币有多少种换法?

23.一只猴子摘了一堆桃,每天吃一半再加1个,第10天去吃时只剩1个桃,问第一天的一堆桃有多少?

24.一个4位数,逆向排列后是原4位数的倍数,求出符合条件的4位数。

25.一个球从100米高度落下,每次反弹回原高度的一半,求第 10次落地时球的行程及下次反弹的高度。

26.输出公元1000年至今所有闰年。

闰年的条件自查!

27.用三种不同的方法计算。(方法自选三种)

28.用连分数求:

21

2

2

21111

2...29.某地刑警大队对涉及6个嫌疑人的一桩疑案进行分析:⑴ A、B至少有1人作案;

⑵ A、E、F,3人中至少有2人参与作案;

⑶ A、D不可能是同案犯;

⑷ B、C或同时作案,或都与本案无关;

⑸ C、D中有且仅有一人作案;

⑹ 如果D没有参与作案,则E也不可能参与作案。编程找出作案人。

30.阿米巴用简单分裂的方式繁殖,它每分裂一次要用 3 分钟。将若干个阿米巴放在一个盛满营养参液的容器内,45 分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴 220个。试

篇6:c语言编程题大全

分析:

逻辑结构:线性结构 非线性结构

线性结构:线性表 栈 队列

非线性结构:树 图

存储结构:顺序存储结构 链式存储结构

2.关于循环队列中起始元素为0,还是1的问题,然后是否空出一个元素避免队满队空一样。不管是栈还是队列栈顶指针都是指向下一个位置,所以对循环队列为(Q.rear-Q.font+MAXSIZE)%MAXSIZE

3.关于逗号表达式的运算顺序(A , B)是先算B再算A ?

赋值表达式是左值表达式,逗号表达式是自左向右运算的,逗号表达式的返回值是最右值

4.转义字符:ddd表示反斜杠后为1~3位8进制数所代表的字符数,xhh为1~2位十六进制数所代表的字符数

5.关于switch没有default会不会一直进行下去

6.*与+=运算符优先级的比较 *p+=2,是先算哪个 先算*p

7.循环队列是顺序存储结构(是队列的顺序存储结构的拓展,虽然有链队列,但是循环队列只限于顺序存储结构)

8.能够给出数据库物理存储结构与物理存取方法的是 :内模式

9.在满足实体完整性约束的条件下:一个关系中应该有一个或者多个候选关键词

10.软件生命周期中的活动不包括:市场调研

11.在黑盒测试方式中,设计测试用例的主要根据是:程序外部功能

12.在软件设计中不使用的工具是 D A、系统结构图

B、程序流程图

C、PAD图

D、数据流图(DFD图)

13.只要在在允许范围内整型和实型都能精确表示

14.一个正确的算法可以没有输入,但是要有输出

15.char str[3][10];str[1]={“guest”};(X)解释:str[1]是str[1][0]的地址,所以不能直接赋值 16.关于define定义的函数 S(x)(x)*x*2 在main函数中赋值时是按值固有的形式进行的运算,传a+b就为(a+b)*a+b*2

17.ftell不能用于向函数写入数据,fwrite fput fprintf 都可以

18.一般没有特殊说明时,循环队列并不会单独留一个空间来区分队满与队空,所以对于初始状态front=rear=n的条件,表明的就是n为队列能存放的最多元素,队满时就为rear比front小1

19.数据库管理系统提供的数据语言中,负责数据的增、删、改和查询的是(数据操纵语言)。

20.表达式的优先级:赋值表达式和关系表达式的优先级比较 k1=k1>k2

21.if表达式中如果是负值表示成立还是不成立

22.二维数组赋初值第一维长度可以省略的条件是什么

23对数据设计来说,.数据字典是进行详细数据收集和数据分析所获得的主要结构 所以在需求分析阶段建立数据字典

24.数据库系统的三级模式:概念模式,内模式(物理模式),外模式

没有数据模式

25.面向对象程序设计特征:继承,封装,多态

结构化程序设计:自顶向下,模块化,逐步求精

26.double a,*p=&a,*只是说明其为指针变量,表明p只能存放double类型变量的地址

27.在函数定义的静态变量,只需赋值一次,即可保持初始值,不需要每次调用都赋初值

形参不可说明为static型变量

28.采用结构化开发软件时,需要使用数据流图

29.数据库的核心:数据库管理系统(DBMs)

数据库系统包括四个部分:数据库、数据库管理系统、数据库应用程序、数据库管理员。

30.在实体,关系图中的联系通常被转化为关系。

结构化程序设计的主要特点是 : 每个控制结构只有一个入口和一个出口 在模块化程序设计中 , 按功能划分模块的原则是 : 各模块的功能尽量单一 , 31.且各模块之间的联系尽量少

在面向对象的程序设计中 , 各个对象之间相对独立 , 相互依赖性小

32.在面向对象方法中,一个对象请求另一个对象为其服务和方式是通过发送 D

A)调用语句

B)命令

C)口令

D)消息

33.软件三要素:程序、数据和文档 软件生命周期包括软件定义、软件开发及软件维护三个阶段

结构化分析常用工具:数据流图(DFD)

34.软件工程的三个要素的是:工具,过程,方法

35.内聚性最强的是:功能内聚

篇7:C语言判断题(部分)

C语言中,字符数据用格式说明“%c”来输出,字符串数据用格式说明“%s”来输出。T C语言中,关键字及编译预处理命令用小写字母书写。T 二元运算符均可以和赋值运算符构成复合的赋值运算符。T C语言中,不能在变量名、函数名、关键字中插入空格和空行。T Vasual c++6.0中可以使用“//”和 “/* */”注释程序,注释部分不编译。T C语言中,格式说明“%10.4f”中10表示数据输出的最小宽度,4表示小数位数。T C语言中,为了区别一般的变量,符号常量必须用大写字母表示。F 执行语句++i;i=3;后变量i的值为4。F 程序中的“=”是赋值号,与数学中等号的功能相同。F C语言中,在进行混合运算时,数据类型由高级向低级转换。F 将C程序编译成目标文件,其扩展名为EXE。F 整数在存储时不会产生误差,实数在存储时也不会产生误差。F 用float定义的实型变量在内存占8个字节,输入/输出格式符是%f。f C语言中,putchar函数的功能是把一字节代码输出到标准输出设备。T 字符数据与整型数据可互相赋值。T 增1(或自增)、减1(或自减)运算符都是双目运算符。F 逗号表达式的值是第一个表达式的值。F C语言中,强制类型转换后,原变量的值和数据类型不变。T 字符数据在内存以ASCII码存储,占2个字节,用7位二进制表示。F C程序的书写格式比较自由,一行内可写一个语句,也可以写多个语句。T

第二章

if(表达式)语句1 else 语句2 结构中,如表达式为a>10,则else的条件隐含为a<10。F C语言规定,else总是与它上面、最近的、尚未配对的if配对。T switch…case结构中case后的表达式必须为常量表达式。T 可以用swicth结构实现的程序都可以使用if语句来实现。T switch…case结构中条件表达式和常量表达式值可以为float类型。F 由float x=3e-6,y=3e-6;可得x==y的逻辑值为真。F 语句int a=2;if(a=3)b=1;执行后b的值是1。T 所有关系运算符的运算优先级相同。F switch后面园括号内的表达式的值和case后面的常量表达式的值都必须是整型或字符型,不允许是浮点型。T 两个变量交换数据时常使用一个工作变量。T switch语句的结束发生在break;语句的执行或者switch语句的“}”。T 逻辑运算符的运算优先级低于算术运算符 的运算优先级。F 执行a=0;if(0);a=3;后a的值为3。T 第三章

由i=-1;while(i<10)i+=2;i++;可知此while循环的循环体执行次数为6次。T 在循环外的语句不受循环的控制,在循环内的语句也不受循环的控制。F do…while语句的循环体至少执行1次,while和for循环的循环体可能一次也执行不到。T break;语句执行时退出到包含该break;语句的所有循环外。for循环、while循环和do while循环结构之间可以相互转化。T 循环for(;;)的循环条件始终为真。T 从语法角度看,for(表达式1;表达式2;表达式3)语句中的3个表达式均可省略。T 二层循环for(i=0;i<5;i+=2)for(j=0;j<5;j++)的循环体的执行次数为15。T C语言中,do-while语句构成的循环只能用break语句退出。F for、while和do while循环结构的循环体均为紧接其后的第一个语句(含复合语句)。T

if(表达式)语句1 else 语句2 结构中,如表达式为a>10,则else的条件隐含为a<10。F C语言规定,else总是与它上面、最近的、尚未配对的if配对。T switch…case结构中case后的表达式必须为常量表达式。T 可以用swicth结构实现的程序都可以使用if语句来实现。T

第4章

仅仅对存放字符串的数组才可以一次引用整个数组,其余均不能一次引用整个数组。T 使用字符串处理函数strcmp需要包含头文件string.h。T C语言中,字符串以'为结束标志。T 数组名代表该数组的首地址。

T C语言中,用格式符“%s”输入字符数组时,数组名前不能加&。

C语言中,gets()函数的返回值是用于存放输入字符串的字符数组首地址。

F T 设有int a;char abc[5]=“abcd”;则a=strlen(“ABC”);执行后a的值为5。F 定义数组时可以同时给数组赋初值,初值的个数可以超过数组的长度,多余的被忽略。F 已知字符数组str1的初值为“China”,则语句str2=str1;执行后字符数组str2也存放字符串“China” F 在数组定义后,可以使用语句如iSum[ ]={1,2,3};给数组初始化。F 二维及多维数组在定义的同时给数组赋初值时,可以省略数组的各维长度。F 对于数值型数组来说,可以一次引用整个数组。F C语言中,在对全部数组元素赋初值时,必须指定数组的长度。

F C语言中,数组元素在内存中是顺序存放的,它们的地址是连续的。

T C语言中,数组元素的下标是从1开始的,下标不能越界。F C语言中,数组名是一个常量,是数组首元素的内存地址,可以重新赋值。F 一个数组中的所有元素可以具有不相同的数据类型。

第5章

一个C程序可以由若干各函数组成,这些函数可以书写在不同的文件中。T C语言中,函数间数据传递的方式有三种,即用返回值、参数、全局变量。T 函数的形参只能在函数内部使用。T C语言中,实参可以是常量、变量或表达式。T C语言中,实参的个数、类型和位置必须与形参的定义一一对应。T

F C语言中,编译预处理后 所有的符号常量名和宏名都用相应的字符串替换。T 宏展开不作语法检查,展开时不替换关键字和常量。

T 实参向形参进行数值传递时,数值传递的方向时单向的,即形参变量值的改变不影响实参变量的值。T 函数原型说明中,省略形参变量或者将形参变量写成其它名称不影响程序的正确性 T 一个C程序中只能包含一个main()函数,程序总是从main()函数开始执行。

T 数组名作为函数的参数时,实参数组和形参数组共用相同的内存单元。T 所有的函数调用前都必须进行函数原型说明。F 函数可以嵌套定义,也可以嵌套调用。F 第六章

C语言中,结构类型与结构变量的含义一样,都可以用来存放数据。

f 共用体所有成员共用的内存单元的大小为各成员需要占用内存大小之和。

F 将整数值赋给枚举变量时不需要作强制类型转换。

F 共用体所有成员都共用同一内存单元T 结构体数组不可以在定义时进行初始化。F 结构体可以定义在单独的头文件中,使用时需要在对应C文件中包含该头文件。T C语言中,关键字enum可用于结构类型的定义f 可以把结构体数组元素作为一个整体输出。F 结构体变量作参数时是地址传递。F C语言中,结构的成员可以是一维数组或多维数组。t 枚举类型时一种基本的数据类型。F 结构体和共用体成员的应用都只能引用最低一级的成员。t 第七章

int a=5,*p;p=&a;则p的值为5。F 表达式*p++的运算顺序为先自增后取值。F 语句*--p;执行之后p指向的内存单元被改变。F 两个指针相加没有意义。T *(a[i]+j)与a[i][j]的含义相同。T 指针、数组名、函数名都是地址。T void 类型的指针不指向某种类型的数据,所以没有意义。F 一个指针变量的值是一个地址值。T 指针作函数的参数时是地址传递方式。T C语言中,只能用下标来引用数组元素。F C语言中,执行表达式(*p)++后p的指向改变了。F 链表的插入和删除和数组元素一样需要移动插入或删除点后的元素。F 语句“int *p;”中的*p的含义为取值。F

第八章

篇8:c语言编程题大全

1 C语言

1.1 C语言特点

C语言在计算机语言编程中应用最流行、最广泛, 在学习中应对C语言有一点了解, 在使用过程中, C语言具有以下的特点: (1) C语言比较紧凑、操作灵活、操作方便, 没有非常严格的语法限制, 比较自由的书写程序过程, C语言有效结合了低级语言的实用性及高级语言的结构性, 功能非常强大。 (2) C语言应用范围广泛。C语言是学习其他语言程序的基础, 可植性比较强, 在多种操作系统中, 皆适用C语言, 可以灵活使用运算符, 实现编程的高效性。 (3) C语言的语法中数据结构多种多样, 简单复杂皆有, 图形处理能力甚强。 (4) C语言可以使用数据和代码分割, 具有结构式的语言特点, 程序层次清晰, 便于维护、使用及调式进行。C语言能够对物理地址进行直接访问以及各种操作。因此, C语言是学生学习计算机课程并不可少的一门知识, 但要学好C语言, 盲目的学习是不对的。

1.2 C语言的产生背景

1970年美国的Ken Thompson, 以BCPL语言作为基础, 然后设计出简单且接近硬件的B语言, 但是B语言功能比较有限, 过于简单。1972年~1973年, 美国D·M在B语言基础之上设计出C语言, C语言的出现给程序的编写带来不少便利, 而且编写程序比较自由, 吸引许多软件使用它。C语言语法里的运算和程序非常丰富, 编写程序的运算方法很多, 拥有可以实现一些高级程序都无法实现的功能, 且C语言用起来比较灵活, 在运算各种数据结构时, 不管事简单还是复杂, 都可以简单实现。C语言不仅在运算和程序编写上更加便利, 且可以直接访问地址, 并进行操作, 较快较容易的对程序进行编译以及控制。

2 学习

虽然许多学生选择计算机专业, 努力学习C语言, 但是学生仍然很难对C语言产生兴趣。C语言是计算机专业学习的基础课程, 且功能强大, 用途广泛。随着经济迅速发展, 第三产业越发越重要, 计算机相关的产业所占比重越来越大, C语言功能强大, 在计算机中越来越受到重视。

针对C语言的学习, 仅仅是课堂的理论传授远远不够, C语言理论比较丰富, 集合众多语言特点, 通过直接的感官方式教授给学生, 学生难以完全理解。如果教师能够把内容通过直观的方式展示出来, 比如让学生上机操作, 让理论与实践相结合, 提高学生对C语言的学习兴趣。

C语言中包含比较复杂的结构和算法, 许多学生难以理解, 只能简单的记忆, 但是学习效果比较低, 且学生觉得枯燥, 没有较高的学习兴趣, 在学生学习理论的同时, 应该多上机操作, 更加容易的掌握C语言的规律和方法。教师要注意自己的教学方法, 不能简单的进行实践教学与理论教学, 要关注学生, 加强学生与教师的沟通, 帮助学生理解课堂课外的C语言相关知识, 在教授知识之外, 教师要突出C语言在计算机学习中的重要性, 让学生更容易、深入的理解及分析C语言, 增加学习兴趣。

3 C语言编程的技巧

学生觉得C语言抽象、难以理解, 归根结底是没有找到学习的技巧, 对于刚入门者说, 学习C语言比较吃力, 学习任何一项技能都需要一个过程, 关键在于掌握其精髓, 掌握其中精髓再学习这门课程就容易许多。对于C语言, 编程技巧非常重要。 (1) 指针的掌握。掌握指针是C语言中比较重要的技巧, 指针虽有消耗内存的缺点, 但指针在运算中速度加快, 编程语句也更加容易, 指针的耗内存虽大, 但对整个编程而言却是微不足道。学生在学习指针这一章节时, 需加强学习能力, 除学习课堂知识之外, 可以多在网上查询资料, 进行补充, 掌握好指针这一技巧。 (2) 掌握数学知识。在学习计算机过程中, 数学知识的重要性不容小觑, 能够解决C语言运算中的许多问题, IT界有一句话叫“数学是计算机之母”, 可见数学对计算机的重要性。在C语言学习中, 逻辑思维较好的同学可以较容易的学习C语言, 进行编程前会分析, 选择更加简单的运算方法, 因此, 数学知识对学习C语言起很大作用。 (3) 掌握位运算。位运算的使用可以方便简洁代码, 提高运算效率, 较快解决问题。在计算机程序中, 位是最小数据单位, 是所有操作和运算的基础单位, 位运算是所有操作的基础运算程序。当然具体问题需要具体分析, 提高学生兴趣和编程效率, 让C语言的应用更加广泛最为重要。

4 结语

在学习C语言的过程中, 学生应准确了解C语言的特点, 学习并掌握C语言的编程技巧, 提高学生的学习兴趣, 学习更加具有目的性, 提高C语言的学习效率以及学习质量。培养学生的编程能力, 能够更好的服务社会。

摘要:随着时代的发展, 信息技术发展迅速, 计算机人才被社会所大量需求。因此大学中大都设立计算机专业, 为社会培养所需人才, C语言是计算机专业的重要课程之一, 是大一课程学习中比较基础的一门课程, C语言功能强大, 对于学生以后专业基础起到很大的作用, 但是学生学习效果并不是很好, 即使努力学习也没有得到预期的效果。笔者对C语言编程技巧在C语言学习进行研究, 并且提出解决措施。

关键词:C语言,学习编程,语言特点

参考文献

篇9:C语言填空题的解法

关键词: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.

篇10:C语言面试题大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

上一篇:大专毕业生学习总结下一篇:海明威作品中的自然生态主义