a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 142|回复: 3

[计算机四级] 全国计算机四级考试之试题练习(一)

[复制链接]
发表于 2012-7-31 20:48:14 | 显示全部楼层 |阅读模式
初始化: ~% n% Z% Q9 V+ i/ F4 y1 d
#include 《stdio.h》
2 H! Y. A5 h6 L8 E#include 《conio.h》  c9 Q( X8 G0 q
#define MAXNUM 200* f) j9 f$ C* z8 b1 t
int xx[MAXNUM] ;
( S: q1 ]- H/ B6 T  Hint totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
. `7 o7 ~. O; u  Y/ Sint totCnt = 0 ; /* 符合条件的正整数的个数 */; r- m* b- e2 X* l% w$ m1 e4 W
double totPjz = 0.0 ; /* 平均值 */7 w  }0 ?0 K' V% Z/ |
int ReadDat(void) ;% [0 F; w. N  k% u3 E
void WriteDat(void) ;
9 _& }) t8 C7 `0 m' wvoid CalValue(void)
. _% I8 j# [* Q6 b4 b{
+ I! ?& U7 ?2 J! x% A7 m}( t4 r/ C6 o0 ?3 {
void main()
; y. Z! V0 i& _{1 u( ?" x5 J4 N3 v4 Y8 G" v
int i ;8 Z# H8 j9 p6 @! {. Q) S
clrscr() ;
4 L3 r$ b& `6 ^; J; r4 tfor(i = 0 ; i 《 MAXNUM ; i++) xx[i] = 0 ;* @0 L8 d/ n: T! Z1 K% x
if(ReadDat()) {1 A! t* E; P) C6 s7 e
printf(数据文件IN.DAT不能打开!\007\n) ;4 B: f! w" n( f2 k0 l% e
return ;
$ Z( b( ?9 B! K4 `' l}# ?" H3 x9 A* q, s- i8 s. z
CalValue() ;
回复

使用道具 举报

 楼主| 发表于 2012-7-31 20:48:15 | 显示全部楼层

全国计算机四级考试之试题练习(一)

printf(文件IN.DAT中共有正整数=%d个\n, totNum) ;4 U+ j1 a9 @! j) y
printf(符合条件的正整数的个数=%d个\n, totCnt) ;) a( P& M' u( N$ v  @1 V( f  R, S
printf(平均值=%.2lf\n, totPjz) ;
9 D% c  L' R: Y! {3 p9 vWriteDat() ;
8 K1 m$ T, ], P" Y}9 i' `+ N. Y8 ?* v) X" {3 C) q1 z0 }
int ReadDat(void)5 `8 R. }+ s8 Q/ D1 V1 ~7 m
{( B  |1 j+ r% E* J5 ?, l
FILE *fp ;& ?2 j7 [( ?+ d. v9 {% Q
int i = 0 ;
7 f/ B) c# T! r) |3 y- b0 }' p! Eif((fp = fopen(in.dat, r)) == NULL) return 1 ;2 g% E- a$ |1 m: G% ~; `; V
while(!feof(fp)) {/ e9 ~: g  f6 p+ V' u; l; ?! D) W
fscanf(fp, %d,, &xx[i++]) ;! [/ Q& _8 p( m7 l( O
}
, A8 D) p# Q4 O( `) r9 g( O5 d9 d5 ifclose(fp) ;
/ @, z3 I* f0 i8 f6 v/ x6 \1 ireturn 0 ;  \  Y1 @8 f9 P, H6 E$ V8 G
}& g& b" i% s7 S$ \
void WriteDat(void)/ U+ {- t6 g, P3 c8 t4 v$ t9 g
{% U' @! ~4 s3 r
FILE *fp ;
+ \* R7 V  q- Z& C, n2 [fp = fopen(OUT1.DAT, w) ;% m$ Y% U) [0 c/ S0 e. R
fprintf(fp, %d\n%d\n%.2lf\n, totNum, totCnt, totPjz) ;
- ]0 E$ L6 p' A# k$ t! `fclose(fp) ;- J( }5 M- H9 m& A' u
}; D$ ~" k; L1 e) O  r! d4 `
A::3 ?* q* M7 H! n: X7 C
B:EXEC  }% {7 d$ u8 f
C:EXEC SQL# q+ {7 E! }4 F; C: U
D:SQL" `7 E0 v" A" U" G
题面:4 N( e  I# j( B" Q7 Q
已知在文件IN.DAT中存有若干个(个数《200)四位数字的正整数, 函数ReadDat( )是读取这若干个正整数并存入数组xx中。请编制函数CalValue( ), 其功能要求: 1. 求出这文件中共有多少个正整数totNum; 2.求出这些数中的各位数字之和是奇数的数的
( L/ `( ~# w; `( g1 ?: m个数totCnt, 以及满足此条件的这些数的算术平均值totPjz, 最后调用函数WriteDat()把所求的结果输出到文件OUT1.DAT中。3 E9 b9 v6 _  D& V" ]
注意: 部分源程序存放在PROG1.C中。( a: B9 s: C2 v  K/ Z8 k2 b0 y' H
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
: ^, u' L3 U" L# y1 B* v2 ~6 C答案:
( T- ]1 l3 U* O0 z# Z" x6 D5 b#include 《stdio.h》0 j7 ]% F  M* Z! E8 `( X0 t7 B
#include 《conio.h》& t  _" e# N/ ~2 X  ?+ q
#define MAXNUM 200
+ C9 ]+ Q5 H2 l9 yint xx[MAXNUM] ;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 20:48:16 | 显示全部楼层

全国计算机四级考试之试题练习(一)

int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
0 j3 v  A% q0 o* r% r; N, sint totCnt = 0 ; /* 符合条件的正整数的个数 */
  ^* p0 H* O' V, l7 \( i9 W" tdouble totPjz = 0.0 ; /* 平均值 */5 Z  w% c2 t" @' p
int ReadDat(void) ;8 A' F1 w) X9 r. r
void WriteDat(void) ;
4 i8 _& c( x% Y# e4 \) t+ w6 V" uvoid CalValue(void)" d; f" i" E7 ], _7 ]( r0 A1 {6 w
{) ~) d9 o/ P! k+ C  \+ d1 g
int i, n;
+ \9 }/ B, @/ z0 c. x: `4 G. Ulong cnt = 0 ;
$ i7 d1 c: Y/ ~2 T" V& zfor(i = 0 ; i 《 MAXNUM ; i++){; r7 U9 }7 K- \9 {! p7 H
if(xx[i] 》 0){/*是正整数*/
8 Y! Y' _# m4 A: w& ItotNum++ ;/*计数*/2 q6 b6 q/ T% ?- G' w
/*求各位之和*/
+ a' I1 U: g. e" K; c5 Fn = xx[i]/1000 + (xx[i]%1000)/100 + (xx[i]%100)/10 + xx[i]%10;/ @& F* v6 k$ ^: M) L- W( A) ?
if( n&1 ){/*是奇数*/5 e2 f1 c6 Y+ W' Q% l# _8 _
totCnt++ ;/*统计个数*/! ~* c$ J, X- c: O# o9 h
cnt += xx[i] ;/*计算累加和*/
4 Q. D3 T1 f3 P}" `$ X6 k. ]6 L+ J+ _/ G: B
}
& n; Y% }. Q! r) i1 i}* T. e# A; O# N- a( s1 \: y
totPjz = (double) cnt / totCnt ;/*计算平均值*/
* X$ M! R" |; R- ~( Z1 A5 u" j. G}
9 K9 A0 a, e- d( j6 r! {4 [void main(), p8 D! u" i% H2 k
{
; Z6 J4 V$ v, B; T' b5 x8 d# Cint i ;
% H/ ^1 K% ?! E+ x+ w, oclrscr() ;0 N: g3 k  ^8 j9 w' r0 _) \9 h* k
for(i = 0 ; i 《 MAXNUM ; i++) xx[i] = 0 ;) D4 {2 j" b3 K# L8 w4 N- W7 s
if(ReadDat()) {' V$ y$ J# X7 W8 C
printf(数据文件IN.DAT不能打开!\007\n) ;* M' E. o& |4 l8 ]7 V6 \# V* N+ A
return ;" U6 q& J1 h2 p/ ?
}3 h/ y4 L* w+ w
CalValue() ;
, Y0 o) |$ z1 J8 `5 O1 x5 Iprintf(文件IN.DAT中共有正整数=%d个\n, totNum) ;
7 w# Y& t5 R" V3 N3 p% r7 t4 ^  Lprintf(符合条件的正整数的个数=%d个\n, totCnt) ;
6 T6 A$ Y2 H4 M: B+ W) g; yprintf(平均值=%.2lf\n, totPjz) ;
! w: F$ `0 z# cWriteDat() ;
( M$ S; t; @/ M+ A% {6 }}
. K( P, J( {5 I! h6 C1 fint ReadDat(void)* G" A$ t& p3 ]% I
{3 h- e4 m+ \, ~" k3 N2 ~" l* g: Q$ J) L
FILE *fp ;
# S9 T/ T& P; Rint i = 0 ;+ N0 c  `! h& j' b+ o5 n' w
if((fp = fopen(in.dat, r)) == NULL) return 1 ;# O, I" x2 b7 W- y
while(!feof(fp)) {
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 20:48:17 | 显示全部楼层

全国计算机四级考试之试题练习(一)

fscanf(fp, %d,, &xx[i++]) ;/ y4 \2 i0 q; W( ]# w/ B
}/ E: `5 i- e8 [9 F! g
fclose(fp) ;2 z4 O. Q$ M7 I5 B0 v5 r
return 0 ;8 B7 L0 }0 b  R0 s# C: X/ e
}
1 s* _& V- R- W' W& tvoid WriteDat(void)
, S5 n% F1 c, V8 t) l9 W' p. O{
/ U5 t+ F6 o9 P, H1 r& I) I) u" Q$ I4 _) IFILE *fp ;/ \5 Q! y/ C8 G5 z* S
fp = fopen(OUT1.DAT, w) ;
5 n, N- _6 O( d. M+ d% qfprintf(fp, %d\n%d\n%.2lf\n, totNum, totCnt, totPjz) ;3 t! m% k; h' g3 Z; M
fclose(fp) ;7 o% q$ r; j5 d8 t1 B) [4 G5 j! r
}
1 [. Z5 Y+ X# c& w/ |; n本题评析:
4 i3 |$ E; m$ h1 S; w5 j3 J7 R这个题目的关键是如何求出一个4位正整数各位时之和,以及如何判断一个正整数是奇数还是偶数。
2 Q1 e. G0 V' Q3 c对于一个4位正整数x来说,它的千位数=x/1000;7 y5 e' N4 S" j  |/ S
百位数=(x%1000)/100;* z" U. k3 M" e
十位数=(x%100)/10x
3 I; `" e: o1 U& ?9 e个位数=x%10。7 J  a9 t. G, ^+ D
判断一个正整数是奇数还是偶数的方法很多,我们这里用的是看它的最低位是0还是1,我们知道:对于一个二进制正整数,它的最低位如果是1,则这个数是奇数;反之,则是偶数。这里我们是将这个正整数和1做“&”(与)运算,即保留这个数的最低位,其余全部清0。5 H: |& G0 t2 c. m3 {
当然,还一个常见的方法就是让这个数和2做“%”(模)运算。很显然,与运算要优于模运算。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-31 19:31 , Processed in 0.366241 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表