① 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。