v=c乘以e除以1减(1 p1)/(p0 p1 p2 p3 混合动力)是什么公式

> 问题详情
比例估算法公式E=C(1+p1f1+p2f2+p3f3+…)+I,中,C和p代表的含义分别是( )。 A.拟建项目的设
悬赏:0&答案豆
提问人:匿名网友
发布时间:
比例估算法公式E=C(1+p1f1+p2f2+p3f3+…)+I,中,C和p代表的含义分别是( )。A.拟建项目的设备投资和拟建项目中其他项目中的其他附属项目投资占设备投资的比例B.已建项目的设备投资和拟建项目中其他项目中的其他附属项目投资占设备投资的比例C.已建项目的设备投资和已建项目中其他项目中的其他附属项目投资占设备投资的比例D.拟建项目的设备投资和已建项目中其他项目中的其他附属项目投资占设备投资的比例请帮忙给出正确答案和分析,谢谢!
您可能感兴趣的试题
1第40题:关于招标文件中提供的工程量清单,下列说法中不正确的是( )。A.工程数量以“吨”为单位的,保留小数点后三位&B.分部分项工程量清单应包括项目编码、项目名称、计量单位和工程数量四个部分&C.其他项目清单招标人部分包括预留金、材料购置费等&D.其他项目清单招标人部分包括总承包服务费、零星工作费等2第41题:在三阶段设计的初步设计阶段使用的一种定额为( )。A.概算指标&B.投资估算指标&C.劳动定额&D.预算定额
我有更好的答案
论文写作技巧
相关考试课程
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……程序设计和C语言
第一单元& 使用Turbo
C上机的过程
&&& 一、启动TC的方式
&&& Turbo C是一个集程序编辑、编译、连接、调试为一体的C语言程序开发软件,具有速度快、效率高、功能强等优点,使用非常方便。可在Turbo C 环境下进行全屏幕编辑,利用窗口功能进行编辑、连接、调试、运行、环境设置等工作,Turbo C有两种形式:窗口环境和全屏幕编辑环境,它们之间的切换组合键为Alt+Enter。启动TC的方式也有两种:在资源管理器中运行tc.exe和在DOS环境中执行tc.exe。
&&& 具体做法为:(假设tc.exe在D盘TC文件夹中)
&&& 1、打开资源管理器,打开D盘,打开TC文件夹,在右窗格中,双击TC.EXE的图标,即启动了TC。
&&& 2、在Windows98环境中,在程序菜单中的“MS-DOS方式”下,通过如下的命令序列,可以启动TC。(下划线部分为用户输入的命令)
Microsoft(R) Windows 98
&& (C)Copyright Microsoft Corp
C:\WINDOWS&d:
D:\tc&cd\&& (如果D盘当前文件夹不是tc文件夹,使用此命令)
D:\&cd& tc
&&& 启动TC后,窗口编辑环境如下:
&&& TC窗口编辑环境和全屏幕编辑环境之间切换的组合键是:Alt+Enter.
&&& 一、使用Word打印C程序和运行结果
&&& 首先,将调试好的C程序复制到Word中,然后,再将运行结果复制到Word中,最后排版输出。
&&& 复制C程序最好在TC的窗口编辑环境中,利用其中的常用工具栏,复制内容,具体做法如下:
&&& 1、在Windows98的环境中,先单击工具栏中的“标记”按钮,用鼠标拖动,选中需要复制的内容,再单击“复制”按钮,然后,切换到Word中,选定插入位置,单击“粘贴”按钮。即完成复制程序。注意,在输入程序的时候每行前面都要加几个空格,否则复制到Word中时,第一列会变成问号?。
2、用同样的方法可以复制运行结果,在运行结果的窗口中,单击“标记”按钮,再用鼠标选定运行结果,单击“复制”按钮,切换到Word中,单击“粘贴”按钮,即完成复制。
3、在Windows2000中,TC的窗口中没有菜单,选中、复制、粘贴等命令需要单击窗口左上角的C:\按钮,使用相应的命令。
&&& 二、在DOS环境中打印f1.c及其运行结果
&&& 将文件TC源程序f1.c和编译运行之后产生的可执行程序f1.exe(通常可执行文件在输出目录中OUTPUT DIRECTORY中)存到A盘中,到带有打印机的机器中,先用Ctrl+P联机(或确定打印机是处于联机状态),启动MS-DOS方式(WINDOWS2000中,命令提示符),在DOS提示符下,输入A:,然后回车,在DOS提示符A:\&下,使用DOS命令TYPE& F1.C &PRN (或用COPY F1.C& PRN) 即可将F1.C打印出来,再在DOS提示符A:\&下输入可执行文件名F1,回车即可运行F1程序,如果程序需要输入数据,此时即可输入数据,并将结果打印出来。
&&& 打印的命令序列如下:假设源程序和可执行文件都在D盘根目录下。
&&& D:\&TYPE F1.C
&&& D:\&F1
&&& D:\&COPY
&&& D:\&F1
五、常见错误信息
1. '***' not an argument in function ##&& '***'不是函数参数 ,在源程序中将'***'标识符定义成一个函数参数,可此标识符没在函数表中出现。
2. Argument list syntax error&&& 参数表出现语法错误,可能的原因是缺少逗号或右括号。
3. Array bounds missing ] in function ##&&& 数组的界限符]丢失。
4. Call of non-function in function ##&&& 调用了未定义的函数, TC中函数的标志是有一圆括号,表达式中有括号()它就认为是函数,而事实上可能是丢掉了运算符,例如程序中出现了2(x+y),只要改为2*(x+y)即可。
5. Character constant
too long in function ##.& 字符常量太长,字符常量只能是一个或两个字符长。
6. Compound statement missing } in function ##.& 复合语句漏掉花括号}。
7. Constant expression required in function ##. 要求常量表达式。数组的大小必须是常量。
8. Declaration needs type or storage class。说明必须指出类型或存储类别。
9. Declaration syntax error。说明出现语法错误,在源文件中,某个说明丢失了某些符号或有多余的符号。还有一种可能就是它的上一行多了一个花括号},认为函数已经结束。
10. Division by zero in function ## 。除数为零。
11. Do statement must have while in function ##,Do语句中必须有While。
12. Expression syntax in function ##. 表达式语法错误。
13. Extra parameter in call to ###fabs in function##。调用###函数时出现了多余的参数。
14. Illegal use of floating point in function ##。 非法使用浮点数。比如求余运算。
15. Illegal use of pointer in function ##.非法使用指针。指针只能在加、减、赋值、比较、间接(*)或指向操作中使用。
16. Lvalue required in function ##. 赋值请求,赋值表达式的右边必须是一个地址表达式。
17. Misplaced break in function ##. break位置错误.其它类似的还有Misplaced continue (else \endif\decimal point十进制小数点) &in function ##。
18. Statement missing ; in function ##. 语句缺少;。
19. Type mismatch in redeclaration of ##。重定义类型不匹配。常见于一个函数被调用,而后又被说明成非整型。
20. Undefined symbol '###' in function ##. 标识符##没被定义。可能是由于说明或引用处有拼写错误,也可能是由于标识符说明错误引起。
&&& 常见错误中的单词含义:
1. missing &&&&&&&&&&&& 丢掉,缺少
2. undefined &&&&&&&&&& 没有定义
3. mismatch &&&&&&&&&&&&&&& 不匹配
4. syntax &&&&&&&&&&&&& 语法
5. expression &&&&&&&&& 表达式
6. function &&&&&&&&&&&&&&& 函数
7. statement &&&&&&&&&& 语句
8. array&&&&&&&&&&&&&&&&&&& 数组
9. parameter &&&&&&&&&& 参数
10. illegal use &&&&&&&&&&& 非法使用
第二单元& 顺序程序设计及输入输出语句
2-1(0级) 请简述C语言的特点。
2-2(0级) 运行一个C语言程序需要经过什么步骤? 请写出每经历一步所得到的文件名。
2-3(0级) C语言以函数为程序的基本单位,有什么好处?
2-4(0级) 参照本章例题,编写一个C程序,输出以下信息:
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&HOW ARE YOU
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
2-5(1级) 编写一个程序,输入a、b、c三个值,输出其中最大者。简述算法。
2-6(1级) 以下叙述正确的是&&&&& 。
&&&&&&& A、在C程序中,main函数必须位于程序的最前面
&&&& B、C程序的每行中只能写一个语句
&&&&&&& C、C语言本身没有输入输出语句
&&&&&&& D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误
2-7(1级) C语言规定:在一个源程序中,主函数和其它函数的位置关系为,main函数的位置&&&&&&
&&&&&&& A、必须在最前面
&&&&&&& B、必须在系统调用的库函数的后面
&&&&&&& C、可以任意
&&&&&&& D、必须在最后
2-8(1级) 一个C源程序中至少应包含一个&&&&&&& 。
2-9(1级) 在一个C源程序中,注释部分两侧的分界符是&&&&&&
2-10 (0级) 为什么C语言中每个数据都要属于一个特定的类型?
2-11 (0级) 下列常数中哪些是合法的C常量,哪些是非法的C常量?对合法者指出其类型 ,对非法的指出原因。
&012&& 0X10&& e3& 0003& 3e-5 &'\n' &x-y&&
&3& &&53&&& 123e&& 'ab'&
5e+0& 3e2.3
2-12 (0级) 以下哪些是符合C规定的变量名?
&&& da& _ty&& 7re& _45f& df34&& 7ui_&& shanghai& amount& average& #aQ $s
2-13 (0级) 字符常量与字符串常量有什么区别?
2-14 (0级) 写出下面表达式运算后a的值,设原来 a=10,n=3,a、n为整型。
&&& (1) a+=a&&&& (2) a-=2&&&&&& (3) a*=2+3
&&& (4) a/=a+a&& (5) a%=(n%=2)& (6) a+=a-=a*=a&&
2-15 (0级) 求下面算术表达式的值,设a,b为int型,x,y为float型。
&&& (1) x+a%3*(int)(x+y)%2/4
(float)(a+b)/2+(int)x%(int)y
a=2,b=3,x=3.5,y=2.5
2-16 (0级) 写出a,b,c的值和表达式的值
&&& (1) a=b=c=3&&&&&&&&&&
(2) a=13+(c=18%4)
&&& (3) a=(b=12/4)+(c=3)& (4) a=(b=5)+(c=4)
&&& (5) x=3*4,x*5&&&&&&&&
(6) (a=4*5,a*3),a+10
&&& (7) x='A',x%5&&&&&&&&
(8) x=30%8/2,x+10&&&
2-17 (0级) 将数学表达式写成C语言表达式&
&&& (1) F=
&&& (2) sin(25°)+cos(30°)
(f-32)&&&&&&& (摄氏温度)
&&&&&&&&&&&
k=273.16+c&&&&&&& (绝对温度)
&&& 请编程序:当给出f时,求其相应摄氏温度和绝对温度。
&&& 测试数据:① f=34
&&&&&&&&&&&&
2-20 (1级) 有一个四边形见图,求其面积。求三角形的面积的公式为: &
& 其中: s=(a+b+c)/2。
(1级) 由键盘输入一个数,对它小数部分的第2位进行4舍5入。
读程序写运行结果。
&&& main()
&&&& {int a,b;& long c,d;&& unsigned x,y;
a=32768;&& a=a+1;& c=65537;&& b=c;&& x=32768;&& y=b;
printf(&a=%d,b=%d,c=%ld,x=%d,y=%d\n&,a,b,c,x,y);
&&& 结果为:a=-32767,b=1,c=65537,x=-32768,y=1
上机输入下列程序,分别用下列三种方式输入数据,观察输出结果,分析出现各种结果的原因。
(1) 输入3&
(2) 输入3,5
(3) 输入3 &回车& 5
(4) 将程序中第3行的地址符去掉,再运行一次程序,观察运行结果。
&scanf(&%d%d&,&a,&b);
&printf(&a=%d,b=%d,c=%d\n&,a,b,c);
第三单元 选择结构程序设计
& &1. 将以下条件写成C关系表达式:
&&& (1)& x≥y&&
&&& (2)& a+2b=c+5f
&&& (3)& (3+a)(b+8)+sin45°&lnx
& &2. 将以下条件写成C逻辑表达式:
&&& (1)& p&x 或 p&y 或 p&2
&&& (2)& x&0 并且 x≤15
&&& (3)& x+y&10 并且 x-y&0
&&& (4) &1≤a≤8 并且 1≤b≤8
3. 按下面要求写出C语句:
&&& (1) 当x≥a时,执行z= ,否则执行z= 。&&&
&&& (2) 如果a=b 输入一个新值给a,否则打印a值。
&&& (3) 如收入p≤1000元税款为零,否则超过1000元部分抽税10%,给出p,
计算税款tax。
4. 写出下面各逻辑表达式的值。设& a=3,b=4,c=5
&&&& (1)& a+b&c&&b= =c
&&&& (2)& a||b+c&&b-c
&&&& (3)& !(a&b)&&!c||1
&&&& (4)& !(x=a)&&(y=b)&&0
&&&& (5)& !(a+b)+c-1&&b+c/2&
1.& 选择出合法的语句(设int x,a,b,c;)&&&&&& &&&。
&&& A、if(a=b)x++;&& B、if(a=&b)x++;&&&& C、if(a-b)x++;
&&& D、if(a=&b)x++;& E、if(a&=b&=c)x++;& F、if(1)x++;
2.& 选择出i的正确运行结果: &&&&&&&&&&。
& case 9:i+=1;
&&&&& case
&&& &&& &&&&&&&&&&& case 11:i+=1;
&&& &&& &&&&&&&&&&& default:i+=1;
&&& A、 10&&&& B、 11&&&& C、 12&&&& D、 13&&&& E、 14
3.&&& main()
&&&& {int a,b,c;
&&& &&& &&& &a=2;b=3;c=1;
&&&&&&&&&&& && if(a&c)
&&& &&& &&&&&&& &&&printf(&%d\n&,a);
else printf(&%d\n&,b);
&&& &&&&&&& printf(&end\n&);}
&&& 程序的输出结果为:&&&&&&& &。
4.& 表达式3&&4的值为 &&&&&&&&。
5.& 定义& int x=10,y,z;
&&& 执行y=z=x;x=y==z后,变量x的值为 &&&&&&&&&。
6.& 以下运算符中优先级最低的运算符为&&&&&&& ,优先级最高的为&&&&&& 。
&&& A、 &&&&& B、
!&&&& C、 !=&&&& D、 ||&&&& E、& ?:&&&&& F、& ==
7.& 若w=1,x=2,y=3,z=4,则条件表达式w&x?w:y&z?y:z的结果为
&&&&&&&&。
A、 4&&&&&&&&&& B、3&&&&&&&&&&&&&&& C、2&&&&&&&&&&&&&&& D、 1
8.& 判断char型变量c1是否为小写字母的最简单且正确的表达式为&&&&&&
A 'a'&=c1&='z'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B (c1&=a)&&(c1&=z)
C ('a'&=c1)||('z'&=c1)&&&&&&&&&&&&&&&&&&&&&&&&&&& D (c1&='a')&&(c1&='z')
9. 若,x,y,z,m,n均为int型变量,则执行以下语句后x,y,z的值为&&&&&&& 。
x=(--m==n++)?--m:++n;
&&&&&&& z=n;
A、 7,9,7&&&&&& B、 5,6,10&&&&& C、11,6,9&&&&&& D、5,10,6
3-3 (1级) 由键盘输入三个数,计算以这三个数为边长的三角形面积。
&&& &&& &&& &&(2)& ;
printf(&Please enter 3 reals:\n&);
scanf(&%f%f%f&,&a,&b,&c);
&&& &&& &&& if(& (3)&
s=(a+b+c)*0.5;
&&& &&& &&&&&&&&&&& s1=s*(s-a)*(s-b)*(s-c);
&&&&&&& &&& &&& s=&
printf(&\nArea of the triangle is %f\n&,s);
&&& &&& &&&}
&&& &&& &printf(&It is not
triangle!\n&);
3-4 (2级) 有一方程a+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。
&&& (1) a=0,b≠0
&&& (2) a=0,b=0,c=0
&&& (3) a=0,b=0,c≠0
&&& (4) a≠0,-4ac≥0
&&& (5) a≠0,-4ac≤0
&&& 测试数据:①
a=0,b=4,c=3
&&&&&&&&&&&&
② a=0,b=0,c=0
&&&&&&&&&&&&
③ a=0,b=0,c=10
&&&&&&&&&&&&
④ a=2,b=10,c=2
&&&⑤ a=4,b=2,c=6
&&&&&&&&&&&&
#include &math.h&
&&&&&&&&&&&&
a,b,c,d,pr,pi,x1,x2;
scanf(&%f%f%f&,&a,&b,&c);
printf(&a=%f,b=%f,c=%f\n&,a,b,c);
&&& if(a==0)
&{if( &(1)&
&&&&&&& &&&&&&& &&&printf(&only one
solution x=%f\n&,-c/b);
& & &&&&&&&&&&& &&&&&if( &(2)&
)printf(&no solution\n&);
& & &&&&&&&&&else
printf(&x is any value\n&);
&&&&&&&&&&
&&& &&& &&&&&&&&{d=b*b-4*a*c;
&&&&&&& &&& &&&&&&if(& (3)&
&&&&&&&&&&&&&&&&&&
{x1=(-b+sqrt(d))/ &(4) &;
&&&&&&&&&&&&&&&&&&
&x2=(-b-sqrt(d))/ &(5) &;
&&&&&&&&&&&&&&&&&&&
printf(&x1=%6.2f, x2=%6.2f\n&,x1,x2);
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
{ pr=-b/(2*a); &(6) &;
&&&&&&&&&&&&&&&&&&&&&
printf(&x1=%6.2f +%6.2fi\n&,pr,pi);
&&&&&&&&&&&&&&&&&&&&&
printf(&x2=%6.2f -%6.2fi\n&,pr,pi);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
3-5(2级) 下面程序是实现一个简单的具有四种功能的计算器,程序提示输入操作数和操作符,显示输入及其计算的结果。
& #include
float x,y,z;
int error=FALSE;
&&& printf(&Enter the first
operand&);
scanf(&%f&,&x);
printf(&Enter the operator&);
scanf(& %c&,&op);
printf(&Enter the second operand&);
scanf(& %f&,&y);
switch(op)
{ case '+': z=x+y;&
&&&&& case '-': z=x-y;
&&&&& &(2)&
&'*': z=x*y;
&&&&& case '/':
&&& &&& &&&&&&& &&if(& (3)&
&&& &&&&& else error=TRUE;
&&& &&& &&&&&&& &&&&(4) &;
&&&&& default :
error=TRUE;
if(!error)printf(&%f%c%f=%f\n&,x,op,y,z);
&&& &&(5)& &printf(&Bad operator or
division-by-zero error\n&);
3-6 (2级) 写一程序求y值& (x值由键盘输入)
&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&& 测试数据:① x=0& ② x=10 ③ x=-10
(2级) 编程序计算g的值(x由键盘输入)。
&&&&&&&&&&&&
测试数据:① 10.5& ② -7.8 ③ 0
(2级) 编程序计算下述函数在X=-7,-1,0,7时的值。
测试数据:① 15.6& ② -8 ③ 0 ④ 5.6 ⑤ 2.3&
3-9 (2级) 有一函数
&&&&&&&&&&&
请编程序计算y的值(x的值由键盘输入)
测试数据:① 0& ② 10 ③ 15 ④ 20 ⑤ 30 ⑥ 35 ⑦ 45 ⑧ 60 ⑨ 75 ⑩ 80 ⑾ 100
3-10 (2级) 有三个数a、b、c,由键盘输入,输出其中最大的数。
3-11 (2级) 输入四个整数,要求按大小顺序输出。
3-12 (2级) 输入一个数,判断它能否被 3或者被 5整除, 如至少能被这两个数中的一个整除则将此数打印出来,否则不打印,编出程序。
测试数据:① 14& ② 15& ③ 21&& ④& 25
3-13 (2级) 读入1到7之间的某个数,输出表示一星期中相应的某一天的单词:Monday、 Tuesday等等,用switch语句做。
3-14 (2级) 试编制输入一位数字,当该数在0到9范围内时,输出这一位数字,否则输出not digit的程序。
3-15 (3级) 输入某个学生的平均成绩g(假设0≤g≤100)。如果g≥90分,打印“very good”;80≤g&90,打印“good”;60≤g&80,打印“pass”;g&60,打印“fail”。&&
&测试数据:① 98&& ② 86&& ③ 75&& ④ 45&& ⑤ 80&& ⑥ 70 。 (要求用三种方法编程)
第四单元 循环程序设计
4-1 (0级) 选择题
(1)以下While循环中,循环体执行的次数是&&&&&& &。
& while(--k) k=10;
& A.10次&&&&&&&&&&&&&&& B.无限次&&&&&&&&&&&&&&& C.
一次也不执行&&&&&&&& D.
&(2)有以下程序段,其中n为整型变量:
& while(n--); printf(&%d &,n);
& A. 2&&&&&&&&&&&&& B.
1 0 &&&&&&&&&&&& C.
–1&&&&&&&&&&&&&&&&& D.
(3)若变量已正确定义,以下不能正确计算1+2+3+4+5的程序段是
& A. i=1;s=1; do {s=s+i;i++;} while
& B. i=0;s=0; do{i++;s=s+i;}
while(i&5);
& C. i=1;s=0; do{
s=s+i;i++;}while(i&6);
& D. i=1;s=0; do {s=s+i;i++;}
while(i&=5);
(4)有以下程序段,其中x为整型变量:
& x=-1;do {;}while(x++); printf(&x=%d&,x);
& 以下选项中叙述正确的是
& A.该循环没有循环体,程序错误&&&&&&&&& B.
& C. 输出:x=0&&&&&&&&&&&&&&&&&&&&&&&&& D.
输出:x=-1
4-2 (1级) 写出下面程序的运行结果
1.& main()
{int i,s=0;
&&&&&&& for(i=1;i&=100;i++)
& &&&&& {if(i%10!=0)
& &&&&& s=s+i;
&&& printf(&i=%d,s=%d\n&,i,s);
{int i,s=0;
&&&&&&& for(i=1;i&=100;i++)
& &&&&& {s=s+i;
&& &&&& &if(i==10)
&&& printf(&i=%d,s=%d\n&,i,s);
&&&&&&& &&&&&&& int
while (i&=15)
if (++i%3!=2)
&&&&&&&&&&
else printf(&%d&
printf(&\n&);
&&&&&&& &&&&&&& int
char space=' ';
&&&&&&& &&&&&&& for
(i=0;i&=5;i++)
{for (j=1;j&=i;j++)
&&&&&& &&&&&&&& &&printf(&%c&,space);
for (k=0;k&=5;k++)
&&&&&&& &&&&&&& &&&printf(&%c&,'*');
printf(&\n&);
&&&&&&& &&&&&&& &}
#include &stdio.h&
&&&& main()
&&&& {& int i,j,k=0;
&&&&&&& &&&&&&& for
(j=11;j&=30;j++)
{if (k%10==0)&
printf(&\n&);
&&&&&&& &&&&&&& &&for (i=2;i&j;i++)
&&&&&&&&&&&
if (!(j%i))
&&&&&&&&&&&&&&&
if (i&=j-1)
&&&&&&& &&&&&&& &&& &&&&&&&{printf(&%d\t&,j);
& &&&&&&&&k++;}
4-3 (1级) 用循环语句编写求的程序。
&&& 提示:考虑整型数的表示范围,选用适当的数据类型,要求用单重循环完成。运行结果为1.84467e+19。
4-4 (1级) 求 1到 100之间的奇数之和、偶数之积。
&&& 提示:注意数据类型,使用两种方式作此题,在一个循环中同时求出及分别用两个循环求出和与积。奇数之和为2500,偶数之积为3.42432e+79。
4-5 (2级) 求(即求1!+2!+3!+...+20!)
&&& 提示:分别用单重循环和双重循环实现。注意数据类型,注意双重循环中赋初值的位置,结果为2.56133e+18。
(2级) 对1至100的数验证下边公式
&&&&&&& 13
+ 23 + ... + n3 = (1 + 2 + ... + n)2
&&& 提示:请注意实数相等的比较方法,当两数之差小于一个很小的数时(如0.00001)即认为两数相等。
4-7 (2级) 从键盘输入任意十个数,打印出它们中的最大数、最小数。
&&& 测试数据:①& 1,-12,20,30,-5,-23,33,125,200,-100
4-8 (2级) 输入两个正整数 m和 n,求其最大公约数和最小公倍数。
&&& 提示:可以有三种方法求两数的最大公约数。设m&n。
&&& 1. 让k从1变到n,能同时整除m和n的最大的k即为所求。
&&& 2. 让k从n变到1,第一个能同时整除m和n的k即为所求。
&&& 3. 使用辗转相除法。辗转相除法的算法为:首先将 m除以 n(m&n)得余数 r,再用余数& r 去除原来的除数,得新的余数,重复此过程直到余数为 0时停止,此时的除数就是m 和 n的最大公约数。
&&& 经常使用的算法是辗转相除法。
&&& 求 m和 n的最小公倍数: m和 n的积除以 m和 n 的最大公约数。
&&& 测试数据: (1)m=12,n=24 (2)m=5,n=3&
(3)m=8, n=6
4-9 (2级) 求 Sn=a+aa+aaa+...+aa...a之值,其中 a是一个数字。 例如& 2+ 22 +222+2222(
此时n=4),n由键盘输入。考虑当n&5时,应如何修改程序?
&&& 思路1:由tn=2得到下一个数22时,用tn+20的算法,同样由tn=22得到222时,由tn+200得到,以此类推。
a,n,count=1,Sn=0,Tn=0;
printf(&请输入 a 和 n 的值:\n&);
scanf(&%d,%d&,&a,&n);
printf(&a=%d&
n=%d\n&,a,n);
&&&& while
(count&=&&& (1)&&& )
{Tn= &&&(2)&&&& ;
&&&&&&& &&&&&&& &Sn=&&& (3)&&&& ;
&&&&&&& &&&&&&& &&&&&(4)&&& ;
printf(&a+aa+aaa+...=%d\n&,Sn);
&&& 思路2:由tn=2得到下一个数22时,用tn*10+2的算法,同样由tn=22得到222时,由tn*10+2得到,以此类推。
&&& main()
&{int a,n,i=1;
& float t,s=0;
scanf(&%d%d&,&a,&n);
&& t=a;s=a;
& while(&&& (5)&& )
& {t=&&&& (6)&& ;
printf(&s=%.0f\n&,s);
4-10 (2级) 编程序计算下式的值
(要求分别用一重循环和三重循环实现)&
4-12 (2级) 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6 的因子为1、2、3,而6=1+2+3,因此6 是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
&&&&& 6&&& its factors are 1,2,3
运行结果为:
6 its factors are:1,2,3
28 its factors are:1,2,4,7,14
496 its factors
are:1,2,4,8,16,31,62,124,248
4-13 (2级) 一个数恰好等于它的平方数的右端,这个数称为同构数。如& 5 的平方是25, 5是25中的右端的数, 5就是同构数。找出1~1000之间的全部同构数。
&& &运行结果为:1&&&&
5&&&& 6&&& 25&&& 76&& 376&& 625
4-14 (2级) 有一分数序列,求出这个数列的前20项之和。
&&& 运行结果为:32.660259。
4-15 (2级) 用牛顿迭代法求方程在x0=1.5附近的根(精度为)
&&& 牛顿迭代公式为:
&&& 结果为:x=2
4-16 (2级) 打印出以下图形
&&&& main()
* * * * * * *
&&&& int i,j,k;
(i=0;i&= &&&(1)&& &;i++)
&&& &&&&&&& &&&&&&&&&&& for (j=0;j&=2-i;j++)
&&&&& & &&&printf(& &);
for (k=0;k&= &&&(2)&& &;k++)
&&&printf(&*&);
&&&(3)&& &&&&&&
(i=0;i&=2;i++)
for (j=0;j&= &&&(4)&&& ;j++)
&&&&&& &&&&&&&& &printf(& &);
for (k=0;k&= &&&(5)&&& ;k++)
&&&&&& &&&&&&&& &printf(&*&);
printf(&\n&);
&& }&&&&&&&&&&&&&&&&&&&&&
4-17 (2级) 给出一个不多于4位的正整数,要求:①& 求出它是几位数& ② &分别打印出每一位数字&& ③& 按逆序打印出各位数字
(2级) 编一个程序,把一批非零整数中的偶数、奇数的平均值分别计算出来。用零作为终止标记。
(2级) 3025这个数具有一种独特的性质:将它平分为两段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数。
4-20 (3级) 在一个程序中计算出给定误差小于0.1,0.01,0.001, 0.01 时,下式的值:(提示:本题中误差指前 n+1项之积与前 n项积之差)
&4-21 (3级) 用泰勒展开式求sinx的近似值,误差要求为10-5。
&&& sinx=
&& 测试数据:①& x=0.3时,s=0.295520,循环次数为4;
第五单元&&&&&
5-1(1级) 选择题
C语言中数组元素下标的数据类型为 &&&&&&
&&&&&&& A、整型常量&&&&&&&&&&&&&&
& &&B、整型表达式
C、整型常量或整型常量表达式 &&& &&D、任何类型的表达式
C语言中一维数组的定义方式为:类型说明符& 数组名&&&&&& &。
&&&&&&& A、[整型常量]&&&&&&&&&
&&&&&&B、[整型表达式]
C、[整型常量]或[整型常量表达式] &&& &&D、[常量表达式]
若有说明:int a[3][4];则对a数组元素的非法引用是&&&&&& &&。
&&&&&&& A、a[0][3*1]&&&&&&&&&&&&&
& &&B、a[2][3]
C、a[1+1][0]&&&&&&&&&&&&
&& &&D、a[0][4]
若有说明 static int &a[][3]={1,2,3,4,5,6,7,8,9};则 a 数组第一维的大小是 &&&&&&&。
&&&&&&& A、&
3&&&&&&&&&&&
若二维数组 a 有 m 列,则在a[i][j]前的元素个数为 &&&&&&&&&&。
&&&&&&& A、 i*m+j&&&& B、 j*m+i&&&&&&&&
C、 i*m+j-1&& D、 i*m+j+1
下面是对数组s的初始化,其中不正确的是
&&&&&&&&&。
&&&&&&& A、char s[5]={&abc&};&& &&& &&&&&&B、char s[5]={'a','b','c'};
C、char s[5]=&&;&&&&&&&&
&& &&D、char
s[5]=&abcdef&;
下面程序段的运行结果是 &&&&&&&&。
&&&&&&& char
c[]=&\t\v\\\0will\n&;
&&&&&&& printf(&%d&,strlen(c));
&&&&&&& A、14&&&&&& B、 3&&&&&
C、 9&&&&& D、字符串中有非法字符,输出值不确定
判断字符串s1是否等于字符串s2,应当使用 &&&&&&&&。
&&&&&&& A、 if (s1==s2)&&&&&&&&&&&&&&
B、 if (s1=s2)
&&&&&&& C、 if (strcpy(s1,s2))&&&&&&& D、 if (strcmp(s1,s2)==0)
(9)要求定义包含8个int类型元素的一维数组,以下错误的定义语句是
&&&&&&& A、int& N=8;&&&&&&&&&&&&&&&&&&& & B、#define N 3
&&&&&&&&&&
int a[N];&&&&&&&&&&&&&&& &&&&&&&&
int a[2*N+2]
&&&&& &&C、int a[]={0,1,2,3,4,5,6,7}; D、int
a[1+7]={0};&&&
(10) 若有以下定义语句:int
a[]={1,2,3,4,5,6,7,8,9,10};则值为5的表达式是
&&& A、a[5]&&&& B、a[a[4]]&&&&& & C、a[a[3]]&&&&&&&&&&& D、a[a[5]]
5-2(1级) 写出程序的运行结果。
&& &main()
a[3][3]={1,3,5,7,9,11,13,15,17};
&&&&&& int
sum=0,i,j;
&&& &&&for (i=0;i&3;i++)
for (j=0;j&3;j++)
{& a[i][j]=i+j;
&&&&&&&&&&&&
if (i==j) sum=sum+a[i][j];
printf(&sum=%d&,sum);
&&& }&&&&&&&&
&& &main()
&& {& int i,j,row,col,
&&&&&& int
a[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,0,5}};
max=a[0][0];row=0;col=0;
&&&&&& for
(i=0;i&3;i++)
for (j=0;j&4;j++)
&&&&&&&&&&&&
if (a[i][j]&max)
&&&&&&&&&&&&
max=a[i][j];
&&&&&&&&&&&row=i;
&&&&&&&&&&&col=j;
&&&&&&&&&&&&
printf(&max=%d,row=%d,col=%d\n&,max,row,col);
& &&main()
&&& { int a[4][4],i,j,k;
&&&&&& for
(i=0;i&4;i++)
for (j=0;j&4;j++)
&&&&&&&&&&&&&
a[i][j]=i-j;
&&&&&& for
(i=0;i&4;i++)
{& for (j=0;j&=i;j++)
&&&&&&&&&&&&&&
printf(&%4d&,a[i][j]);
&&&&&&&&&&&&&&
printf(&\n&);
&&& #include &stdio.h&
&&& main()
&&& {int i,s;
&&&&&& char
s1[100],s2[100];
printf(&input string1:\n&);
&&&&&& gets(s1);
printf(&input string2:\n&);
&&&&&& gets(s2);
&&&&&& i=0;
&&&&&& while
((s1[i]==s2[i])&&(s1[i]!='\0'))
&&&&&&& &i++;
((s1[i]=='\0')&&(s2[i]=='\0')) s=0;
&&&&&& else
s=s1[i]-s2[i];
printf(&%d\n&,s);
&&& 输入数据&& aid
&&&&&&&&&&&&&&
5-3(1级) 程序填空
程序一: 找出三个字符串中的最大者
&&& &include &string.h&
&&& { char str[20],s[3][20];
&&&& &&for (i=0;i&3;i++)
gets( &&&(1)&&& );
(strcmp( &&&(2)&&& )&0)
strcpy(str,s[0]);
&&&&&& else
strcpy(&&&& (3)&&& );
(strcmp(&&&& (4)&&&& )&0)
strcpy(str,s[2]);
printf(&The longest string is : \n%s\n&,str); }
程序二:用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。
int a[4]={15,34,48,98};
&&& & static int b[5]={12,32,55,67,78};
&&& & int c[10];
&&& & int i,j,k;
&&& & &&&(1)&&& &;
&&& & while (i&4 && j&5)
&&& & if (a[i]&b[j])
&&& &&& { c[k]=a[i];k++;i++;}
&&& &&& { c[k]=b[j];k++;j++;}
&&& & while ( &&(2)&&& &)&
&&& &&& {c[k]=a[i];i++;k++;}
&&& & while ( &&&(3)&& &)&&
&&&&&&& &&& {c[k]=b[j];k++;j++;}
&&&&&&& & for (i=0;i&k;i++)
&&&&&&& &&&&
printf(&%5d&,c[i]);
&&&&&&& & printf(&\n&);
&&&&&&& &}
5-4(1级) 随机产生12个5—15之间的整数放入一维数组中,然后将这些数输出,每行输出4个数。
5-5(2级) 有一个数组,内放10个整数。要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。
5-6(2级) 用选择法对10个整数按由小到大的顺序排序。
5-7(2级) 求一个 5×5矩阵两条对角线上元素之和。&
5-8(2级) 已知有一个5×5的数组,求它右上三角(含对角线)的元素之和。
5-9(2级) 用for循环求5×5数组中,除了四条边框的元素之外的元素之和。
5-10(2级) 用数组求一组数中的最大值、最小值和平均值,并求有多少个数超过平均值。
5-11(2级) 将一个数组中的元素按逆序重新存放。例如原来的顺序为:8,6,5,4,1, 要求改为:1,4,5,6,8& 。
5-12(2级) 有 n个数(n由键盘输入)已按由小到大的顺序排好,要求输入一个数, 把它插入到原有序列中,而且插入之后仍然保持有序。
5-13(2级) 将一个字符串的前 n个子字符送到一个字符型数组中去,
然后再加上一个(不允许使用strcpy(str1,str2,n)函数),n由键盘输入。
5-14(2级) 有一行字符,统计其中的单词个数(单词之间以空格分隔),并将每一个单词的第一个字母改为大写。
5-15(2级) 有一行文字,要求删去某一个字符。此行文字和要删去的字符均由键盘输入,要删去的字符以字符形式输入(如输入 a表示要删去所有的 a字符)。
5-16(2级) 将字符数组 A中下标为双号(0,2,4,6,8...) 的元素值传给另一个字符数组 B,然后将 B数组的元素按逆序输出。
5-17(2级) 打印以下图形
&&&&&&&&&&&
*****
&&&&&&&&&&&&&
*****
&&&&&&&&&&&&&&&
*****&
&&&&&&&&&&&&&&&&&
*****
&&&&&&&&&&&&&&&&&&&
*****
&&& 分别用一维数组和二维数组两种方法实现。
5-18(2级) 编程序将一个6×6的二维数组左下三角的元素赋值为-1,右上三角的元素赋值为1,主对角线(行,列下标相同)上的元素送入2。把数组中的值按列对齐方式输出。
&&& 要求: 不允许使用scanf函数。
5-19(3-级) 输入一个班30个学生的成绩,(1)统计各分数段0-60,60-70,70-80,80-90,90-100的人数;(2)分别统计在60,70,80,90以上的人数。
5-20(3级) 打印如下形式的杨辉三角形&
&&&&&&&&&&&&&&&&&&&&&&&&
& &&&&&&&&&&&&&&&&&&&&&1&& 1
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
1&& 3&& 3&& 1
&&&&&&&&&&&&&&&&
1&& 4&& 6&& 4&& 1
&&&&&&&&&&&&&&
1&& 5&& 10& 10&
&&& 输出前10行,从 0行开始,分别用一维数组和二维数组实现。
5-21(2级) 编程产生如下形式的方阵。
&&&&&&&&&&&&&
&& &&&&&&&&&&&3& 1&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&& 要求:不允许使用键盘输入语句和静态赋值语句,尽量少用循环。&
第六单元& 函 数
6-1. (2级)选择题
(1) 在C语言中,存储类型为 &&&&&&&&&&的变量只在使用它们时才占用存储空间。
&&& A、static和auto&&&&&&&&&&&&&&&&&&& B、register和auto
C、static和register&&&&&&&&&&&&&&& D、resister和extern &
(2) 数组名作为函数参数传递给函数,作为实在参数的数组名被处理为& &&&&&&
&&&&&&& A、该数组的长度&&&&&&&&&&&&&&&& B、该数组的元素个数
&&&&&&& C、该数组中各元素的值&&&&&&&&&& D、该数组的首地址
(3) 已知下面的程序段,正确的判断是 &&&&&&&&&&&
&&& #define A 3
&&& #define B(a)
x=3*(A+B(7));
&&&&& & A、程序错误,不允许嵌套定义&&&& B、x=93
&&& C、x=21 &&&&&&&&&&&&&&&&&&&&&&&&&&& D、程序错误,宏定义不允许有参数
(4) C语言规定,调用函数时实参变量和形参变量之间的数据传递是 &&&&&&&
A、地址传递&&&&&&&&&&&&&&&&&&&& B、值传递
&&&&&&&&& D
6-2. 读程序写运行结果。
(1)#define mac1(a)& a*a
#define mac2(b) (b)*(b)
{ int c,d;
& &&&&& c=mac1(2+3);
& &&&&& printf(&mac1:%d\n&,c);
&&&&&&& &d=mac2(2+3);
& &&&&& printf(&mac2:%d\n&,d);
(2)&& #define
TOLOWER(ch) ((ch)&='A'&&(ch)&='Z')?(ch)+'a'-'A':(ch)
&&& #include
&&& main()
printf(&please enter string, CTRL+Z abort&);
{ ch=getchar();
&&&&&&&&&&
ch=TOLOWER(ch);
&&&&&&&&&&
printf(&%c&,ch);
}while(ch!=EOF);
输入数据是:ABCDEFG^Z
int k=4,m=1,p;
&&&&&& & p=func(k,m);
&&&&&& & printf(&%d,&,p);
&&&&&& & p=func(k,m);
&&&&&& & printf(&%d\n&,p);
&&&&&& & }
&&&&&& func(a,b)
&&&&&& int
static int m,i=2;
&&&&&& & i+=m+1;
&&&&&& & m=i+a+b;
return(m);
(4)static int a=5;
&&& main()
printf(&a=%d\n&,a);
&&& & p1( );
&&& & p2( );
printf(&a*a=%d\n&,a*a);
&&& & a=8;
printf(&a*a*a=%d\n&,a*a*a);
&&& { char
str[]=&abcdef&;
&&& & abc(str);
&&& & printf(&str[]=%s\n&,str);
&&& abc(str)
&&& &for (a=b=0;str[a]!=\0;a++)
&&& &&& if (str[a]!=)
&&& &&&&&&
str[b++]=str[a];
&&& &str[b]=\0;
& for(i=1;i&=3;i++)
&& { prt2();
&&& printf(&\n\n&);
{printf(&******\n&);}
&printf(&######\n&);
6-3. (1级) 定义一个宏,交换两个参数的值。
6-4. (2级) 打印出1-100之间的全部素数(判素数由函数实现)。&&
6-5. (2级)求1到20的阶乘的和,其中求阶乘用函数完成。
6-6. (2级) 写一函数,实现字符串的复制。
6-7. (2级) 编写计算m的n次方的递归函数。
6-8. (2级) 利用函数求二项式(x+y)7的所有系数。
其中& n :代表方程式次数。
&&&&& m :代表所求的第m项,项数从0算起。
&&&& 如求多个数的最大公约数,程序该如何修改?
6-11.(2级) 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的统计结果。再考虑将算得的结果放在一个数组中。
6-12.(2级) 用递归方法求N阶勒让德多项式的值,递归公式为
6-13.(2级) 编写一个函数,它能返回n×n数组(整型)中主、副对角线上的元素之和。
6-14.(2级) 有一长度不大于40的字符串,已知其中包含两个字符“A”,求处于这两个字符“A” 中间的字符个数,并把这些字符依次打印出来。
6-15.(2级) 编写一个函数JOIN,让它实现字符串连接运算功能。
6-16.(2级) 写一个函数比较两个字符串,如果s1=s2,则返回值0;如果s1&s2,则返回值1;如果s1&s2, 则返回-1。
6-17.(3级) 编写函数IND,判断一字符串是否为另一字符串的子串,若是则返回第一次出现的起始位置,否则返回0。
6-18.(2级) 用随机函数产生5组三位正整数, 每组十个数,调用一函数打印出每组数,并编一函数求出每组中的最大数。
6-19.(2级)用插入法对任意10个数按由小到大排序。
6-20.(3级) 编写一个函数,由参数传来一个字符串,将其中的最长的单词输出。
6-21.(3级) 编写一个函数,求出一个给定数字的所有因子。如:72=2*2*2*3*3。
#include&stdio.h&
&&&&&& void
prinzi(js,yz)
&&&&&&& int
js,yz[100];
int i,j,k;
&&&&& &&&for (i=2;& (1)&& &&;i++)
&&&&&&&&&&
while(& (2)& &&)
&&&&&&&&&&&
{ &&(3)& &&;yz[j]=i;js=js/i;}
if (js!=1)
&&&&&&&&&&
{j++;yz[j]=}
&&&&&& main()
&&&&&& {int
i,js,yz[100];
scanf(&%d&,&js);
printf(&%d%c&,js,'=');
prinzi(js,yz);
&&&&&& for (i=0;& (4)&
printf(&%d%c&,yz[i],'*');
printf(&%d&,yz[yz[99]]);
6-22.(3级) 产生20个1-4之间的随机整数,统计每个数出现的次数,并输出出现次数最多的数。
6-23.(3级) 编写一个函数,将一个十进制数转换成十六进制数,结果放在一个字符数组中。
6-24.(3级) 编一个计算n个数之积的递归函数,在主程序中读入具有5个元素的整型数组,然后调用该函数,求出数组元素之积。
6-25.(3级) 编一个程序,读入具有5个元素的实型数组,然后调用一个函数,递归地找出其中的最大元素,并指出它的位置。
6-26.(3级) 验证歌德巴赫猜想:一个充分大的偶数可以分解为两个素数的和,编程序将6-50之间的全部偶数表示为两个素数的和。
第七单元&&& 指&& 针
&&& 本章习题均要求用指针方法处理。
7-1(1级) 下列说法对吗?
&&& (1)指针变量的值:
&&&&& ①与它指向的变量类型相同。
&&&&& ②是存储单元的地址。
&&&&& ③只能增加不能减小。
&&& (2)由指针所指的变量既可以在赋值语句左边,也可以在右边。
&&& (3)由指针所指的变量名与指针名无关。
&&& (4)赋给指针的值对指针所指的变量值有影响。
7-2(1级) 回答下列问题:
&&& (1)可以把一个指针作为参数传输给一个函数吗?
&&& (2)一个函数可以是指针类型吗?
&&& (3)设p和q是同类型的指针变量,语句p=q和*p=*q有什么不同?
&&& (4)几个指针可以指向同一个变量吗?
&&& (5)*&a的含义是什么?
7-3(1级) 写出下列定义的含义:
7-4(0级) 有四组对指针变量进行操作的语句,以下判断正确的选项是&&& 。
&& &(1) int *p,*q;q=p;
&&&&&&& int
a,*p,*q;p=q=&a;
&&& (2) int
a,*p,*q;q=&a;p=*q;
&&&&&&& int
a=20,*p;*p=a;
&&& (3) int
a=b=0,*p;p=&a;b=*p;
&&&&&&& int
a=20,*p,*q=&a;*p=*q;
&&& (4) int
a=20,*p,*q=&a;p=q;
&&&&&&& int
p,*q;q=&p;
&&& A、(1)正确;(2),(3),(4)不正确。
B、(1),(4)正确;(2),(3)不正确。
&&& C、(3)正确;(1),(2),(4)不正确。
&&& D、以上结论都不正确。
7-5(0级) 以下程序有错误,错误原因是&&&&&&
&&&&&&& main()
&&&&&&& {int
*p,i;char *q,
&&&&&&& &p=&i;
&&&&&&& &q=&
&&&&&&& &*p=40;
&&&&&&& &*p=*q;
&&&&&&& & ┇
&&& A、p和q的类型不一致,不能执行语句*p=*q;
&&& B、*p中存放的是地址值,因此不能执行语句*p=40;
&&& C、q没有指向具体的存储单元,所以*p没有实际意义;
&&& D、q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行语句*p=*q;
7-6(0级) 有如下语句:
&&&&&&& int
a=10,b=20,*p1,*p2;
&&&&&&& p1=&a;p2=&b;
&&& 3.用梯形法求sin(x)*cos(x)在[a,b]上的定积分。求定积分的公式为:
&&& &&x&&i=a+ih,h=(b-a)/n。
&&& 设a=0,b=1.2,积分区间分割数n=100,请编程序。
&&& 4.请打印某一等差数列的前十项。该数列前四项之和及之积分别是26和880。
&&& 5.已有一个按字母顺序排列好的字符串str,现有另一个字符串str1,请将该字符串中的字符按字母顺序插入到str中。
&&& 假设str的值为&adkopwx&,str1的值为&cfsy&,插入后结果为&acdfkopswxy&。
1&& 16& 15& 14& 13
2&& 17& 24& 23& 12
3 & 18& 25& 22& 11
4&& 19& 20& 21& 10
&&& 6.将一个字符串下标值为偶数的元素从小到大排序,其它元素位置不变,最后把变化后的字符串输出。
&&& 7.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数,然后按顺序每5个数求出一个平均值,放在另一个数组中并输出。
&&& 8.产生并输出右图所示的螺旋方阵。
&&& 9. 有10个两位整数,把这些数作以下变化,如果它是素数,则把它乘以2,若它是偶数则除以2,其余的数减1,
请将变化后的10个数按从小到大的次序打印出来。
&&& 10. 有一长度不大于40的字符串,已知其中包含两个字符“A”,求处于这两个字符“A” 中间的字符个数,并把这些字符依次打印出来。
&&& 11. 已知有递推公式:&
&&&&&&&&&&
求该数列的前n项。不允许使用数组。
&&& 12. 把25个字母A、B 、C、 ··· 、X、Y按如下要求打印出来:从最中间的字母M开始打印,
然后一左一右依次打印出其它字母,即M,L,N,K,O,...。要求:初始化时按字母表顺序赋值。
&&& 13. 已知有三个数组A,B,C,A为5行5列的二维数组,B、C为只有5个元素的一维数组,键盘输入数据的顺序如下:
23,45,6,1,-3,4,5,233,456,0,3,56,78,-56,5,6,77,8,89,9,3,6,8,9,90
请编写程序,求出A的各行之和放至数组B的相应元素中,求出数组A的各列之和放至数组C的相应元素之中。要求程序输出的前五行五列为A数组,第六行为C数组,第六列为B数组。&&&
14. 编程序求3至39之间满足下列条件的各组素数:每组有3个素数,第2个比第一个大2,第3个比第2个大4。例如5,7,11就是满足条件的一组。
要求:1. 不许使用数组。
2. 打印满足条件的各组素数。
3.求出满足条件的素数共有多少组。
15.编写一递归函数计算mn
16.请编制一函数将一个单向链表按逆序存放。
17.编一个程序,为一整型数组输入若干元素,然后调用一个函数,递归计算这些元素的乘积。
18.用递归算法把数组中N个数按逆序重新存放。
19.编写一函数,在有序数组中用顺序查找法查找某一个数,若找到该数,则返回该数的下标值;若找不到,则返回-1。顺序查找法的思路为:从第一个元素开始,从前向后依次与待查找的数比较,直到找到该元素或查找到数组尾为止。
20.编写函数用牛顿迭代法求解方程:cosx-x=0
已有初值x0=4.14159/4,要求绝对误差不超过0.001。
21.编写函数max_value用以求出一些数据中的最大值max,调用该函数求5×6数组每行的最大值及整个数组的最大值。
22.编写一个判断素数的函数,然后调用该函数用20~40间的偶数验证歌德巴赫猜想。
23.编写一个函数prime用以判断一个整数n是否为素数,若是素数则返回T,否则返回F。然后调用该函数对下面的问题求解:
求3到39之间满足下列条件的各组素数:每组有三个素数,第二各比第一个大2,第三个比第二个大4。请打印满足条件的各组数。
24.用随机函数random产生30个[10,80]间的整数,选出其中的偶数,然后用插入排序方法对这些偶数排序后输出。(排序用函数实现)
25.输入10个字符串,找出最长的字符串并输出,用指针变量实现。
26.用函数来统计一个子串在母串中出现的次数。
27.将一个字符串中的所有字符按从大到小的顺序重新存放后再输出。
28.用递归方法将一个整数转换成字符串输出。
29.设有一个名为JICHU的C源程序,且已知命令行为:
&&&&&& JICHU& CHINA& DAQING& ANDA
请编写一个带参的主函数,来得到下面的运行结果。
30.设有两个字符串str1、str2,请编写函数将str1、str2的对应字符中的较大者存放到数组str3中。要求分别使用数组名和指针变量作参数。
31.设一个数组中的数据已按从小到大的顺序排列,请编写一个函数,将数组中相同的数据删的只剩一个。若数组中的数据是无序的,函数应如何编写?
32.将一个十进制整数转换成二进制数,并把此二进制数的每一位放在一维数组中。(注意:二进制数的最低位放在数组的第一个元素中)
33.编写一函数,用指针变量作函数参数,生成如下形式的三角矩阵:
&& &&&&&&&& 1&& 3&& 6& 10&
&&&&&&&&&&& 2&& 5&& 9& 14
&&&&&&&&&&& 4&& 8& 13
& &&&&&&&&& 7& 12
&&&&&&& && 11
在主函数中调用该函数,打印该三角阵的前7行。
34.有一个数列,有20个整数,今要求编一个函数,它能够从指定位置开始的n个数按相反顺序重新排列。例如数列原为:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
若要求对从第5个数开始的10个数进行逆序处理,则得到的新数列为:
&& 1,2,3,4,14,13,12,11,10,9,8,7,6,5,15,16,17,18,19,20
数列中的数在main函数中输入,在调用函数时应给出从第几个位置开始(以m表示)和要求处理的是多少个数(以n表示),例如对上面的情况,m=5,n=10。
在main函数中输出新的数列。
35.有n个人围成一圈,顺序排号,从第一个人开始报数,从1报到5,凡报到“5”的人退出圈子,问最后留下的是原来第几号的人?请编一函数,n的值由main函数中输入并通过实参传给该函数,最后结果由main函数输出。
36.编一个函数atoi,其作用是将一个整数字符串转换成一个整数,若字符串中含有非数字字符,函数返回值是0。例如atoi(″221″)的值为221,atoi(″23asv″)的值为0。
函数调用形式为:
&&&&&&& atoi(str);
str是指向该字符串的指针变量或字符串的首地址,函数返回值为求出的整数。
37.有5个字符串:“INTERNET”、“INTRANET”、“CHINANET”、“CERNET”、“ARPANET”要求按字母顺序(由小到大顺序)输出这5个字符串。要求:(1)用选择排序法;(2)用起泡排序法分别编写函数。用指针数组处理。
38.输入一个字符串,内有数字和非数字字符,例如:
&&&&&& mybirthday
is & now 38yearsold.
将其中连续的数字作为一个整数,依次存放到一数组a中。例如,1960放在a[0]中,12放在a[1]中,26放在a[2]中,……。统计共有多少个整数,并输出这些数。
39.在一结构体类型中含有三个成员,分别是名次(rank)、学生姓名(name)和成绩(score),其中name成员是指针类型的。请按学生成绩由高到底进行排序。
40.在一结构体类型中,包含有学生学号(num)、姓名(name)、三门课成绩(score[3])及平均成绩(ave)。请设计以下函数:
①readin函数:用于输入n个学生的学号、姓名及三门课成绩,同时计算平均成绩;
②writeout函数:用于输出n个学生的学号、姓名、三门课成绩及平均成绩;
③sort函数:用于对n个学生按平均成绩用选择排序法从大到小排序。
在main函数中,调用这些函数来对10名学生的信息进行处理。
41.利用结构体类型编制一程序,实现输入一个学生的其中和期末四门课成绩,然后计算并输出其平均成绩。
42.编制一函数用以实现求一个链表中结点的个数。
43.在一个单向链表中每个结点含有一个数据成员和指针成员,编一函数用以求链表所有结点中数据成员的和。
44.已知head是一个指向单向链表头结点的指针,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。请编制一程序,用以求该链表中数据域值最大结点的位置。
45.有两个单向链表,分别由指针变量p1和p2指向其头结点。请设计一程序,将p2指向的链表连接到p1链表的尾部。
46.请编写程序:从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,输出到磁盘文件UPPER.TXT中保存。输入的字符串以“?”结束。然后再将UPPER.TXT的内容显示在屏幕上。
47.请编写程序实现文件的复制。即将源文件复制到目的文件,两个文件名均由命令行给出,源文件名在前。
48.一个班有10名学生,期末考试每人有4门课:数学、物理、英语、语文。从键盘上输入每位学生的数据(包括学号、姓名、4门课成绩),计算出平均分,将原有数据和计算出的平均分存放在文件student中。
&&& 49.从键盘输入多行字符串,把它们输出到磁盘文件a2.dat中,用quit作终止标记,但终止标记不保存在文件中。
&&& 50.有十名学生的成绩统计数据,每个学生数据包括学号、姓名及三门课成绩,请将这些数据保存在磁盘文件a3.dat中。
&&& 51.将a3.dat中的数据按学生三门课总成绩由高到低排序后,输出到磁盘文件a33.dat中。
52. 求阶乘N!。
设输入的N最大可使N!达到100位,要求打印出全部有效数字。方法如下:
用数组M[100]代表一个100位的数。 M[1]代表最高位,M[100]
代表最低位。先对M[100]置1, 其余各元素置零,然后从1到N进行累乘。同通常作乘法一样, 数组M与I(1≤I≤N)相乘时,从低位数乘起,乘积大于9时进到上一位去。 然后将结果打印(从头一个不等于零的位开始)。
C 语言期末考试模拟试题(一)
==========================================================================
注意事项:⑴ 考试为闭卷方式,时间两小时。
&&&&&& &&&⑵ 请将试题纸和答题纸一起上交,每张纸上写清班级、姓名、学号,否则
&&&&&&&&&&&&
不记成绩或扣分。
⑶ 注意卷面整洁。
一、问答题(共5分,每小题1分)
&&& 1.C语言有几种基本数据类型?分别是什么?
&&& 2.C语言如何表示逻辑“真”和“ 假”?
&&& 3.指出下面表达式的值?
&&&&& a=3,b=4,c=5
!a||b-c&0&&b
&&& 4.若有如下定义:
&&&&&&&&&&&&&&&
&int *y;} *p;
&&&&& 则++P-&x与p-&x++的含义有什么不同?
&&& 5.在C语言中,按文件的存储格式可将文件分为 &&&(1)&& &和 &&&(2)& &。
二、选择题 (以下各题只有一个答案是正确的,请找出正确的选项代号,共10分,每个选项1分)
& 1.设有整型变量i,其值为020,整型变量j,其值为20,执行语句
printf(&%d,%d\n&,i,j);
后,输出结果为[&&&& ]。
&&&& A. 20,20&&&&&& B.
20,16&&&& &&C.16,16&&&&&&&
& 2.设整型变量a值为5,使b不为2的表达式为[&&&& ]。
&&&& A.b=a/2&&&&&&&
B.b=6-(--a)&&&
C.b=a%2&&&&&&&
D.b=a&3?2:1
& 3.完成将文件指针fp重新指向文件的开头位置的函数是[&&&& ]。
&&&& A.fseek(fp)&&& B.ftell(fp)&&& C.rewind(fp)&& D.feof(fp)
& 4.函数calloc(32,8)的功能是[&&&& ]。
&&&& A.开辟8个长度为32个字节的连续存储空间
&&&& B.开辟32个长度为8个字节的连续存储空间
&&&& C.释放8个长度为32个字节的连续存储空间
&&&& A.释放32个长度为8个字节的连续存储空间
& 5.若有以下的说明,则在scanf函数调用语句中对结构体变量成员的不正确引用方式
&&& 为[&&&& ]。
struct pupil
&&&&&&&&&&
{ char name[20];
&&&&&&&&&&&&
&&&&&&&&&&&&
&& &&&&&&&&}pup[5],*p;
scanf(&%s&,pup[0].name); &B.
scanf(&%d&,&pup[0].age);
scanf(&%d&,&(p.sex));&
&&&D. scanf(&%d&,&p-&age);
& 6.数组名作为参数传递给函数,作为实参的数组名被处理为[&&&& ]。
&&&& A.该数组的长度&&&&&&&&&
&&&&&B.该数组的元素个数
&&&& C.该数组中各元素的值& &&&&&&&D.该数组的首地址
& 7. 一个C语言程序总是从[&&&& ]开始执行。
&&&& A. 主过程 &&&&&&&B. 主函数& &&&&&C. 子程序 &&&&&&&D. 主程序
& 8.若有以下语句,则下面[&&&& ]是正确的描述。
&&&&&& static
char x[]=&12345&;
&&&&&& static
char y[]={'1','2','3','4','5'};
&&&&& A. x数组和y数组的长度相同。
&&&&& B. x数组长度大于y数组的长度。
&&&&& C. x数组长度小于y数组的长度。
&&&&& D. x数组等价于y数组。
& 9.为了判断两个字符串s1和s2是否相等,应使用[&&&& ]。
if(s1==s2)&&&&&&& &&&&&&&B. if(s1=s2)
if(strcpy(s1,s2))& &&&&&&D. if(strcmp(s1,s2)==0)
& 10.以下程序段的输出为[&&&& ]。
&&&&& char
a[]=&Basic&;
&&&&& char *
for(ptr=a;ptr&a+5;ptr++)& &printf(&%s\n&,ptr);
&&&&& A. Basic&&&&&&& B.
B&&&&&&&&&
C. c&&&&&&&&&&&&&&&&
asic&&&&&&&&&&&
a&&&&&&&&&&&&
sic&&&&&&&&&&&&
s&&&&&&&&&&&&
ic&&&&&&&&&&&&&
i&&&&&&&&&&&&
c&&&&&&&&&&&&&&
c&&&&&&&&&&&&
三、读程序,写出运行结果。(共18分,每小题6分,要求按规定格式写,空格也要画出来)
1.&&&&& main()
char a[100]=&da qing ren!&;
printf(&len=%d\n&,n);
&&&&&&& char
&&&&&&& {int
while(x[i]!='\0')
return(i);
&&&&&&& long
&&&&&&& int
if(p==0)return(1);
else return(p*f(p-1));
for(i=1;i&6;i++)
printf(&%2d&&&&&&&
%ld\n&,i,f(i));
#define N 4
&&& main()
a[N][N]={1,2,3,4,5,6,7,8,9,
&&& && 10,11,12,13,14,15,16};
&&& &int i,j;
&&& &void inver(),print();
&&& &inver(a,N);
&&& &print(a,N);
&&& void inver(p,n)
&&& int (*p)[N],n;
&&& {int i,j,t;
&&& &for(i=0;i&n;i++)
&&& && for(j=0;j&i;j++)
&&& &&& &{t=*(*(p+i)+j);
*(*(p+i)+j)=*(*(p+j)+i);
&&& &&&&& *(*(p+j)+i)=t;
&&& &&&& }
&&& void print(p,n)
&&& int *p,n;
&&& {int i,j;
&&& &for(i=0;i&n;i++)
&&& &&& {for(j=0;j&n;j++)
&&&&&&& printf(&%4d&,*(p+n*i+j));
printf(&\n&);
四、按照下列各题的题意及给出的程序填空,使它们成为完整、正确的程序。(共24分,每空1.5分)
1. 求Fibonacci数列:1,1,2,3,5,8,...
...的前20个数,即
&&&&&& &&&&&&&&&&&
&&&&& main()
&&&&&& long int
&&&&&& &&(1)& ;
&&&&&& f1=1;
&&&&&& f2=1;
printf(&%8ld\n%8ld\n&,f1,f2);
&&&&& &for(i=3;i&=20;i++)
{f3= &(2)& ;
printf(&%8ld\n&,f3);
2.& 用递归法求字符串中ASCII码值最大的那个字符。
max(str1,n)
char str1[];
if ( &(6) &)f=str1[0]&str1[1]?str1[0]:str1[1];
else f=max(str1,n-1)&str1[n]?max(str1,n-1):str1[n];
&&&&& &&(7)& &
}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
main()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
{char str[80];&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
gets(str);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
k=strlen(str);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
printf(&%c\n&,&
(8)& );&&&&&&&&&&&&&&&&&
2.& 有三个字符串,要求找其中最大者。&&&&
&&&&& char str[3][20];
&&&&&& &(9) &
for(i=0;i&3;i++)
&&&&&& &(10)&
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&& if(& (11)& )strcpy(string,str[0]);
&&&&&&& else
strcpy(string,str[1]);
&&&&&&& if( &(12) &)strcpy(string,str[2]);
printf(&\nthe largest string is:\n%s\n&,string);
& 4. 将字符串&turbo
C&,&BASIC&,&FORTRAN&,&COBOLI&,&PL-II&写入文件re6.txt。
&&&&& #include &stdio.h&
&&&&&& &(13)&
&&&&& main()
&&&&&& &(14) &char a[][8]={&turbo
C&,&BASIC&,
&&&&&&&&&&&&&&&&&&&&&
&FORTRAN&,&COBOLI&,&PL-II&};
fi=fopen(&re6.txt&, &(15) &);
for(i=0;i&=4;i++)
fputs( &(16) &);
&&&&& fclose(fi);
五、编程序(共43分)
2. 将一个字符串的所有数字字符全部删去后,再输出该字符串。
3. 求n个数的阶乘之和,要求求阶乘由一函数并用递归法实现。假设n=5,且这5个数分别是8,7,2,3,4时,则输出8!+7!+2!+3!+4!的值。
4. 有一个3×5的二维数组,请编程序将其每一行元素按逆序存放,再打印输出。
5. 将一个十进制数转换为八进制数后输出。
附录一:& 链表和文件应用举例
链表的四种操作建立、输出、删除和插入的完整程序。
#include &stdio.h&
&&& #include
&stdlib.h&
&&& #define
&&& #define
LEN sizeof(struct student)
&&& #define
STUDENT struct student
&&& STUDENT
&&& & STUDENT *
n=0;&&&&&&&&
/*全局变量,表示链表中节点的个数。*/
&&& STUDENT
*creat()& /*建立链表的函数,函数值为链表的头指针*/
&&& & {STUDENT *head,*end,*p1;
&&& & printf(&input creat data (format ld~f):\n&);
scanf(&%ld%f&,&inum,&fscore);
&&& & head=NULL;
&&& & while(inum!=0)
&&& &&&& {n=n+1;
&&& &&&&& p1=(STUDENT
*)malloc(LEN);
&&& &&&&& p1-&num=
p1-&score=
p1-&next=NULL;
&&& &&&&& if(n==1)
&&& &&&&&&
{head=p1;end=p1;}
&&& &&&&& else
&&& &&&&&&& &&& {end-&next=p1;
&&& &&&&&&&&
&&& &&&&&&& &&& }
scanf(&%ld%f&,&inum,&fscore);
&&& &&&& }
&&& & return(head);
print(head)& /*输出链表的函数,函数无返回值*/
&&& STUDENT
&&& {STUDENT
&&& &printf(&\nNow These %d records
are:\n&,n);
&&& &while(p!=NULL)
&&& && {printf(&%8ld
%5.1f\n&,p-&num,p-&score);
&&& &&& p=p-&
&&& STUDENT
*del(head,num)&& /*删除链表中num成员和num相等的那个节点*/
&&& STUDENT
&&& && {STUDENT *p1,*p2;
&&& &&& if(head==NULL)
&&& &&&&&&
{printf(&list null\n&);
&&& &&&&&&&
return(head);
&&& &&&&&&& }
&&& &&& p1=
&&& &&& while(p1-&num!=num
&& p1-&next!=NULL)
&&& &&&&&& {p2=p1;
&&& &&&&&&&
&&& &&&&&&& }
&&& &&& if(num==p1-&num)
&&& &&&&&&
{if(p1==head)
&&&&&&& &&&&&&&
&&&&&&& &&&& else
&&&&&&& &&&&&&&
p2-&next=p1-&
&&&&&&& &&&&
printf(&delete:%ld\n&,num);
&&&&&&& &&&& free(p1);
&&&&&&& &&&& n=n-1;
&&& &&&&&&& }
&&& &&& else
&&& &&&&&&
printf(&%ld not been found!\n&,num);
&&& &&& return(head);
&&& & STUDENT *insert(head,stud)&&&&& /*插入节点的函数*/
&&& & STUDENT *head,*
&&& &&&& {STUDENT *p0,*p1,*p2;
&&& &&&&& p1=
&&& &&&&& p0=(STUDENT
*)malloc(LEN);
p0-&num=stud-&
p0-&score=stud-&
&&& &&&&& if(head==NULL)
&&&&&&& &&& {head=p0;p0-&next=NULL;p1=p0;}
&&& &&&&& else
&&&&&&& &&&
{while((p0-&num&p1-&num)&&(p1-&next!=NULL))
&&&&&&& &&&&&&
{p2=p1;p1=p1-&}
&&&&&&& &&&&
if(p0-&num&=p1-&num)
&&&&&&& &&&&&&
{if(p1==head)
&&&&&&&&&&& &&&&&&&
{p0-&next=p1;head=p0;}
&&&&&&& &&&&&&& else
&&&&&&&&&&& &&&&&&&
{p2-&next=p0;
&&&&&&&&&&& &&&&&&&&
p0-&next=p1;
&&&&&&& & &&&&&&&&&&}
&&&&&&& &&&&&&&&
&&&&&&& &&&& else
&&&&&&& &&&&&&&&
{p1-&next=p0;p0-&next=NULL;}
&&&&&&& &&&& }
&&& &&&&& n=n+1;
&&& &&&&& return(head);
&&& &&&& }
&&& &main()&& /*主函数,可以分别调用四个处理链表的函数*/
&&& {STUDENT
*first=NULL,
&&& &while(1)
&&& && {printf(&\n&&&& 0----return\n&);
&&& &&& printf(&&&&& 1----creat\n&);
&&& &&& printf(&&&&& 2----print\n&);
&&& &&& printf(&&&&& 3----delete\n&);
&&& &&& printf(&&&&& 4----insert\n&);
&&& &&& printf(&&&&& input0-4:& &);
scanf(&%d&,&sele);
&&& &&& switch(sele)
&&& &&&&&& {case
&&& &&&&&&& case
1:first=creat();
&&&&&&&&&&&
case 2:print(first);
&&&&&&&&&&&
case 3:printf(&Input del data(format ld):\n&);
&&&&&&&&&&& &&&&&&&
scanf(&%ld&,&k);
&&&&&&&&&&& &&&&&&&
first=del(first,k);
&&&&&&&&&&& &&&&&&&
&&&&&&& &&&& case
4:printf(&input insert data (format ld~f):\n&);
&&&&&&&&&&& &&&&&&&
scanf(&%ld%f&,&stu.num,&stu.score);
&&&&&&&&&&& &&&&&&&
first=insert(first,&stu);
&&&&&&&&&&& &&&&&&&
&&&&&&& &&&&
default:printf(&error\n&);
&&& &&&&&& }
关于文件应用的例子:
例12-1& 以终端为对象的输入输出,用回车键表示数据结束。
& & #include &stdio.h&
&&& main()
&&& &ch=getchar();
&&& &while(ch!='\n')
&&& && {printf(&%c&,ch);
&&& &&& ch=getchar();
&&& &printf(&\n&);
程序运行结果为:
Computer』
例12-2& 把键盘上输入的一行字符写入文本文件。
#include &stdio.h&
&&& main()
&&& &fp=fopen(&y1.dat&,&w&);
&&& &ch=getchar();
&&& &while(ch!='\n')
&&& &&& {fputc(ch,fp);
&&& &&&& ch=getchar();
&&& &&&& }
&&& &fputc('\n',fp);
&&& &fclose(fp);
输入数据为:
Computer』
例12-3&& 把键盘上输入的若干行字符写入文本文件。
& & #include &stdio.h&
&&& main()
&&& &fp=fopen(&y2.dat&,&w&);
&&& &ch=getchar();
&&& &while(ch!=EOF)
&&& && {fputc(ch,fp);
&&& &&& ch=getchar();
&&& &fclose(fp);
输入数据为:
Computer』
I am a teacher』
例12-4& 将例12-3建立的文本文件读出,从终端上显示出来。
& & #include &stdio.h&
&&& main()
&&& &if((fp=fopen(&y2.dat&,&r&))!=NULL)
&&& &&& {ch=fgetc(fp);
&&& &&&& while(ch!=EOF)
&&&&&&& && {putchar(ch);
&&&&&&& &&& ch=fgetc(fp);
&&&&&&& &&& }
&&& &&&& fclose(fp);
程序运行结果为:
I am a teacher
#include &stdio.h&
&&& main()
&&& &if((fp=fopen(&y2.dat&,&r&))!=NULL)
&&& &&& {ch=fgetc(fp);
&&& &&&& while(!feof(fp))
&&&&&&& && {putchar(ch);
&&&&&&& &&& ch=fgetc(fp);
&&& &&&& && }
&&& &&&& fclose(fp);
程序运行结果为:
I am a teacher
#include &stdio.h&
&&& main()
&&& &if((fp=fopen(&y2.dat&,&r&))!=NULL)
&&& &&&& while(!feof(fp))
&&&&&&& && {ch=fgetc(fp);
&&&&&&& &&& putchar(ch);
&&&&&&& && }
&&& &&&& fclose(fp);
它与方法二比较,会有什么不同?
例12-5& 从键盘上输入若干个学生的学号及其考试成绩,将这些数据写入磁盘文件中(输入时由学号等于0作为终止标记)。
#include &stdio.h&
&&& main()
&&& {struct
&&& &FILE *
&&& &fstu=fopen(&y4.dat&,&w&);
&&& &scanf(&%d%f&,&stu.num,&stu.score);
&&& &while(stu.num!=0)
&&& && {fprintf(fstu,&%5d%6.1f\n&,stu.num,stu.score);
scanf(&%d%f&,&stu.num,&stu.score);
&&& &fclose(fstu);
程序运行结果为:
例12-6& 将上例产生的文件读出,在终端上显示出来。
#include &stdio.h&
&&& main()
&&& {struct
&&& &FILE *
&&& &if((fstu=fopen(&y4.dat&,&r&))!=NULL)
{fscanf(fstu,&%d%f&,&stu.num,&stu.score);
&&& &&&& while(!feof(fstu))
&&& &&&&&& {
&&& &&&&&&&
printf(&%5d%6.1f\n&,stu.num,stu.score);
&&& &&&&&&&
fscanf(fstu,&%d%f&,&stu.num,&stu.score);
&&& &&&&&& }
&&& &&&& fclose(fstu);
&&& && printf(&can not open
y4.dat!\n&);
程序运行结果为:
例12-7& 用fwrite 函数建立文件。
#include &stdio.h&
&&& main()
&&& {struct
&&& &FILE *
&&& &fstu=fopen(&y7.dat&,&wb&);
&&& &scanf(&%d%f&,&stu.num,&stu.score);
&&& &while(stu.num!=0)
{fwrite(&stu,sizeof(struct student),1,fstu);
&&& &&&& scanf(&%d%f&,&stu.num,&stu.score);
&&& &fclose(fstu);
程序运行结果为:
例12-8& 用fread 函数读出文件y7.dat 中的数据。
方法一& 每个fread 函数只读1个struct
student 型的数据项。
& & #include &stdio.h&
&&& main()
&&& {struct
&&& && }stu[10];
&&& &FILE *
&&& &int i,n;
&&& &if((fstu=fopen(&y7.dat&,&rb&))==NULL)
&&& &&& {printf(&Cannot open
the file!\n&);
&&& &&&& }
&&& &fread(&stu[n],sizeof(struct
student),1,fstu);
&&& &while(!feof(fstu))
&&& &&& {n++;
fread(&stu[n],sizeof(struct student),1,fstu);
&&& &for(i=0;i&n;i++)
printf(&%5d%6.1f\n&,stu[i].num,stu[i].score);
&&& &fclose(fstu);
方法二& 每个fread 函数读若干个struct student 型的数据项。
#include &stdio.h&
&&& main()
&&& {struct
&&& && }stu[10];
&&& &FILE *
&&& &int i,n=4;
& & &if((fstu=fopen(&y7.dat&,&rb&))==NULL)
&&& &&& {printf(&Cannot open
the file!\n&);
&&& &&&& }
&&& &fread(stu,sizeof(struct student),n,fstu);
&&& &for(i=0;i&n;i++)
printf(&%5d%6.1f\n&,stu[i].num,stu[i].score);
&&& &fclose(fstu);
例12-9 用fseek函数改变文件位置指针,从而实现对文件的随机读。
& & #include &stdio.h&
&&& main()
&&& {struct
&&& &FILE *
&&& &if((fstu=fopen(&y7.dat&,&rb&))==NULL)
&&& &&& {printf(&cannot open
&&& &printf(&please input No.:&);
&&& &scanf(&%d&,&i);
&&& &while(i&=0)
&&& && {fseek(fstu,i*sizeof(struct student),0);
&&& &&& fread(&stu,sizeof(struct
student),1,fstu);
&&& &&& if(!feof(fstu))
&&& &&&&&&
printf(&%ld%6.1f\n&,stu.num,stu.score);
&&& &&& else
&&& &&&&&&
printf(&data error!\n&);
&&& &&& printf(&please input
scanf(&%d&,&i);}
&&& &&& fclose(fstu);&& }
程序运行结果为:
please input No.:1』
please input No.:3』

我要回帖

更多关于 黄崇半对数 p1p2p3 的文章

 

随机推荐