《2022年2022年计算机三级上机题 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算机三级上机题 .pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、二是对数组b 中的数进行从大到小的排序。首先要找出满足条件的数,其关键在于判断每个数的每一位对应的数是否奇数,即判断是否能被2 整除。其次,将满足条件的数存入数组b 中,并用变量cnt 来统计数组b 中元素的个数。最后,将所有满足条件的数取出后利用选择法对其进行排序,即用当前元素依次同它后面的元素进行比较,发现有大于该数的数,就进行交换。已知数据文件IN1.DAT 中存有 200 个 4 位数, 并已调用读函数readDat()把这些数存入数组a 中,请编制一函数 jsVal( ) ,其功能是: 如果 4 位数各位上的数字均是奇数,则统计出满足此条件的个数cnt,并把这些4位数按从大到小的顺序
2、存入数组b 中。最后调用函数writeDat() 把结果 cnt 及数组 b 中符合条件的4 位数输出到 OUT1.DA T 文件。注意:部分源程序已给出。程序中已定义数组:a200,b200 ,已定义变量:cnt。请勿改动主函数main()、读函数readDat()和写函数writeDat() 的内容。试题程序:#include #define MAX 200 int aMAX,bMAX,cnt=0; void writeDat(); void jsVal() void readDat() int i; FILE *fp; fp=fopen(IN1.DAT,r); for(i=0;iMAX;
3、i+) fscanf(fp,%d,&ai); fclose(fp); void main() int i; readDat(); jsVal(); printf( 满足条件的数=%dn,cnt); for(i=0;icnt;i+) printf(%dn,bi); printf(n); writeDat(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 28 页 - - - - - - - - - void writeDat() FILE *fp; int i; fp=
4、fopen(out1.dat,w); fprintf(fp,%dn,cnt); for(i=0;icnt;i+) fprintf(fp,%dn,bi); fclose(fp); 【答案】void jsVal() int i,j; /*定义循环控制变量*/ int a1,a2,a3,a4; /*定义变量保存4 位数的每位数字*/ int temp; /*定义数据交换时的暂存变量*/ for(i=0;i200;i+) /* 逐个取每一个4 位数 */ a4=ai/1000; /*求 4 位数的千位数字*/ a3=ai%1000/100; /* 求 4 位数的百位数字*/ a2=ai %100/10
5、; /*求 4 位数的十位数字*/ a1=ai %10; /*求 4 位数的个位数字*/ if(a4%2!=0 & a3%2!=0 & a2%2!=0 & a1%2!=0) /*如果 4 位数各位上的数字均是奇数*/ bcnt=ai; /* 将满足条件的数存入数组b 中*/ cnt+; /*统计满足条件的数的个数*/ for(i=0;icnt-1;i+) /*将数组 b 中的数按从大到小的顺序排列*/ for(j=i+1;jcnt;j+) if(bibj) temp=bi; bi=bj; bj=temp; 【解析】根据题意可知,函数jsVal()要实现两个功能:一是找出满足条件的那些数,并将其
6、存放在数组b中;二是对数组b 中的数进行从大到小的排序。已知 IN2.DAT 中存有 200个 4位数,并已调用读函数readDat()把这些数存入数组a中, 请编制一函数jsVal(),其功能是:依次从数组a 中取出一个数,如果该4 位数连续大于该4 位数以后的5 个数且该数是奇数,则统计出满足此条件的数的个数cnt,并把这些4 位数按从小到大的顺序存入数组b 中,最后调用写函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 28 页 - - - - - - - - -
7、 writeDat() 把结果 cnt 及数组 b 中符合条件的4 位数输出到OUT2.DAT 文件中。注意:部分源程序已给出。程序中已定义数组:a200,b200 ,已定义变量:cnt。请勿改动主函数main()、读函数readDat()和写函数writeDat() 的内容。试题程序:#include #define MAX 200 int aMAX, bMAX, cnt = 0; void writeDat(); void jsVal() void readDat() int i; FILE *fp; fp = fopen(IN2.DAT, r); for(i = 0; i MAX; i+
8、) fscanf(fp, %d, &ai); fclose(fp); void main() int i; readDat(); jsVal(); printf( 满足条件的数=%dn, cnt); for(i=0; i cnt; i+) printf(%d , bi); printf(n); writeDat(); void writeDat() FILE *fp; int i; fp = fopen(OUT2.DAT, w); fprintf(fp, %dn, cnt); for(i = 0; i cnt; i+) fprintf(fp, %dn, bi); fclose(fp); 名师资
9、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 28 页 - - - - - - - - - 【答案】void jsVal() int i,j; /* 定义循环控制变量*/ int temp; /*定义数据交换时的暂存变量*/ for(i=0;iMAX-5;i+) /* 逐个取每个4 位数 */ if(ai%2!=0) /*如果当前数是奇数*/ for(j=i+1;j=i+5;j+) /*取该数后面的5 个数进行比较 */ if(aiaj) break; /*如果当前数不满足比
10、后面5 个数都大的条件,则跳出循环*/ if(j=i+6) /*如果当前数比后面的5 个数都大 */ bcnt=ai; /*将满足条件的数存入数组b 中 */ cnt+; /*并统计满足条件的数的总个数*/ for(i=0;icnt-1;i+) /*利用选择法对数组b 中的元素进行从小到大的排序*/ for(j=i+1;jbj) temp=bi; bi=bj; bj=temp; 【解析】根据题意可知,要编制函数的功能包括有两部分:一是找出满足条件的4 位数,二是对找出的数进行从小到大的排序。首先利用一个for 循环依次从数组中取得4 位数,并用一个if 语句判断每个数是否奇数。接着再通过一个f
11、or 循环将是奇数的4 位数与该数后面的5 个数依次进行比较,如果该数比其后面的5 个数都大,则把该数加入到数组b 中,并用变量来统计出满足条件的4 位数的总个数。最后利用选择法对数组b 中的元素进行从小到大的排序。已知在文件IN3.DAT 中存有 100 个产品销售记录,每个产品销售记录由产品代码dm(字符型 4 位) 、产品名称 mc(字符型 10 位) 、单价 dj(整型)、数量 sl(整型)、金额 je(长整型)几部分组成。其中:金额=单价数量。 函数 ReadDat()的功能是读取这100 个销售记录并存入结构数组sell 中。 请编制函数SortDat() ,其功能要求:按产品名称
12、从小到大进行排列,若产品名称相同,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell 中,最后调用函数WriteDat() 把结果输出到文件OUT3.DAT 中。注意:部分源程序已给出。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat() 的内容。试题程序:#include #include #include #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 28 页 - - - - - - - - - #define
13、 MAX 100 typedef struct char dm5; /*产品代码*/ char mc11; /* 产品名称*/ int dj; /* 单价*/ int sl; /* 数量*/ long je; /* 金额 */ PRO; PRO sell MAX; void ReadDat(); void WriteDat(); void SortDat() void main() memset(sell, 0, sizeof(sell); ReadDat(); SortDat(); WriteDat(); void ReadDat() FILE *fp; char str80, ch11;
14、int i; fp = fopen(IN3.DAT, r); for (i = 0; i 100; i+) fgets(str, 80, fp); memcpy(selli.dm, str, 4); memcpy(selli.mc, str + 4, 10); memcpy(ch, str + 14, 4); ch4 = 0; selli.dj = atoi(ch); memcpy(ch, str +18, 5); ch5 = 0; selli.sl = atoi(ch); selli.je = (long)selli.dj * selli.sl; fclose(fp); 名师资料总结 - -
15、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 28 页 - - - - - - - - - void WriteDat() FILE *fp; int i; fp = fopen(OUT3.DAT, w); for(i = 0; i 100; i+) fprintf(fp, %s %s %4d %5d %10ldn, selli.dm, selli.mc, selli.dj,selli.sl, selli.je); fclose(fp); 【答案】void SortDat() int i,
16、j; /*定义循环控制变量*/ PRO temp; /* 定义数据交换时的暂存变量(这里是PRO 类型的结构体变量)*/ for(i=0;i99;i+) /*利用选择法进行排序*/ for(j=i+1;j0) /*按产品名称从小到大进行排列*/ temp=selli; selli=sellj; sellj=temp; else if(strcmp(selli.mc,sellj.mc)=0) /* 若产品名称相同*/ if(selli.jesellj.je) /*则按金额从小到大进行排列*/ temp=selli; selli=sellj; sellj=temp; 【解析】本题是有关结构体数组的
17、排序问题,这里可以用选择法来实现。用第一个元素的产品名称依次同它后面的元素的产品名称进行比较,如果发现当前元素的产品名称比后面的某个元素的产品名称对应字符的ASCII 码大(这里用到了字符串比较函数strcmp()) ,则交换这两个元素的位置,再继续和后面的其他元素进行比较;最终在第一个元素中存放的是产品名称最小的元素。依此类推,就实现了从小到大排序的功能。在排序过程中,若产品名称相同,则按照金额从小到大的顺序进行排列。函数 ReadDat()的功能是实现从文件ENG4.IN 中读取一篇英文文章,存入到字符串数组xx 中。请编制函数encryptChar() ,按给定的替代关系对数组xx 中的
18、所有字符进行替代,结果仍存入数组xx 对应的位置上,最后调用函数WriteDat() 把结果 xx 输出到文件PS4.DAT 中。替代关系: f(p)=p*11 mod 256 (p 是数组 xx 中某一个字符的ASCII 值, f(p) 是计算后新字符的ASCII 值) ,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 28 页 - - - - - - - - - 如果计算后f(p)的值小于等于32 或大于 130,则该字符不变,否则将f(p) 所对应的字符进行替代。注
19、意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80 个字符。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat() 的内容。试题程序:#include #include #include #include unsigned char xx5080; int maxline = 0;/* 文章的总行数*/ int ReadDat(void); void WriteDat(void); void encryptChar() void main() system(CLS); if(ReadDat() printf( 数据文件ENG4.IN 不能打开! n0
20、07); return; encryptChar(); WriteDat(); int ReadDat(void) FILE *fp; int i = 0; unsigned char *p; if(fp = fopen(ENG4.IN, r) =NULL) return 1; while(fgets(xxi, 80, fp) !=NULL) p = strchr(xxi, n); if(p) *p = 0; i+; maxline = i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
21、- 第 7 页,共 28 页 - - - - - - - - - fclose(fp); return 0; void WriteDat(void) FILE *fp; int i; fp = fopen(PS4.DAT, w); for(i = 0; i maxline; i+) printf(%sn, xxi); fprintf(fp, %sn, xxi); fclose(fp); 【答案】void encryptChar() int i,j; /*定义循环控制变量*/ int str; /*存储字符串的长度*/ char ch; /* 存储当前取得的字符*/ for(i=0;imaxli
22、ne;i+) /*以行为单位获取字符*/ str=strlen(xxi); /*求得当前行的字符串长度*/ for(j=0;jstr;j+) /*依次取每行的各个字符*/ ch=xxij *11%256; if(ch130) continue; /* 如果计算后的值小于等于32 或大 130,则该字符不变*/ else xxij=ch; /*否则将所对应的字符进行替代*/ 【解析】本题要对二维数组中的字符元素按行进行处理。首先用 strlen()函数得到当前行所包含的字符总个数,然后再利用for 循环来依次访问该行中的所有字符。对于每一个字符,先按照题目中的函数替代关系f(p)=p*11 mo
23、d 256 计算出相应的fp 的值,再用一条if 语句判断该值是否符合本题给定的条件:计算后f(p) 的值小于等于32 或大于 130。如果符合条件,则该字符不变,否则用f(p) 所对应的字符对其进行替代。函数 ReadDat()的功能是实现从文件IN5.DA T 中读取一篇英文文章存入到字符串数组xx 中。请编制函数ConvertCharA() ,该函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组xx 中,最后调用函数WriteDat()
24、把结果 xx 输出到文件OUT5.DAT名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 28 页 - - - - - - - - - 中。例如,原文:Adb.Bcdza abck.LLhj 结果: Aec.Bdeab bcdl.LLik 原始数据文件存放的格式是:每行的宽度均小于80 个字符,含标点符号和空格。注意:部分源程序已给出。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat() 的内容。试题程序:#include #include #i
25、nclude char xx5080; int maxline = 0;/* 文章的总行数*/ int ReadDat(void); void WriteDat(void); void ConvertCharA(void) void main() system(CLS); if(ReadDat() printf( 数据文件IN5.DAT 不能打开 !n007); return; ConvertCharA(); WriteDat(); int ReadDat(void) FILE *fp; int i =0; char *p; if(fp = fopen(IN5.DAT, r) = NULL)
26、return 1; while(fgets(xxi, 80, fp) !=NULL) p = strchr(xxi, n); if(p) *p = 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 28 页 - - - - - - - - - i+; maxline = i; fclose(fp); return 0; void WriteDat(void) FILE *fp; int i; system(CLS); fp = fopen(OUT5.DAT, w);
27、for(i = 0; i maxline; i+) printf(%sn, xxi); fprintf(fp, %sn, xxi); fclose(fp); 【答案】void ConvertCharA(void) int i,j; /*定义循环控制变量*/ int str; /*存储字符串的长度*/ for(i=0;imaxline;i+) /*以行为单位获取字符*/ str=strlen(xxi); /* 求得当前行的字符串的长度*/ for(j=0;j=a & xxij=z) /*如果是小写字母*/ if(xxij=z) xxij=a; /*如果是小写字母z,则改写成字母a*/ else
28、xxij+=1; /* 其他的小写字母则改写为该字母的下一个字母*/ 【解析】本题要对二维数组中的字符元素按行进行处理,因此,首先要求得当前行所包含的字符个数,然后可以利用循环来依次访问该行中的所有字符。对于每个字符,先要判断该字符是否小写字母,如果是,则进一步判断该字符是否是小写字母z,若是,则改写为小写字母a;若不是,则将其改成该字母的下一个字母。对于不是小写字母的字符不作处理。在文件 IN6.DA T 中有 200 个正整数,且每个数均在1000 至 9999 之间。函数readDat()的功能是读取这200个数存放到数组aa中。请编制函数jsSort(),该函数的功能是:要求按每个数的
29、后3 位的大小进行降序排列,将排序后的前10 个数存入数组b 中,如果数组b 中出现后3 位相等的数,则对这些数按原始4 位数据进行升序排列。最后调用函数writeDat() 把结果 bb 输出到文件OUT6.DAT 中。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 28 页 - - - - - - - - - 例如:处理前9012 5099 6012 7025 8088 处理后5099 8088 7025 6012 9012 注意:部分源程序已给出。请勿改动主函数m
30、ain()、读函数readDat()和写函数writeDat() 的内容。试题程序:#include #include #include int aa200, bb10; void readDat(); void writeDat(); void jsSort() void main() readDat(); jsSort(); writeDat(); void readDat() FILE *in; int i; in = fopen(IN6.DAT, r); for(i = 0; i 200; i+) fscanf(in, %d, &aai); fclose(in); void write
31、Dat() FILE *out; int i; out = fopen(OUT6.DAT, w); system(CLS); for (i = 0; i 10; i+) printf(i=%d,%dn, i+1, bbi); fprintf(out, %dn, bbi); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 28 页 - - - - - - - - - fclose(out); 【答案】void jsSort() int i,j; /* 定义循环控制变量*/
32、 int temp; /* 定义数据交换时的暂存变量*/ for(i=0;i199;i+) /*用选择法对数组进行排序*/ for(j=i+1;j200;j+) if(aai%1000aaj) * 则按原 4 位数的大小进行升序排序*/ temp=aai; aai=aaj; aaj=temp; for(i=0;i10;i+) /*将排序后的前10 个数存入数组bb 中*/ bbi=aai; 【解析】根据题意,函数应该具有两个功能:一是要对这些数按照后3 位的大小进行排序;二是将排序后的结果存入数组bb 中。由于本题要求对数组中的4 位数按照后3 位进行排序。因此,首先要取得各个数的后3 位并作
33、比较,计算表达式 aai%1000 就可以得到每个数的后3 位。根据题意,对这些数按后3 位按从大到小的顺序进行排序。若后3位数相等,则按原4 位数的值进行从小到大的排序。最后,将排序的结果存入数组bb 中。函数 ReadDat( )的功能是实现从文件IN7.DA T 中读取一篇英文文章存入到字符串数组xx 中。请编制函数SortCharD( ) ,该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx 中,最后调用函数WriteDat( ) 把结果 xx 输出到文件OUT7.DA T 中。例如,原文:dAe, BfC CCbbAA 结果: fedC
34、BA ,bbCCAA 原始数据文件存放的格式是:每行的宽度均小于80 个字符,含标点符号和空格。注意:部分源程序已给出。请勿改动主函数main( )、读函数ReadDat( )和写函数WriteDat( ) 的内容。试题程序:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 28 页 - - - - - - - - - #include #include #include char xx5080; int maxline=0; int ReadDat(void); voi
35、d WriteDat(void); void SortCharD() void main() system(CLS); if (ReadDat() printf( 数据文件IN7.DAT 不能打开 !n007); return; SortCharD(); WriteDat(); int ReadDat(void) FILE *fp; int i=0; char *p; if(fp=fopen(IN7.DAT,r)=NULL) return 1; while (fgets(xxi,80,fp)!=NULL) p=strchr(xxi,n); if (p) *p=0; i+; maxline=i;
36、 fclose(fp); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 28 页 - - - - - - - - - void WriteDat() FILE *fp; int i; system(CLS); fp=fopen(OUT7.DAT,w); for(i=0;imaxline;i+) printf(%sn,xxi); fprintf(fp,%sn,xxi); fclose(fp); 【答案】void SortCharD() int i,j
37、,k; /*定义循环控制变量*/ int str; /*存储字符串的长度*/ char temp; /* 定义数据交换时的暂存变量*/ for (i=0;imaxline;i+) /*以行为单位获取字符*/ str=strlen(xxi); /*求得当前行的字符串长度*/ for(j=0;jstr-1;j+) /*对字符按从大到小的顺序进行排序*/ for(k=j+1;kstr;k+) if(xxijxxik) temp=xxij; xxij=xxik; xxik=temp; 【解析】本题主要考查对数组的访问及排序问题。通过双重循环结构逐行获取字符并进行处理。首先使用字符串处理函数strlen
38、()来求出每一行的字符串长度,然后运用选择法逐行对字符按照从大到小的顺序进行排序。对 10 个候选人进行选举,现有一个100 条记录的选票数据文件IN8.DAT ,其数据存放的格式是每条记录的长度均为10 位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依次类推。每一位内容均为字符0 或 1,1 表示此人被选中,0 表示此人未被选中,若一张选票选中人数小于等于5 个人时则被认为是无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx 中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy0 到 yy9 中,最后调用函数WriteDat(
39、) 把结果 yy输出到文件OUT8.DAT 中。注意:部分源程序已给出。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat() 的内容。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 28 页 - - - - - - - - - 试题程序:#include #include char xx10011; int yy10; int ReadDat(void); void WriteDat(void); void CountRs(void) voi
40、d main() int i; for (i=0; i10; i+) yyi = 0; if(ReadDat() printf( 选票数据文件IN8.DA T 不能打开 !007n); return; CountRs(); WriteDat(); int ReadDat(void) FILE *fp; int i; char tt13; if(fp = fopen(IN8.DAT, r) = NULL) return 1; for (i = 0; i 100; i+) if(fgets(tt, 13, fp) = NULL) return 1; memcpy(xxi, tt, 10); fcl
41、ose(fp); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 28 页 - - - - - - - - - void WriteDat(void) FILE *fp; int i; fp = fopen(OUT8.DAT, w); for(i = 0; i 10; i+) fprintf(fp, %dn, yyi); printf( 第%d 个人的选票数 =%dn, i+1, yyi); fclose(fp); 【答案】void CountRs(
42、void) int i,j; /*定义循环控制变量*/ int cnt; /*用来存储每张选票中选中的人数,以判断选票是否有效*/ for(i=0;i10;i+) /*初始化数组yy*/ yyi=0; for(i=0;i100;i+) /*依次取每张选票进行统计*/ cnt=0; /*初始化计数器变量*/ for(j=0;j5) /*当 cnt 值大于 5 时为有效选票*/ for(j=0;j10;j+) /*统计有效选票*/ if(xxij= 1) yyj+; 【解析】本题运用多重循环来依次取每一张选票进行统计。首先,运用一个for 循环对数组yy 进行初始化;接着,对每张选票的有效性进行检
43、查,当选票上的选中人数大于 5 时为有效选票,不符合条件的被丢弃;最后对有效选票上的投票情况进行统计,并将投票结果保存在数组yy 中。下列程序的功能是:利用以下所示的简单迭代方法求方程:cos (x) -x=0 的一个实根。xn+1=cos(xn ) 迭代步骤如下:(1)取 x1 初值为 0.0。(2) x0=x1,把 x1 的值赋给x0。(3) x1=cos(x0) ,求出一个新的x1。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 28 页 - - - - - -
44、- - - (4)若 x0-x1 的绝对值小于0.000001,执行步骤( 5) ,否则执行步骤(2) 。(5)所求 x1 就是方程 cos(x)-x=0 的一个实根,作为函数值返回。请编写函数countValue ( )实现程序要求,最后调用函数writeDAT( ) 把结果输出到文件out9.dat 中。注意:部分源程序已给出。请勿改动主函数main()和写函数writeDA T()的内容。试题程序:#include #include #include void writeDAT(); float countValue( ) void main( ) system(CLS); printf
45、( 实根 =%fn,countValue( ); printf(%fn,cos(countValue( )-countValue( ); writeDAT( ); void writeDAT( ) FILE *wf; wf=fopen(out9.dat,w); fprintf(wf,%fn,countValue( ); fclose(wf); 【答案】float countValue( ) float x0,x1=0.0; /* 定义两个浮点型变量进行迭代*/ while(1) /*无条件循环 */ x0=x1; /* 将 x1 值赋给 x0*/ x1=cos(x0); /*求出新的x1 值*
46、/ if(fabs(x0-x1)1e-6) break; /* 若 x0-x1 的绝对值小于0.000001,则结束循环*/ return x1; /* 返回 x1 的值 */ 【解析】在本题中,因为要求一个实数的余弦值,在结束迭代的时候要判断绝对值,所以这里要用到函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 28 页 - - - - - - - - - cos(double x )和 fabs(double x ) 。先设一个条件永远为真的while 循环结构,
47、按照步骤提示,要先为x1 取初值,将 x1 的值赋给x0,使 x1=cos(x0) ,判断 x0-x1 的绝对值并将其作为强行退出循环的条件。请编写函数void countValue(int *a ,int *n) ,它的功能是:求出1 到 1000 之内能被7或 11 整除但不能同时被 7 和 11 整除的所有整数并存放在数组a 中,并通过n 返回这些数的个数。注意:部分源程序已给出。请勿改动主函数main()和写函数writeDA T()的内容。试题程序:#include #include void writeDAT(); void countValue(int *a,int *n) vo
48、id main() int aa1000,n,k; system(CLS); countValue(aa,&n); for(k=0;kn;k+) if(k+1) %10 =0) printf(%5d,aak); printf(n); else printf(%5d,aak); writeDAT(); void writeDAT() int aa1000,n,k; FILE *fp; fp=fopen(out10.dat,w); countValue(aa,&n); for(k=0;kn;k+) if(k+1)%10=0) fprintf(fp,%5d,aak); fprintf(fp,n);
49、else fprintf(fp,%5d,aak); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 28 页 - - - - - - - - - fclose(fp); 【答案】void countValue(int *a,int *n) int i; /* 定义循环控制变量*/ *n=0; /*初始化计数器变量*/ for(i=1;i=1000;i+) /*在这个范围内寻找符合条件的数*/ if(i%7=0 & i%11!=0)|(i%7!=0 & i%11=0) /
50、*如果当前数可以被7 整除而不可以被11 整除, 或者可以被 11 整除而不可以被7 整除 */ *a=i; /*保存符合条件的数*/ *n=*n+1; /* 统计符合条件的数的个数*/ a+; 【解析】本题的解题思路是:首先通过一个for 循环来控制范围,用一个if 语句来判断当前所取的数是否符合条件:可以被7 整除而不可以被11 整除,或者可以被11 整除而不可以被7 整除。最后保存符合条件的数,并统计个数。已知在文件IN11.DAT 中存有若干个(个数200)4 位数字的正整数,函数ReadDat() 的功能是读取这若干个正整数并存入数组xx 中。请编制函数CalValue(),其功能要