a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 141|回复: 3

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

[复制链接]
发表于 2012-7-31 20:48:14 | 显示全部楼层 |阅读模式
初始化+ u2 b( }5 {9 U
#include 《stdio.h》
3 z6 K' g* G2 ?#include 《conio.h》$ I6 b7 K. U5 x! R  X
#define MAXNUM 200
5 D1 ~8 i3 Z& C: J- kint xx[MAXNUM] ;
2 ]% z+ ^4 b- O* ~/ r" D6 w( D: gint totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
* f# F9 G! p; R1 Wint totCnt = 0 ; /* 符合条件的正整数的个数 */
0 K. ^- o" {9 h) I  j: `double totPjz = 0.0 ; /* 平均值 */: F& j7 }0 w8 V3 N* |- M, o
int ReadDat(void) ;
" R# v/ `( g9 H  I; s6 `void WriteDat(void) ;
7 T  _, O) \( W1 J: {. \void CalValue(void): {. s! I0 Y" J; }6 M* [* }
{4 p% k0 L9 S0 }; U& q7 x, U' o2 t
}
8 B" O. |: i  Lvoid main(): b/ f/ F( t4 |& M
{
/ w! m! i5 u' Jint i ;
5 f  T* B2 b; j9 x6 K) E( x$ A9 s  f  xclrscr() ;" v0 k3 u! `6 T( Q$ _4 i
for(i = 0 ; i 《 MAXNUM ; i++) xx[i] = 0 ;  c% {2 ^, \9 g6 K  B3 S
if(ReadDat()) {1 t' O) q4 X3 h0 |
printf(数据文件IN.DAT不能打开!\007\n) ;) C( E/ D1 n9 [9 U8 D+ ^1 e) g
return ;
. Y/ M  N! w1 o; L; a0 V. |$ D: C}5 H1 d1 z2 f- W8 X9 G* n
CalValue() ;
回复

使用道具 举报

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

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

printf(文件IN.DAT中共有正整数=%d个\n, totNum) ;8 S# c4 a1 _2 L1 T! v6 i7 p
printf(符合条件的正整数的个数=%d个\n, totCnt) ;9 {3 Q) c3 {& H! @
printf(平均值=%.2lf\n, totPjz) ;
% e5 q+ j2 Y9 S2 J3 ZWriteDat() ;
+ j2 B! B6 i0 X/ f, M5 ?}
/ u+ B" F) N( M. W; r+ G2 pint ReadDat(void). f" Z' U$ x$ P# F
{
7 h9 B, Q3 T; K6 p# d1 J5 |FILE *fp ;' P1 l+ |4 a# w" \) p8 s" Q/ }) R
int i = 0 ;- x$ _  ^! n! y- _) B: U4 a  f
if((fp = fopen(in.dat, r)) == NULL) return 1 ;
) C, W9 A( a, e+ u: fwhile(!feof(fp)) {/ j" @: ^' t, U  M' A
fscanf(fp, %d,, &xx[i++]) ;1 v! s) Q7 \1 E! h. E
}6 B2 M* `! n& b6 M+ W) E
fclose(fp) ;3 V. `* q; y2 _4 C3 @- b- t. W: V
return 0 ;
4 m0 s/ R% |. j9 e" _5 T+ h3 _) l}
, [; m, E9 M+ F& z+ b" Vvoid WriteDat(void)
9 ^3 e. M$ h* E{' ^$ y# n7 \0 A+ l! s0 o
FILE *fp ;
$ B# n% o4 ~4 w# d' M  N- nfp = fopen(OUT1.DAT, w) ;
/ g( V( V3 }3 i, M$ Y0 t. E5 pfprintf(fp, %d\n%d\n%.2lf\n, totNum, totCnt, totPjz) ;: P3 t! [% g' r1 t
fclose(fp) ;- p' S2 D; \+ M6 B) v
}
, h( ^- N1 J+ u/ n; y3 `0 hA::% O& ]2 t5 R" T
B:EXEC" X1 G6 t# n( u
C:EXEC SQL
7 k" Q, X* t1 J# s  ]4 N4 `D:SQL& x( ?, O1 N* y  Z0 a
题面:+ z8 [8 P7 {" E4 |7 V
已知在文件IN.DAT中存有若干个(个数《200)四位数字的正整数, 函数ReadDat( )是读取这若干个正整数并存入数组xx中。请编制函数CalValue( ), 其功能要求: 1. 求出这文件中共有多少个正整数totNum; 2.求出这些数中的各位数字之和是奇数的数的7 [1 u9 P; J( G+ v& `2 j8 Q! e
个数totCnt, 以及满足此条件的这些数的算术平均值totPjz, 最后调用函数WriteDat()把所求的结果输出到文件OUT1.DAT中。
4 i5 ?1 x& c8 R" Q/ y5 u. E注意: 部分源程序存放在PROG1.C中。3 U3 W- @2 U! W* y# C
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。8 t# R& z1 P! P" Z1 V1 ]
答案:
6 N/ l0 ~; [/ H9 A' l# m#include 《stdio.h》. j- @1 r  _( F5 m$ X% T
#include 《conio.h》6 G" [8 ^; O4 Y9 @! L1 w
#define MAXNUM 200- I( F& |, Q$ v  M( g
int xx[MAXNUM] ;
回复 支持 反对

使用道具 举报

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

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

int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
2 E  w  W- e7 {* M( @& j3 T! Gint totCnt = 0 ; /* 符合条件的正整数的个数 */
3 O0 ^1 I: d) a# {; Idouble totPjz = 0.0 ; /* 平均值 */9 G9 Q( v* ^3 e: h( u" F
int ReadDat(void) ;
4 G9 V% s. A4 }- V' ?3 P) g2 ~void WriteDat(void) ;  O# f! p3 J- K9 A5 f! w% f
void CalValue(void)3 N, ]5 q* k& A8 U: S# m% l
{
8 J- U. H+ ~3 w- `. j) Rint i, n;4 C: F1 ~+ _, c" j2 c, z
long cnt = 0 ;8 v8 G! M; k3 t' j% h9 l& i
for(i = 0 ; i 《 MAXNUM ; i++){$ G: K4 t8 H5 U0 Y' z
if(xx[i] 》 0){/*是正整数*/7 h& q. [- G8 N* M9 J; J
totNum++ ;/*计数*/
. r! h8 t" V, E: r' s( [0 [8 A/*求各位之和*/" d7 y, ?& u1 C, a
n = xx[i]/1000 + (xx[i]%1000)/100 + (xx[i]%100)/10 + xx[i]%10;
; Q. B$ R0 \$ X' L$ hif( n&1 ){/*是奇数*/) e3 G0 U" m2 U3 s2 K5 G* n
totCnt++ ;/*统计个数*/
7 o1 D) t0 {2 B, o6 f6 |& fcnt += xx[i] ;/*计算累加和*/# F2 J- @1 d" a  @5 R
}7 u" R  O1 A. b3 v5 y. c
}
* i% T9 ~, x; ?}- u: X7 @2 O& D* E& V
totPjz = (double) cnt / totCnt ;/*计算平均值*/" K/ k/ L" ~# \4 F
}
# P/ A  K9 l, c" y; {void main()
5 d+ E1 h5 M% D0 r5 h{
: g# m8 f* X; n7 g" n) Tint i ;, F4 A1 u3 C0 O  y5 f
clrscr() ;
3 E- j! [5 A$ E( z  kfor(i = 0 ; i 《 MAXNUM ; i++) xx[i] = 0 ;9 K3 @0 @0 ^, o! a/ P4 M  Q( m
if(ReadDat()) {$ U- s; Z+ Y6 L8 ^3 a4 |
printf(数据文件IN.DAT不能打开!\007\n) ;/ b9 t4 C$ A9 ^% t% P
return ;/ k0 h& @+ p6 i# K
}9 K, Z) M! b# M- I! A
CalValue() ;# l6 n/ ?& Y3 Z
printf(文件IN.DAT中共有正整数=%d个\n, totNum) ;
% y6 f, ~+ _/ c' w# ~) D* Rprintf(符合条件的正整数的个数=%d个\n, totCnt) ;
+ t- ]+ ^# v4 _7 Q! g! R! Uprintf(平均值=%.2lf\n, totPjz) ;: Q, O& H+ t9 E; F3 }; J
WriteDat() ;
* X3 S+ j. Y2 l  O$ L2 I}
8 Z# j. V+ y2 X: t6 r1 y+ Uint ReadDat(void)( c6 h4 F$ ?, c, c  h+ J  H; j- C
{
/ K2 A+ J- r2 P# i7 `' ~FILE *fp ;
8 `" E, N& i9 ?8 U. k. xint i = 0 ;) f4 k- [" y% k* \/ q" j1 y( P
if((fp = fopen(in.dat, r)) == NULL) return 1 ;7 c  o% e& Y( `" s
while(!feof(fp)) {
回复 支持 反对

使用道具 举报

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

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

fscanf(fp, %d,, &xx[i++]) ;
5 t+ p! E. Q5 b, E2 p3 `- I}, L" Q4 Y( U* {2 O  K
fclose(fp) ;, x  q2 b0 K# H3 V6 _2 w
return 0 ;
5 k$ _* P( s, L1 }) D}, ~, |0 y2 _9 l& g4 Q% S2 d0 ?/ [/ c
void WriteDat(void): @! ]" c8 t' u0 i
{: o" x/ ^, e, q* P4 ]& Q: \$ F
FILE *fp ;
2 |+ i" y0 S5 o4 y% Gfp = fopen(OUT1.DAT, w) ;
/ N! F1 u/ n5 e1 H9 `1 wfprintf(fp, %d\n%d\n%.2lf\n, totNum, totCnt, totPjz) ;
' S: Q# ]2 `! T$ t- v, [fclose(fp) ;
. Z0 X% K# X. o- I}. W+ ~) V7 y$ }$ q% P# U+ R
本题评析:  o; V! Q# o8 Q
这个题目的关键是如何求出一个4位正整数各位时之和,以及如何判断一个正整数是奇数还是偶数。& }; m  a* f7 m. Y) Q! I* n
对于一个4位正整数x来说,它的千位数=x/1000;1 O! q8 I/ x  R5 b$ ?
百位数=(x%1000)/100;
8 y9 p9 ?1 |9 |: l十位数=(x%100)/10x
8 i) ]0 W" e: t" H% W6 n7 A2 C个位数=x%10。' {. i* o5 Q8 V0 b3 D
判断一个正整数是奇数还是偶数的方法很多,我们这里用的是看它的最低位是0还是1,我们知道:对于一个二进制正整数,它的最低位如果是1,则这个数是奇数;反之,则是偶数。这里我们是将这个正整数和1做“&”(与)运算,即保留这个数的最低位,其余全部清0。% Q2 T' T  K1 `4 A7 B3 h; r& ?5 Z
当然,还一个常见的方法就是让这个数和2做“%”(模)运算。很显然,与运算要优于模运算。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 12:00 , Processed in 0.244414 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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