计算机三级上机:适用于三级网络技术、数据库等(南开100题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全国计算机等级考试
三级C语言上机100题
几点说明:
**********************************☆题目1
请编写一个函数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 <conio.h〉
#include <stdio。
h〉
void readwriteDat();
int isP(int m)
{
int i;
for(i=2;i〈m;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<n;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〈n;m++)fprintf(wf,”%d ",xx[m]);
fprintf(wf,"\n”);
}
fclose(rf);
fclose(wf);
}
*********************************
☆题目2
已知数据文件IN.DA T中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal
到小的顺序存入数组b中。
最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DA T文件中.
注意:部分源程序存在文件prog1.c中。
程序中已定义数组:a[200],b[200],已定义变量:cnt
请勿改动数据文件IN。
DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
#include <stdio.h〉
#define MAX 200
int a[MAX], b[MAX], cnt = 0 ;
void jsVal()
{int i,j,qw,bw,sw,gw;
for(i=0;i〈MAX;i++)
{ qw=a[i]/1000; bw=a[i]/100%10;
sw=a[i]%100/10; gw=a[i]%10;
if(qw&&qw%2==0&&bw%2==0&&sw%2==0&&gw%2==0)b[cnt++]=a[i];
}
for(i=0;i<cnt-1;i++)
for(j=i+1;j〈cnt;j++)
if(b[i]〈b[j]){qw=b[i];b[i]=b[j];b[j]=qw;}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen("in。
dat",”r”);
for(i = 0 ;i 〈MAX ;i++)fscanf(fp,"%d”,&a[i]) ;
fclose(fp);
}
void main()
{
int i ;
readDat();
jsVal();
printf(”满足条件的数=%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
printf("\n");
writeDat();
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(”out。
dat",”w");
fprintf(fp,”%d\n",cnt) ;
for(i = 0 ; i < cnt ; i++)fprintf(fp, ”%d\n”, b[i]);
fclose(fp);
}
*********************************★题目3
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR(),其函数的功能是:以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。
最后main()函数调用函数WriteDat()把结果xx输出到文件OUT5.DA T中.
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.
注意:部分源程序存放在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include <stdio。
h>
#include 〈string。
h>
#include 〈conio。
h>
char xx[50][80];
int ReadDat(void) ;
void WriteDat(void) ;
void StrOR(void)
{int i,righto,j,s,k;
char tem[80];
for(i=0;i〈maxline;i++)
for(j=strlen(xx[i])-1;j>=0;j-—)
{ k=0;
memset(tem,0,80);
if(xx[i][j]=='o’)
{righto=j;
for(s=righto+1;s〈strlen(xx[i]);s++)
tem[k++]=xx[i][s];
for(s=0;s<righto;s++)
if(xx[i][s]!=’o')
tem[k++]=xx[i][s];
strcpy(xx[i],tem);
}
else continue;
}
}
void main()
{
clrscr() ;
if(ReadDat()){
printf("数据文件IN.DAT不能打开!\n\007”);
return ;
}
StrOR() ;
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(”OUT5。
DAT", "w");
for(i = 0 ;i < maxline ; i++) {
printf(”%s\n",xx[i]);
fprintf(fp, ”%s\n”, xx[i]);
}
fclose(fp);
}
**********************************
★题目4
函数ReadDat()实现从文件IN。
DA T中读取一篇英文文章存入到字符串数组xx中,请编制函数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。
最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT6。
DAT中。
例如:原文:You He Me
I am a student.
结果:Me He You
student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1。
c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
#include 〈stdio.h>
#include <string。
h>
#include 〈conio.h>
#include 〈ctype。
h>
char xx[50][80];
int maxline=0;/*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void StrOL(void)
{int i,j,k,s,m,strl;
char str[80];
for(i=0;i<maxline;i++)
{strl=strlen(xx[i]);
memset(str,0,80);
s=k=0;
for(j=strl-1;j>=0;j-—)
{if(isalpha(xx[i][j])) k++;
else { for(m=1;m〈=k;m++)
str[s++]=xx[i][j+m];
k=0;
}
if(!isalpha(xx[i][j]))
str[s++]=’ ’;
}
for(m=1;m〈=k;m++)
str[s++]=xx[i][j+m];
str[s]='\0';
strcpy(xx[i],str); }
}
void main()
{
clrscr();
if(ReadDat()){
printf("数据文件IN。
DAT不能打开!\n\007”);
return;
}
StrOL();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen(”IN.DA T”,”r”))==NULL)return 1;
while(fgets(xx[i],80,fp)!=NULL){
p=strchr(xx[i],’\n');
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
clrscr();
fp=fopen(”OUT6。
DAT”,"w");
for(i=0;i〈maxline;i++){
printf(”%s\n”,xx[i]);
fprintf(fp,”%s\n”,xx[i]);
}
fclose(fp);
}
**********************************
☆题目5(整数排序题)
在文件in.dat中有200个正整数,且每个数均在1000至9999之间。
函数ReadDat()读取这200个数存放到数组aa中.请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行降序排列。
最后调用函数WriteDat()把结果bb输出到文件out。
dat中。
例:处理前6012 5099 9012 7025 8088
处理后9012 6012 7025 8088 5099
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include 〈stdio。
h〉
#include <string。
h〉
#include <conio.h〉
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]%1000>aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]〈aa[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();
}
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(” %d",bb[i]);
fprintf(out,”%d\n”,bb[i]);
}
fclose(out);
}
*********************************
☆题目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<stdio。
h〉
#include〈string.h>
#include〈conio。
h〉
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]%1000〈aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]>aa[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,%d\n”,i+1,bb[i]);
fclose(out);
}
******************************
☆题目7(结构体操作题)
已知在文件IN。
DA T中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。
其中:金额=单价*数量计算得出。
函数ReadDat()是读取这100个销售记录并存入结构数组sell中。
请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT6。
DAT中。
部分源程序存在文件prog1。
c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include <stdio。
h〉
#include <mem.h>
#include <string。
h>
#include 〈conio。
h〉
#include <stdlib.h>
#define MAX 100
typedef struct{
char dm[5];/*产品代码*/
char mc[11];/*产品名称*/
int dj;/*单价*/
int sl;/*数量*/
long je;/*金额*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();
void SortDat()
{int i,j;
PRO xy;
for(i=0;i〈99;i++)
for(j=i+1;j<100;j++)
if(strcmp(sell[i]。
dm,sell[j].dm)<0||strcmp(sell[i]。
dm,sell[j].dm)==0&&sell[i]。
je<sell[j].je)
{xy=sell[i]; sell [i]=sell[j]; sell[j]=xy;}
}
void main()
{
memset(sell,0,sizeof(sell));
ReadDat();
SortDat();
WriteDat();
}
void ReadDat()
{
FILE *fp;
char str[80],ch[11];
int i;
fp=fopen("IN.DAT”,”r”);
for(i=0;i〈100;i++){
fgets(str,80,fp);
memcpy(sell[i].dm,str,4);
memcpy(sell[i].mc,str+4,10);
memcpy(ch,str+14,4);ch[4]=0;
sell[i]。
dj=atoi(ch);
memcpy(ch,str+18,5);ch[5]=0;
sell[i]。
sl=atoi(ch);
sell[i]。
je=(long)sell[i]。
dj*sell[i]。
sl;
}
void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen(”OUT6.DAT”,"w”);
for(i=0;i〈100;i++){
printf(”%s %s %4d %5d %5d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);
fprintf(fp,"%s %s %4d %5d %5d\n", sell[i]。
dm,sell[i]。
mc,sell[i]。
dj,sell[i]。
sl,sell[i].je);
}
fclose(fp);
}
*********************************
★题目8(字符替换题)
函数ReadDat()实现从文件ENG。
IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS1.DA T中.
替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。
(注意中间变量用无符号整型),部分源程序存在文件prog1。
c中.原始数据文件存放的格式是:每行的宽度均小于80个字符。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容.
#include 〈stdio。
h〉
#include <string.h>
#include <conio。
h〉
#include <ctype.h〉
unsigned char xx[50][80];
int maxline=0;/*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void encryptChar()
{int i,j;
for(i=0;i〈maxline;i++)
for(j=0;j〈strlen(xx[i]);j++)
if(xx[i][j]*11%256<=32||xx[i][j]*11%256>130)continue;
else xx[i][j]=xx[i][j]*11%256;
}
void main()
{
clrscr();
if(ReadDat()){
printf(”数据文件ENG。
IN不能打开!\n\007”);
return;
}
encryptChar();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
unsigned char *p;
if((fp=fopen("eng.in”,"r"))==NULL) return 1;
while(fgets(xx[i],80,fp)!=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("ps1。
dat","w");
for(i=0;i<maxline;i++){
printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
*********************************
★☆题目9(字符串排序题)
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数SortCharD(),其函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat ()把结果xx输出到文件OUT2.DA T中。
例:原文:dAe,BfC.
CCbbAA
结果:fedCBA。
bbCCAA
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1。
c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
#include 〈stdio.h〉
#include <string。
h〉
#include 〈conio.h〉
char xx[50][80];
int maxline=0;/*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void SortCharD(void)
{int i,j,k,strl;
char ch;
for(i=0;i〈maxline;i++)
{strl=strlen(xx[i]);
for(j=0;j<strl—1;j++)
for(k=j+1;k<strl;k++)
if(xx[i][j]<xx[i][k])
{ch=xx[i][j];xx[i][j]=xx[i][k]; xx[i][k]=ch;}
}
}
void main()
{
clrscr();
if(ReadDat()){
printf("数据文件IN。
DAT不能打开!\n\007”);
return;
}
SortCharD();
WriteDat();
}
int ReadDat(void)
int i=0;
char *p;
if((fp=fopen("IN.DA T”,”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;
fp=fopen("OUT2.DAT",”w");
for(i=0;i<maxline;i++){
printf(”%s\n",xx[i]);
fprintf(fp,”%s\n",xx[i]);
}
fclose(fp);
}
********************************
★☆题目10(替换字符题)
函数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 <stdio。
h>
#include <string。
h>
#include <conio.h>
char xx[50][80];
int maxline=0;/*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void ConvertCharA(void)
{int i,j;
for(i=0;i〈maxline;i++)
{ for(j=0;j<strlen(xx[i]);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\007”);
}
ConvertCharA();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("IN.DA T”,”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。
DA T","w”);
for(i=0;i<maxline;i++){
printf("%s\n",xx[i]);
fprintf(fp,”%s\n”,xx[i]);
}
fclose(fp);
}
**********************************
☆题目11(字符串字母移位题)
程序prog1。
c的功能是:把s 字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a.要求大写字母仍为大写字母,小写字母仍为小写字母,其它字符不做改变.
请考生编写函数chg(char *s)实现程序要求,最后调用函数readwriteDAT()把结果输出到文件bc1。
out中。
例如:s 字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz.
注意:部分源程序存在文件prog1.c文件中。
请勿改动主函数main( )和输出数据函数readwriteDAT()的内容。
#include 〈conio。
h>
#include 〈string。
h〉
#include <stdio。
h〉
#include 〈ctype。
h〉
#define N 81
void readwriteDAT();
void chg(char *s)
{int I;
for(I=0;I<strlen(s);I++)
if(s[i]==’z'||s[i]=='Z’)s[i]-=25;
else if(s[i]>='a’&&s[i]<='y'||s[i]〉=’A’&&s[i]<=’Y') s[i]+=1;
}
main( )
{
char a[N];
clrscr();
printf("Enter a string :");gets(a);
printf("The original string is : ”); puts(a);
chg(a);
puts (a);
readwriteDA T();
}
void readwriteDAT()
{
int i ;
char a[N] ;
FILE *rf, *wf ;
rf = fopen(”bc1。
in",”r");
wf = fopen("bc1.out”,”w");
for(i = 0 ; i 〈50 ;i++){
fscanf(rf, "%s",a) ;
chg(a);
fprintf(wf,"%s\n", a) ;
}
fclose(rf) ;
fclose(wf) ;
}
********************************
★☆题目12(结构体运算题题)
已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成.其中:金额=单价*数量计算得出。
函数ReadDat()是读取这100个销售记录并存入结构数组sell中。
请编制函数SortDat(),其功能要求:
按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT5。
DA T中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容.
#include <stdio。
h〉
#include 〈mem.h〉
#include 〈string。
h〉
#include <conio。
h>
#include <stdlib。
h〉
#define MAX 100
typedef struct{
char dm[5];/*产品代码*/
char mc[11]; /*产品名称*/
int dj;/*单价*/
int sl;/*数量*/
long je; /*金额*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();
void SortDat()
{int i,j;
PRO xy;
for(i=0;i〈99;i++)
for(j=i+1;j<100;j++)
if(strcmp(sell[i]。
mc,sell[j]。
mc)>0||strcmp(sell[i]。
mc,sell[j].mc)==0&&sell[i]。
je>sell[j]。
je){xy=sell[i];sell[i]=sell[j];sell[j]=xy;}
}
void main()
{
memset(sell,0,sizeof(sell));
ReadDat();
SortDat();
WriteDat();
}
FILE *fp;
char str[80],ch[11];
int i;
fp=fopen("IN。
DAT”,"r”);
for(i=0;i〈100;i++){
fgets(str,80,fp);
memcpy(sell[i].dm,str,4);
memcpy(sell[i]。
mc,str+4,10);
memcpy(ch,str+14,4);ch[4]=0;
sell[i]。
dj=atoi(ch);
memcpy(ch,str+18,5);ch[5]=0;
sell[i]。
sl=atoi(ch);
sell[i]。
je=(long)sell[i]。
dj*sell[i].sl;
}
fclose(fp);
}
void WriteDat()
{
FILE *fp;
int i;
fp=fopen("OUT5.DAT","w”);
for(i=0;i〈100;i++){
printf("%s %s %4d %5d %5d\n”,sell[i]。
dm,sell[i].mc,sell[i].dj,sell[i]。
sl,sell[i]。
je);
fprintf(fp,”%s %s %4d %5d %5d\n",sell[i].dm,sell[i].mc,sell[i]。
dj,sell[i].sl,sell[i].je);
}
fclose(fp);
}
*****************************
题目13(结构体运算题)
已知在文件IN。
DA T中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。
其中:金额=单价*数量计算得出.函数ReadDat()是读取这100个销售记录并存入结构数组sell中。
请编制函数SortDat(),其功能
要求:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT9。
DAT中。
部分源程序存在文件prog1。
c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include 〈stdio。
h〉
#include <mem。
h>
#include <string。
h〉
#include <conio。
h〉
#include 〈stdlib。
h>
#define MAX 100
typedef struct{
char dm[5];/*产品代码*/
char mc[11];/*产品名称*/
int dj;/*单价*/
int sl; /*数量*/
long je; /*金额*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();
void SortDat()
{int i,j;
PRO xy;
for(i=0;i〈99;i++)
for(j=i+1;j〈100;j++)
if(strcmp(sell[i]。
dm,sell[j]。
dm)〉0||strcmp(sell[i]。
dm,sell[j]。
dm)==0&&sell[i]。
je〈sell[j].je)
void main()
{
memset(sell,0,sizeof(sell));
ReadDat();
SortDat();
WriteDat();
}
void ReadDat()
{
FILE *fp;
char str[80],ch[11];
int i;
fp=fopen("IN。
DA T”,”r”);
for(i=0;i<100;i++){
fgets(str,80,fp);
memcpy(sell[i]。
dm,str,4);
memcpy(sell[i]。
mc,str+4,10);
memcpy(ch,str+14,4);ch[4]=0;
sell[i]。
dj=atoi(ch);
memcpy(ch,str+18,5);ch[5]=0;
sell[i]。
sl=atoi(ch);
sell[i].je=(long)sell[i].dj*sell[i]。
sl;
}
fclose(fp);
}
void WriteDat()
{
FILE *fp;
int i;
fp=fopen(”OUT9.DA T",”w");
for(i=0;i〈100;i++){
printf("%s %s %4d %5d %5d\n”,sell[i]。
dm,sell[i]。
mc,sell[i]。
dj,sell[i].sl,sell[i]。
je);
fprintf(fp,"%s %s %4d %5d %5d\n", sell[i]。
dm,sell[i]。
mc,sell[i]。
dj,sell[i]。
sl,sell[i]。
je);
}
fclose(fp);
}
*****************************
★☆题目14(整数统计排序题)
已知数据文件IN.DA T中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的五个数且该数是奇数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DA T文件中。
注意:部分源程序存在文件prog1。
c中。
程序中已定义数组:a[200],b[200],已定义变量:cnt
请勿改动数据文件IN。
DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容.
#include 〈stdio。
h>
#define MAX 200
int a[MAX],b[MAX],cnt = 0 ;
void jsVal()
{int i,j,flag;
for(i=0;i〈MAX—5;i++)
{for(j=i+1;j<=i+5;j++)
if(a[i]>a[j]&&a[i]%2) flag=1;
else {flag=0;break;}
if(flag==1)b[cnt++]=a[i];
}
for(i=0;i〈cnt—1;i++)
if(b[i]>b[j]) {flag=b[i];b[i]=b[j];b[j]=flag;}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen(”in。
dat”, ”r") ;
for(i = 0 ;i 〈MAX ; i++)fscanf(fp,”%d", &a[i]) ;
fclose(fp);
}
void main()
{
int i ;
readDat();
jsVal() ;
printf("满足条件的数=%d\n”, cnt);
for(i = 0 ;i 〈cnt ;i++) printf(”%d ",b[i]);
printf("\n");
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(”out.dat",”w”);
fprintf(fp, "%d\n”, cnt) ;
for(i = 0 ; i 〈cnt ; i++)fprintf(fp, ”%d\n", b[i]) ;
fclose(fp) ;
}
************************
★题目15(整数各位数字运算排序题)
已知数据文件IN.DA T中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:若一个四位数的千位数字上的值小于等于百位数字上的值,百位数字上的值小于等于十位数字上的值,以及十位数字上的值小于等于个位数字上的值,并且原四位数是偶数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT。
DAT文件中。
注意:部分源程序存在文件prog1.c中.
程序中已定义数组:a[200],b[200],已定义变量:cnt
请勿改动数据文件IN。
DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
#include 〈stdio。
h〉
#define MAX 200
int a[MAX], b[MAX], cnt=0;
void jsVal()
{int i,j;
int qw,bw,sw,gw;
for (i=0;i〈MAX;i++)
{qw=a[i]/1000;bw=a[i]%1000/100;
sw=a[i]%100/10; gw=a[i]%10;
if((qw〈=bw)&&(bw<=sw)&&(sw<=gw)&&(a[i]%2==0)) b[cnt++]=a[i];
}
for(i=0;i〈cnt—1;i++)
for(j=i+1;j〈cnt;j++)
if (b[i]〉b[j]){qw=b[i];b[i]=b[j];b[j]=qw;}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen(”in。
dat”,”r");
for(i = 0 ;i < MAX ;i++) fscanf(fp,”%d",&a[i]);
}
void main()
{
int i ;
readDat() ;
jsVal() ;
printf(”满足条件的数=%d\n", cnt) ;
for(i = 0 ; i 〈cnt ; i++)printf(”%d ",b[i]) ;
printf("\n”) ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen(”out.dat",”w”);
fprintf(fp,"%d\n",cnt);
for(i = 0 ;i < cnt ; i++)fprintf(fp,”%d\n", b[i]) ;
fclose(fp);
}
******************************
★☆题目16(字符替换题)
函数ReadDat()实现从文件IN。
DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrCharJR(),其函数的功能是:以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上.最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT8。
DAT中。
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.
部分源程序存在文件prog1.c中.
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
#include 〈stdio.h〉
#include 〈string.h〉
#include 〈conio.h>
char xx[50][80];
int maxline=0;/*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void StrCharJR()
{int i,j;
for(i=0;i〈maxline;i++)
for(j=0;j<strlen(xx[i]);j++)
xx[i][j]+=(xx[i][j]>〉4);
}
void main()
{
clrscr();
if(ReadDat()){
printf("数据文件IN。
DAT不能打开!\n\007”);
return;
}
StrCharJR();
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("OUT8.DAT”,”w”);
for(i=0;i<maxline;i++){
printf(”%s\n”,xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
*************************
☆题目17(亲朋字符替换题)
函数READDA T()实现从文件IN.DA T中读取一篇英文文章存入到字符串数组XX中;请编制函数CHA(),其函数功能是:以行为单位把字符串中的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字符的ASCII值,得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ASCII值加原第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应的位置上。
最后把已处理的字符串逆转后按行重新存入字符串数组XX中,最后调用函数WRITEDA T()把结果XX输出到文件OUT9.DAT中。
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意:部分源程序已给出。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
#include <stdio。
h>
#include <string。
h>
#include <conio.h〉
char xx[50][80];
int maxline = 0 ;/* 文章的总行数*/
int ReadDat(void) ;
void WriteDat(void) ;
void ChA(void)
{int i,j;
char ch;
for(i=0;i<maxline;i++)
{ch=xx[i][0];
for(j=0;j〈strlen(xx[i])—1;j++)
xx[i][j]+=xx[i][j+1];
xx[i][strlen(xx[i])—1]+=ch;
strrev(xx[i]);
}
}
void main()
{
clrscr();
if(ReadDat()){
printf(”数据文件IN。
DAT不能打开!\n\007”);
return ;
}
ChA() ;
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() ;
f p = fopen("OUT9.DA T”, ”w”) ;
for(i = 0 ; i 〈maxline ;i++){
printf("%s\n", xx[i]) ;
fprintf(fp, "%s\n",xx[i]) ;
}
fclose(fp) ;
}
*********************************
☆题目18
函数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 <stdio.h>
#include 〈string。
h〉
#include 〈conio.h>
#include 〈ctype.h>
unsigned char xx[50][80];
int maxline=0;/*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void encryptChar()
{int i,j;
for(i=0;i<maxline;i++)
for(j=0;j〈strlen(xx[i]);j++)
if(xx[i][j]*11%256<=32||xx[i][j]%2==0)continue;
else xx[i][j]=xx[i][j]*11%256;
}
void main()
{
clrscr();
if(ReadDat()){
printf("数据文件ENG。
IN不能打开!\n\007");
}
encryptChar();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
unsigned char *p;
if((fp=fopen(”eng。
in”,”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;
fp=fopen("ps10.dat”,”w");
for(i=0;i〈maxline;i++){
printf(”%s\n",xx[i]);
fprintf(fp,”%s\n”,xx[i]);
}
fclose(fp);
}
*********************************
☆题目19(单词个数统计题)
编写一个函数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 〈stdio。
h>
#include 〈string。
h〉
#include <conio。
h〉
int findStr(char *str,char *substr)
{int i,j,len1,len2,cnt=0,flag;
len1=strlen(str);
len2=strlen(substr);
for(i=0;i〈len1;i++)
{ for(j=0;j〈len2;j++)
if(str[i+j]==substr[j]) flag=1;
else {flag=0;break;}
if(flag==1)cnt++;
}
return cnt;
}
main()
{
char str[81], substr[3];
int n ;
clrscr();
printf(”输入原字符串:”);
printf("输入子字符串:") ;
gets(substr) ;
puts(str);
puts(substr) ;
n=findStr(str, substr);
printf("n=%d\n",n);
ReadWrite();
}
ReadWrite()
{
char str[81], substr[3], ch;
int n,len, i = 0;
FILE *rf, *wf ;
rf = fopen(”in.dat", "r");
wf = fopen("out.dat", ”w”) ;
while(i < 25) {
fgets(str, 80,rf) ;
fgets(substr, 10, rf) ;
len = strlen(substr) - 1 ;
ch = substr[len];
if(ch == ’\n' || ch == 0x1a) substr[len] = 0 ;
n=findStr(str, substr);
fprintf(wf,”%d\n”, n);
i++ ;
}
fclose(rf);
fclose(wf) ;
}
*******************************
★题目20(Fibonacci数列题)
编写函数jsValue,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。
其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n—2)
最后调用函数writeDat()读取50个数据t,分别得出结果且把结果输出到文件out.dat中。
例如:当t=1000时,函数值为:1597。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和写函数writeDat()的内容。
#include 〈stdio.h>
int jsValue(int t)
{ int f0=0,f1=1,fn;
fn=f0+f1;
while(fn<=t)
{f0=f1;
f1=fn;
fn=f0+f1;
}
return fn;
}
main()
{
int n;
n=1000;
printf("n=%d,f=%d\n”,n,jsValue(n));
writeDat();
}
writeDat()
{
FILE *in,*out;
in=fopen(”in.dat”,”r");
out=fopen("out.dat”,"w”);
for(i=0;i〈50;i++){
fscanf(in,"%d",&n);
s=jsValue(n);
printf(”%d\n”,s);
fprintf(out,"%d\n",s);
}
fclose(in);
fclose(out);
}
*******************************
☆题目21(迭代方法求方程题)
下列程序prog1。
c的功能是:利用以下所示的简单迭代方法求方程:cos(x)—x=0的一个实根。
Xn+1=cos(Xn)
迭代步骤如下:
(1)取X1初值为0.0;
(2)X0=X1,把X1的值赋给X0;
(3)X1=cos(X0),求出一个新的X1;
(4)若X0—X1的绝对值小于0。
000001,执行步骤(5),否则执行步骤(2);
(5)所求X1就是方程cos(X)—X=0的一个实根,作为函数值返回.
请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果输出到文件OUT17.DA T中。
部分源程序已给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
#include 〈conio。
h〉
#include <math。
h〉
#include 〈stdio.h〉
float countValue()
{ float x0,x1;
x1=0。
0;
do{x0=x1;
x1=cos(x0);
}while(fabs(x0—x1)>=0.000001);
return x1;
}
main()
{
clrscr();
printf(”实根=%f\n”,countValue());
printf(”%f\n",cos(countValue())-countValue());
writeDat();
}
writeDat()
{
FILE *wf;
wf=fopen(”OUT17。
DAT","w");
fprintf(wf,”%f\n",countValue());
fclose(wf);
}
注:本题在无忧或捷成模拟盘中,需定义double x0,x1;才能通过,据实际上机抽到该题的考生反映,实际上机需按上面解法的定义方能通过,特此说明,供参考.
*******************************
★题目22(平方根问题)
请编写函数countValue(),它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out。
dat中。
例如若n为1000时,函数值应为:s=153.909064。
部分源程序存在文件prog1.c中.。