首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

各位牛人请进来帮小弟我解答下关于C语言的小疑问,下午就要三级模拟上机了,

2012-03-22 
各位牛人请进来帮我解答下关于C语言的小疑问,下午就要三级模拟上机了,急!!!!今天上午先去模拟了一次上机,

各位牛人请进来帮我解答下关于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 结果不对!重写

热点排行