基本c语言基础题(共9篇)(共9篇)
1.基本c语言基础题 篇一
1、输入两个正整数,m和n,求其最大公约数和最小公倍数。
2.输入一行字符,分别统计出其中字母、空格、数字和其他字符的个数。3.输入一个正整数求出它是几位数;输出原数和位数。4.输入一个正整数,输出原数并逆序打印出各位数字。
5.从键盘上输入若干学生的一门课成绩,统计并输出最高成绩和最低成绩及相应的序号,当输入负数时结束输入。
6.从键盘上输入若干学生的一门课成绩,计算出平均分,当输入负数时结束输入。将结果输出。
8.打印以下图案:
*
***
*****
******* 9.打印以下图案:
* ** *** **** 10.求下列试子的值:1-1/2+1/3-1/4+„„+1/99-1/100,将结果输出。11.打印出100~999之间的所有水仙花数。
12.求Sn=a+aa+aaa+„+aa„a之值,n,a由键盘输入。13.打印以下图案:
*******
*******
*******
******* 14.打印以下图案:
121
12321
1234321 15.打印以下图案:
1234321
12321
16.编写一个统计学生成绩程序,完成以下功能:输入4个学生的2门课成绩;求出全班的总平均分,将结果输出。17.打印以下图案:
*****
*****
*****
*****
***** 18.给出年、月、日,计算该日是该年的第几天。19.求一个3*3的整型矩阵对角线元素之和。将原矩阵和求出的和输出。
20.求一个4*3的矩阵各行元素的平均值;将原矩阵和求出的平均值全部输出。21.求一个3*4的矩阵各列元素的平均值;将原矩阵和求出的平均值全部输出。22.求一个3*5的矩阵各列元素的最大值,将原矩阵和求出的最大值全部输出。23.求一个4*3的矩阵各行元素的最大值,将原矩阵和求出的最大值全部输出。24.求一个M*N的矩阵中元素的最大值,将原矩阵和求出的最大值全部输出。25.判断一个N*N的矩阵是否为对称矩阵,将原矩阵输出,判断结果输出。
26.有一篇文章,有三行文字,每行有80个字符。要求统计出其中英文大写字母、消协字母、数字、空格以及其他字符的个数。
27.将20个整数放到一维数组中,输出该数组的最大值和最小值。
28.将15个整数放到一维数组中,输出该数组中的最大值它的下标,然后将它和数组中的最前面的元素对换。
29.将字符数组str1种下标为偶数的元素赋给另一字符数组str2,并输出str1和str2。30.编写一个程序,将两个字符串连接起来,不要使用strcat函数。
31.编写一个程序,将字符数组a中的全部字符复制到字符数组b中。不要使用strcpy函数。32.编写一个程序,找出3个字符串中的最大者,将它输出。
33.编写程序,输入任意一个1~7之间的整数,将他们转换成对应的英文单词。例如:1转换成Monday,7转换成Sunday。
34.编写程序,输入两个整数,和+、-、*、/之中的任意一个运算符,输出计算结果。35.输入年号,计算这一年的2月份的天数,将结果输出。
36.输入三角形的三边a,b,c,判断a,b,c,能否构成三角形,若能,计算面积。
37.输入三角形的三边a,b,c,判断a,b,c,能否构成三角形,何种类型的三角形:等腰、等边、直角、等腰直角、一般。
38.输入奖金数a,计算并输出税率、应缴税款和实得奖金数。(用if语句编程)39.输入奖金数a,计算并输出税率、应缴税款和实得奖金数。(用switch语句编程)40.输入学生的成绩,利用计算机将学生的成绩划分出等级并输出:
90~100:A级;
80~89:B级;
70~79:C级;
60~69:D级;
0~59:E级; 41.编程序,求方程aX2+bX+c=0的解;输入a,b,c.42.编程序,输入4个整数,按由小到大的顺序输出。
43.求满足1+2+3+„+n<500中最大的N,并求其和,编写程序实现。
45.求Fibonacci数列前40个数,每行输出5个,将40个Fibonacci数输出。46.按以下规律翻译密码:
将每一个字母变成它后面的字母,例如,将A变成B,B变成C,„,Z变成A,非字母字符不变,“!”作为电文结束标志。
47.百元买百鸡问题:公鸡每只5元,母鸡每只3元,小鸡3只一元,问一百元买一百只鸡有几种买法。
48.使用数组编程,计算出前20项fibonacci数列,要求一行打印5个数。
49.编程序求出两个3*4矩阵的和并将原矩阵和求出的和矩阵按原矩阵的形式分别输出。50.将一个4*3的矩阵转置,并将原矩阵和求出的转置矩阵按原矩阵的形式分别输出。
51.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是小写字母,则把它变成大写字母;其它字符不变,请编程。
52.已知x和y存在下列对应关系,要求对输入的每个x值,计算出y值,请编程。
y=x*(x+2),2 y=2x,-1 y=0,x=a||x=-a;y=sqrt(a*a-x*x),-a 56.请编制程序判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no.57.编程实现:计算1到100之间的奇数之和及偶数之和。58.请编程实现:求100个任意整数的累加和。 59.请编程实现:求1到100之间所有能被3整除,但不能被5整除的数的和。 60.请编程实现:输入任意正整数n,计算n!并将结果输出,输出结果中没有小数部分。61.请编程实现:计算1至50中是7的倍数的数值之和。 62.请编程实现:对任意100个整数,统计0的个数及正数的累加和。63.请编程实现:输入两个整数,判断它们之间的关系(=,<,>等),并清楚地将比较结果输出。64.请编程实现:输入几个整数,判断其中偶数的个数,并输出结果(要求:数据的个数及原始数据由键盘输入)。 65.请编程实现:输入几个整数,判断其中奇数的个数,并输出奇数的累加和。(要求:数据的个数及原始数据由键盘输入) 66.有一个两位数XY,X是十位,Y是个位;给出X+Y的值和X*Y的值;编程实现让用户猜测这个两位数十多少?根据猜测给出不同的提示。 67.键盘输入的一个两位数XY,X是十位,Y是个位;请编程计算X+Y的值和X*Y的值。68.用for循环语句计算1到20的和,并将结果输出。 69.从键盘输入一行字符,统计出输入的字符个数(注:不要使用strlun函数编程)。70.编程实现:任意输入10个数,计算所有正数的和,负数的和以及10个数的和。71.编程实现:求任意20个数中的正数之和及正数的个数,并将结果输出。72.编程实现:对键盘输入的任意一个四位正整数,计算各位数字平方和。如:2345 则:计算2*2+3*3+4*4+5*5 73.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完,请编程。 74.编程实现:打印100以内个位数为6且能被3整除的所有数。75.编程实现:从键盘输入若干个整数(数据个数应不少于50),其值在0至4的范围内,用-1作为输入结束的标志,统计每个整数的个数。76.编写一个函数sort,将放到一维数组中的若干个数按从大到小的顺序排序;在主函数中输入若干个数到一个一维数组中,调用sort,对该数组进行排序,在主函数中将原数组和排好序的数组输出。 77.输入一个正整数,将其用质因子的乘积表示,并输出结果,格式为:12=2×2×3。 78.输入一个正整数,求出它的质因子的和,并输出结果,格式为:12的质因子和=2+2+3=7。79.编写一个函数,判断一个正整数是否为完数:如果一个数的除它本身以外的所有因数之和等于它本身,则它就是完数。主函数中找出1000以内的所有完数。 80.编写函数GCD,求两个正整数的最大公约数,主函数中输入任意5个正整数,调用函数GCD,求出这5个数的最大公约数和最小公倍数。 81.编函数isprime判断正整m是否为素数;如果是素数,返回正整数1,否则返回0;主函数中调用isprime,找出2到1000之间的所有素数。 82.一维数组a中的若干个数已按从小到大的顺序有序;在主函数中输入一个数,将其插入到该数组中,使得原数组依然按原序有序,分别输入原数组和插入新元素之后的数组。83.有5个国家名,编程实现按字母先后顺序排序,然后分别输出原数组和排序之后的数组。84.有一行文字,要求删去其中的某个字符,此行文字和要删的字符均由键盘输入,分别输出原文字和删除之后的文字(注:原文字中的所有和要删除字符相同的字符完全删除)。85.打印如图所示的杨辉三角,要求打印出n行,n由键盘输入。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 „„„ 86.编一个函数实现将一个整型的一维数组中的数逆序存放,不使用辅助数组。主函数输入一个整型的一维数组,调用上述函数,将该数组逆置,将结果输出。 87.编写一个函数convert,求一个方阵的转置矩阵;主函数中输入方阵的阶数和方阵,在主函数中将原矩阵和转置矩阵按原格式输出。 88.求∏值,精度为10-5:∏/4≈1-1/3+1/5-1/7+„„ 89.用公式计算:e≈1+1/1!+1/2!„+1/n!,精度为10-6。90.有一分数序列 2/1,3/2,5/3,8/5,13/8,21/13 求该序列的前20项之和。 91.编一个子函数GCD,求两个正整数的最大公约数,主程序输入n个自然数,调GCD,求出这n个数的最大公约数。92.写函数求sin(x)的值。计算公式为:Sin(x)=X-X3/3!+X5/5!-X7/7!+ „+(-1)n-1X2n-1/(2n-1)!。93.编一函数使用冒泡法对若干个整数按从小到大的顺序排序,主函数中输入若干个整数到一个一维数组中,调用排序函数,将其排序,最后将原数组和排好序的数组输出。 94.求一个m行n列的二维数组中的这样一个原素;它在它所在的行为最大,在它所在的列为最小。 95.编写一个函数求给定字符串长度,主函数中输入一个字符串,调用该子函数,求出该字符串的长度,输出。 96.编写一个函数将给定字符串复制到另一个字符串中去,主函数中输入一个字符串,调用该子函数,复制出另一字符串,将两个串输出。 97.写函数求Cos(x)=1+X2/2!-X4/4!+X6/6!-„+(-1)nX2n/(2n)!。 98.编写一个函数将给定字符串中的大写字母转换成小写字母,主函数中输入一个字符串,调用该子函数,进行转换,将原字符串及转换后的字符串输出。99.编写一个函数将给定的两个字符串连接成一个字符串: 格式为:strcat(ch1,ch2); 功能:将ch2复制到ch1的后面; 主函数中输入两个字符串,调用该子函数,求出连接之后的字符串,将两个原字符串及连接之后的结果串输出。 100.用40元钱买苹果、西瓜和梨共100个,且三种水果都有。已知苹果0.4元一个,西瓜4元一个,梨0.2元一个。问可以买多少个?编程输出所有购买方案。101.编程:建立一个3×3的二维整数数组,求两条对角线上元素值得和,并将结果输出。(用函数调用方式编程) 102.编程计算:1*2*3+3*4*5+„„+99*100*101的值。103.有一个5×4的矩阵,编程实现:找出该矩阵中每行元素的最大值,并使该值成为该行的首列元素。 104.编写一个程序,使输入的一个字符串按反序存放在一字符数组中,然后输出。要求: (1)在主调函数中输入字符串; (2)写函数完成由主调函数传递来的字符串按反序存放; (3)在主调函数中输出结果。 105.从键盘输入五个字符串,分别求出字符串中长度最长和最短的字符串,请编程。(要求:不要使用strlen(_)函数编程) 106.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请编程实现。 107.写一个判断素数的函数,在主函数中调用素数的判断函数,求出2到1000之间的素数的累加和,将结果输出,请编程。 108.编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。 109.请编程实现:将两个字符串s1和s2比较,如果s1>s2,输出一个正数;s1 要求:不要用strcpy函数,两个串用gets函数读入,输出的正数或负数的绝对值应是相比较的两个字符串相应字符的ASCⅡ码的差值。 110.编写一个函数,由实参传来一个字符串,把串中所有大写字母变成相应的小写字母;原串中所有的小写字母变成相应的大写字母,在主函数中输入原字符串和输出变换后的字符串,请编程。 111.编程实现:由键盘输入的任意一组字符中统计出大写字母的个m和小写字母的个数n,并输出m、n中的较大者。 112.定义一个含有30个整形元素的数组,按顺序分别赋予从2开始的偶数,然后按顺序每五个数求出一个平均值,放在另一个数组中并输出,请编程。 113.输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一: (1)能同时被3,5,7整除; (2)能被其中两数(要指出哪两个数)整除; (3)能被其中一个数(要指出哪个数)整除。 关键词:C语言,操作文件,基本方法 文件是存储在外部介质 (如硬盘、U盘) 上的数据的集合, 按文件内容划分, 可分为:源程序文件、数据文件, 本文所指的文件指的是数据文件, 这些数据可以长期保留, 可以随时存取。文件的组织形式划分文本文件和二进制文件。 文件的基本操作是“写”文件和“读”文件, “写”文件将数据从内存输出到磁盘文件, “读”文件是从已建立的数据文件中将所要的数据输入到内存。 使用数据文件有什么好处呢?为什么要使用数据文件呢?我们通过一些例子可以看出来。比如:以下程序中涉及的6个数来源于程序中的数组a。也就是程序在运行过程中从源程序中的数组a读取数据。 程序1:求6个数之和 { } 程序2:求6个数中的最大值 { } 这两个程序的共同点是:程序和数据放在一起, 虽然是处理同一批数据, 但是程序之间没有数据共享。 既然程序使用的是同一批数据, 如果将这些数据保存在文件中, 而不同的程序均可共享这些数据, 这就需要文件操作的“读文件”操作了。 程序3:求6个数之和 { fread (a, 2, 6, fp) ;/*读数据*/ fclose (fp) ;/*关闭文件*/} 程序4:求6个数中的最大值 { } 以上两程序的数据均来自同一个文件C:data.dat。当然在读文件之前打开文件fp=fopen (“c:data.dat”, “rb”) , 读完文件之后, 要关闭文件fclose (fp) ;。文件在一定程度上实现了程序与数据的分离。有一些需要长期保存或多次使用的数据, 但是希望减少录入的次数, 我们往往使用数据文件将其保存起来, 需要用到时打开相关文件即可。 上面是读文件的例子, 下面说一下写文件。 写文件时将程序中的数据写入文件保存起来, 同时, 可以被其他程序使用, 从而实现数据共享。 假设学生基本情况包括学号和一门课成绩, 从键盘输入若干学生的学号和成绩, 写入文件d:cwzstu01.txt中, 用-1结束成绩输入。 struct aaa {char num[10]; int s;}; } “写”文件和“读”文件是最基本的文件操作, 很好的理解了读写操作, 就能够理解文件的其它操作了。 通过前面的程序例子, 我们也可以看到文件操作的基本用法。 首先要定义文件指针。文件指针是一个名为FILE (必须大写) 的结构体类型的指针, 其各成员和类型已由系统内定, 并在“stdio.h”头文件中作了说明, 我们不必了解细节, 只需要在程序开头加上“#include 其次是打开文件。对文件的操作不管是读还是写, 都需要先打开文件。打开文件使用fopen函数。具体为fopen (文件名, 打开方式) ;。文件名应该包括绝对文件路径, 即所在的盘符和路径, 否则默认为是当前目录下。 打开方式中, 需要明确用什么方式, “w”、“wb”表示“只写”, “r”、“rb”表示“只读”, 含“b”的是针对二进制文件的。“r+”、“rb+”可读可写, 更换读写操作时, 不必关闭文件, “r+”总是从文件其实位置开始, “rb+”可由位置函数设置读写起始位置。“w+”、“wb+”可读可写, 先建立文件并进行写操作后, “w+”可以从头开始读, “wb+”可由位置函数设置读写起始位置。 fopen () 函数调用成功, 及打开文件成功, 这时返回的是该文件的地址并赋给文件指针。如果打开文件失败, fopen () 将返回一个空指针NULL。正确打开文件才能读写, 打开文件失败则无法读写, 所以在进行读写操作之前, 一般要判断文件打开是否成功。 再次就是文件的读写操作了。读写操作可以使用fscanf () 和fprintf () , 还有其它的一些函数。 基本模式:如图1,若点E是线段AB上的一点,且∠CAE=∠EBD=∠CED=90°则△CAE∽△EBD.(当CE=DE时,△CAE≌△EBD,如图2)。 图1、图2基本模式的证明思路:利用七年级“同角的余角相等”得到∠ACE+∠CEA=∠BED+∠CEA,得出∠ACE=∠BED又因为∠CAE=∠EBD,根据相似三角形的判定方法之“两角法”证出△CAE∽△EBD。如果要证明全等,就用所得条件,再结合已知CE=DE利用AAS或ASA即证得。 基本模式变式1:如图3,把△EBD平移使得点E和点A重合,此时CE和AD的交于点H,同时保证∠CHD=90°,这里同样可以利用基本模式的方法证明出两个三角形相似的结论,然后再把这样重叠后的两个三角形放入正方形(或者其他特殊图形中)就可演变为一道中考压轴题。 图4是图3在动态的情况下的特殊情况,即当点D作为动点,当该点和点F重合后的情形,此时在正方形内,△CAE和△EBD都变成了等腰直角三角形,如果点C和点E都作为动点的话,最后还会出现图5这个特殊情况。 一、利用模式引发“血案一”,轻松解决中难题 例1:如图6-1,l1∥l2∥l3,且l1,l2之间的距离为2,l2,l3之间的距离为3.若点A,B,C分别在直线l1,l2,l3上,且AC⊥BC,AC=BC,则的长是 分析:过点A作AD⊥l3于D,过点B作BE⊥l3于E,利用基本模式(图2),证明△ACD≌△CBE,根据全等三角形的性质,可得BE=CD=3,再利用勾股定理列式求出AC=■的长,最后再由勾股定理或者利用等腰直角三角形的斜边等于直角边的■倍得结果AB=■AC=■×■=2■. 二、利用模式引发“血案二”,轻松解决图形变换题型 (一)一次折叠的血案 例2:如图7,将矩形ABCD沿直线AE折叠,顶点D恰好落在BC边上点F处,已知CE=3cm,AB=8cm,则图中阴影部分面积为 cm2. 分析:利用基本模式得出△ABF∽△FCE,注意根据折叠的过程以及矩形的性质,得:AF=AD=BC,EF=DE=CD-CE=AB-CE=8-3=5.根据勾股定理求得CF=4,再设BF=x,由相似性质:■=■,解得求得S△ABF+S△CEF=■AB·BF+■FC·CE=30cm2。 (二)两次折叠的血案 例3 :将矩形纸片ABCE按如图8的方式折叠,AE、EF为折痕,∠BAE=30°,BE=■,折叠后,点C落在AD边上的C1处,并且点B落在EC1边上的B1处,则BC和CF的长为( )。 A.3■和2 B.3和2■ C.4■和■ D.4和2 (1)BC的思路分析:由折叠的性质,可得:∠AEB=∠AEC1,EC=EC1,又由四边形ABCE是矩形,得出AD∥BC,证出∠AEC1=∠AEB=∠EAC1=60°,证得△AEC1是等边三角形,可得EC1=AE,等量代换得EC=AE,又由30°直角三角形的性质,得AE=2BE=2■,则BC=AE+EC=3■.(2)解CF的简要过程:由(1)得EC=2■,AB=3,又由基本模式,易得△ABE∽△ECF,∴■=■,∴CF=2。故选A. 三、利用模式引发“血案”——添加辅助线,轻松解决动态压轴题 (一)静态压轴题的血案 例4:如图9,边长为4的正方形OABC的顶点O在坐标原点,顶点A,C分别在x轴、y轴的正半轴上,点E是OA边上的动点(不与点O,A重合),EP⊥CE,且EP交正方形外角的平分线AP于点P。 (1)如图9-1,当点E是边的中点OA时,证明CE=EP; (2)如图9-1,当点E是OA边的中点时,在y轴上是否存在点M,使得四边形BMEP是平行四边形?若存在,求出点M的坐标;若不存在,说明理由; (3)如图9-2,当点E是OA边上的任意一点时(点E不与点O,A重合),设点E坐标为E(t,0)(0 (1)利用基本模式,作出相应辅助线,如图9-3,过P作PH⊥x轴,交x轴于点H,易证得△OCE∽△HEP,由相似性质得到关于HP的方程,得到HP的值;在Rt△OCE与Rt△HEP中,分别利用勾股定理求出CE与EP,即证到CE=EP; (2)利用基本模式变式1中的图4原理作辅助线。如图9-3,过B作BM∥PE,由CE⊥EP,推出CE⊥BM,利用同角的余角相等可得∠OCE=∠CBM,又∵BC=CO,利用ASA证得△BCM≌△COE,∴BM=CE,而EP=CE,可得出EP=BM及四边形BMEP为平行四边形,由全等的性质得CM=OE=2,求出OM的长即求得M坐标; (3)理由与(1)同理,如图9-4过点P作PH⊥x轴,由基本模式得△COE∽△EHP,∴利用■=■,得HP=t,EH=4-t+GP=4,最后利用勾股定理得出结论. (二)动态压轴题的血案 例5:如图10,在平面直角坐标系中,点C的坐标为(0,4),动点A以每秒1个单位长的速度,从点O出发沿x轴的正方向运动,M是线段AC的中点.将线段AM以点A为中心,沿顺时针方向旋转90°,得到线段AB.过点B作x轴的垂线,垂足为E,过点C作y轴的垂线,交直线BE于点D.运动时间为t秒.当点B与D点重合时,t的值为 ; 分析:易得Rt△CAO∽Rt△ABE;当B、D重合时,BE=OC,根据比例式,求得t=8。 四、利用模式,触类旁通 (一)从相似到三角函数的血案 例6:如图11,沿AE折叠矩形纸片ABCD,使D点落在BC边的点F处已知AB=8,BC=10,则tan∠EFC的值为 . 分析:根据折叠的性质和锐角三角函数.在Rt△ABF中,有AB=8,AF=AD=BC=10,由勾股定理得BF=6,根据基本模式得∠EFC=∠BAF,故tan∠EFC=tan∠BAF=■=■该题是证明基本模式过程中步骤的应用。 (二)利用模式,解决多种血案 例7:如图12,在矩形纸片ABCD中,已知AB:BC=2:3,点M在BC边上,将矩形折叠,使点D落在点M处,折痕为EF,若AE=2,CM=4,则AB的长为 . 分析:如图13,过点E作EG⊥BC,设AB=EG=2x,BC=3x,GM=BC-BG-MC=3x-6,EM=ED=BC-AE=3x-2,由勾股定理EG2+GM2=EM2,解得x1=4,2=2(舍去),故AB的长为8。 1、线形表a、b为两个有序升序的线形表,编写一程序,使两个有序线形表合并成一个有序升序线形表h; 答案在 请化大学 严锐敏《数据结构第二版》第二章例题,数据结构当中,这个叫做:两路归并排序 Linklist *unio(Linklist *p,Linklist *q){ linklist *R,*pa,*qa,*ra; pa=p; qa=q; R=ra=p; while(pa->next!=NULL&&qa->next!=NULL){ if(pa->data>qa->data){ ra->next=qa; qa=qa->next; } else{ ra->next=pa; pa=pa->next; } } if(pa->next!=NULL) ra->next=pa; if(qa->next!=NULL) ra->next==qa; return R; } 2、运用四色定理,为N个局域举行配色,颜色为1、2、3、4四种,另有数组adj[][N],如adj[i][j]=1则表示i区域与j区域相邻,数组color[N],如color[i]=1,表示i区域的颜色为1号颜色, C语言面试题大汇总9 , 四色填充 3、用递归算法判断数组a[N]是否为一个递增数组。 递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束: bool fun( int a[], int n ) { if( n= =1 ) return true; if( n= =2 ) return a[n-1] >= a[n-2]; return fun( a,n-1) && ( a[n-1] >= a[n-2] ); } 4、编写算法,从10亿个浮点数当中,选出其中最大的10000个。 用外部排序,在《数据结构》书上有 《计算方法导论》在找到第n大的数的算法上加工 (1)下面叙述正确的是______。(C)A.算法的执行效率与数据的存储结构无关 B.算法的空间复杂度是指算法程序中指令(或语句)的条数 C.算法的有穷性是指算法必须能在执行有限个步骤之后终止 D.以上三种描述都不对 (2)以下数据结构中不属于线性数据结构的是______。(C)A.队列 B.线性表 C.二叉树 D.栈 (3)在一棵二叉树上第5层的结点数最多是______。(B)A.8 B.16 C.32 D.15(4)下面描述中,符合结构化程序设计风格的是______。(A)A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B.模块只有一个入口,可以有多个出口 C.注重提高程序的执行效率 D.不使用goto语句 (5)下面概念中,不属于面向对象方法的是______。(D)A.对象 B.继承 C.类 D.过程调用 (6)在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是______。(B)A.可行性分析 B.需求分析 C.详细设计 D.程序编码 (7)在软件开发中,下面任务不属于设计阶段的是______。(D)A.数据结构设计 B.给出系统模块结构 C.定义模块算法 D.定义需求并建立系统模型(8)数据库系统的核心是______。(B)A.数据模型 B.数据库管理系统 C.软件工具 D.数据库 (9)下列叙述中正确的是______。(C)A.数据库是一个独立的系统,不需要操作系统的支持 B.数据库设计是指设计数据库管理系统 C.数据库技术的根本目标是要解决数据共享的问题 D.数据库系统中,数据的物理结构必须与逻辑结构一致 (10)下列模式中,能够给出数据库物理存储结构与物理存取方法的是______。(A)A.内模式 B.外模式 C.概念模式 D.逻辑模式 (11)算法的时间复杂度是指______。(C)A.执行算法程序所需要的时间 B.算法程序的长度 C.算法执行过程中所需要的基本运算次数 D.算法程序中的指令条数 (12)下列叙述中正确的是______。(A)A.线性表是线性结构 B.栈与队列是非线性结构 C.线性链表是非线性结构 D.二叉树是线性结构 (13)设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为______。(B)A.349 B.350 C.255 D.351(14)结构化程序设计主要强调的是______。(B)A.程序的规模 B.程序的易读性 C.程序的执行效率 D.程序的可移植性 (15)在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是______。(D)A.概要设计 B.详细设计 C.可行性分析 D.需求分析 (16)数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是______。(A)A.控制流 B.加工 C.数据存储 D.源和潭 (17)软件需求分析阶段的工作,可以分为四个方面:需求获取、需求分析、编写需求规格说明书以及______。(B)A.阶段性报告 B.需求评审 C.总结 D.都不正确 (18)下述关于数据库系统的叙述中正确的是______。(A)A.数据库系统减少了数据冗余 B.数据库系统避免了一切冗余 C.数据库系统中数据的一致性是指数据类型的一致 D.数据库系统比文件系统能管理更多的数据(19)关系表中的每一横行称为一个______。(A)A.元组 B.字段 C.属性 D.码 (20)数据库设计包括两个方面的设计内容,它们是______。(A)A.概念设计和逻辑设计 B.模式设计和内模式设计 C.内模式设计和物理设计 D.结构特性设计和行为特性设计(21)算法的空间复杂度是指______。(D)A.算法程序的长度 B.算法程序中的指令条数 C.算法程序所占的存储空间 D.算法执行过程中所需要的存储空间 (22)下列关于栈的叙述中正确的是______。(D)A.在栈中只能插入数据 B.在栈中只能删除数据 C.栈是先进先出的线性表 D.栈是先进后出的线性表 (23)在深度为5的满二叉树中,叶子结点的个数为______。(C)A.32 B.31 C.16 D.15(24)对建立良好的程序设计风格,下面描述正确的是______。(A)A.程序应简单、清晰、可读性好 B.符号名的命名要符合语法 C.充分考虑程序的执行效率 D.程序的注释可有可无 (25)下面对对象概念描述错误的是______。(A)A.任何对象都必须有继承性 B.对象是属性和方法的封装体 C.对象间的通讯靠消息传递 D.操作是对象的动态性属性 (26)下面不属于软件工程的3个要素的是______。(D)A.工具 B.过程 C.方法 D.环境 (27)程序流程图(PFD)中的箭头代表的是______。(B)A.数据流 B.控制流 C.调用关系 D.组成关系 (28)在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是______。(A)A.数据库系统 B.文件系统 C.人工管理 D.数据项管理 (29)用树形结构来表示实体之间联系的模型称为______。(B)A.关系模型 B.层次模型 C.网状模型 D.数据模型 (30)关系数据库管理系统能实现的专门关系运算包括______。(B)A.排序、索引、统计 B.选择、投影、连接 C.关联、更新、排序 D.显示、打印、制表 (31)算法一般都可以用哪几种控制结构组合而成______。(D)A.循环、分支、递归 B.顺序、循环、嵌套 C.循环、递归、选择 D.顺序、选择、循环 (32)数据的存储结构是指______。(B)A.数据所占的存储空间量 B.数据的逻辑结构在计算机中的表示 C.数据在计算机中的顺序存储方式 D.存储在外存中的数据(33)设有下列二叉树: 对此二叉树中序遍历的结果为______。(B)A.ABCDEF B.DBEAFC C.ABDECF D.DEBFCA(34)在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送______。(D)D.消息 A.调用语句 B.命令 C.口令 (35)检查软件产品是否符合需求定义的过程称为______。(A)A.确认测试 B.集成测试 C.验证测试 D.验收测试 (36)下列工具中属于需求分析常用工具的是______。(D)A.PAD B.PFD C.N-S D.DFD(37)下面不属于软件设计原则的是______。(C)A.抽象 B.模块化 C.自底向上 D.信息隐蔽 (38)索引属于______。(B)A.模式 B.内模式 C.外模式 D.概念模式 (39)在关系数据库中,用来表示实体之间联系的是______。(D)A.树结构 B.网结构 C.线性表 D.二维表 (40)将E-R图转换到关系模式时,实体与联系都可以表示成______。(B)A.属性 B.关系 C.键 D.域 (41)在下列选项中,哪个不是一个算法一般应该具有的基本特征______。(C)A.确定性 B.可行性 C.无穷性 D.拥有足够的情报 (42)希尔排序法属于哪一种类型的排序法______。(B)A.交换类排序法 B.插入类排序法 C.选择类排序法 D.建堆排序法 (43)下列关于队列的叙述中正确的是______。(C)A.在队列中只能插入数据 B.在队列中只能删除数据 C.队列是先进先出的线性表 D.队列是先进后出的线性表 (44)对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为______。(B)A.N+1 B.N C.(N+1)/2 D.N/2(45)信息隐蔽的概念与下述哪一种概念直接相关______。(B)A.软件结构定义 B.模块独立性 C.模块类型划分 D.模拟耦合度 (46)面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是______。(C)A.模拟现实世界中不同事物之间的联系 B.强调模拟现实世界中的算法而不强调概念 C.使用现实世界的概念抽象地思考问题从而自然地解决问题 D.鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考 (47)在结构化方法中,软件功能分解属于下列软件开发中的阶段是______。(C)A.详细设计 B.需求分析 C.总体设计 D.编程调试 (48)软件调试的目的是______。(B)A.发现错误 B.改正错误 C.改善软件的性能 D.挖掘软件的潜能 (49)按条件f对关系R进行选择,其关系代数表达式为______。(C)A.R|X|R B.R|X|R f C.бf(R)D.∏f(R)(50)数据库概念设计的过程中,视图设计一般有三种设计次序,以下各项中不对的是______。(D)A.自顶向下 B.由底向上 C.由内向外 D.由整体到局部 (51)在计算机中,算法是指______。(C)A.查询方法 B.加工方法 C.解题方案的准确而完整的描述 D.排序方法 (52)栈和队列的共同点是______。(C)A.都是先进后出 B.都是先进先出 C.只允许在端点处插入和删除元素 D.没有共同点 (53)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是______。(A)A.cedba B.acbed C.decab D.deabc(54)在下列几种排序方法中,要求内存量最大的是______。(D)A.插入排序 B.选择排序 C.快速排序 D.归并排序 (55)在设计程序时,应采纳的原则之一是______。(A)A.程序结构应有助于读者理解 B.不限制goto语句的使用 C.减少或取消注解行 D.程序越短越好 (56)下列不属于软件调试技术的是______。(B)A.强行排错法 B.集成测试法 C.回溯法 D.原因排除法 (57)下列叙述中,不属于软件需求规格说明书的作用的是______。(D)A.便于用户、开发人员进行理解和交流 B.反映出用户问题的结构,可以作为软件开发工作的基础和依据 C.作为确认测试和验收的依据 D.便于开发人员进行需求分析 (58)在数据流图(DFD)中,带有名字的箭头表示______。(C)A.控制程序的执行顺序 B.模块之间的调用关系 C.数据的流向 D.程序的组成成分 (59)SQL语言又称为______。(C)A.结构化定义语言 B.结构化控制语言 C.结构化查询语言 D.结构化操纵语言 (60)视图设计一般有3种设计次序,下列不属于视图设计的是______。(B)A.自顶向下 B.由外向内 C.由内向外 D.自底向上(61)数据结构中,与所使用的计算机无关的是数据的______。(C)A.存储结构 B.物理结构 C.逻辑结构 D.物理和存储结构 (62)栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是______。(D)A.ABCED B.DBCEA C.CDABE D.DCBEA(63)线性表的顺序存储结构和线性表的链式存储结构分别是______。(B)A.顺序存取的存储结构、顺序存取的存储结构 B.随机存取的存储结构、顺序存取的存储结构 C.随机存取的存储结构、随机存取的存储结构 D.任意存取的存储结构、任意存取的存储结构(64)在单链表中,增加头结点的目的是______。(A)A.方便运算的实现 B.使单链表至少有一个结点 C.标识表结点中首结点的位置 D.说明单链表是线性表的链式存储实现 (65)软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指______。(B)A.模块间的关系 B.系统结构部件转换成软件的过程描述 C.软件层次结构 D.软件开发过程 (66)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为______。(B)A.PAD图 B.N-S图 C.结构图 D.数据流图 (67)数据处理的最小单位是______。(C)A.数据 B.数据元素 C.数据项 D.数据结构 (68)下列有关数据库的描述,正确的是______。(C)A.数据库是一个DBF文件 B.数据库是一个关系 C.数据库是一个结构化的数据集合 D.数据库是一组文件 (69)单个用户使用的数据视图的描述称为______。(A)A.外模式 B.概念模式 C.内模式 D.存储模式 (70)需求分析阶段的任务是确定______。(D)A.软件开发方法 B.软件开发工具 C.软件开发费用 D.软件系统功能 (71)算法分析的目的是______。(D)A.找出数据结构的合理性 B.找出算法中输入和输出之间的关系 C.分析算法的易懂性和可靠性 D.分析算法的效率以求改进 (72)n个顶点的强连通图的边数至少有______。(C)A.n-1 B.n(n-1)C.n D.n+1(73)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是______。(B)A.堆排序 B.直接插入排序 C.快速排序 D.直接选择排序 (74)用链表表示线性表的优点是______。(A)A.便于插入和删除操作 B.数据元素的物理顺序与逻辑顺序相同 C.花费的存储空间较顺序存储少 D.便于随机存取 (75)下列不属于结构化分析的常用工具的是______。(D)A.数据流图 B.数据字典 C.判定树 D.PAD图 (76)软件开发的结构化生命周期方法将软件生命周期划分成______。(A)A.定义、开发、运行维护 B.设计阶段、编程阶段、测试阶段 C.总体设计、详细设计、编程调试 D.需求分析、功能定义、系统设计 (77)在软件工程中,白箱测试法可用于测试程序的内部结构。此方法将程序看做是______。(C)A.循环的集合 B.地址的集合 C.路径的集合 D.目标的集合 (78)在数据管理技术发展过程中,文件系统与数据库系统的主要区别是数据库系统具有______。(D)A.数据无冗余 B.数据可共享 C.专门的数据管理软件 D.特定的数据模型 (79)分布式数据库系统不具有的特点是______。(B)A.分布式 B.数据冗余 C.数据分布性和逻辑整体性 D.位置透明性和复制透明性 (80)下列说法中,不属于数据模型所描述的内容的是______。(C)A.数据结构 B.数据操作 C.数据查询 D.数据约束 (1)算法的复杂度主要包括______复杂度和空间复杂度。答:时间 (2)数据的逻辑结构在计算机存储空间中的存放形式称为数据的______。答:模式#逻辑模式#概念模式 (3)若按功能划分,软件测试的方法通常分为白盒测试方法和______测试方法。答:黑盒 (4)如果一个工人可管理多个设施,而一个设施只被一个工人管理,则实体“工人”与实体“设备”之间存在______联系。答:一对多#1:N#1:n(5)关系数据库管理系统能实现的专门关系运算包括选择、连接和______。答:投影 (6)在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、______遍历和后序遍历。答:中序 (7)结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、______和限制使用goto语句。答:模块化 (8)软件的调试方法主要有:强行排错法、______和原因排除法。答:回溯法 (9)数据库系统的三级模式分别为______模式、内部级模式与外部级模式。答:概念#概念级(10)数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。答:数据存储 (11)设一棵完全二叉树共有500个结点,则在该二叉树中有______个叶子结点。答:250(12)在最坏情况下,冒泡排序的时间复杂度为______。答:n(n-1)/2#n*(n-1)/2#O(n(n-1)/2)#O(n*(n-1)/2)(13)面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个______。答:实体 (14)软件的需求分析阶段的工作,可以概括为四个方面:______、需求分析、编写需求规格说明书和需求评审。答:需求获取 (15)______是数据库应用的核心。答:数据库设计 (16)数据结构包括数据的______结构和数据的存储结构。答:逻辑 (17)软件工程研究的内容主要包括:______技术和软件工程管理。答:软件开发 (18)与结构化需求分析方法相对应的是______方法。答:结构化设计 (19)关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、______和自定义完整性。答:参照完整性 (20)数据模型按不同的应用层次分为三种类型,它们是______数据模型、逻辑数据模型和物理数据模型。答:概念 (21)栈的基本运算有三种:入栈、退栈和______。答:读栈顶元素#读栈顶的元素#读出栈顶元素 (22)在面向对象方法中,信息隐蔽是通过对象的______性来实现的。答:封装 (23)数据流的类型有______和事务型。答:变换型 (24)数据库系统中实现各种数据管理功能的核心软件称为______。答:数据库管理系统#DBMS(25)关系模型的数据操纵即是建立在关系上的数据操纵,一般有______、增加、删除和修改四种操作。答:查询 (26)实现算法所需的存储单元多少和算法的工作量大小分别称为算法的 ______。答:空间复杂度和时间复杂度 (27)数据结构包括数据的逻辑结构、数据的 ______以及对数据的操作运算。答:存储结构 (28)一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了软件的______。答:可重用性 (29)面向对象的模型中,最基本的概念是对象和 ______。答:类 (30)软件维护活动包括以下几类:改正性维护、适应性维护、______维护和预防性维护。答:完善性 (31)算法的基本特征是可行性、确定性、______和拥有足够的情报。答:有穷性 (32)顺序存储方法是把逻辑上相邻的结点存储在物理位置______的存储单元中。答:相邻 (33)Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向______的设计方法。答:数据结构 (34)数据库设计分为以下6个设计阶段:需求分析阶段、______、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。 答:概念设计阶段#数据库概念设计阶段 (35)数据库保护分为:安全性控制、______、并发性控制和数据的恢复。答:完整性控制 (36)测试的目的是暴露错误,评价程序的可靠性;而______的目的是发现错误的位置并改正错误。答:调试 1. 用宏定义写出swap(x,y) #define swap(x, y) x = x + y; y = x - y; x = x - y; 2.数组a[N],存放了1至N-1个数,其中某个数重复一次,写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型: int do_dup(int a[],int N) 3 一语句实现x是否为2的若干次幂的判断 int i = 512; cout << boolalpha << ((i & (i - 1)) ? false : true) << endl; 4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001 unsigned int intvert(unsigned int x,int p,int n){ unsigned int _t = 0; unsigned int _a = 1; for(int i = 0; i < n; ++i){ _t |= _a; _a = _a << 1; } _t = _t << p; x ^= _t; return x; } 慧通: 什么是预编译 何时需要预编译: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p char str1[] = “abc”; char str2[] = “abc”; const char str3[] = “abc”; const char str4[] = “abc”; const char *str5 = “abc”; const char *str6 = “abc”; char *str7 = “abc”; char *str8 = “abc”; cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl; 结果是:0 0 1 1 解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间; 而str5,str6,str7,str8是指针,它们指向相同的常量区域, 12. 以下代码中的两个sizeof用法有问题吗?[C易] void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母 { for( size_t i=0; i< p> if( “a”<=str[i] && str[i]<=“z” ) str[i] -= (“a”-“A” ); } char str[] = “aBcDe”; cout << “str字符长度为: ” << sizeof(str)/sizeof(str[0]) << endl; UpperCase( str ); cout << str << endl; 答:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。 一个32位的机器,该机器的指针是多少位 指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。 main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf(“%d,%d”,*(a+1),*(ptr-1)); } 输出:2,5 *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5 &a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) int *ptr=(int *)(&a+1); 则ptr实际是&(a[5]),也就是a+5 原因如下: &a是数组指针,其类型为 int (*)[5]; 而指针加1要根据指针类型加上一定的值, 不同类型的指针+1之后增加的大小不同 a是长度为5的int数组指针,所以要加 5*sizeof(int) 所以ptr实际是a[5] 但是prt与(&a+1)类型是不一样的(这点很重要) 所以prt-1只会减去sizeof(int*) a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]. 1.请问以下代码有什么问题: int main() { char a; char *str=&a; strcpy(str,“hello”); printf(str); return 0; } 没有为str分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。 char* s=“AAA”; printf(“%s”,s); s[0]=“B”; printf(“%s”,s); 有什么错? “AAA”是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s=“AAA”; 然后又因为是常量,所以对是s[0]的赋值操作是不合法的。 ★ C笔试面试题 ★ c语言面试题 ★ 嵌入式开发―C语言面试题 ★ 学生会面试题 ★ 医师面试题 ★ 面试题4 ★ 面试题:家庭情况 ★ Windows面试题 ★ 爱立信面试题 关键词:汇编语言,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. [关键词]遗传基本规律题 解题技巧 [中图分类号] G633.91 [文献标识码] A [文章编号] 16746058(2016)110123 纵观近几年的生物高考,遗传学相关知识一直是学生比较大的失分点,教师在高三生物复习中对该考点的复习指导有时也觉得力不从心,特别是遗传基本规律题的解题方法指导上存在一定的误区。为此,笔者结合2015年高考生物试卷,分类探讨遗传基本规律题的一些解题技巧,以期对高三生物复习有所帮助。 一、图表类题 遗传基本规律图表类题的解题一般可从表格中子代的基因型及其比例入手,推测出亲代的基因型;解题的步骤一般从确定遗传方式开始,然后推断出各种基因型及其比例。 【例1】 果蝇的长翅(A)对残翅(a)为显性、刚毛(B)对截毛(b)为显性。为探究两对相对性状的遗传规律,进行如下实验。 实验一,可以推断出等位基因A、a位于 染色体上;等位基因B、b可能位于 染色体上,也可能位于 染色体上。(填“常”“X”“Y”或“X和Y”) 实验二中亲本的基因型为 ;若只考虑果蝇的翅型性状,在F2的长翅果蝇中,纯合体所占比例为 。 解析:此题中不论是实验一还是实验二,F2中长翅和残翅的雌雄果蝇比例都为1∶1,据此可推断等位基因A、a位于常染色体上,而另一对相对性状(刚毛和截毛)则情况百出,由于实验一和实验二亲本组合中雌雄正好相反,而且F2的数据中表现型雌雄也正好相反,这就与我们平时所接触到的简单类型(X染色体上有基因,Y染色体上无相应的等位基因)有所不同,它的Y染色体上也有相应的基因,我们不难推出实验一亲本为AAXBXB、aaXbYb,实验二亲本为AAXBYB、aaXbXb。 由此也提醒我们在平时的练习中要注意Y染色上相关基因的存在,不要只考虑X或常染色体。 二、遗传系谱图类题 解答这类题型可分三步走:第一,析图判断遗传方式;第二,据 图结合题干信息推断个体基因型;第三,巧用“先分后合”的思想来解决两种以上的遗传病计算。 【例2】 由苯丙氨酸羟化酶基因突变引起的苯丙氨 酸代谢障碍,是一种严重的单基因遗传病,称为苯丙酮尿症(PKU),正常人群中每70人有1人是该致病基因的携带者(显、隐性基因分别用A、a表示)。图1是某患者的家族系谱图,其中Ⅱ1、Ⅱ2、Ⅱ3及胎儿Ⅲ1(羊水细胞)的DNA经限制酶MspI消化,产生不同的片段(kb表示千碱基对),经电泳后用苯丙氨酸羟化酶cDNA探针杂交,结果见图2。 从图1很容易判断出苯丙酮尿症(PKU)是一种常染色体隐性遗传病。解题时,应 “先分”: 先计算出苯丙酮尿症(PKU)的患病概率,Ⅱ2和Ⅱ3所生的正常女儿为1/3AA和2/3Aa,正常男性为69/70AA和1/70Aa,所以两者婚配后生出患苯丙酮尿症孩子的概率为2/3×1/70×1/4=1/420,正常的概率为419/420。接着计算患红绿色盲的概率:由题干信息“Ⅱ2和Ⅱ3色觉正常,Ⅲ1是红绿色盲患者”可知Ⅱ2和Ⅱ3的红绿色盲基因型为XBY和XBXb,则他们婚配所生的女儿为1/2XBXB和1/2XBXb,正常男性的红绿色盲基因型为XBY,则两者婚配后所生的子女患红绿色盲的概率为1/2×1/4=1/8,正常的概率为7/8。 “后合”:生一个两病都患的孩子的概率为1/8×1/420=1/3360,生一个正常孩子的概率为7/8×419/420=2933/3360,则生一个只患一种病的孩子的概率为1-1/3360-2933/3360=213/1680。 三、与基因频率关联类题 1.通过基因型个数计算基因频率。 方法:某种基因的基因频率=此种基因个数/(此种基因的个数+其等位基因的个数)。 2.通过基因型频率计算基因频率。 方法:某种基因的基因频率=某种基因的纯合体频率+1/2杂合体频率。 3.根据遗传平衡定律计算基因频率。 先判断能利用遗传平衡定律计算的条件,如①在一个很大的群体中;②随机婚配而非选择性婚配;③没有自然选择;④没有突变发生;⑤没有大规模的迁移,群体的基因频率和基因型频率在一代代繁殖传代中保持不变,然后再根据遗传平衡定律进行计算。 这类题型在2015年高考新课标(I卷)中有所体现,解题时可以依据上述三种方法来完成。 1: 第1题 m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人作为函数值返回,将低于平均分的分数放在below所指定的函数中。答案: int fun(int score[],int m,int below[]){ int i,k=0,aver=0;for(i=0;i<m;i++)aver+=score[i];aver/=m;for(i=0;i<m;i++)if(score[i]<aver){ below[k]=score[i];k++;} return k;} 第2题 请编写函数fun,它的功能是:求出1到100之内能北7或者11整除,但不能同时北7和11整除的所有证书,并将他们放在a所指的数组中,通过n返回这些数的个数。答案: void fun(int *a, int *n){ int i,j=0;for(i=2;i<1000;i++)if((i%7==0 || i%11==0)&& i%77!=0)a[j++]=i;*n=j;} 3: 第3题 请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的 各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。答案:void fun(int x, int pp[ ], int *n){ int i=1,j=0;k=0,*t=pp;for(i=0;i<=x;i++)if(i%2!=0){ t[j]=I;j++;} for(i=0;i<j;i++)if(x%t[i]==0){ pp[k]=t[i];k++;} *n=k;} 第4题 请编写一个函数void fun(char *tt,int pp[]),统计在tt字符中“a”到“z”26各字母各自出现的次数,并依次放在pp所指的数组中。答案: void fun(char *tt, int pp[]){ int i; for(i=0;i<26;i++)pp[i]=0;while(*tt){ switch(*tt){ case ‘a’: pp[0]++;break;case ‘b’: pp[1]++;break;case ‘c’: pp[2]++;break;case ‘d’: pp[3]++;break; case ‘e’: pp[4]++;break;case ‘f’: pp[5]++;break;case ‘g’: pp[6]++;break;case ‘h’: pp[7]++;break;case ‘i’: pp[8]++;break;case ‘j’: pp[9]++;break;case ‘k’: pp[10]++;break;case ‘l’: pp[11]++;break;case ‘m’: pp[12]++;break;case ‘n’: pp[12]++;break;case ‘o’: pp[14]++;break;case ‘p’: pp[15]++;break;case ‘q’: pp[16]++;break;case ‘r’: pp[17]++;break;case ‘s’: pp[18]++;break;case ‘t’: pp[19]++;break;case ‘u’: pp[20]++;break;case ‘v’: pp[21]++;break;case ‘w’: pp[22]++;break;case ‘x’: pp[23]++;break;case ‘y’: pp[24]++;break;case ‘z’: pp[25]++;break;} tt++;} } 5: 第5题 请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k各素数存入xx所指的数组中。答案: 2018年C语言南开100题 void fun(int m, int k, int xx[]){ int g=0,I,j,flag=1;for(i=m+1;i<m*m;i++){ for(j=0;j<I;j++){ if(i%j!=0)flag=1;else { flag=0;break;} } if(flag==1 && j>=i){ if(k>=0){ xx[g++]=i;k--;} else break;} } } 第6题 请编写一个函数void fun(char a[],char[],int n),其功能是:删除以各字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。答案: void fun(char a[],char b[], int n){ int I,j=0;for(i=0;i<LEN;i++)if(i!=n){ b[j]=a[i];j++;} b[j]=‘’;} 第7题 请编写一个函数int fun(int *s,int t,int *k),用来求除数组的最大元素在数组中的下标并存放在k所指的储存单元中。答案: void fun(int *s, int t, int *k){ int I, max;max=s[0]; for(i=0;i<t;i++)if(s[i]>max){ max=s[i];*k=I;} } 第8题 编写函数fun,功能是:根据以下攻势计算s,计算结果作为函数值返回;n通过形参传入。 S=1+1/(1+2)+1/(1+2+3)+…….+1/(1+2+3+4+……+n)答案: float fun(int n){ int i; float s=1.0, t=1.0;for(i=2;i<=n;i++){ t=t+i;s=s+1/t;} return s;} 9: 第9题 编写一个函数fun,它的功能是:根据以下公式求p的值,结果由函数值带回。M与n为两个正整数,且要求m>n。2 p=m!/n!(m-n)!答案: float fun(int m, int n){ float p,t=1.0;int I; for(i=1;i<=m;i++)t=t*I;p=t; for(t=1.0,i=1;i<=n;i++)t=t*I;p=p/t; for(t=1.0,i=1;i<=m-n;i++)t=t*I;p=p/t;return p;} 10: 第10题 编写函数fun,它的功能是:利用以下的简单迭代方法求方程 cos(x)-x=0的一个实根。迭代步骤如下:(1)取x1初值为0.0;(2)x0=x1,把x1的值赋各x0; (3)x1=cos(x0),求出一个新的x1; (4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);(5)所求x1就是方程 cos(x)-x=0的一个实根,作为函数值返回。程序将输出 root=0.739085。答案: float fun(){ float x1=0.0,x0;do { x0=x1;x1=cos(x0);} 2018年C语言南开100题 while(fabs(x0-x1)>1e-6);return x1;} 11: 第11题 下列程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数 fun(int a[][n]),该函数的功能是:使数组左下半三角元素中的值全部置成0。答案: int fun(int a[][N]){ int I,j;for(i=0;i<N;i++)for(j=0;j<=I;j++)a[i][j]=0;} 12: 第12题 下列程序定义了n×n的二维数组,并在主函数中赋值。请编写函数fun,函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。答案: double fun(int w[][N]){ int I,j,k=0;double s=0.0;for(j=0;j<N;j++){ s+=w[0][j];k++;} for(j=0;j<N;j++){ s+=w[N-1][j];k++;} for(i=1;i<=N-2;i++){ s+=w[i][0];k++;} for(i=1;i<=N-2;i++){ s+=w[i][N-1];k++;} return s/=k;} 13: 第13题 请编写一个函数void fun(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。答案: void fun(int tt[M][N], int pp[N]){ int I,j,min; for(j=0;j<N;j++){ min=tt[0][j]; for(i=0;i<M;i++){ if(tt[i][j]<min)min=tt[i][j];} pp[j]=min;} } 14: 第14题 请别写函数fun,函数的功能使求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。答案: int fun(int a[M][N]){ int I,j,s=0; for(j=0;j<N;j++){ 3 s+=a[0][j];s+=a[M-1][j];} for(i=1;i<=M-2;i++){ s+=a[i][0];s+=a[i][N-1];} return s;} 15: 第15题 请编写一个函数unsigned fun(unsigned w),w使一个大于10的无符号整数,若w使n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回。答案: unsigned fun(unsigned w){ unsigned t,s=0,s1=1,p=0;t=w; while(t>10){ if(t/10)p=t%10;s=s+p*s1;s1=s1*10;t=t/10;} return s;} 16: 第16题 请编写一个函数float fun(double h),函数的功能使对变量h中的值保留2位小树,并对第三位进行四舍五入(规定h中的值位正数)。答案: float fun(float h){ long t;float s;h=h*1000; 2018年C语言南开100题 t=(h+5)/10;s=(float)t/100.0;return s;} 17: 第17题 请编写一个函数fun(char *s),该函数的功能使把字符串中的内容拟置。答案: void fun(char *s){ char ch;int I,m,n;i=0;m=n=strlen(s)-1;while(i<(n+1)/2){ ch=s[i];s[i]=s[m];s[m]=ch;i++;m--;} } 18: 第18题 编写程序,实现矩阵(3行3列)的转置(即行列互换)。答案: void fun(int array[3][3]){ int I,j,temp;for(i=0;i<3;i++)for(j=0;j<I,j++){ temp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;} } 19: 第19题 编写函数fun,该函数的功能是:从字符中删除指定的字符,同一字母 的大、小写按不同字符处 理。答案: void fun(char s[],int c){ int i=0;char *p;p=s; while(*p){ if(*p!=c){ s[i]=*p;i++;} p++;} s[i]=‘’;} 20: 第20题 编写函数int fun(int lim,int aa[max]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。答案: int fun(int lim, int aa[MAX]){ int k=0,I,j; for(i=lim;i>1;i--){ for(j=2;j<i;j++)if(i%j==0)break;else continue;if(j>=i){ aa[k]=i;k++;} } 4 return k++;} 21: 第21题 请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。答案: void fun(char *s,int num){ char t;int I,j; for(i=1;i<num-2;i++)for(j=i+1;j<num-1;j++)if(s[i]<s[j]){ t=s[i];s[i]=s[j];s[j]=t;} } 22: 第22题 n名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。答案: double fun(STREC *h){ double max;STREC *q=h;max=h->s;do { if(q->s>max)max=q->s;q=q->next;} while(q!=0); 2018年C语言南开100题 return max;} 23: 第23题 请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。答案: int fun(char *str){ int I,n=0;fg=1;char *p=str;while(*p){ n++;p++;} for(i=0;i<n/2;i++)if(str[i]==str[n-1-i]);else { fg=0;break;} return fg;} 24: 第24题 请编写一个函数fun,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。答案: long fun(char *p){ long s=0,t;int i=0,j,n=strlen(p),k,s1;if(p[0]==‘-’)i++;for(j=I;j<=n-1;j++){ t=p[j]-‘0’;s1=10; for(k=j;k<n-1;k++)t*=s1;s+=t;} if(p[0]==‘-’)return –s;else return s;} 25: 第25题 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。答案: char *fun(char *s,char *t){ char *p,*t1=t,*s1=s;int n=0;m=0;while(*s1){ n++;s1++;} while(*t1){ m++;t1++;} if(n>=m)p=s;else p=t; return p;} 第26题 请编写一个函数fun,它的功能是:根据以下公式求x的值(要求满足5 精度0.0005,即某项小于0.0005时停止迭代): x/2=1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+…+1×2×3×…×n/3×5×7×(2n+1)程序运行后,如果输入精度0.0005,则程序输出为3.14…。答案: double fun(double eps){ double s; float n,t,pi; t=1;pi=0;n=1.0;s=1.0;while((fabs(s))>=eps){ pi+=s; t=n/(2*n+1);s*=t;n++;} pi=pi*2;return pi;} 27: 第27题 请编写一个函数fun,它的功能是:求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。答案: void fun(int m, int *a, int *n){ int I,j=0;*n=0;for(i=1;i<=m;i++) if(i%7==0 || i%11 ==0){ a[j]=I;j++;} *n=j;} 2018年C语言南开100题 28: 第28题 请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。答案: void fun(int a[],int n, int *max, int *d){ int I;*max=a[0];*d=0;for(i=0;I<n;i++)if(a[i]>*max){ *max=a[i];*d=I;} } 29: 第29题 请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。答案: void fun(char *ss){ int I,n;n=strlen(ss);for(i=1;i<n;i+=2)if(ss[i]>=‘a’&& ss[i]<=‘z’) ss[i]=ss[i]-32;} 30: 第30题 请编写一个函数fun,它的功能是:求除一个2×m整型二维数组中 最大元素的值,并将此值返回调用函数。答案: int fun(int a[][M]){ int I,j,max;max=a[0][0]; for(i=0;i<2;i++)for(j=0;j<M;j++)if(a[i][j]>max)max=a[i][j];return max;} 31: 第31题 请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。答案: void fun(char *s,char t[]){ int I,j=0,n;n=strlen(s); for(i=0;I,n;i++) if(i%2==0&&s[i]%2==0){ t[j]=s[i];j++;} t[j]=‘’;} 32: 第32题 请编写函数fun,其功能是:将s所指字符串中除了下标为奇数、同时ascii值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的一个数组中。答案: 6 void fun(char *s,char t[]){ int I,j=0,n;n=strlen(s); for(i=0;I,n;i++) if(i%2!=0&&s[i]%2!=0){ t[j]=s[i];j++;} t[j]=‘’;} 33: 第33题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。答案: void fun(char *a,int n){ int i=0;k=0;char *p, *t;p=t=a;while(*t)t++;t--; while(*t==‘*’){ k++;t--;} t++;if(k>n){ while(*p&&p<t+n){ a[i]=*p;i++;p++; 2018年C语言南开100题 } a[i]=‘’;} } 34: 第34题 学生的记录由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能使:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。答案: int fun(STREC *a, STREC *b){ int I,j=0,n=0, max;max=a[0].s;for(i=0;i<N;i++)if(a[i].s>max)max=a[i].s;for(i=0;i<N;i++)if(a[i].s==max){ *(b+j)=a[i];j++;n++;} return n;} 35: 第35题 请编写一个函数,用来删除字符串中的所有空格。答案: void fun(char *str){ int i=0;char *p=str;while(*p){ if(*p!=‘’){ str[i]=*p;i++;} p++;} str[i]=‘’;} 36: 第36题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。答案: void fun(char *a){ int i=0,n=0;char *p;p=a; while(*p==‘*’){ n++;p++;} while(*p){ a[i]=*p;i++;p++;} while(n!=0){ a[i]=‘*’;i++;n--;} a[i]=‘’;} 37: 第37题 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自7 己定义正确的形参。 答案: void fun(STREC *p){ double av=0.0;int i: for(i=0;i<N;i++)av+=p->s[i];av/=N;p->ave=av;} 38: 第38题 请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。答案: int fun(char *ss, char c){ int n=0;while(*ss){ if(*ss==c)n++;ss++;} return n;} 39: 第39题 请编写函数fun,该函数的功能是:移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。答案: void fun(int *w, int p, int n){ int b[N], i, j=0;for(i=0;i<=p;i++){ b[i]=w[i]; 2018年C语言南开100题 j++;} for(i=0;i<=p;i++){ w[j]=b[i];j++;} } 40: 第40题 请编写函数fun,该函数的功能是移动字符串中内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。答案: void fun(char *w,int m){ char b[N];int I,j=0;for(i=0;i<m;i++){ b[j]=w[i];j++;} for(i=0;i<strlen(w)-m;i++)w[i]=w[i+m];for(j=0;j<m;j++){ w[i]=b[j];i++;} w[i]=‘’;} 41: 第41题 请编写函数fun,该函数的功能是:将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。答案: void fun(char(*s)[n],char *b){int i,j,k=0;for(j=0;j<n;j++)for(i=0;i<m;i++){b[k]=*(*(s+i)+j)k++;} b[k]=‘’;} 42: 第42题 下列程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][n],int n),该函数的功能是:将数组右上半三角元素中的值乘以m。答案: void fun(int a[][n],int m) {int i,j; for(j=0;j<n;j++)for(i=0;i<=j;i++)a[j]=a[j]*m;} 43: 第43题 编写一个函数,从传入的num个字符串中找出一个最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。答案: char *fun(char(*a)[81],int num){int i;char *max;max=a[0]; for(i=0;i<num;i++)if(strlen(max)<strlen(a))max=a; return max;} 44: 第44题 编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。答案: int fun(char *str,char *substr){int n;8 char *p,*r;n=0; while(*str){p=str;r=substr;while(*r)if(*r==*p){r++;p++;} else break; if(*r==‘’)n++;str++;} return n;} 45: 第45题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n 给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后的*个数。在编写时不得使用c语言给提供得字符串函数。答案: void fun(char *a,int n,int h,int e){int i=0;char *p; for(p=a+h;p<a+n-e;p++){*(a+i)=*p;i++;} *(a+i)=‘’;} 46: 第46题 学生得记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能时:按分数的高低排列学生的记录,高分在前。答案: 2018年C语言南开100题 void fun(strec a[]){int i,j;strec t;for(i=0;i<n-1;i++)for(j=i;s<n;j++)if(a.s<a[j].s){t=a;a=a[j];a[j]=t;}} 47: 第47题 请编写一个函数void fun(char *ss),其功能时:将字符串ss中所有下标为奇数位置上的字母转换为大写(若位置上不是字母,则不转换)。答案: void fun(char *ss){int i,n=0;char *p=ss;while(*p){n++;p++;} for(i=0;i<n;i++)if((ss=‘a’&ss<=‘z’)&i%2!=0)ss=ss-32;ss=‘’;} 48: 第48题 请编写函数fun,其功能是:将两个两位数的正整数a,b合并成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。答案: void fun(int a,int b,long *c){*c=(a/10)*1000+(b/10)*100+(a%10)*10+b%10;} 49: 第49题 请编写函数fun,其功能是:将s所指字符串中下标位偶数同时 ascii值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。答案: void fun(char *s,char t[]) {int i,j=0,n=strlen(s);for(i=0;i<n;i++)if(i%2==0&s%2!=0)else {f[j]=s;j++;} t[j]=‘’;} 50: 第50题 已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入a机构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。答案: void fun(stu a[],stu *s){int i,max;max=a[0].s; for(i=0;i<n;i++)if(a.s>max){max=a.s;*s=a;}} 51: 第51题 请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回。答案: void fun(int m,int *k,int xx[]){int i,j;int t=0; for(i=2;i<m;i++){j=2; while(j<i){if(i%j==0){xx[t]=i;9 t++;break;} j++;} *k=t;}} 52: 第52题 编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。答案: void fun(char p1[],char p2[]) {int i=0,n=0; char *p=p1,*q=p2;while(*p){p++;n++;} i=n; while(*p){p1=*q;q++;i++;} p1=‘’;} 53: 第53题 请编写函数fun,该函数的功能是:实现b=a+a,即把矩阵a加上a的转置,存放在矩阵b中。计算结果在main函数中输出。答案: void fun(int a[3][3],int b[3][3]) {int i,j,at[3][3];for(i=0;i<=2;i++)for(j=0;j<=2;j++)at[j]=a[j]; for(i=0;i<3;i++)for(j=0;j<3;j++)b[j]=a[j]+at[j];} 54: 第54题 学生的记录由学号和成绩组称个,n名学生的数据已在主函数中放入结构体数组s中,请编写 2018年C语言南开100题 函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。答案: double fun(strec *a, strec *b,int *n){double aver=0.0;int i,j=0;*n=0;for(i=0;i<n;i++)aver+=a.s;aver/=n;for(i=0;i<n;i++)if(a.s<aver){b[j]=a;(*n)++;j++;} return aver;} 55: 第55题 请编写函数fun,该函数的功能是:将m行n列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的储存单元中。答案: void fun(int(*s)[10],int *b,int *n,int mm,int nn){int i,j;for(i=0;i<mm;i++)for(j=0;j<nn;j++){b[*n]=*(*(s+i)+j);*n=*n+1;}} 56: 第56题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字母串中其他*号全部删除。形参p已指向字符串中最后的一个字母。不使用c 的字符串函数。答案: void fun(char*a,char *p){int i=0;char *p=a;while(q<=p){if(*q!=‘*’){a=*q;i++;} q++;} while(*q){a=*q;i++;q++;} a=‘’;} 57: 第57题 学生的记录是由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。答案: int fun(strec*a,strec *b,int l,int h){int i,j=0; for(i=0;i<n;i++)if(a.s>=l&a.s<=h){b[j]=a;j++;} return j;} 58: 第58题 编写函数藏服那,它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。答案: double fun(int n){double s=0.0;int i; for(i=1;i<n;i++) if(i%3==0&i%7==0)s=s+i;s=sqrt(s);return s;} 第59题 请别写函数fun,该函数的功能是:将放在字符串数组中的m个字符串(每串的长度不超过n),按顺序合并组成一个新的字符串。答案: void fun(char a[m][n],char *b){int i,j,k=0;for(i=0;i<m;i++){for(j=0;j<n;j++)if(*(*(a+i)+j)){b[k]=*(*(a+i)+j)k++;} else break; b[k]=‘’;}} 第60题 请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。答案: int fun(int a[],int n){int i,t,j=0,*p=a;t=p[0]; for(i=0;i<=n;i++)if(t==p);else {a[j]=t;t=p;j++;} if(i>=n)a[j]=t;return j;} 2018年C语言南开100题 第61题 第请编写函数fun,该函数的功能使:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁的人数放在d[2]中,其余以此类推,把100岁(含100以上年龄的人数都放在d[10]中。结果在主函数中输出。答案: void fun(int *a,int *b){int i,j;for(j=0;i<m;j++)b[j]=0;for(i=0;i<n;i++)if(a>=0&a<=9)b[0]+=1;else if(a>=10&a<=19)b[1]+=1;else if(a>=20&a<=29)b[2]+=1;else if(a>=30&a<=39)b[3]+=1;else if(a>=40&a<=49)b[4]+=1;else if(a>=50&a<=59)b[5]+=1;else if(a>=60&a<=69)b[6]+=1;else if(a>=70&a<=79)b[7]+=1;else if(a>=80&a<=89)b[8]+=1;else if(a>=90&a<=99)b[9]+=1;else b[10]+=1;} 第62题 请编写函数fun,该函数的功能是:统一一含字符串中单词的个数,作为 函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格格开,一行的开始没有空格。答案: int fun(char *s){int i,n=0;for(i=0;i< strlen(s);i++){if(s=‘a’&s< =‘z’&s[i+1]==‘’ ‖s[i+1]==‘’)n++;} return n;} 第63题 请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括1与自身)之和。规定n的值不大于1000。答案: int fun(int n){int s=0,i; for(i=2;i<=n-1;i++)if(n%i==0)s+=i; return s;} 第64题 请编写函数fun,其功能是:将s所指字符串中ascii值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。答案: void fun(char *s,char t[]) {int i,j=0,n;n=strlen(s); for(i=0;i<n;i++)if(s%2==0){t[j]=s;j++;} t[j]=‘’;} 第65题 请编写函数fun,其功能是:将两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。答案: void fun(int a,int b,long *c) {*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;} 第66题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。答案: void fun(char *a){int i=0;char *p=a;while(*p) {if(*p!=‘*’){a=*p;i++;} p++;} a=‘’;} 第67题 学生的记录时由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能时:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数时strcmp)。答案: strec fun(strec*,char *b){int i;strec h; 2018年C语言南开100题 for(i=0;i<n;i++)if(strcmp(a.num,b)==0){h=a;break;} else {h.num=="";h.s=-1;} return h;} 第68题 请编写函数fun,其功能时:计算并输出下列多项式的值: sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n!答案: sn=1+1/1!+1/2!+1/3!+1/4!+...+1/n!double fun(int n){double t,sn=1.0;int i,j;for(i=1;i<n;i++){t=1.0;for(j=1;j<=i;j++)t*j;sn+=1.0/t;} return sn;} 第69题 请编写一个函数fun,它的功能时:求fibonacci数列中大于t的最小的一个数,结果由函数返回。其中fibonacci数列f(n)的定义为: f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)答案: f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)int fun(int t){int a=1,b=1,c=0,i;for(i=4;i<=t;i++){if(c<t){c=a+b;a=b;b=c;} else break;} return c;} 第70题 编写函数fun,它的功能时:计算并输出下列级数和: s=1/1*2+1/2*3+…+1/n(n+1)答案: double fun(int n){double s=0.0;int i; for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));return s;} 第71题 请编写函数fun,其功能时:将两个两位数的正整数a、b合并形成一个整数放在c中,合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b的十位和个位整数依次放在c数的百位和个位上。答案: void fun(int a,int b,long *c) {*c=(a%10)*1000+(b/10)*100+(a/10)*10+b%10;} 第72题 请编写函数fun,其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成新串放在t所指数组中。答案: void fun(char *s,char t[]) {int i,j=0,n=strlen(s);for(i=0;i<n;i++)if(i%2!=0){t[j]=s;j++;} t[j]=‘’;} 第73题 假定输入的字符串中只包含字母和*号,请12 编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串第一个字符,形参p已指向字符串中最后一个字母。在编写程序时,不得使用c语言提供的字符串函数。答案: void fun(char *a,char *h,char *p){int i=0;char *q=a;while(q<h){a=*q;q++;i++;} while(q<p){if(*q!=‘’*){a=*q;i++;} q++;} while(*q){a=*q;i++;q++;} a=‘’;} 第74题 学生的记录由学号和成绩组成n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能时:把分数最低的学生数据放在h所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。答案: int fun(strec *a,strec *b) {int i,j=0,n=0,min;min=a[0].s; for(i=0;i<n;i++)if(a.s<min)min=a.s; 2018年C语言南开100题 for(i=0;i<n;i++)if(a.s==min){*(b+j)=a;j++;n++;} return n;} 第75题 请编写函数fun,该函数的功能:将m行n列的二维数组中的数据,按列的顺学依次放到一维数组中。答案: void fun(int(*s)[]10,int *b,int *n,int mm,int nn){int i,j;for(j=0;j<nn;j++)for(i=0;i<mm;i++){b[*n]=*(*(s+i)+j);*n=*n+1;}} 第76题 请编写函数fun,其功能时:计算并输出当x<0.97时下列多项式的值,直到|sn-s(n-1)|<0.000001为止。 Sn=1+0.5x+0.5(0.5-1)/2!x(2)+…+0.5(0.5-1)(0.5-2)…..(0.5-n+1)/n!x(n)答案: .double fun(double x){double s1=1.0,p=1.0,sum=0.0,s0,t=1.0;int n=1;do {s0=s1;sum+=s0;t*=n;p*=(0.5-n+1)*x;s1=p/t;n++;}while(fabs(s1-s0)>1e-6);return sum;} 第77题 请编写一个函数fun,其功能是:将两个两位数的正整数ab合并形成一个整数放在c中。合并方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。答案: void fun(int a,int b,long *c) {*c=(b%10)*1000+(a%10)*100+(b/10)*10+a/10;} 第78题 请编写函数fun,其功能是:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。答案: void fun(char *s,char t[]) {int i,j=0,n=strlen(s);for(i=0;i<n;i++)if(s%2!=0){t[j]=s;j++;} t[j]=‘’;} 第79题 已知学生的记录由学号和学习成绩构成,n名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。答案: void fun(stu a[],stu *s){int i,min;min=a[0].s; for(i=0;i<n;i++)if(a.s<min){min=a.s;*s=a;}} 13 第80题 程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数fun,该函数的功能是:使数组左下半三角元素中的值乘以n。答案: fun(int a[][n],int n){int i,j; for(i=0;i<n;i++)for(j=0;j<=i;j++)a[j]=a[j]*n;} 第81题 请编写函数fun,其功能使:将两个两位正整数a b合并形成一个整数放在c中。合并的方式使:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上。答案: void fun(int a,int b,long *c) {*c=(b/10)*1000+(a/10)*100+(b%10)*10+a%10;} 第82题 请编写一个函数fun,它的功能使:计算n门课程的平均分,计算结果作为函数值返回。答案: float fun(float *a,int n){float ave=0.0;int i; for(i=0;i<n;i++)ave+=a;ave/=n; return ave;} 第83题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能使:将字符串尾部的*号全部删除,前面和中间的*号不删除。答案: 2018年C语言南开100题 void fun(char *a){int i=0;char *p,*q;p=q=a;while(*p)p++;p--;while(*p==‘*’)p--;while(q<=p){a=*q;i++;q++;} a=‘’;} 第84题 请编写函数fun,其功能是:将两个两位数的正整数a b合并形成一个整数放在c中,合并的方式是:将a数的十位和个位数依次放在c的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。答案: void fun(int a,int b,long *c){c=(b/10)*1000+(a%10)*100+(b%10)*10+a/10;} 第85题 n名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。答案: double fun(strec *h){double aver=0.0;while(h!=null){aver+=h->s;hy=h->next;} aver/=n;return aver;} 第86题 请编写函数fun,计算并输出给定10个数的 方差。答案: double fun(double x[10]){int i,j; double s=0.0,s1=0.0;for(i=0;i<10;i++)s1+=x;s1/=10; for(j=0;j<10;j++) s+=(x[j]-s1)*(x[j]-s1);s/=10; s=pow(s,0.5);return s;} 第87题 请编写函数fun,其功能是:将两个两位数的正整数a b合并形成一个整数放在c 中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。答案: void fun(int a,int b,long *c) {*c=(a/10)*1000+(a%10)*10+(b%10)*100+b/10;} 第88题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数亚时,不得使用c语言提供的字符串函数。答案: void fun(char *a){int i=0;char *p=a; while(*p&&*p==‘*’){a=*p;i++;p++;} while(*p)14 {if(*p!=‘*’){a=*p;i++;} p++;} a=‘’;} 第89题 学生的记录是由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。答案: double fun(strec *a,strec *b,int *n){double aver=0.0;int i,j=0; for(i=0;i<n;i++)aver+=a.s;aver/=n; for(i=0;i<n;i++)if(a.s)>=aver} {*(b+j)=a;j++;} *n=j; return aver;} 第90题 请编写函数fun,其功能是:计算并输出下列多项式 值:sn=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)1/2n).答案: sn=(1-1/2)+(1/3-1/4)+...+(1/(2n-1)1/2n).double fun(int n){int i; double sn=0.0;for(i=1;i<=n;i++) sn+=(1.0/(2*i-1)-1.0/(2*i)); return sn;} 2018年C语言南开100题 第91题 请编写函数fun,其功能是:将两个两位数的正整数a b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。答案: void fun(int a, int b, long *c){ *c=(a%10)*1000+(b%10)*100+(a/10)*10+b/10;} 第92题 请编写函数fun,它的功能是计算:s=(ln(1)+ln(2)+ln(3)+…+ln(m))(0.5),s作为函数值返回。答案: double fun(int m){ int I;double s=0.0, log(double x);for(i=1;i<=m;i++)s=s+log(i);s=sqrt(s);return s;} 第93题 请编写函数fun,它的功能是计算下列级数和,和值由函数值返回。S=1+x+x(2)/2!+x(3)/3!+…x(n)/n!答案: double fun(double x, int n){ double s=1.0, p=1.0;int I,j,t;for(i=1;i<=n;i++){ t=1; for(j=1;j<=i;j++)t=t*j;p=p*x;s=s+p/t;} return s;} 第94题 规定输入字符串中只包含字母和*号。请编写函数fun,它的功能是:将函数字符串中的前导*号全部删除,中间和尾部的*号不删除。答案: void fun(char *a){ int i=0;char *p=a; while(*p&&*p==‘*’)p++; while(*p){ a[i]=*p;i++;p++;} a[i]=‘’;} 第95题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做。字符串中间和尾部的*号不删除。答案: void fun(char *a, int n){ int i=0,k=0;char *t=a; while(*t==‘*’)15 { k++;t++;} t=a;if(k>n)t=a+k-n;while(*t){ a[i]=*t;i++;t++;} a[i]=‘’;} 第96题 请编写函数fun,其功能使:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。答案: double fun(double x[9]){ double sum=0.0;int I,j=1; for(i=0;i<9;i++)if(j<=8){ sum+=sqrt((x[i]+x[i+1])/2.0);j++;} return sum;} 第97题 请编写函数fun,其功能是:计算并输出下列多项式值: s=1+1/(1+2)+1/(1+2+3)+..1/(1+2+3…+50)答案: double fun(int n){ int I,j; double sum=0.0, t; 2018年C语言南开100题 for(i=1;i<=n;i++){ t=0.0;for(j=1;j<=I;j++)t+=j;sum+=1.0/t;} return sum;} 第98题 请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。答案: double fun(int n){ int I;double sum=0.0;for(i=1;i<=n;i++)if(i%5==0 || i%9==0)sum+=1.0/I;return sum;} 第99题 请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。答案: double fun(int n){ int m,k,I;double s=0.0;for(m=3;m<=n;m++){ k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)s+=sqrt(m);} return s;} 第100题 请编写函数fun,其功能是:计算并输出 s=1+(1+2(0.5))+(1+2(0.5)+3(0.5))+…+(1+2(0.5)+3(0.5)+…+n(0.5))答案: double fun(int n){ int I; double =1.0,p=1.0;for(i=2;i<=n;i++){ p+=pow(I,0.5);s+=p;} 【基本c语言基础题】推荐阅读: c语言判断题题库12-08 c语言期末考试编程题02-27 c语言考试编程题练习02-24 嵌入式开发—C语言面试题01-10 语言学习基本功09-05 语言文字基本功论文01-20 语言、与C语言、实现汉诺塔09-30 c语言开发06-24 c语言教案07-17 c语言板书12-222.基本c语言基础题 篇二
3.运用数学“基本模式”解同类题 篇三
4.C语言面试题大9 篇四
5.基本c语言基础题 篇五
6.思科和慧通的c语言笔试面试题 篇六
7.基本c语言基础题 篇七
8.例析遗传基本规律题的解题技巧 篇八
9.基本c语言基础题 篇九