以文本方式查看主题

-  堕落街论坛  (http://duoluojie.1314179.com.cn:443/index.asp)
--  游戏体育  (http://duoluojie.1314179.com.cn:443/list.asp?boardid=331)
----  数据库三级 求助  (http://duoluojie.1314179.com.cn:443/dispbbs.asp?boardid=331&id=120047)

--  作者:shanf123
--  发布时间:2006/3/21 21:57:00
--  数据库三级 求助

哪位帅哥靓女精通数据库三级的能帮一下小弟啊!

现在好是郁闷啊,在书上找不到解释,很难理解程序啊


--  作者:伊义
--  发布时间:2006/3/21 22:38:00
--  
没有靓女
--  作者:风随月
--  发布时间:2006/3/22 0:02:00
--  

机试的程序吗?

都是很简单的C语言 买一本书看看 我同学考过,题目应该都是书上一样的


--  作者:shanf123
--  发布时间:2006/3/22 11:37:00
--  

对就是上机的 ,

可能我以前学的不好,

现在还不能很好的理解一些程序;

比方说这个 :

/*函数ReadDat()实现从文件ENG.IN中读取一篇英文文章存入到字符串中数组xx中。

请编制函数DelWOrd()分别按行删除空格,标点符号以及10个不区分大小

写的英文单词(you,for,your,on,no,if,the,in,to,all )
余下的单词仍按顺序重新存入数组xx中,
最后调用函数WriteDat()把结果xx输出到文件PS6.OUT中*/
#include"stdio.h"
#include"string.h"
#include"conio.h"
#include"ctype.h"

char WORD[10][10]={"you","for","your","on","no","if","the","in","to","all"};
char xx[50][80];
int maxline=0;/*文章的总行树*/

int ReadDat(void);
void WriteDat(void);

void DelWord(void)
{
int i,j,k,tag;
char word[21],*p;
char str[80];
for(i=0;i<maxline;i++){
memset(str,0,80);
p=xx[i];
j=0;
k=0;
memset(word,0,21);
while(*p){
if(isalpha(*p)){
word[j++]=*p++;
if(*p)continue;
}
tag=1;
for(k=0;k<10&&tag;k++)if(stricmp(word,WORD[k])==0)tag=0;
if(tag)strcat(str,word);
j=0;
memset(word,0,21);
while(*p&&(!isalpha(*p)))p++;
}
strcpy(xx[i],str);
}
}

void main()
{
clrscr();
if(ReadDat()){
printf("数据文件ENG.IN不能打开!\\n\\007");
return;
}
DelWord();
WriteDat();
}

int ReadDat(void)
{ FILE *fp;
int i=0;
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)xx[i][p-xx[i]]=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}

void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("ps6.out","w");
for(i=0;i<maxline;i++){
printf("%s\\n",xx[i]);
fprintf(fp,"%s\\n",xx[i]);
}
fclose(fp);
}
这个好象还正确吧.我读的子函数中的while(!fget(xx[i],80,fp)!=NULL)不理解,

还有在写函数中的printf("%s\\n",xx[i]);

fprintf("%s\\n",xx[i]);

为什么要打印两次,同学说是为了好检查,是吗?


--  作者:shanf123
--  发布时间:2006/3/22 11:39:00
--  

接上面

其中的memset(str,0,80);

0,80,分别代表什么啊 ?

先多谢了啊,呵呵


--  作者:风随月
--  发布时间:2006/3/22 15:32:00
--  

while(!fget(xx[i],80,fp)!=NULL)每下从fp指向的文件读取一行,也就是size为80的数据,放到x[i](一个地址)中间去,这个语句意思就是读取到文件结束为止

fprintf(fp,"%s\\n",xx[i]);的意思并不是输出的意思,它的用法和sprintf相似,意思是将x[i]在"%s\\n"这个格式下输出的结果放入到文件指针fp指向的文件中去,并不输出任何东西.而sprintf第一参数则是一个字符串指针

memset(str,0,80);是一个内存初始化函数,将str的前80个字节放入'0',就是作初始化的意思

以上解释可能有不对的地方 你可以自己去查下资料就知道了,还有国家等级考试三级的题目很容易的,不可能出这些东西给你做,上面这种函数一般是已经给出的,你只需要去使用它们,再加上你自己写的简单数字游戏程序就可以过关了.


--  作者:shanf123
--  发布时间:2006/3/22 18:08:00
--  

谢谢!!!!

谢谢啊 ,起码让我不在害怕他们了;

while(!fgets(xx[i],80,fp)!=NULL){
p=strchr(xx[i],\'\\n\');
if(p)xx[i][p-xx[i]]=0;
i++;
}

这个中的fgets语句和其后的if 语句不好理解;

特别是指针指向的一维数组怎么一下子变成了二维数组了,

可以给些提示吗 ?

再次感谢


--  作者:风随月
--  发布时间:2006/3/23 2:34:00
--  

p=strchr(xx[i],\'\\n\');
它的意思是返回字符串xx[i]中与最后一个\'\\n\'匹配并以它开头的字符串指针给指针p

if(p)xx[i][p-xx[i]]=0;
这句的意思是在换行符的地方结束xx[i]这个字符串,比如xx[i][8]=\'\\n\'这样的话就有xx[i][8]=0;

"特别是指针指向的一维数组怎么一下子变成了二维数组了,

可以给些提示吗 ?"

这句没怎么看懂你的意思   指针就是一个地址的意思,它的具体指向搞清楚了就行了(指针指向的地址),你去看看C语言的书就知道了.这里是指向的x[i]字符串指针中\'\\n\'开头的那个地址.


--  作者:shanf123
--  发布时间:2006/3/29 11:51:00
--  

谢谢朋友们的帮助,我这里还有一个问题

求出4位数中的各位数字之和是奇数的数的个数totCnt

这里有这些描述

for(i=0;i<totNum;i++){

sprintf(num,"%04d",xx[i]);

j=num[0]-48+num[1]-48+num[2]-48+num[3]-48;

if(j%2){

totCnt++;

}

}

这里的sprintf语句不好理解,能给些解释吗 ?


--  作者:shanf123
--  发布时间:2006/3/29 11:54:00
--  

后面紧跟着的j带领的语句也不好理解,

好象有些错误似的,请给些提示