以下程式以C++語言
- 有一大數其型式為 12345678910 11 12
…終止數,例如終止數為258,除以10,餘數為8。試作一程式,可輸入終止數1~1000,除數為1~30,求餘數。
#include
<iostream.h>
#include <math.h>
void main()
{
//fn為終止數;counter為從1開始,數到fn之計數器
//divisor被除數,divided是包括被除數和餘數的身分
//tmp為暫存10log整數值,可以不必要。
int fn,counter,divisor;
double divided=1;
int tmp;
cout << "Please input the final number:";
cin >> fn;
cout << "Please input the divisor:";
cin >> divisor;
for(counter=1;counter<=fn;counter++)
{
// 下2行是為了當終止數為1和第一個數而設。為else之例外處理
if(counter==1)
{divided=fmod(1,divisor);}
else
{
tmp= ((int)log10(counter)+1); //取得下一位之位數
//將上一次餘數devided乘上下一位之位數(shift位移),再
//加上下一位值,並取餘數,存回devided
divided=fmod((divided*pow(10,tmp)+counter),divisor);
}
}
cout <<endl << divided;//輸出
cin >> fn;
} |
注意事項:
- log10(),原本回傳double值,請注意
- fmd(被除數,除數),為專門用在double上的取餘函數。回傳double。
- pow(底數,指數)
- 函數使用詳情請參考math.h
|
- 試以遞迴方式作出1+2+3+…n。
#include
<iostream.h>
int rec(int);
void main()
{
int i;
cin >> i;
cout << rec(i);
cout << endl << "Do you think it right?"
}
int rec(int i)
{
if(i==1)
return 1;
else
return rec(i-1)+i;
} |
- 已知有頭獎1名,二獎2名,三獎5名,現恰有8人,已知每人各抽一認,且每人均有得獎,以亂數方式。
#include <iostream.h>
#include <stdlib.h> //srand,rand函數
#include <time.h> //time,time_t
//分別給與獎項、授獎人數、授獎陣列
void giveprize(int,int,int []);
void main()
{
//設定亂數設定
int k,i;
time_t s;
time(&s);
srand(s);
//獎項陣列
int prize[8];
//亂數隨選人
int random_num;
//計授獎人數
int counter;
//清除prize,以免有內定值
for(counter=0;counter<8;counter++)
prize[counter]=0;
giveprize(1,1,prize);
giveprize(2,2,prize);
giveprize(3,5,prize);
//輸出 第幾人:名次
for(counter=0;counter<8;counter++)
cout << counter+1<<" : " <<prize[counter]<<endl;
cin >>counter;
}//分別給與獎項、授獎人數、授獎陣列
void giveprize(int prize,int number,int a[])
{
int counter,random_num;
for(counter=0;counter<number;)//檢查是否獎品已經發完?
{
random_num=rand()%8;//隨選某個人
if(a[random_num]==0)//檢查是否已授過獎?
{
a[random_num]=prize; //沒授過獎就給目前頒發獎項
counter++; //獎品減少
}
}
}
//注意,本程式會發生一個潛在問題,就是並沒有檢查是否已經全部授過獎而造成無法給獎的無限迴圈狀況。 |
- 試作一程式可以輸入四則運算,包括小括號,並可有多重括號型式。
- 有一英文文章,起先格式不正確,例如: this is,what。上句中,「t」應改成大寫「T」,「w」之前應加上空白鍵,因為有「,」。試作一程式,更正之。
|