各位牛人请进来帮我解答下关于C语言的小疑问,下午就要三级模拟上机了,急!!!!
今天上午先去模拟了一次上机,是计算机三级网络技术。
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:
在a【】中选出符合条件的数字---那个数字的个,十,百,千四个数字两两组成2个新二位数字,其中一个数的十位是原来四位数的千位,个位是其十位;
另一个新数的十位是原来四位数的个位,个位是其百位。
如果这个四位数组成的两个新数均为素数且都不为零。则把这个四位数从大到小存入数组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;
int isprime(int p)
{
int i=0;
for(i=0;i <p/2;i++)
{
if(p%i==0)
return 0;
else
return 1;
}
}
void jsVal()
{
int g=0,s=0,b=0,q=0;
int m=0,n=0,x=0,y=0,data=0;
int ab=0,cd=0;
for(m=0;m <200;m++)
{
q=a[m]/1000;
b=a[m]%1000/100;
s=a[m]%100/10;
g=a[m]%10;
ab=q*10+s;
cd=g*10+b;
if(isprime(ab)&&isprime(cd)&&ab!=0&&cd!=0)
{
b[cnt]=a[m];
cnt++;
}
}
for(x=0;x <cnt-1;x++)
for(y=x+1;y <cnt;y++)
if(b[x] <b[y])
{
data=b[x];
b[x]=b[y];
b[y]=data;
}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen( "in.dat ", "r " ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d ", &a) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
printf( "满足条件的数=%d\n ", cnt) ;
for(i = 0 ; i < cnt ; i++) printf( "%d ", b) ;
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) ;
fclose(fp) ;
}
我使用数组编写程序时,编译总是出错,系统提示:“Error:Invalid indirection in function jsVal. "如果我坚持用数组实现,那么这个编译错误该如何解决呢?这个报错语句究竟是什么意思?谢谢各位指教!
系统老是提示我“b[cnt]=a[m]”;这样的程序行有错误。
[解决办法]
似乎你定义了一个全局变量b[]
在函数jsVal内部又有个内部变量b,在这里建议你把内部变量的名字换一个!
不然你对b[]的操作可能会有问题!
[解决办法]
你很多代码都有语法问题
#include <stdio.h> ;//多个逗号
#define MAX 200
int a[MAX], b[MAX], cnt=0;
int isprime(int p)
{
int i=0;
for(i=0;i <p/2;i++)
{
if(p%i==0)
return 0;
else
return 1;
}
//缺少返回语句
}
void jsVal()
{
int g=0,s=0,b=0,q=0;//b重叠
int m=0,n=0,x=0,y=0,data=0;
int ab=0,cd=0;
for(m=0;m <200;m++)
{
q=a[m]/1000;
b=a[m]%1000/100;//b
s=a[m]%100/10;
g=a[m]%10;
ab=q*10+s;
cd=g*10+b;//b
if(isprime(ab)&&isprime(cd)&&ab!=0&&cd!=0)
{
b[cnt]=a[m];
cnt++;
}
}
for(x=0;x <cnt-1;x++)
for(y=x+1;y <cnt;y++)
if(b[x] <b[y])
{
data=b[x];
b[x]=b[y];
b[y]=data;
}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen( "in.dat ", "r " ;//少个括号
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d ", &a) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
printf( "满足条件的数=%d\n ", cnt) ;
for(i = 0 ; i < cnt ; i++) printf( "%d ", b) ;
printf( "\n " ;//少括号
writeDat() ;
}
writeDat()//返回类型未写,并且此函数需要放在main前定义
{
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) ;
fclose(fp) ;
}
[解决办法]
你的issprime 函数好象就有问题,标识符建议不要重复
[解决办法]
你的变量有问题 b和数组名相同,把变量名改程另外一个
[解决办法]
issprime 结果不对!重写