⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 南开上机100题.txt

📁 C学习课件,非常非常好的一个学习课件
💻 TXT
📖 第 1 页 / 共 5 页
字号:
void main()
{ int i ;
readDat() ;
jsVal() ;
printf("满足条件的数=%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
printf("\n") ;
writeDat() ;
system("pause");
}

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) ;
}

题目29:已知数据文件IN.DAT中存有200个四位数, 并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字), 以及把个位数字和百位数字组成另一个新的十位数cd (新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字), 如果新组成的两个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定义数组: a[200], b[200], 已定义变量: cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
void jsVal() /*标准答案*/
{int I,thou,hun,ten,data,j;
int ab,cd;
for(I=0;I<200;I++)
{thou=a[I]/1000; hun=a[I]%1000/100;
ten=a[I]%100/10; data=a[I]%10;
ab=10*thou+ten; cd=10*data+hun;
if ((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&ab!=0&&cd!=0)
{b[cnt]=a[I];cnt++;}
}
for(I=0;I<cnt-1;I++)
for(j=I+1;j<cnt;j++)
if(b[I]<b[j])
{data=b[I]; b[I]=b[j];b[j]=data;}
}

PROG1.C
#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0;

void jsVal()
{
}

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() ;
system("pause");
}

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) ;
}

题目30:已知数据文件IN.DAT中存有200个四位数, 并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 依次从数组a中取出一个四位数,如果该数连续小于该四位数以后的5个数且该数是偶数, 则统计出满足此条件的个数cnt, 并把这些四位数按从小到大的顺序存入数组b中。 并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定义数组: a[200], b[200], 已定义变量: cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
void jsVal() /*标准答案*/
{int I,j,flag=0;
for(I=0;I<MAX-5;I++)
{for(j=I+1;j<=I+5;j++)
{if(a[I]<a[j])
flag=1;
else flag=0;
if(a[I]%2!=0)
flag=0;
if (flag==0)
break;}
if(flag==1) {b[cnt]=a[I];cnt++;}
}
for(I=0;I<cnt-1;I++)
for(j=I+1;j<cnt;j++)
if(b[I]>b[j])
{flag=b[I];b[I]=b[j];b[j]=flag;}
}

PROG1.C
#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0;

void jsVal()
{
}

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() ;
system("pause");
}

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) ;
}

 

----------------------------------------------=============================================================================>

31-40:
题目31:已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT6.DAT中。
注意: 部分源程序存放在PROG1.C中。
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
----------------------------------
void SortDat() /*标准答案*/
{int I,j;
PRO xy;
for(I=0;I<99;I++)
for(j=I+1;j<100;j++)
if(sell[I].je<sell[j].je)
{xy=sell[I]; sell [I]=sell[j]; sell[j]=xy;}
else if(sell[I].je==sell[j].je)
if(strcmp(sell[I].dm,sell[j].dm)<0)
{xy=sell[I];sell[I]=sell[j];sell[j]=xy;}
}

