“白白的沙雕”为你分享12篇“计算机等级考试三级(C语言)上机考试试题总结”,经本站小编整理后发布,但愿对你的工作、学习、生活带来方便。
篇1:计算机等级考试三级(C语言)上机考试试题总结
第一种: 产品销售记录问题:
?? /* 已知在文件IN.DAT中存有100个产品销售记录, 每个产品销售记录由产品代码dm(字符型4位), 产品名称mc(字符型10位), 单价dj(整型), 数量sl(整型), 金额je(长整型)五部分组成。 其中:
?? 金额=单价*数量计算得出。函数ReadDat( )读取这100个销售记录并存入结构数组sell中。请编制函数SortDat( ), 其功能要求: 按金额从小到大进行排列, 若金额相等, 则按产品代码从小到大进行排列, 最终排列结果仍存入结构数组sell中。最后main( )函 数调用函数WriteDat把结果输出到文件OUT1.DAT中。 注意: 部分源程序存放在PROG1.C中。
?? #define MAX 100
?? typedef struct {
?? char dm[5] ; /* 产品代码 */
?? char mc[11] ; /* 产品名称 */
?? int dj ; /* 单价 */
?? int sl ; /* 数量 */
?? long je ; /* 金额 */
?? } PRO ;
?? 函数解析://if((sell[i].je>sell[j].je)||(sell[i].je==sell[j].je)&&(strcmp(sell[i].dm,
?? sell[j].dm)>0))是此题的精华所在理解它 就理解了这道题的编程道理
?? 首先sell[i].je>sell[j].je如果金额大小成立的话,就条件成立,把两个数据换位置,如果前者不成立,就判定金额是否 相等,如果相等的话,代码还有大小的话,按从小到大的顺序排列。
?? 这种函数的编程方法,适用于有一定基础的编程者,如果是初学者的话建议用以下函数来表达, 此方法是按照题意一部一部来分析的,是比较保守的编程方法。
?? void SortDat()
?? { int i,j;
?? PRO swap;
?? for(i=0; i < MAX-1; i++)
?? { for(j=i+1; j < MAX; j++)
?? if(sell[i].je>sell[j].je)
?? {swap=sell[i]; sell[i]=sell[j]; sell[j]=swap;}
?? else if((sell[i].je==sell[j].je)&&(strcmp(sell[i].dm,sell[j].dm)>0))
?? {swap=sell[i]; sell[i]=sell[j]; sell[j]=swap;}
?? }
??100个产品销售记录排序其余9题说明
?? 1) in.dat 内容完全相同。
?? 2) 程序也基本雷同,仅排序的要求不一样。
?? 3) 考生应熟悉 strcmp() 函数,否则有的题相当不好处理。
?? 试题变化 :
?? 排序要求:
?? 按金额从小到大进行排列, 若金额相等, 则按产品代码从大到小 进行排列 相应语句:
?? if((sell[i].je>sell[j].je)||( (sell[i].je==sell[j].je) && (strcmp(sell[i].dm, sell[j].dm) < 0)))
?? 排序要求: 按金额从大到小进行排列, 若金额相等, 则按产品代码从小到大 进行排列 相应语句: if((sell[i].je < sell[j].je)||(sell[i].je==sell[j].je)&&(strcmp(sell[i].dm, sell[j].dm)>0))
?? 排序要求:
?? 按金额从大到小进行排列, 若金额相等, 则按产品代码从大到小 进行排列 相应语句:
?? if((sell[i].je < sell[j].je)||(sell[i].je==sell[j].je)&&(strcmp(sell[i].dm,sell[j].dm)<0))
?? 排序要求:
?? 按产品名称从小到大进行排列, 若产品名称相同, 则按金额从小 到大进行排列
?? if((strcmp(sell[i].mc, sell[j].mc)>0)||(strcmp(sell[i].mc,sell[j].mc)==0)&&(sell[i].je>sell[j].je))
?? 排序要求:
?? 按产品名称从小到大进行排列, 若产品名称相同, 则按金额从大 到小进行排列
?? if(strcmp(sell[i].mc, sell[j].mc)>0 || (strcmp(sell[i].mc, sell[j].mc)==0)&&(sell[i].je < sell[j].je))
?? 排序要求:
?? 按产品名称从大到小进行排列, 若产品名称相同, 则按金额从小 到大进行排列
?? if((strcmp(sell[i].mc, sell[j].mc) < 0) || (strcmp(sell[i].mc,sell[j].mc)==0)&&(sell[i].je>sell[j].je))
?? 排序要求:
?? 按产品名称从大到小进行排列, 若产品名称相同, 则按金额从大 到小进行排列
?? if((strcmp(sell[i].mc, sell[j].mc) < 0)|| (strcmp(sell[i].mc, sell[j].mc)==0)&&(sell[i].je < sell[j].je))
?? 排序要求:
?? 按产品代码从小到大进行排列, 若产品代码相同, 则按金额从小 到大进行排列
?? if((strcmp(sell[i].dm, sell[j].dm)>0)||(strcmp(sell[i].dm,sell[j].dm)==0)&&(sell[i].je>sell[j].je
??
??第二类习题 300个四位数问题:
?? 300个四位数问题(此类共10题) 本类10题中,五题产生数组B,并对B按一定要求排序;
?? 其余五题是求平均值。我把它们分成两组五题来讨论。 以下为产生数组B之题一:
?? 已知数据文件IN.DAT中存有300个四位数, 并已调用读函数 readDat()把这些数存入数组a中, 请编制一函数jsvalue(),其功 能是: 求出个位数上的数减千位数上的数减百位数上的数减十位 数上的数大于零的个数cnt, 再把所有满足此条件的四位数依次 存入数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。 最后main( )函数调用写函数writeDat()把数组b中的数输出到文 件OUT.DAT。
?? 例如: 1239, 9-1-2-3>0, 则该数满足条件存入数组b中, 且个数cnt=cnt+1。
?? 8129, 9-8-1-2<0, 则该数不满足条件忽略。 程序中已定义数组: a[300], b[300], 已定义变量: cnt
?? #include
?? int a[300], b[300], cnt=0 ;
?? jsvalue()
?? {/**/
?? int i,j,g,s,b,q,t;
?? for(i=0; i < 300; i++)
?? {g=a[i]%10; /*个位的数字*/
?? s=a[i]/10%10; /*十位的数字*/
?? b=a[i]/100%10; /*百位的数字*/
?? q=a[i]/1000; /*千位的数字*/
?? if(g-q-b-s>0)
?? b[cnt++]=a[i];
?? for(i=0; i < cnt-1; i++)
?? for(j=i+1; j < cnt; j++)
?? if(b[i] < b[j])
?? { t=b[i]; b[i]=b[j]; b[j]=t; }
?? }
?? /**/
?? }
?? 相似题 求出所有这些四位数是素数的个数cnt, 再把所有满足此 条件的四位数依次存入数组b中, 然后对数组b的四位数按从小到 大的顺序进行排序。
?? jsvalue()
?? { int i,j,t;
?? for(i=0; i < 300; i++)
?? { for(j=2;j?? if(a[i]%j==0) break;
?? if(j==a[i])
?? b[cnt++]=a[i];
?? for(i=0; i < cnt-1; i++) /*排序*/
?? for(j=i+1; j < cnt; j++)
?? if(b[i] < b[j])
?? { t=b[i]; b[i]=b[j]; b[j]=t; }
?? }
?? 要求: 求出千位数上的数减百位数上的数减十位数上的数减个位 数上的数大于零的个数cnt, 再把所有满足此条件的四位数依次 存入数组b中, 然后对数组b的四位数按从小到大的顺序进行排序。
?? if(q-b-s-g>0)
?? b[cnt++]=a[i];
?? 要求: 求出千位数上的数加百位数上的数等于十位数上的数加个 位数上的数的个数cnt, 再把所有满足此条件的四位数依次存入 数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。
?? if((q+b)==(s+g))
?? b[cnt++]=a[i];
??
??
??类型题三:300个数满足条件的求平均值
??
??求满足条件的数的个数、平均值及不满足条件的数的平均 值等,此类也是五题。本处仅给出一个全题,其余题只给出不同 之处。
?? 已知数据文件IN.DAT中存有300个四位数, 并已调用读函数 readDat()把这些数存入数组a中, 请编制一函数jsvalue(),其功 能是: 求出千位数上的数减百位数上的数减十位数上的数减个位 数上的数大于零的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。最后 main()函数调用写函数writeDat()把结果cnt,pjz1,pjz2输出到 OUT.DAT文件。
?? 例如: 9123, 9-1-2-3>0, 则该数满足条件计算平均值pjz1, 且个数cnt=cnt+1。 9812, 9-8-1-2<0, 则该数不满足条件计算平均值pjz2。 程序中已定义数组: a[300], 已定义变量: cnt,pjz1,pjz2
??
?? int a[300], cnt=0 ;
?? double pjz1=0.0, pjz2=0.0 ;
?? jsvalue()
?? {/**/
?? int i,g,s,b,q;
?? for(i=0; i < 300; i++)
?? {g=a[i]%10; /*个位的数字*/
?? s=a[i]/10%10; /*十位的数字*/
?? b=a[i]/100%10; /*百位的数字*/
?? q=a[i]/1000; /*千位的数字*/
?? if(g-q-b-s>0)
?? { cnt++; pjz1+=a[i]; }
?? else pjz2+=a[i];
?? if(cnt) pjz1/=cnt;
?? if(cnt<300) pjz2/=300-cnt;
?? /**/
?? }
?? 之二 要求:
?? 求出千位数上的数加百位数上的数等于十位数上的数加个 位数上的数的个数cnt, 再求出所有满足此条件的四位数平均值 pjz1, 以及所有不满足此条件的四位数平均值pjz2。
?? if((q+b)==(g+s))
?? { cnt++; pjz1+=a[i]; }
?? else pjz2+=a[i];
?? 之三 要求:
?? 求出个位数上的数减千位数上的数减百位数上的数减十位 数上的数小于零的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。
?? if(g-q-b-s<0)
?? { cnt++; pjz1+=a[i]; }
?? else pjz2+=a[i];
?? 之四 要求:
?? 求出所有这些四位数是素数的个数cnt, 再求出所有满足 此条件的四位数平均z值pjz1, 以及所有不满足此条件的四位数平均值pjz2。
?? jsvalue()
?? {/**/
?? int i,j,t;
?? for(i=0; i < 300; i++)
?? { for(j=2;j?? if(a[i]%j==0)
?? {pjz2+=a[i];
?? break;}
?? if(j==a[i])
?? {cnt++; pjz1+=a[i];}
?? if(cnt) pjz1/=cnt;
?? if(cnt<300) pjz2/=300-cnt;
?? }
??
?? 之五 要求:
?? 求出千位数上的数加个位数上的数等于百位数上的数加十 位数上的数的个数cnt, 再求出所有满足此条件的四位数平均值 pjz1, 以及所有不满足此条件的四位数平均值pjz2。
?? if((q+g)==(b+s))
?? { cnt++; pjz1+=a[i]; }
?? else pjz2+=a[i];
?? code:
?? /*
??类型题四: 200个四位数题:
??
?? 已知数据文件IN.DAT中存有200个四位数, 并已调用读函数 readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其 功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新
?? 十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字), 以及把个位数字和百位数字组成另一 个新的十位数cd (新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两 个十位数ab>cd, ab必须是偶数且能被5整除, cd必须是奇数,同 时两个新数的十位数字均不为零,则将满足此条件的四位数按从 大到小的顺序存入数组b中, 并要计算满足上述条件的四位数的 个数cnt。 程序中已定义数组: a[200], b[200], 已定义变量: cnt
?? #include
?? #define MAX 200
?? int a[MAX], b[MAX], cnt = 0 ;
?? void jsVal()
?? {/**/
?? int i,j,k,A,B,C,D;
?? for(i=0; i < MAX; i++)
?? { A=a[i]/1000; B=a[i]/10%10; C=a[i]%10; D=a[i]/100%10;
?? if(A&&C&&(B==0)&&(D%2)&&(10*A>10*C+D))
?? b[cnt++]=a[i];
?? }
?? for(i=0; i < cnt-1; i++)
?? { k=i;
?? for(j=i+1; j < cnt; j++)
?? if(b[k] < b[j]) k=j;
?? if(k!=i) {A=b[k]; b[k]=b[i]; b[i]=A;}
?? }
?? /**/
?? }
??200个四位数题之其余九题说明
?? 之二 要求:
?? 把千位数字和十位数字重新组成一个新的十位数(新十 位数的十位数字是原四位数的千位数字,新十位数的个位数字是 原四位数的十位数字), 以及把个位数字和百位数字组成另一个 新的十位数(新十位数的十位数字是原四位数的个位数字, 新十 位数的个位数字是原四位数的百位数字), 如果新组成的两个十
?? 位数均是素数且新数的十位数字均不为零,则将满足此条件的四 位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的 四位数的个数cnt。
??
?? 要求: 把个位数字和千位数字重新组成一个新的十位数(新十 位数的十位数字是原四位数的个位数字,新十位数的个位数字是 原四位数的千位数字), 以及把百位数字和十位数字组成另一个 新的十位数(新十位数的十位数字是原四位数的百位数字, 新十 位数的个位数字是原四位数的十位数字), 如果新组成的两个十 位数必须是一个奇数,另一个为偶数并且两个十位数中至少有一 个数能被17整除,同时两个新数的十位数字均不为零, 则将满足 此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足
?? 上述条件的四位数的个数cnt。
?? 之四 要求:
?? )把这些数存入数组a中,请考生编制一函数jsVal(),其 功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新 十位数的十位数字是原四位数的千位数字,新十位数的个位数字 是原四位数的十位数字), 以及把个位数字和百位数字组成另一 个新的十位数cd (新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两 个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新 数的十位数字均不为零,则将满足此条件的四位数按从大到小的 顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。
?? 之五 要求: 如果四位数各位上的数字均是0或2或4或6或8, 则统计 出满足此条件的个数cnt, 并把这些四位数按从大到小的顺序存 入数组b中。
?? 之六 要求:
?? 把千位数字和个位数字重新组成一个新的十位数(新十 位数的十位数字是原四位数的千位数字,新十位数的个位数字是 原四位数的个位数字), 以及把百位数字和十位数字组成另一个 新的十位数(新十位数的十位数字是原四位数的百位数字, 新十 位数的个位数字是原四位数的十位数字), 如果新组成的两个十
?? 位数均是奇数并且两个十位数中至少有一个数能被5整除, 同时 两个新数的十位数字均不为零,则将满足此条件的四位数按从大 到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个 数cnt。
?? 之七 要求:
?? 把个位数字和千位数字重新组成一个新的十位数(新十 位数的十位数字是原四位数的个位数字,新十位数的个位数字是 原四位数的千位数字), 以及把百位数字和十位数字组成另一个 新的十位数(新十位数的十位数字是原四位数的百位数字, 新十 位数的个位数字是原四位数的十位数字), 如果新组成的两个十
?? 位数均是偶数并且两个十位数中至少有一个数能被9整除, 同时 两个新数的十位数字均不为零,则将满足此条件的四位数按从大 到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个 数cnt。
?? 之八 要求:
?? 把千位数字和十位数字重新组成一个新的十位数ab(新 十位数的十位数字是原四位数的千位数字,新十位数的个位数字 是原四位数的十位数字), 以及把个位数字和百位数字组成另一 个新的十位数cd (新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两
?? 个十位数ab 同时两个新数的十位数字均不为零,则将满足此条件的四位数按 从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数 的个数cnt。
?? 之九 要求:
?? 如果四位数各位上的数字均是奇数,则统计出满足此条 件的个数cnt并把这些四位数按从大到小的顺序存入数组b中。
?? 之十 要求:
?? 把千位数字和十位数字重新组成一个新的十位数ab(新 十位数的十位数字是原四位数的千位数字,新十位数的个位数字 是原四位数的十位数字), 以及把个位数字和百位数字组成另一 个新的十位数cd (新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两
?? 个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数, 同时两个新 数的十位数字均不为零,则将满足此条件的四位数按从大到小的 顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。
??
??
?? 类型题五
?? 已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整 数, 函数ReadDat( )读取这若干个正整数并存入数组xx中。请编 制函数Calvalue( ), 其功能要求: 1. 求出这文件中共有多少个正整数totNum; 2. 求这些数右移1位后, 产生的新数是奇数的数 的个数totCnt, 以及满足此条件的这些数(右移前的值)的算术平均值totPjz。最后main()函数调用函数WriteDat()把所求的结果输出到文件OUT.DAT中。
?? #define MAXNUM 200
?? int xx[MAXNUM] ;
?? int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
?? int totCnt = 0 ; /* 符合条件的正整数的个数 */
?? double totPjz = 0.0 ; /*平均值 */
?? void Calvalue(void)
?? {/**/
?? for(; xx[totNum]; totNum++)
?? if((xx[totNum]>>1)%2)
?? { totCnt++; totPjz+=xx[totNum];}
?? if(totCnt) totPjz/=totCnt;
?? /**/
?? }
??
?? 类似题一、编制函数Calvalue( ), 其功能要求: 1. 求出这文件中共有多少个 正整数totNum; 2. 求这些数右移1位后, 产生的新数是偶数的数 的个数totCnt, 以及满足此条件的这些数(右移前的值)的算术平均值totPjz。
?? void Calvalue(void)
?? {/**/
?? for(; xx[totNum]>0; totNum++)
?? if((xx[totNum]>>1)%2==0)
?? { totCnt++; totPjz+=xx[totNum]; }
?? if(totCnt) totPjz/=totCnt;
?? /**/
??
??类型题六
??
?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到 字符串数组xx中; 请编制函数SortCharD( ), 其函数的功能是: 以行为单位对字符按从大到小的顺序进行排序, 排序后的结果仍按行
?? 重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把 结果xx输出到文件OUT2.DAT中。 例: 原文: dAe,BfC.
?? CCbbAA
?? 结果: fedCBA.,
?? bbCCAA
?? char xx[50][80] ;
?? int maxline = 0 ; /* 文章的总行数 */
?? void SortCharD(void)
?? {/**/
?? int i,j,k,m,n; char ch;
?? for(i=0; i < maxline; i++)
?? { j=strlen(xx[i]); /*求出每行的字符个数*/
?? for(m=0; m < j-1; m++)
?? { for(n=m+1; n < j; n++)
?? if(xx[i][m] < xx[i][n])
?? { ch=xx[i][m]; xx[i][m]=xx[i][n]; xx[i][n]=ch; }
?? }
?? }
?? /**/
?? }
?? 处理字符串类型题之二
?? code:
?? /* 请编制函数ConvertCharA(), 其函数的功能是: 以行为单位 把字符串中的所有小写字母改写成该字母的下一 个字母, 如果是字母z, 则改写成字母a,大写字母和其它字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。
?? void ConvertCharA(void)
?? {/**/
?? int i,j;
?? for(i=0; i < maxline; i++)
?? for(j=0; j < strlen(xx[i]); j++)
?? if(xx[i][j]==#39;z#39;) xx[i][j]=#39;a#39;; /*如果是z的话,就变为a*/
?? else if((xx[i][j]>=#39;a#39;)&&(xx[i][j]<#39;z#39;))
?? xx[i][j]++;/*如果不是z的话就把字符向
?? 后移动一个。*/
?? /**/
?? }
??
?? 字符串类型题之三
?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到 字符串数组xx中; 请编制函数SortCharA( ), 其函数的功能是: 以行为单位对字符按从小到大的顺序进行排序, 排序后的结果仍按行 重新存入字符串数组xx中。
?? void SortCharD(void)
?? {/**/
?? int i,j,k,m,n; char ch;
?? for(i=0; i < maxline; i++)
?? { j=strlen(xx[i]); /*求出每行的字符个数*/
?? for(m=0; m < j-1; m++)
?? { for(n=m+1; n < j; n++)
?? if(xx[i][m] > xx[i][n])
?? { ch=xx[i][m]; xx[i][m]=xx[i][n]; xx[i][n]=ch; }
?? }
?? }
??
??字符串处理之四
?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到 字符串数组xx中; 请编制函数StrCharJL( ), 其函数的功能是: 以 行为单位把字符串中的所有字符的ASCII值左移4位, 如果左移后, 其字符的ASCII值小于等于32或大于100, 则原字符保持不变, 否则就把左移后的字符ASCII值再加上原字符的ASCII值, 得到新的字符仍存入原字符串对应的位置上,之后把已处理的字符串仍按行重新
?? 存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果 xx输出到OUT7.DAT文件中。
?? void StrCharJL(void)
?? {/**/
?? int i,j; char m;
?? /****此题的关键是定义 char m ,如果定义为int c的话就会出现错误
?? for(i=0; i < maxline; i++)
?? for(j=0; j < strlen(xx[i]); j++)
?? { m=xx[i][j]<<4;
?? if((m>32)&&(m<=100))
?? xx[i][j]+=m;
?? }
?? }
?? 字符串处理之五 :
?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到 字符串数组xx中; 请编制函数StrCharJR( ), 其函数的功能是: 以行为单位把字符串中的所有字符的ASCII值右移4位, 然后把右移后 的字符ASCII值再加上原字符的ASCII值, 得到新的字符仍存入原字符串对应的位置上,之后把已处理的字符串仍按行重新存入字符串 数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文 件OUT8.DAT中。
?? void StrCharJR(void)
?? {/**/
?? int i,j;
?? for(i=0; i
?? for(j=0; j
?? xx[i][j]+=xx[i][j]>>4;
?? /**/
?? }
??字符串处理之六:
??
?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入 到字符串数组xx中; 请编制函数ConvertCharD(), 其函数的功能 是: 以行为单位把字符串中的所有小写字母改写成该字母的上一 个字母, 如果是字母a, 则改写成字母z,大写字母和其它字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。
?? void ConvertCharD(void)
?? {/**/
?? int i,j;
?? for(i=0; i < maxline; i++)
?? for(j=0; j < strlen(xx[i]); j++)
?? if(xx[i][j]==#39;a#39;) xx[i][j]=#39;z#39;;
?? else if(islower(xx[i][j])) xx[i][j]-=1;
?? /**/
?? }
篇2:全国计算机等级考试三级C语言全真上机试题解析
第1题: 函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS10.DAT中。替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。
??void encryptChar()
??{int i;
??char *pf;
??for(i=0;i??{pf=xx[i];
??while(*pf!=0)
??{if(*pf==*pf/2*2||*pf*11%256<32)
??{pf++;continue;}
??*pf=*pf*11%256;
??pf++;}}}
??注:在ReadDat()函数中由于fgets()函数读入数据时没有读入字符串结束符#39;0#39;,因而用while()循环在xx数组每一行未尾将换行符#39;n#39;替换成结束符#39;0#39;。编写的函数如下:该函数的基本算法是――让字符指针pf指向每一行的开头然后逐一往后移动,在移动过程中按要求进行转换。*pf=*pf/2*2用于判断是否为偶数。if()条件语句用于控制不替代字符。
??
??第2题:
??函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
?? 条件:从字符串中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。
??例如:字符串 d c b a h g f e 则处理后字符串 h g f e a b c d
??void jsSort()
??{int i,strl,half,j,k;
??char ch;
??for(i=0;i<20;i++)
??{strl=strlen(xx[i]);
??half=strl/2;
??for(j=0;j??for(k=j+1;k??if(xx[i][j]>xx[i][k])
??{ch=xx[i][j];
??xx[i][j]=xx[i][k];
??xx[i][k]=ch;}
??for(j=half-1,k=strl-1;j>=0;j--,k--)
??{ch=xx[i][j];
??xx[i][j]=xx[i][k];
??xx[i][k]=ch;}}
??注:先采用冒泡法对左边部分进行升序排序,然后将排序后的左半与右半按对应位进行调换。
??
??第3题:
??已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加百位数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到OUT.DAT文件。例如:7153,7+1=5+3,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。8129,8+12+9,则该数不满足条件计算平均值pjz2.
??jsvalue()
??{
??int i,g,s,b,q,k=0;
??for(i=0;i<300;i++)
??{g=a[i]%10;
??s=a[i]%100/10;
??b=a[i]/100%10;
??q=a[i]/1000;
??if((q+b)==(s+g)) {cnt++;pjz1+=a[i];}
??else {k++;pjz2+=a[i];}
??}
??pjz1/=cnt;
??pjz2/=k;}
??注:该题的关键在于取出一个数的个、十、百、千位上的数。a[i]%10结果为个位数,a[i]%100/10先对100求余得出后两位数然后再除10,由于为整数因此得出上一个后两位数的第一位。依此类推
??第4题:
??下列程序的功能是:先出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的确10倍。计算并输出这些四位自然数的个数cnt以及这些数的和sum。请编写函数countvalue
??void countValue()
??{int i;
??for(i=1000;i<5000;i++)
??if((i/1000+i/100%10)==(i/10%10+i%10))
??if((i/1000+i/100%10)==(i%10-i/1000)*10)
??{cnt++;
??sum+=i;}}
??注:该题的关键亦是如何取出各位数字
??
??第5题:
??已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。
??void SortDat()
??{int i,j;
??PRO swap;
??for(i=0;i??for(j=0;j??{ if(strcmp(sell[j].dm,sell[j+1].dm)<0)
??{swap=sell[j];
??sell[j]=sell[j+1];
??sell[j+1]=swap;}
??if(strcmp(sell[j].dm,sell[j+1].dm)==0&&sell[j].je??{swap=sell[j];
??sell[j]=sell[j+1];
??sell[j+1]=swap;
??}}}
??注:这时也是采用冒泡法进行排序。与前面的冒泡法在写法上有所不同请注意区分。同时注意结构体变量的引用格式。
??
??第6题:
??下列程序的功能是:选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数CNT以及这些素数值的和SUM。请编写函数COUNTVALUE实现程序要求
??void countvalue()
??{int i,j;
??for(i=100;i<1000;i++)
??{for(j=2;j??if(i%j==0) break;
??if(j==i&&((i%10+i/10%10)%10==i/100))
??{cnt++;
??sum+=i;}}}
?? 注:内嵌的for()循环用来判断i以前的数有否能整除i的数若能则提前终止循环,第二个if()中j= =i的作用是配合前面的for()判断i是否是素数。
??
??第7题:
??下列程序的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。
??int jsvalue(int bb[])
??{int i,j,k=0,g,s,b;
??for(i=100;i<=999;i++)
??{g=i%10;
??s=i/10%10;
??b=i/100;
??if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s//s==b//b==g))
??bb[k++]=i;}
??}
??注:注意在i==(int)sqrt(i)*(int)sqrt(i)中只有当i是完全平方数时开平方后再取整才不会丢失任何数据。
??
??第8题:
??函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存 入到字符串数组xx中,请编制函数CharConvA(),其函数的功能是:以行为单位把字符串中的最后一个字符的ASCII值右移4位后加最后第二个字符的ASCII值,得到最后一个新的字符,最后第二个字符的ASCII值右移4位后加最后第三个字符的ASCII值,得到最后第二个新的字符,依此类推一直处理到第二个字符,第一个字符的ASCII值加原最后一个字符的ASCII值,得到第一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后已处理的字符串仍按行重新存入字符串数组xx中。
??void CharConvA(void)
??{int i,j,strl;
??char ch;
??for(i=0;i??{strl=strlen(xx[i]);
??ch=xx[i][strl-1];
??for(j=strl-1;j>0;j--)
??{xx[i][j]>>=4;
??xx[i][j]+=xx[i][j-1];}
??xx[i][0]+=ch;}}
??注:在该题中主要是控制好每一个字符的走动,由于最后要用到原来的最后一个字符故先将其存入一个字符变量中。
??
??第9题:
??现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推 :内容均为字符0和1,1表示此人被选中,0表示此人未被选中,若一张选票人数小于等于5个人时被认为无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。
??void countrs(void)
??{int i,j,count;
??for(i=0;i<300;i++)
??{count=0;
??for(j=0;j<10;j++)
??if(xx[i][j]==#39;1#39;)
??count++;
??if(count<=5)
??continue;
??for(j=0;xx[i][j];j++)
??if(xx[i][j]==#39;1#39;) yy[j]++;}}
??注:题目要求将那些选了不超过5人的选票视为无效票,即一张选票中如果‘1’不超过5个则为无效选票。该题先用for()循环对100行选票进行循环,在循环内先进行用for()循环数出这张选票中选中的人数(count)再用if()判断,如果选中人数小于等于5则continue即判断下一张选票,否则用内嵌的for()对行内的数据进行判断,注意如果数据为‘1’时才对对应的人增加1。
??
??第10题:设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件OUT.DAT中。设n=100,c=1,m=10.
??(1)将1到n个人的序号存入一维数组p中;
??(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;
??(3)重复第(2)步直至圈中只剩下p[1]为止。
??void Josegh(void)
??{int i,j,s1,w;
??s1=s;
??for(i=1;i<=n;i++)
??p[i-1]=i;
??for(i=n;i>=2;i--)
??{s1=(s1+m-1)%i;
??if(s1==0)
??s1=i;
??w=p[s1-1];
??for(j=s1;j??p[j-1]=p[j];
??p[i-1]=w;}}
??题中第一个for()循环是先对数组p赋初值。在第二个for()中用i来控制没出圈的总人数,s1=(s1+m-1)%i的作用是找出报数后出圈人的下标,其中对i求余的作用是使报
??数按圈进行(即报到尾后又从头报),该算法在很多题目中都用到。由于求余的作用当报数正好到最后一个时s1为0,故而要进行if(s1==0)的判断。内嵌的for()循环是将出圈以后的人依次往前移。
篇3:9月全国等级考试三级c语言上机题库(一)
题目1(上机题库id 14、id 27(提供isp函数;上机题库id 23题)
请编写一个函数jsvalue(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。
最后调用函数writedat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。
部分源程序存在文件prog1.c中。
例如:若输入17 5 则应输出:19,23,29,31,37。
请勿改动主函数main()和写函数writedat()的内容。
#include
#include
void readwritedat();
int isp(int m)
{
int i;
for(i=2;i if(m % i==0)return 0; return 1; } void num(int m,int k,int xx[]) { int s=0; for(m=m+1;k>0;m++) if(isp(m)) { xx[s++]=m; k--;} } main() { int m,n,xx[1000]; clrscr(); printf(“nplease enter two integers:”); scanf(“%d%d”,&m,&n); num(m,n,xx); for(m=0;m printf(“%d ”,xx[m]); printf(“n”); readwritedat(); } void readwritedat() { int m,n,xx[1000], i; file *rf,*wf; rf=fopen(“in.dat”,“r”); wf=fopen(“out.dat”,“w”); for(i=0;i<10;i++){ fscanf(rf,“%d %d”,&m,&n); num(m,n,xx); for(m=0;m fprintf(wf,“n”); } fclose(rf); fclose(wf); } 无忧id 14题(无isp()函数) #include void jsvalue(int m,int k,int xx[]) { int i,j,s=0; for(i=m+1;k>0;i++) { for(j=2;j if(i%j==0) break; if(i==j) { xx[s++]=i; k--;} } } main() { int m,n,zz[100]; printf(“n请输入两个整数:”); scanf(“%d%d”,&m,&n); jsvalue(m,n,zz); for(m=0;m printf(“n”); writedat(); } writedat() { int m,n,zz[100],i; file *in,*out; in=fopen(“in.dat”,“r”); out=fopen(“out.dat”,“w”); for(i=0;i<10;i++){ fscanf(in,“%d%d”,&m,&n); jsvalue(m,n,zz); for(m=0;m fprintf(out,“n”); } fclose(in); fclose(out); } 另一解法: void num(int m,int k,int xx[]) { int n=0,data=m+1; while(n if(isp(data)) xx[n++]=data; data++;} } 题目6 正整数排序 在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数readdat()读取这200个数存放到数组aa中。请编制函数jssort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数writedat()把结果bb输出到文件out.dat中。 例:处理前 9012 5099 6012 7025 8088 处理后 5099 8088 7025 6012 9012 注意:部分源程序已给出。 请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。 #include #include #include int aa[200],bb[10]; void jssort() { int i,j,data; for(i=0;i<199;i++) for(j=i+1;j<200;j++) if(aa[i]%1000aa[j]) {data=aa[i];aa[i]=aa[j];aa[j]=data;} for(i=0;i<10;i++) bb[i]=aa[i]; } void main() { readdat(); jssort(); writedat(); system(“pause”); } readdat() { file *in; int i; in=fopen(“in.dat”,“r”); for(i=0; i<200; i++) fscanf(in,“%d,”,&aa[i]); fclose(in); } writedat() { file *out; int i; clrscr(); out=fopen(“out.dat”,“w”); for(i=0; i<10; i++){ printf(“i=%d,%dn”,i+1,bb[i]); fprintf(out,“%dn”,bb[i]); } fclose(out); } ☆题目11(无忧id 93 字符串字母移位题)篇4:9月全国等级考试三级c语言上机题库(六)
篇5:9月全国等级考试三级c语言上机题库(十一)
篇6:9月全国等级考试三级c语言上机题库(十)
题目10(无忧id 68 替换字符题)
函数readdat()实现从文件in.dat中读取一篇英文文章存入到字符串数组xx中,请编制函数convertchara(),其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writedat()把结果xx输出到文件out1.dat中。
例:原文:adb.bcdza
abck.llhj
结果:aec.bdeab
bcdl.llik
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include
#include
#include
char xx[50][80];
int maxline=0;/*文章的总行数*/
int readdat(void);
void writedat(void);
void convertchara(void)
{ int i,j;
for(i=0;i { for(j=0;j if(xx[i][j]=='z') xx[i][j]='a'; else if(xx[i][j]>='a'&&xx[i][j]<='y') xx[i][j]+=1; } } void main() { clrscr(); if(readdat()){ printf(“数据文件in.dat不能打开!n 07”); return; } convertchara(); writedat(); } int readdat(void) { file *fp; int i=0; char *p; if((fp=fopen(“in.dat”,“r”))==null) return 1; while(fgets(xx[i],80,fp)!=null){ p=strchr(xx[i],'n'); if(p)*p=0; i++; } maxline=i; fclose(fp); return 0; } void writedat(void) { file *fp; int i; clrscr(); fp=fopen(“out1.dat”,“w”); for(i=0;i printf(“%sn”,xx[i]); fprintf(fp,“%sn”,xx[i]); } fclose(fp); } 题目15(无忧id 150 整数各位数字运算排序题)篇7:9月全国等级考试三级c语言上机题库(十五)
篇8:9月全国等级考试三级c语言上机题库(十七)
☆题目17 (亲朋字符替换题)
函数readdat实现从文件in.dat中读取一篇英文文章存入到字符串数组xx中;请编制函数cha(),其函数功能是:以行为单位把字符串中的第一个字符的ascii值加第二个字符的ascii值,得到第一个亲朋字符,第二个字符的ascii值加第三个字符的ascii值,得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ascii值加原第一个字符的ascii值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后把已处理的字符串逆转后按行重新存入字符串数组xx中,最后调用函数writedat()把结果xx输出到文件out9.dat中.原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.注意:部分源程序已给出。请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。#include篇9:9月全国等级考试三级c语言上机题库(十三)
题目13(无忧id 81结构体运算题)
无忧id 81题按金额从小到大进行排列已知在文件in.dat中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数readdat是读取这100个销售记录并存入结构数组sell中。请编制函数sortdat(),其功能要求:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数writedat()把结果输出到文件out9.dat中。部分源程序存在文件prog1.c中。请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。#include篇10:9月全国等级考试三级c语言上机题库(二十)
题目20(无忧id 80 fibonacci数列题)
编写函数jsvalue,它的功能是:求fibonacci数列中大于t的最小的一个数,结果由函数返回。其中fibonacci数列f(n)的定义为:f(0)=0,f(1)=1f(n)=f(n-1)+f(n-2)最后调用函数writedat()读取50个数据t,分别得出结果且把结果输出到文件out.dat中。例如:当t=1000时,函数值为:1597。部分源程序存在文件prog1.c中。请勿改动主函数main()和写函数writedat()的内容。#include篇11:9月全国等级考试三级c语言上机题库(十九)
题目19(无忧id 144 单词个数统计题)
编写一个函数findstr(char *str,char *substr),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为“asd asasdfg asd as zx67 asd mklo”,子字符串为“as”,函数返回值是6。函数readwrite实现从文件in.dat中读取两个字符串,并调用函数findstr(),最后把结果输出到文件out.dat中。注意:部分源程序存在文件prog1.c中。请勿改动主函数main()和其它函数中的任何内容,仅在函数findstr()的花括号中填入你编写的若干语句。#include篇12:9月全国等级考试三级c语言上机题库(十八)
☆题目18(无忧id 1 题)
函数readdat()实现从文件eng.in中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptchar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数writedat()把结果xx输出到文件ps10.dat中。替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ascii值,f(p)是计算后新字符的ascii值),如果原字符的ascii值是偶数或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。#include【计算机等级考试三级(C语言)上机考试试题总结(精选12篇)】相关文章:
计算机三级考试内容2023-01-29
四川:下半年计算机等级考试报名时间2022-10-25
人力资源管理师考试时间2022-12-07
判后答疑申请书2022-05-28
北京计划开通地铁新线2022-11-17
大学毕业分配自荐信2022-05-24
计算机二级VB上机考试答题攻略2023-01-29
四年大学生活的自我评价2023-01-24
毕业分配自荐书2023-08-14
计算机大学论文范文2022-09-02