![]() |
有兩題作業點疑問
7. 輸入資料個數 n ,及 n 筆整數資料, 求出各資料平方的總和.
測試資料: (1) 3 1 2 3 印 1*1+2*2+3*3=14 (2) 5 1 -1 2 -2 0 8. 連續輸入整數資料, 以 999 結束, 求出平均值(浮點數). 測試資料: (1) 1 2 4 999 印 2.333333 (2) 5 -4 3 -2 -1 999 這是我目前寫的(第7) int x,m,n,y,i,l; printf("輸入幾筆資料:"); scanf("%d",&m); printf("輸入幾個數:"); scanf("%d",&n); for(l=1;l<=m;l++) { x=0; for(i=1;i<=n;i++) { printf("input:"); scanf("%d",&x); } } system("PAUSE"); return 0; 我不知道要怎麼把輸入的數字平方並相加 第8題相加後取平均的部份也是不會寫? 麻煩會的大大教一下,謝謝 |
數字平方 直接自己乘自己 就好了
先 printf("輸入幾筆資料:"); scanf("%d",&n); 來得知 資料個數 n (也就是迴圈數) 再用 for 迴圈包含 輸入 n 筆整數資料 + 運算 運算部分要使用一個累積用的變數 //以下個人將 for 改成 do{~}while(); 來實作 #include <cstdlib> #include <iostream> //#include <math.h> using namespace std; int main(int argc, char *argv[]) { int n,num; long total=0; printf("輸入幾筆資料:"); scanf("%d",&n); printf("\nStart input...\n"); do{ scanf("%d",&num); num=num*num; total=total+num; n--; //printf("%d",n); }while(n>0); printf("\nTotal= %ld\n",total); system("PAUSE"); return EXIT_SUCCESS; } To "相加後取平均" 就是 total/n 此時 total 可以用 double printf("%lf",total); 雙精度浮點數 %lf,對應 double 長整數 %ld,對應 long |
這幾行不太懂
int main(int argc, char *argv[]) //#include <math.h> //printf("%d",n); 我記得//不是註解用的嗎,程式部會去執行 |
引用:
懶得刪除而已 :bj375mg: 因為是用 Dev-C++ 的建立新專案方式做出模版 所以才有較詳細的 int main(int argc, char *argv) 你也可以改成 main() 原本說是否有 sqr 的數學涵式 所以引入 #include <math.h> 結果 math.h 裡面好像沒有這個的說... :dcft689kj∼懶得刪除 直接註解化 |
喔,原來如此,
我的8題寫出來了,不過有地方錯誤,不知該怎麼改 #include <stdio.h> #include <stdlib.h> main() { int a,m; float b; a=0; m=0; while(a!=999) { b+=a; m++; printf("請輸入數值:"); scanf("%d",&a); } printf("平均直=%f",b/m); system("PAUSE"); return 0; } 我輸入3個數後,在輸入999讓他結束 但是他會把999那次也算進去?? |
改成
do{ }while(a!=999); |
引用:
|
#include <stdio.h>
#include <stdlib.h> main() { int a,m; float b=0; //要養成給初值的動作 a=0; m=-1; //因為do迴圈一開使就 m++ 使 m=1, //當輸入3組數字時 又加上 999 就變成 m=4 //所以改成m=-1或改成下面藍字 do{ b=b+a; m++; printf("請輸入數值:"); scanf("%d",&a); }while(a!=999); b=b/(float)m; //呼應前面 ...b=b/(float)(m-1); printf("平均直=%.0f",b); system("PAUSE"); return 0; } |
可是這題怎麼不會??
#include <stdio.h> main() { int i; float score, sum; sum = 0.0; i = 0; printf("Enter next score (negative to quit ) : "); scanf("%f",&score); while (score >= 0) { sum += score; i++; printf("Enter next score (negative to quit ) : "); scanf("%f",&score); } printf("Total %d scores counted\n",i); printf("Total score : %8.2f \n",sum); printf("Average score : %8.2f \n",sum/i); } |
您那題可以說是標準模式 (有上過正統程式設計老師都會這樣教/寫)
在 迴圈外先執行一次 printf("Enter next score (negative to quit ) : "); scanf("%f",&score); 做輸入 接著迴圈內在執行同樣的 "輸入" 因為外面已經執行一次 有效的輸入 (也就是符合 score >= 0 之輸入) 所以 i=1,代表 有效輸入 之次數為一份 個人的寫法好處很明顯 少寫一次 printf("Enter next score (negative to quit ) : "); scanf("%f",&score); 編譯出來的執行檔體積就會比較小 建議寫作程式設計 因為大部分'玩'家不會真的比照學校教的 畫出流程圖 所以要養成 寫上除錯的顯示 之程式碼 的習慣 比如 printf("%dEnter next score (negative to quit ) : ", i); 這樣您就會了解問題所在 |
那請問為甚麼外面寫一次,裡面還要寫一次阿??
要養成 寫上除錯的顯示 之程式碼 的習慣 是指除錯時的錯誤的部份要用保留嗎 |
Q:那請問為甚麼外面寫一次,裡面還要寫一次阿??
A:因為外面輸入的條件不過關 就不會再執行迴圈裡面的輸入 ,其實寫程式也沒有說一定要怎樣 一定要那樣, 只是那些是前人累積的經驗,自己寫久了也會認同其裡有何在的 Q:要養成 寫上除錯的顯示 之程式碼 的習慣 是指除錯時的錯誤的部份要用保留嗎 A:簡單講就是養成 使用除錯的習慣 |
好像回答完了
天上天下大 你好好加油吧 未來資料結構 系統程式還有長路要走 我一想到OS作業要寫context switch就昏 哀 |
請問程式執行完要讓他選擇要不要在執行一次,要怎麼寫?
如果不用goto的話. |
引用:
大致結構如下 main() { do{ }while(condition); } |
引用:
我把printf("y or n:"); scanf("%c",&c); 加到裡面 #include <stdio.h> #include <stdlib.h> main() { int a,b,i; char c; do{ <-----這裡會問,但是不管輸入甚麼都一樣會繼續執行 for(i=1;i<=4;i++) { printf("請輸入一算式"); scanf("%d%c%d",&a,&c,&b); if(c=='+') printf("%d%c%d=%d\n",a,c,b,a+b); else if(c=='-') printf("%d%c%d=%d\n",a,c,b,a-b); else if(c=='*') printf("%d%c%d=%d\n",a,c,b,a*b); else if(c=='/') printf("%d%c%d=%0.2f\n",a,c,b,(float)a/b); } <-----這裡的話只會直接顯示y or n:,之後就直接結束了 }while(c=='y'); system("PAUSE"); return 0; } 我是要讓他跑完後問還要不要在跑一遍. |
這樣好了
main () { printf("input 1 to continue, input 1 to exit\n"); scanf("%d",&key); while(key == 1) { //實作 int key; printf("input 1 to continue, input 1 to exit\n"); scanf("%d",&key); } } |
還是不懂,真難搞懂,看來我對c沒什麼天份>"<
|
#include <conio.h>
#include <stdio.h> #include <stdlib.h> main() { int a,b; char c; do{ printf("請輸入一組整數算式: "); scanf("%d%c%d",&a,&c,&b); switch(c) { case '+': printf("等於 %d",a+b); break; case '-': printf("等於 %d",a-b); break; case '*': printf("等於 %0.0lf",(double)a*b); break; //超長整數請見 http://66.102.7.104/search?q=cache:t...&lr=lang_zh-TW case '/': printf("等於 %0.2f",(float)a/b); break; } //if(c=='+') printf("%d%c%d=%d\n",a,c,b,a+b); //else if(c=='-') printf("%d%c%d=%d\n",a,c,b,a-b); //else if(c=='*') printf("%d%c%d=%d\n",a,c,b,a*b); //else if(c=='/') printf("%d%c%d=%0.2f\n",a,c,b,(float)a/b); printf("\n是否繼續跑一遍?(y/n)"); c=getch(); if(c=='N' || c=='n') break;//一成立就會跳出上一層的迴圈,在本題是 do{~}while(true); printf("%c\n\n",c); }while(true); printf("\n\n即將退出本程式,"); system("PAUSE"); return 0; } 以上藍字可用 c=getch(); printf("%c\n\n",c); }while(c=='Y' || c=='y'); 替換 其中除法也可改良一下 printf("等於 %0.2f",(float)a/b); 當 1/1000 時 會顯示 0.00 所以加一個判斷 if(a/b<0.01) printf("等於 %0.5f",(float)a/b); 變成 case '/': float f; f=(float)a/b; if(f<=0.01) printf("等於 %0.5f",f); else printf("等於 %0.2f",f); } |
請問scanf(&c,&c);
c=getch(); 有什麼不同? 我只前也有像這樣寫,但是我是在c=getch();的這部份寫成scanf(&c,&c); 但是這樣寫時就都不會執行scanf(&c,&c);這行而直接跳到結束. 另外我編譯時顯示這行有錯誤 }while(true);是為什麼? |
引用:
|
引用:
A:一個要按 [Enter]鍵才會繼續執行,一個只接受一個按鍵值就會繼續執行 不需再按[Enter] 還有一個 getchar(); 方法同 getch() 只是 getchar(); 其等號左邊必須是 int 而不是 char 很多時候會被誤導 寫成 char c; //...簡略 do{ c=getchar(); }while(c=='y'); 首先應該是 scanf("%c",&c); 接著當你語法覺得沒錯時有幾個地方可以檢查一下 ; 及 { } 是否少寫或多寫 接著有些編譯器受OS快取的影響就算你改正了 他還是用快取的東西做編譯聯結 此時可試著退出程式重新啟動編譯環境 (這情況雖然不大可能但不可排除) 還有一種情況 就是沒有#include 你所使用的函數,但還是編譯成功 此時您要注意 編譯Log視窗的警訊 說真的就是因為C/C++ IDE編譯器 沒有VB人性化 所以個人才不怎麼玩 C/C++ 的說 |
scanf("%c",&c)是我筆誤 :p
我研究了很久,發現好像是因為會讀取到某個資料,而那筆資料剛好不是y所以就結束迴圈了 不過難道無法解決嗎? 另外getchar(); 其等號左邊必須是 int 而不是 char是為什麼不能那樣寫? 為我用char好像對程式沒什麼影響耶? 另外這個部份: printf("請輸入一算式"); scanf("%d%c%d",&a,&c,&b); switch(c){ case '+': printf("=%d\n",a+b); break; case '-': printf("=%d\n",a-b); break; case '*': printf("=%0.0lf\n",(double)a*b); break; case '/': printf("=%0.2f\n",(float)a/b); break; } 在執行時是==>請輸入一算式算式換行結果 請問要怎麼才能不換行,直接在同一行顯示結果阿? |
引用:
因為電腦完全不知道你要輸入多少值才要計算結果 你可能輸入三個字元3+3才要計算 也可能輸入5個字元 12+34 所以無法預測什麼情況下要進行計算 |
喔,了解了,謝謝^^
|
不換行直接執行 那也要有個結尾判斷字元
比如 等於= 或 空白' ' 可以用 語法:
do { |
所有時間均為台北時間。現在的時間是 12:14 PM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *