我是在編一個求n!的問題!請大家看看我的程序,我是新手,所以程序運行了一半,就運行不下去了!#include "stdio.h"main(){workout();decide();}workout(){ int n,i;double p;printf("***********************************求n!的值***********************************\n");printf("由于技術水平,暫只能求到 170! 敬請原諒!\n");printf("請輸入n的值:");scanf("%d",&n);while(n>170) {printf("數據超出范圍,請重新輸入:");scanf("%d",&n);}p=1.0;for(i=1;i<=n;i++)p=p*i;printf("%d",n);printf("!=%f\n",p);}decide(){char d;printf("你是否要繼續求值?如果是請按【y】 如果你想退出,請按【n】!\n");scanf("d=%1c",&d);if (d=='y') {clrscr();workout();decide();}if (d=='n') {clrscr();printf("歡迎您下次使用!^_^");}while(d!='y'||'n') {printf("非法指令,請重新輸入:");scanf("%c",d);}}謝謝大家了~~~~主要是decide()這個函數寫不來了!decide()這個函數的作用是:有用戶決定在算完后是繼續還是留。謝謝了!我期待高手們的指教?。?!
熱心網友
當需要從鍵盤輸入一個字符時,最好用getch,而不用printf就象其他幾位說的,你的程序結構太亂,應該把計算和詢問是否繼續兩項功能分開。我把decide改成了返回整型值的函數,當用戶選擇繼續是返回1,否則返回0,這樣main函數就比較簡單和清晰。下面的程序經過驗證,在turbo c 3。0中是可行的#include "stdio。h"void workout(){int n,i;double p;printf("***********************************求n!的值***********************************\n");printf("由于技術水平,暫只能求到 170! 敬請原諒!\n");printf("請輸入n的值:");scanf("%d",&n);while(n170){printf("數據超出范圍,請重新輸入:");scanf("%d",&n);}p=1。0;for(i=1;i<=n;i++)p=p*i;printf("%d!=%f",n,p);}int decide(){char d;printf("你是否要繼續求值?如果是請按【y】 如果你想退出,請按【n】!\n");d = getch();/*scanf("%c",&d);*/while(d != 'y' && d != 'n') { printf("非法指令,請重新輸入:"); d = getch();}clrscr();if (d=='y') return 1;printf("歡迎您下次使用!^_^");return 0;}void main(){do workout(); while (decide());}。
熱心網友
while(d!='y'||d!='n')
熱心網友
#include "stdio。h"main(){workout();decide();}workout(){ int n,i;double p;printf("***********************************求n!的值***********************************\n");printf("由于技術水平,暫只能求到 170! 敬請原諒!\n");printf("請輸入n的值:");scanf("%d",&n);while(n170) {printf("數據超出范圍,請重新輸入:");scanf("%d",&n);}p=1。0;for(i=1;i<=n;i++)p=p*i;printf("%d",n);printf("!=%f\n",p);}decide(){char d;printf("你是否要繼續求值?如果是請按【y】 如果你想退出,請按【n】!\n");scanf("d=%1c ",&d);if (d=='y') {clrscr();workout();decide();}if (d=='n') {clrscr();printf("歡迎您下次使用!^_^");}while(d!='y'||d!='n') {printf("非法指令,請重新輸入:");scanf("%c ",d);}}你看看這個行不行,還有你要記住有時候C%后面要加一個空格,要不有時候會有莫名其妙的錯誤。還有盡量縮進寫代碼,不要一行寫好幾個命令。這看上去像考試題,故意讓人看不清楚。
熱心網友
你的函數的結構層次沒有劃分清楚,你的邏輯很混亂,建議你先要花上框圖在寫程序,不要這樣寫了再來排錯,對鍛煉你的邏輯能力很有好處。main(){u=1;while u=1;do decide();workout();}workout(){ int n,i;double p,u;if u thenprintf("***********************************求n!的值***********************************\n");printf("由于技術水平,暫只能求到 170! 敬請原諒!\n");printf("請輸入n的值:");scanf("%d",&n);while(n170) {printf("數據超出范圍,請重新輸入:");scanf("%d",&n);}p=1。0;for(i=1;i<=n;i++)p=p*i;printf("%d",n);printf("!=%f\n",p);else return 0;}decide (){if 首次使用 then u=1;else {char d;printf("你是否要繼續求值?如果是請按【y】 如果你想退出,請按【n】!\n");scanf("d=%1c",&d);if (d=='y') {clrscr();u=1;}if (d=='n') {clrscr();printf("歡迎您下次使用!^_^");u=0;}while(d!='y'||'n') {printf("非法指令,請重新輸入:");u=0;scanf("%c",d);}}因為你的decide 在現實生活中必須在workout 前,這樣子就不用分很多的情況討論了,也是不容易造成邏輯混亂,你沒有處理好時序問題。不好意思,好像我以前也是改錯了,妙了吧,將U作為決定是否執行求階乘的開關,并作為workout的參數傳遞給workout。大家不要笑我了,只是不愿意玩真格的了,要不然的話,流血漂櫓。能成為你們的笑話,真的時間不容易的事。,就是哈,我又錯了。沒有能夠實現循環,因為主體結構是循環結構,我也是沒有畫框圖,現在請指正。我感覺到了好像還有邏輯錯誤,while 的條件判斷好像被滯后了一次。