PROG1.C
#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()
{
}

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;}
fclose(fp);}
void WriteDat(void)
{FILE *fp;
int i;
fp=fopen("OUT4.DAT","w");
for(i=0;i<100;i++){
fprintf(fp,"%s %s %4d %5d %101d\n", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}
fclose(fp);}

题目32:已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从大到小进行排列, 若产品名称相同, 则按金额从小到大进行排列. 最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT7.DAT中。
注意: 部分源程序存放在PROG1.C中。
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
----------------------------------
void SortDat() /*标准答案*/
{int I,j;
PRO xy;
for(I=0;I<MAX-1;I++)
for(j=I+1;j<MAX;j++)
if(strcmp(sell[I].mc,sell[j].mc)<0)
{xy=sell[I]; sell [I]=sell[j]; sell[j]=xy;}
else if(strcmp(sell[I].mc,sell[j].mc)==0)
if(sell[I].je>sell[j].je)
{xy=sell[I];sell[I]=sell[j]; sell[j]=xy;}
}

PROG1.C
#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()
{
}

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;}
fclose(fp);}
void WriteDat(void)
{FILE *fp;
int i;
fp=fopen("OUT7.DAT","w");
for(i=0;i<100;i++){
fprintf(fp,"%s %s %4d %5d %101d\n", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}
fclose(fp);}

题目33:请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。计算方差的公式如下:totfc=1/N∑(xx[i]-ave1)2
设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。
原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)
注意:部分源程序已给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
------------------------------
int ReadDat(void) /*标准答案*/
{FILE *fp;
int I,j;
if((fp=fopen(""IN.DAT"",""r""))==NULL) return 1;
for(I=0;I<100;I++)
{for(j=0;j<10;j++)
fscanf(fp, ""%d,"", &xx[I*10+j]);
fscanf(fp, ""'n"");
if(feof(fp)) break;}
fclose(fp);
return 0;}
void Compute(void)
{int I, yy[MAX];
for(I=0;I<1000;I++)
if(xx[I]%2){odd++;ave1+=xx[I]; }
else{even++;ave2+=xx[I]; yy[even-1]=xx[I];}
ave1/=odd;
ave2/=even;
for(I=0;I<even;I++)
totfc+=(yy[I]-ave2)*(yy[I]-ave2)/even;
}
或者:
int ReadDat(void)
{ int i;FILE *fp;
if((fp=fopen("IN.DAT","r"))==NULL) return 1;

for(i=0;i<MAX;i++)
{ fscanf(fp,"%d,",&xx[i]);
if((i+1)%10==0)
fscanf(fp,"\n"); }

fclose(fp);return 0;
}

void Compute(void)
{ int i;
for(i=0;i<MAX;i++)
if(xx[i]%2) { odd++; ave1+=xx[i]; }
else { even++; ave2+=xx[i]; }
ave1/=odd; ave2/=even;
for(i=0;i<MAX;i++)
if(xx[i]%2==0) totfc+=(xx[i]-ave2)*(xx[i]-ave2);
totfc/=even;
}


PROG1.C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000

int xx[MAX],odd=0,even=0;
double aver=0.0,totfc=0.0;
void WriteDat(void);

int ReadDat(void)
{ int i;
FILE *fp;
if((fp=fopen("IN.DAT","r"))==NULL) return 1;
/* */
fclose(fp);
return 0;
}

void Compute(void)
{
}

void main()
{
int i;

for(i=0;i<MAX;i++)xx[i]=0;
if(ReadDat()){
printf("数2据文件IN.DAT不能打开!\007\n");
return;
}
Compute();
printf("ODD=%d\nOVEN=%d\nAVER=%1f\nTOTFC=%lf\n",odd,even,aver,totfc);
WriteDat();
}

void WriteDat(void)
{FILE *fp;
int i;

fp=fopen("OUT.DAT","w");
fprintf(fp,"%d\n%lf\n%lf\n%lf\n",odd,even,aver,totfc);
fclose(fp);
}

题目34:下列程序的功能是:选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数CNT以及这些素数值的和SUM。请编写函数COUNTvalue()实现程序要求,最后调用函数WRITEDAT()把结果CNT和SUM输出到文件OUT.DAT中.
注意:部分源程序已给出。
请勿改动主函数main()和函数readwriteDAT()的内容。
--------------
类型:素数。
void countvalue() /*标准答案*/
{int I,j,half,hun,ten,data;
for(I=101;I<1000;I++)
{hun=I/100;
ten=I%100/10;
data=I%10;
if(hun==(ten+data)%10)
{half=I/2;
for(j=2;j<half;j++)
if(I%j==0) break;
if(j>=half)
{cnt++;sum+=I;} } }
}
或者:
int SS(int m)
{ int i,k=1;
for(i=2;i<m/2;i++)
if(m%i==0) k=0;
return k; }

void countvalue()
{ int i,a,b,c;
for(i=100;i<1000;i++)
{ if(SS(i))
{ a=(i%100)/10;
b=i%10;
c=i/100;
if((a+b)%10==c)
{ cnt++;
sum+=i; } } }
}

PROG1.C
#include <stdio.h>

int cnt, sum ;

void countvalue()
{
}

void main()
{ cnt = sum = 0 ;
countvalue() ;
printf("素数的个数=%d\n", cnt) ;
printf("满足条件素数值的和=%d", sum) ;
writeDAT() ;
system("pause");
}

writeDAT()
{ FILE *fp ;
fp = fopen("bc10.out", "w") ;
fprintf(fp, "%d\n%d\n", cnt, sum) ;
fclose(fp) ;
}

题目35:某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1.
下列程序的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn<M且Sn+1>=M,这里Sn=A1+A2+...+An,
并依次把n值存入数组单元b[0],b[1]和b[2]中,请编制jsvalue()函数来实现此功能, 最后调用函数writeDat()把数组b[]中的值输出到out.dat文件中。
注意: 部分源程序存在文件PROG1.C文件中。
请勿改动主函数main()和写函数writeDat()的内容。
-------------------------
void jsvalue() /*标准答案*/
{int a1=1,a2=1,n=1,an;
int sum0,sum;
sum0=a1+a2;
while(1)
{an=a1+a2*2;
sum=sum0+an;
a1=a2; a2=an; n++;
if (sum0<100&&sum>100) b[0]=n;
if (sum0<1000&&sum>1000) b[1]=n;
if (sum0<10000&&sum>10000) {b[2]=n; break;}
sum0=sum;
}
}
jsvalue()
{int a1=1,a2=1,a12,sn,k=2;
sn=a1+a2;
while(1)
{a12=a1+2*a2;
if(sn<100&&sn+a12>=100) b[0]=k;
if(sn<1000&&sn+a12>=1000) b[1]=k;
if(sn<10000&&sn+a12>=10000) {b[2]=k;break;}
sn=sn+a12;
a1=a2;a2=a12;
k++;
}
}


PROG1.C
#include <stdio.h>
int b[3];

void jsvalue() 
{
}

main()
{jsvalue();
printf("M=100,n=%d\nM=1000,n=%d\nM=10000,n=%d\n",b[0],b[1],b[2]);
writeDat(); }

writeDat()
{FILE *fp;
fp=fopen("out.dat","w");
fprintf(fp,"%d\n%d\n%d\n",b[0],b[1],b[2]);
fclose(fp); }

题目36:函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS6.DAT中。
替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -