C语言语句解释,高手请进!

已知数据文件IN。DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一个函数jsVal(),其功能是:把前位数字和十位数组重新组成一个新的二位数(新二位数的十位数字是原四位数的千位数字,新二位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的二位数(新二位数的十位数字是原四位数的个位数字,新二位数的个位数字是原四位数的百位数字),如果新组成的两个二位数均是素数且新数的十位数字均不为零,则将满足此条件是四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT。DAT文件中。

注意:部分原程序已经给出。
程序中已定义数组:a[200] , b[200];已定义变量cnt。
#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0;
int isprime(int m)
{
int i;
for (i=2; i<=m/2; i++)
if (m%i == 0)
return 0;
return 1;
}
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;
if (thou==0 || data==0)
continue;
ab = 10*thou+ten;
cd = 10*data+hun;
if (isprime(ab) && isprime(cd))
{
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;
}
}
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 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);
}
void main()
{
int i;
readDat();
jsVal();
printf("满足条件的数=%d\n", cnt);
for (i=0; i<cnt; i++)
printf("%d ", b[i]);
printf("\n");
writeDat();
}

请帮我解释下 题目要求的编写的部分的代码好吗,拜托了!

void jsVal()
{
int i, thou, hun, ten, data, j;
int ab, cd;
for (i=0; i<200; i++)
{
thou = a[i]/1000; //千位数字,因为是整形数,4位数除以1000取整就是千位上的数字。 下同。
hun = a[i]%1000/100; // 百位数字,这里先用%求余,如:6543%1000余543再除以100取整得到的是百位数字5.
ten = a[i]%100/10; //十位数字
data = a[i]%10; //个位数字
if (thou==0 || data==0) //因为千位数字,和个位数字是新数十位,要求不为0,才执行下面ab,cd的赋值;
continue;
ab = 10*thou+ten; //新数ab
cd = 10*data+hun; //新数cd
if (isprime(ab) && isprime(cd)) //调用isprime 检查ab,cd是否是素数,是,执行下面{}内语句。
{
b[cnt] = a[i]; //把这个合格的时候的a[i]值存入 数组b[]中。
cnt++; // 作为累加器,也是b数组的下标。
}
} //到此200个数都筛选完。
for (i=0; i<cnt-1; i++) //cnt 次循环
for (j=i+1; j<cnt; j++) //cnt-i次循环
if (b[i] < b[j]) //看哪个大?
{ 如果b[j]大
data = b[i]; //
b[i] = b[j]; //
b[j] = data; //三步,b[i],b[j]交换
} //循环完了,得到从大到小的数组。
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-04-05
这个ms是计算机等级考试的题目,如果这个你还看不懂的话,你很有必要去借一本C语言的基本知识的书来看看。

编程高手请进!(C语言)
printf("\\n NEXT?(Y\/N):");\/*选择是否重新游戏*\/ scanf("%c",&yes);} } 2.include <stdio.h> void main(){ int gj, mj, xj, t1, t2;for (gj=1; gj<=20; gj++){ for (mj=1; mj<34; mj++){ xj=100-gj-mj;t1=xj%3;t2=5*gj+3*mj+xj\/3;if (t1==0&&t2==100...

c语言高手请进来...
void copy(char *f,char *t);int main(){ char a[]="iamaman"; \/\/ 要改成数组,原先那样定义的是指向常量的指针,是不允许修改的。char b[]="youareaman"; \/\/同上 printf("a=%s \\nb=%s \\n",a,b);copy(a,b);printf("a=%s b=%s ",a,b);getchar(); \/\/改成getchar ...

C语言语句解释,高手请进!
{ int i, thou, hun, ten, data, j;int ab, cd;for (i=0; i<200; i++){ thou = a[i]\/1000; \/\/千位数字,因为是整形数,4位数除以1000取整就是千位上的数字。 下同。hun = a[i]%1000\/100; \/\/ 百位数字,这里先用%求余,如:6543%1000余543再除以100取整得到的是百位数字...

C语言高手请进啊,高分哦,详细的解释!!!
第一题 考 -- ++ 运算符优先级,以及 c?a:b 运算 翻译成中文 a= b(9)自减 判断b(8)是否等于d(8) d自加变成9 判断成功执行前面语句 d自加变成10 所以a=10 第二题 考 条件运算 判断成功 结果为1 不成功为0 a>b不成功 为0 m为0 c>d不成功 ...

c语言高手请进来!
int i=-1;printf("%d,%o\\n",i,i)上面那大哥说的差不多了,只是%d是表示10进制的,%o是表示8进制的,关于在内存中怎么存贮转化你可以参考下清华大学出版社的 计算机基础,。大一的学生用的。8进制的177777转化成10进制并不是-1,这和在内存中的存储有关系,具体说太复杂了,你去自己看下吧。

C语言高手请进~~~
static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},这里定义了一个 结构数组a ,并且将其初始化了,其中a[0]={1,&a[1]},a[1]={2,&a[2]} a[2]={3,&a[0]},后面ptr = &a[1];就是让ptr指向a[1],所以ptr的值就是{2,&a[2]},也就是ptr->i1=2,答案d又...

高分C语言问题~~·高手请进
A[n]中,n代表有多少堆果子,A中的元素代表各堆的果子数目 int getValue(int A[]){ 初始 int S=0 1. (数组A)n个数字从小到大排序 (例如:1,2,9)2. 取上步中最小的两个数相加之和为一个M , S=S+M 3. 数组A中除去最小的两个数,然后将M加进去形成一个新数组A元素个数为 n=n-1...

c高手请进,我一个礼拜都没解决!求救!!
(1)C中最后不要用goto语句,很容易出问题;(2)为什么要转换成浮点数呢,换成整数就可以了 (3)代码太不规范,也太多了,根据你的要求,根本用不了这么复杂,我自己写了个,你自己看看吧 include<stdio.h> include<string.h> void main(){ int i,len,sum,n;char str[100];while(1){ ...

c语言高手请进
迷糊了,你说的应该是数据输出宽度吧。比如这样的输出语句:printf("%5d",x);设置输出宽度为5,如果数据是123456,宽度超过5,就按原来的宽度输出,如果是123,宽度为3,不足5,就左边补空格。如果是%-5d就是左对齐,右边补空格。

C语言高手请进,结构体里的元素前面有一点“.”代表什么意思?比如 .go...
“.”是访问成员的意思。优先级同“()”。 例:"对象.成员" 或者"对象->成员"都是表示访问对象的某个成员的意思(读写成员)。也就是访问某个成员的变量。这里只是省略不写了。也可以写上atag_tcc_entry.output = 0;一样的。

相似回答
大家正在搜