求助大神c语言大神,!!!求详细过程??八题九题!!!

这个题怎么做?求C语言大神!!_百度知道
这个题怎么做?求C语言大神!!
func(int i,int n){
return (i&n && printf(&%d\n憨讥封客莩九凤循脯末&,i)) && !p(i+1,n)
|| printf(&%d\n&,i);}问题:解释这个函数及其输出值
提问者采纳
若i&=n, 根据短路性质,(i&n && printf(&%d\n&,i)) && !p(i+1,n)为0,printf(&憨讥封客莩九凤循脯末%d\n&,i)不执行,!p(i+1,n)也不执行,执行最后的printf(&%d\n&,i),输出 i 的值,printf返回输出的字符个数,应该不会出错,因此整个表达式的值为真,因此返回非零值。当i & n时,(i&n && printf(&%d\n&,i)) 输出i的值,表达式的值为真, 接着判断!p(i+1,n)的值,这个函数你给的信息里无法获取,要么返回假 ,要么返回真,当!p(i+1,n)返回假时, 执行printf(&%d\n&,i),再次输出i的值,整个表达式的值为真,因此函数返回非零值当!p(i+1,n)返回真时, 短路printf(&%d\n&,i),整个表达式的值为真,因此函数返回非零值。综上所述,由于printf在这里一般不出错,因此函数最终基本都是返回非零值。
提问者评价
其他类似问题
为您推荐:
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁跪求教C语言大神,关于八数码问题的,如果知道恳请点进来,万谢_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:456,397贴子:
跪求教C语言大神,关于八数码问题的,如果知道恳请点进来,万谢收藏
这个程序没结果,不知道哪里出了错误,#include
&stdlib.h&#include
&stdio.h&typedef struct Node {
int num[9]; //棋盘状态 //不在位的数目 h(n)
struct Node *
struct Node *
struct Node *}numN
/* ---------- end of struct numNode ---------- */int origin[9]; //棋盘初始状态int target[9]; //棋盘目标状态int numNode_num,total_numNode *open,* //Open表和Close表numNode *create_numNode(){
return (numNode *)malloc(sizeof(numNode));}numNode *open_getfirst(numNode *head);void open_add(numNode *head,numNode *item);void close_add(numNode *head,numNode *item);int expand(numNode *item);int print_result(numNode *item); //打印结果numNode *copy_numNode(numNode *orgin);char isNewNode(numNode *open,numNode *close,int num[9]);
//是否在Open表或Close表中void print_num(int num[9]); //打印棋盘状态int diff(int num[9]); //求不在位棋子的个数void init(); //初始化,获得棋盘初始状态和目标状态void swap(int *a,int *b);int operate(int num[],int op);void free_list(numNode *head);void main (){
//初始化Open表和Close表
open=create_numNode();
close=create_numNode();
open-&pre=open-&next=close-&pre=close-&next=NULL;
init(); //由用户输入初始和目标状态
//初始化初始节点
numNode *p1;
p1=create_numNode();
p1-&parent=NULL;
for ( i=0; i&9; i++)
p1-&num[i]=origin[i];
open_add(open,p1);
p1=open_getfirst(open);
while (p1!=NULL){
close_add(close,p1);
if(expand(p1)==0)free(p1);
p1=open_getfirst(open);
printf(&No solution!\n&);}/* ---------- end of function main ---------- */void init ( ){
printf(&请输入初始状态:\n&);
char temp[10];
scanf(&%s&,&temp);
for ( i=0;i&9 && temp[i]-*0*&=0 && temp[i]-*0*&=8; i++)
origin[i]=temp[i]-*0*;
printf(&请输入目标状态:\n&);
scanf(&%s&,&temp);
for ( j=0; j&9 && temp[j]-*0*&=0 && temp[j]-*0*&=8; j++)
target[j]=temp[j]-*0*;
if ( i==9&&j==9)
/* ----- end of function init ----- */void open_add(numNode *head,numNode *item)//向Open表中按序插入新节点{
numNode *p;p=while(p-&next!=NULL){p=p-&}item-&next=p-&item-&pre=p;p-&next=}
/* ----- end of function open_insert ----- */numNode *open_getfirst (numNode *head)//返回第一项,并从Open表中删除{
numNode *p;
if ( head-&next == NULL )
return NULL;
head-&next=p-&
if ( p-&next != NULL )
p-&next-&pre=
p-&pre=NULL;
p-&next=NULL;}
/* ----- end of function open_getfirst ----- */void close_add(numNode *head,numNode *item) //向Close表中插入新节点{
item-&next=head-&
item-&pre=
head-&next=
if ( item-&next!=NULL )
item-&next-&pre=
/* ----- end of function close_append ----- */int expand (numNode *p1) //扩展节点{
numNode * p2;
for ( op=1; op&=4; op++)
p2=copy_numNode(p1);
operate(p2-&num,op);
if(isNewNode(open,close,p2-&num)==*N*)
p2-&parent=p1;
p2-&diffnum=diff(p2-&num);
if(p2-&diffnum==0)
total_step=print_result(p2);
printf(&Total step: %d\n&,total_step);
free_list(open);
free_list(close);
numNode_num++;
open_add(open,p2);
return 0;}
/* ----- end of function expand ----- */int operate(int m[], int op){
while (m[blank]!=0 && blank&9 )
if (blank==9)
switch (op) {
case 1: /* up */
if (blank&2)
swap(m+blank,m+blank-3);
case 2: /* down */
if (blank&6)
swap(m+blank,m+blank+3);
case 3: /* left */
if (blank!=0 && blank!=3 && blank!=6)
swap(m+blank,m+blank-1);
case 4: /* right */
if (blank!=2 && blank!=5 && blank!=8)
swap(m+blank,m+blank+1);
default : return 1;
return 0;}void swap(int *a, int *b){
*b=c;}numNode *copy_numNode (numNode *origin){
numNode *p;
p=create_numNode();p-&diffnum=origin-&
for ( i=0; i&9; i++)
(p-&num)[i]=(origin-&num)[i];
/* ----- end of function copy_numNode ----- */int diff (int num[9]){
int i,diffnum=0;
for(i=0;i&9;i++)
if(num[i]!=target[i])
diffnum++;}
/* ----- end of function diff ----- */char isNewNode (numNode *open,numNode *close,int num[9]){
numNode *p;
while ( p!=NULL )
for ( i=0; i&9; i++)
if(p-&num[i]!=num[i])
return *O*; //Open
while ( p!=NULL )
for ( i=0; i&9; i++)
if(p-&num[i]!=num[i])
return *C*; //Close
return *N*;}
/* ----- end of function isNewNode ----- */void free_list (numNode *head){
numNode *p,*q;
while ( p!=NULL )
free(head);}
/* ----- end of function free_list ----- */voidprint_num (int num[9]){
for ( i=0; i&9; i++)
printf(&%d\t&,num[i]);
if((i%3)==2)
printf(&\n&);
}}/* ----- end of function print_num ----- */int print_result ( numNode *item){
numNode *p;
if(p!=NULL)
step=print_result(p-&parent);
printf(&\nStep %d:\n&,step+1);
print_num(p-&num);
return step+1;
return -1;
这是要实现的功能
main函数缺少东西
男生没有主动找女生,那是说明他是真的不想理她了。女生没有主动找男生,是因为在等他找她。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或求c语言大神!!!_长安大学吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:185,877贴子:
求c语言大神!!!收藏
第三题不会啊。。。求大神指导!!!
大学生们注意啦!一大批流量来袭!现办理4G飞享套餐,每月返1GB,畅刷不停!
课程设计?
数组就可以实现,顺序表、链表也行,创个结构体,包含那些信息;数组的话加个count,记录已经添加的线路的数目;每个feature就是数组或者线性表的基本操作。看数据结构
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或大神,c语言编程题,求解!!!_百度知道
大神,c语言编程题,求解!!!
其他类似问题
为您推荐:
其他1条回答
用遍历就行了
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 求助大神这是什么歌6 的文章

 

随机推荐