① c语言程序问题,编译成功可却不能运行,这是为什么
这是一个不能再正常的问题了。就像,我拿起了菜刀,为什么切不好薯仔丝一样。
只有熟练的掌握了薯仔丝的切法,方可随心的切出薯仔丝来。
只有熟练掌握了C语言编写某类问题代码的技能,也才能编写出解决这类问题的程序来。
编译成功只能说没有语法错误,就像会用刀切,不会切到手,并不意味着就能切出粗细均匀的薯仔丝来,也就是并不一定能够实现功能。
具体为什么,还需要具体问题具体分析了
② 一个c语言问题,编译通过但不能运行
改好了
在下面已经注释
#include
<math.h>
#include
<stdio.h>
#include
<conio.h>
#include
<stdlib.h>
#include
<time.h>
int
go(){
int
t,mo;
t=(int)(4*rand());
mo=t%4;
return
mo;
}
int
test(int
up,int
down,int
left,int
right,int
t1){
switch
(t1){
case
0:
if(up==1){
return
1;
}
case
1:
if(down==1){
return
1;
}
case
2:
if(left==1){
return
1;
}
case
3:
if(right==1){
return
1;
}
}
return
0;
}
void
main()
{
char
mat[12][12];
int
i,t,tgo,x,y,m,n,sum;
int
up=1,down=1,left=1,right=1;
char
s;
srand((unsigned)
time(NULL));
for(m=1;m<11;m++){
for(n=1;n<11;n++){
mat[m][n]=46;
}
}
mat[1][1]=65;
x=0,y=0;
for
(i=1;i<26;i++){
up=1;
down=1;
left=1;
right=1;
//测试四周是否已走过或是边界,是则对应值取0
if(mat[x-1][y]!=46){
left=0;
}
if(mat[x+1][y]!=46){
right=0;
}
if(mat[x][y-1]!=46){
up=0;
}
if(mat[x][y+1]!=46){
down=0;
}
//如果4个方向都不可以通过,结束循环
sum=up+down+left+right;
if(sum==0){
break;
}
//如果生成的方向不可以行走,就再次循环生成新的方向知道可以通过
do{
t=go();
tgo=test(up,down,left,right,t);
}while(tgo!=1);
switch(t){
case
0:
mat[x][y-1]=65+i;
y=y-1;
break;
case
1:
mat[x][y+1]=65+i;
y=y+1;
break;
case
2:
mat[x-1][y]=65+i;
x=x-1;
break;
case
3:
mat[x+1][y]=65+i;
x=x+1;
break;
}
}
for(m=1;m<11;m++){
for(n=1;n<10;n++){
printf("%c",mat[m][n]);///////这里是%c不是%s
}
printf("%c\n",mat[m][10]);////////这里是%c不是%s
}
s=getchar();
}
③ 为什么C语言程序编译正确但不能执行
因为你的c没有初值,while循环无法进行。另外你的算法也有问题,while循环可改为while(m%n!=0),循环结束后最小公约数时n。