版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
算法與編程實習(xí)報告指導(dǎo)老師:XXX專業(yè):通信工程班級:10083415學(xué)號:XXXXXXXX姓名:XX第一題問題描述一、題目:統(tǒng)計字母的使用頻率二、目的與規(guī)定1.目的:通過編寫程序統(tǒng)計字母的使用頻率,培養(yǎng)學(xué)生綜合運用C語言進行程序設(shè)計的能力,熟悉字符串的操作辦法,加強函數(shù)的運用,提高軟件系統(tǒng)分析能力和程序文檔建立、歸納總結(jié)的能力。2.基本規(guī)定:1)規(guī)定用C語言編程,在VisualC++環(huán)境下調(diào)試完畢;2)規(guī)定按照程序功效分成幾個功效模塊來實現(xiàn),各個功效模塊分別使用函數(shù)來完畢;規(guī)定應(yīng)用本課所講授的程序設(shè)計語言知識來解決問題三、設(shè)計辦法和基本原理1.課題功效描述本程序的功效,就是要統(tǒng)計英文字母的使用頻率。2.問題具體描述為統(tǒng)計英文字母的使用頻率,輸入一種不涉及空格的由英文字母構(gòu)成的字符串,長度不超出200個字符。統(tǒng)計26個英文字母的使用頻率,不分辨大小寫。最后按使用頻率從大到小輸出字母(小寫字母)和使用頻率(出現(xiàn)的次數(shù))。3.問題的解決方案按照程序規(guī)定,本程序應(yīng)采用模塊化設(shè)計辦法,設(shè)計幾個功效模塊。例如(僅供參考):1)將字符串中的大寫字母轉(zhuǎn)換為小寫字母2)統(tǒng)計輸入的字符串中字母的使用頻率3)按使用頻率從大到小進行排序4)主函數(shù)中控制輸入、函數(shù)調(diào)用和輸出。四、重要技術(shù)問題的描述根據(jù)三的分析,重要問題在于:1)為統(tǒng)計字母的使用頻率,定義一種長度為26的int數(shù)組寄存所統(tǒng)計的各個字母的使用頻率。2)在統(tǒng)計字母的使用頻率時,不要使用if語句或switch語句,運用字母的ASCII碼與數(shù)組元素下標之間的關(guān)系來求得。3)按使用頻率從大到小進行排序時,建議使用指針數(shù)組更為方便。五、創(chuàng)新規(guī)定實現(xiàn)程序功效后,可進行創(chuàng)新設(shè)計:1)使用多文獻,即主函數(shù)和各個函數(shù)分別寄存在不同的.c文獻中,在頭文獻中進行函數(shù)原型聲明。讀入一篇英文文檔,并對其進行字母頻率分析。功效描述運用MFC實現(xiàn)和諧界面,設(shè)計了兩個功效按鈕,“打開文獻”和“計算”對文檔的讀入有兩種方案,一是直接在界面上直接輸入,二是運用“打開文獻”按鈕,打開一種寄存于D盤根目錄的data.txt文本文獻。把讀取來的英文數(shù)據(jù)都在顯示框內(nèi)顯示。當顧客按下“計算”按鈕時,程序讀取顯示框內(nèi)的數(shù)據(jù),用于計算。將計算得到的成果在成果輸出框內(nèi)顯示,并寫入D盤的result.txt文本文獻。(下頁流程圖)解決方案(流程圖)數(shù)據(jù)讀入數(shù)據(jù)讀入OnButtonFopen事件OnButtonFopen事件按下“打開文獻”按鈕data_input函數(shù)顧客在輸入框內(nèi)輸入result_display函數(shù)成果顯示OnButtonCalc事件字母次數(shù)計算result_display函數(shù)成果顯示OnButtonCalc事件字母次數(shù)計算重要函數(shù)描述1)OnButtonCalc()按鈕解決函數(shù)“計算”,用于控制數(shù)據(jù)的輸入與輸出2)OnButtonFopen()按鈕解決函數(shù)“打開文獻”,用于打開文獻操作3)result_display() 成果顯示函數(shù)4)freq_sort()成果排序,并寫入文獻5)freq_calc()計算字母出現(xiàn)頻率6)num_change字母大小寫轉(zhuǎn)換重要技術(shù)問題對字符串的操作和問件的操作。指針的運用,函數(shù)的調(diào)用。結(jié)論(實驗心得)函數(shù)必須加上必要的注釋,否則要記起當時的思路很難。附錄:第一題部分源程序/*****************************按鈕解決函數(shù)“計算”*****************************/voidCTask_oneDlg::OnButtonCalc(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE);//把現(xiàn)在文本框中的內(nèi)容保存到變量中charen_in[N]; charen_out[250]={0}; intres[26]={0}; strcpy(en_in,m_input);//讀取EDIT中的值,存入字符數(shù)組 data_input(en_in,res);//輸入數(shù)據(jù)解決函數(shù) result_display(en_out);//成果顯示 m_display=en_out;//變量傳入控件 UpdateData(FALSE);}/**************************按鈕解決函數(shù)“打開文獻”***************************/voidCTask_oneDlg::OnButtonFopen(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE);//把現(xiàn)在文本框中的內(nèi)容保存到變量中 charen_in[N];//定義字符數(shù)組用于寄存輸入數(shù)據(jù) charen_out[250]={0}; //定義字符數(shù)組用于寄存成果,寫入文獻 intres[26]={0};//26個字母的數(shù)組用于頻率值 FILE*fp_r; if((fp_r=fopen("d:\\data.txt","r"))==NULL)//打開D盤根目錄的data.txt文獻 { MessageBox(TEXT("在D:\\中找不到文獻data.txt!"),TEXT("錯誤"),MB_OK); } else { fscanf(fp_r,"%s",en_in);//文獻的值讀取到數(shù)組中 fclose(fp_r); m_input=en_in;//把讀入的數(shù)據(jù)在界面上顯示(原數(shù)據(jù)) } UpdateData(FALSE); }/***************************字母大小寫變換******************************/voidnum_change(char*en){inti=0; for(i=0;*(en+i)!='\0';i++)//三目運算符當字在AZ之間時,轉(zhuǎn)化為小寫 { *(en+i)=('A'<=*(en+i)&&*(en+i)<='Z')?(*(en+i)+32):(*(en+i)); }}/**************************計算字母出現(xiàn)頻率****************************/voidfreq_calc(char*en,int*res){ inti=0; for(i=0;*(en+i)!='\0';i++) { (*(res+(int)(*(en+i))-97))++;//字符與成果數(shù)組相對應(yīng)自加一次 }}/*************************成果顯示,并寫入文獻**************************/voidresult_display(char*en_out){ FILE*fp;//存入D盤根目錄的result.txt文獻中 if((fp=fopen("d:\\result.txt","r"))==NULL) { exit(1); } fscanf(fp,"%s",en_out);//讀取并在界面上顯示(解決后的數(shù)據(jù)) fclose(fp);}第二題問題描述一、題目:自然數(shù)的進制轉(zhuǎn)換二、目的與規(guī)定1.目的:通過編寫對自然數(shù)進行不同進制轉(zhuǎn)換程序,培養(yǎng)學(xué)生綜合運用C語言進行程序設(shè)計的能力,熟悉字符串的操作辦法,加強函數(shù)的運用,提高軟件系統(tǒng)分析能力和程序文檔建立、歸納總結(jié)的能力。2.基本規(guī)定:1)規(guī)定用C語言編程,在VisualC++環(huán)境下調(diào)試完畢;2)規(guī)定按照程序功效分成幾個功效模塊來實現(xiàn),各個功效模塊分別使用函數(shù)來完畢;3)規(guī)定應(yīng)用本課所講授的程序設(shè)計語言知識來解決問題.三、設(shè)計辦法和基本原理1.課題功效描述本程序的功效,就是實現(xiàn)自然數(shù)的十進制、二進制、八進制、十六進制轉(zhuǎn)換。即根據(jù)顧客選擇的進制和輸入的數(shù)據(jù),轉(zhuǎn)換得到該數(shù)所對應(yīng)的十進制、二進制、八進制和十六進制數(shù)。2.問題具體描述程序運行時,首先由顧客選擇輸入數(shù)據(jù)所使用的進制,如:歡迎使用進制轉(zhuǎn)換程序!1.十進制2.二進制3.八進制4.十六進制0.退出請選擇輸入數(shù)據(jù)的進制:顧客選擇后,再輸入數(shù)據(jù),如選擇3(八進制),則顯示:請輸入八進制數(shù)據(jù):輸入數(shù)據(jù)后,程序進行轉(zhuǎn)換,最后輸出該數(shù)所對應(yīng)的十進制、二進制、八進制和十六進制數(shù)。如輸出:轉(zhuǎn)換成果:十進制21809二進制001八進制52461十六進制55313.問題的解決方案事實上,C語言在輸入輸出時可直接輸入或輸出多個進制的數(shù),本題目是為了提高學(xué)生的編程能力,因此要自己編程來實現(xiàn)數(shù)制的轉(zhuǎn)換。根據(jù)問題的描述,使用字符數(shù)組來寄存輸入的數(shù)據(jù),轉(zhuǎn)換后的數(shù)據(jù)也寄存到字符數(shù)組中,按字符串進行輸入和輸出。注意:問題的解決方案有諸多,下面給出的僅供同窗們參考。按照程序規(guī)定,每次要將數(shù)據(jù)轉(zhuǎn)換成多個進制,因此將輸入數(shù)據(jù)(字符數(shù)組中)先轉(zhuǎn)換成十進制數(shù)(long),再將其轉(zhuǎn)換成多個進制并存入對應(yīng)的字符數(shù)組中,最后輸出。本程序應(yīng)采用模塊化設(shè)計辦法,設(shè)計幾個功效模塊。例如(僅供參考):1)檢查輸入數(shù)與否正當(例八進制數(shù)中只能出現(xiàn)0~7)2)將數(shù)據(jù)(字符數(shù)組中)轉(zhuǎn)換成十進制數(shù)(long)3)將十進制數(shù)(long)轉(zhuǎn)換成某種進制數(shù)據(jù)(字符數(shù)組中)還能夠把這幾個模塊中都使用的字符與數(shù)字之間的轉(zhuǎn)換作為獨立模塊,供上面的模塊調(diào)用。例如(僅供參考):4)字符轉(zhuǎn)數(shù)字5)數(shù)字轉(zhuǎn)字符主函數(shù)中控制輸入、函數(shù)調(diào)用和輸出。四、重要技術(shù)問題的描述根據(jù)三的分析,重要問題在于:1)單個字符與數(shù)字的轉(zhuǎn)換在字符轉(zhuǎn)數(shù)字時,’0’~’9’只需減去’0’即可,要考慮到’a’~’f’和’A’~’F’的轉(zhuǎn)換(十六進制數(shù))。同樣的,數(shù)字轉(zhuǎn)字符時,要考慮到10~15的轉(zhuǎn)換與0~9不同。2)將數(shù)據(jù)(字符數(shù)組中)轉(zhuǎn)換成十進制數(shù)(long)時,采用的算法是:按現(xiàn)在數(shù)制的位權(quán)進行多項式展開相加,即得到對應(yīng)的十進制數(shù)。3)將十進制數(shù)(long)轉(zhuǎn)換成某種進制數(shù)據(jù)(字符數(shù)組中)時,采用除留余數(shù)法:將十進制數(shù)除以轉(zhuǎn)換進制的位權(quán),保存余數(shù)(存到字符數(shù)組中),商繼續(xù)除,直到商為零;然后將字符數(shù)組中的內(nèi)容求頭逆序,即得到轉(zhuǎn)換數(shù)據(jù)。其中求逆序也可用一種獨立模塊來實現(xiàn)。五、創(chuàng)新規(guī)定實現(xiàn)程序功效后,可進行創(chuàng)新設(shè)計:1)使用多文獻,即主函數(shù)和各個函數(shù)分別寄存在不同的.c文獻中,在頭文獻中進行函數(shù)原型聲明;2)本程序?qū)崿F(xiàn)的是自然數(shù)的不同進制的轉(zhuǎn)換,可進一步實現(xiàn)帶小數(shù)的轉(zhuǎn)換;3)實現(xiàn)負數(shù)的轉(zhuǎn)換功效描述運用MFC實現(xiàn)和諧界面,設(shè)計了兩個功效按鈕,“轉(zhuǎn)換”和“退出”。設(shè)計了一種Combox用來選擇現(xiàn)在輸入數(shù)據(jù)的進制。一種Edit框用于寄存輸入數(shù)據(jù)。其它Edit框用于顯示。(下頁流程圖)解決方案(流程圖)GetCurSelGetCurSel函數(shù)讀取顧客選擇的進制Change_decChange_dec函數(shù)讀取源數(shù)據(jù),轉(zhuǎn)換為十進制dec_to_string函數(shù)十進制轉(zhuǎn)字符串dec_to_hex函數(shù)dec_to_string函數(shù)十進制轉(zhuǎn)字符串dec_to_hex函數(shù)十進制轉(zhuǎn)十六進制dec_to_oct函數(shù)十進制轉(zhuǎn)八進制dec_to_bin函數(shù)十進制轉(zhuǎn)二進制OnButtonChange函數(shù)把成果放入控件中顯示 OnButtonChange函數(shù)把成果放入控件中顯示重要函數(shù)描述1)OnButtonChange()“轉(zhuǎn)換”按鈕解決函數(shù)2)Change_dec() 按類別把輸入的數(shù)據(jù)轉(zhuǎn)換為十進制存入value中3)dec_to_string()dec_to_bin()dec_to_oct()dec_to_hex 十進制轉(zhuǎn)化為多個進制4)OnButtonExit()“退出”按鈕解決函數(shù)重要技術(shù)問題Combox控件的運用,Combox選用值的讀取。按讀進來的進制類型,統(tǒng)一轉(zhuǎn)換為十進制。字符串轉(zhuǎn)數(shù)字,數(shù)字轉(zhuǎn)字符串。結(jié)論(實驗心得)合理運用MFC能夠使程序簡潔又和諧。附錄:第二題部分源程序/**************************Combox初始化******************************/m_kind.InsertString(0,"十進制");m_kind.InsertString(1,"二進制");m_kind.InsertString(2,"八進制");m_kind.InsertString(3,"十六進制");m_kind.SetCurSel(0);//默認顯示十進制/************************“轉(zhuǎn)換”按鈕解決函數(shù)************************/voidCTask_twoDlg::OnButtonChange(){//TODO:Addyourcontrolnotificationhandlercodehereintkind=0;//輸入數(shù)據(jù)的類別chars_dat[30]={0};//用于寄存輸入的數(shù)據(jù)longvalue=0;//十進制存儲位置把讀到數(shù)據(jù)統(tǒng)一轉(zhuǎn)換為十進制再解決kind=m_kind.GetCurSel();//讀取combox的值,得到選中的類別UpdateData(TRUE);//把現(xiàn)在文本框中的內(nèi)容保存到變量中 strcpy(s_dat,m_data);//把文本框的內(nèi)容拷貝到字符數(shù)組里Change_dec(s_dat,kind,&value);//調(diào)用數(shù)據(jù)解決函數(shù)把讀到數(shù)據(jù)統(tǒng)一轉(zhuǎn)換為十進制/*******************************顯示函數(shù)*******************************/dec_to_string(s_dat,&value);//十進制輸出m_dec=s_dat; //把變量的值傳控件中顯示UpdateData(FALSE); dec_to_bin(s_dat,&value);//二進制輸出m_bin=s_dat;UpdateData(FALSE);dec_to_oct(s_dat,&value);//八進制輸出m_oct=s_dat;UpdateData(FALSE);dec_to_hex(s_dat,&value);//十六進制輸出m_hex=s_dat;UpdateData(FALSE);}/***************************************************************************/voidChange_dec(char*dat,intkind,long*value)//把輸入的數(shù)據(jù)轉(zhuǎn)換為十進制存入value中{inti=0;kind=kind+1;//Combox中類別從0開始switch(kind)//按類別把輸入的數(shù)據(jù)轉(zhuǎn)換為十進制存入value中{case1://十進制while(*(dat+i)>='0'&&*(dat+i)<='9'){*value=(*value)*10+(*(dat+i)-'0');i++;}break;case2://二進制while(*(dat+i)>='0'&&*(dat+i)<='1'){*value=(*value)*2+(*(dat+i)-'0'); i++;}break;case3://八進制while(*(dat+i)>='0'&&*(dat+i)<='7'){*value=(*value)*8+(*(dat+i)-'0'); i++;}break; case4://十六進制while(*(dat+i)>='0'&&*(dat+i)<='F'){if((*dat)>'9')//十六進制時當數(shù)據(jù)不不大于9,單獨解決{*value=(*value)*16+(*(dat+i)-'7'); //把大寫的A轉(zhuǎn)化為10}else{ *value=(*value)*16+(*(dat+i)-'0');}i++;}break; }}/*****************************十進制轉(zhuǎn)十六進制***********************/voiddec_to_hex(char*dat,long*vp){ inti=0,j=0; charnum=0; longtemp=*vp; memset(dat,0,30); //清空字符串 while(temp) { if((temp%16)>9) { *(dat+i)=temp%16+'7';//余數(shù)不不大于9時解決10-15toA-F } else { *(dat+i)=temp%16+'0'; } temp=temp/16; i++; } for(j=0;j<i/2;j++)//字符串倒序輸出 { num=*(dat+j); *(dat+j)=*(dat+i-1-j); *(dat+i-1-j)=num; }}第三題問題描述一、題目:四則運算二、目的與規(guī)定1.目的:通過編寫四則運算程序,培養(yǎng)學(xué)生綜合運用C語言進行程序設(shè)計的能力,熟悉字符串的操作辦法,加強函數(shù)的運用,提高軟件系統(tǒng)分析能力和程序文檔建立、歸納總結(jié)的能力。2.基本規(guī)定:1)規(guī)定用C語言編程,在VisualC++環(huán)境下調(diào)試完畢;2)規(guī)定按照程序功效分成幾個功效模塊來實現(xiàn),各個功效模塊分別使用函數(shù)來完畢;3)規(guī)定應(yīng)用本課所講授的程序設(shè)計語言知識來解決問題.三、設(shè)計辦法和基本原理1.課題功效描述本程序的功效,就是實現(xiàn)數(shù)的加減乘除四則運算,如自動計算3+5*8的成果。2.問題具體描述程序運行時,首先提示顧客輸入四則運算體現(xiàn)式(體現(xiàn)式中最多有3個運算符,數(shù)據(jù)范疇為1-100的整數(shù));輸入結(jié)束后,程序自動行計算并給進出成果。如:輸入13-10+5/8時輸出3.625。3.問題的解決方案注意:問題的解決方案有諸多,下面給出的僅供同窗們參考。該問題重要注意四則運算的優(yōu)先級問題:乘除運算比加減運算優(yōu)先級高,同級運算按從左到右的次序運算。本程序應(yīng)采用模塊化設(shè)計辦法,設(shè)計幾個功效模塊。例如(僅供參考):1)字符串解析函數(shù)(將輸入字符串分解成數(shù)和運算符)2)將數(shù)據(jù)(字符數(shù)組中)轉(zhuǎn)換成十進制數(shù)(long)3)判讀與否存在高優(yōu)先級運算符,若存在首先計算其運算成果并保存。4)同級運算按先后次序進行。四、創(chuàng)新規(guī)定實現(xiàn)程序功效后,可進行創(chuàng)新設(shè)計:1)使用多文獻,即主函數(shù)和各個函數(shù)分別寄存在不同的.c文獻中,在頭文獻中進行函數(shù)原型聲明;2)在程序中增加自動出題功效及自動批卷功效3)不限定運算符個數(shù)允許括號運算的存在。功效描述讀入現(xiàn)在字符串,并進行轉(zhuǎn)換。按類別,把運算數(shù)字和運算符分辨開分別存入對應(yīng)字符數(shù)組中。按四則運算法則,先乘除后加減執(zhí)行計算。重要函數(shù)描述get_dat()字符串解析函數(shù)data_make()判讀與否存在高優(yōu)先級運算符,若存在首先計算其運算成果并保存重要技術(shù)問題字符串的解析,數(shù)據(jù)和運算符的分類先乘除后加減,把已運算過的數(shù)據(jù)賦值為0,已運算過的變?yōu)榧犹栞斎胱址仨氁詳?shù)字開頭結(jié)論(實驗心得)在解決先乘除后加減的過程中,對已進行乘除運算的數(shù)據(jù)解決時一種核心,這里我把這類數(shù)據(jù)賦值為0,乘除號變?yōu)榧犹枺阌谙旅娴募訙p運算。附錄:第三題源程序#include<stdio.h>/**************************數(shù)據(jù)和運算符歸類解決***************************/voidget_dat(char*dat,float*num,char*sig)//字符串解析函數(shù){ inti=0,j=0; *num=0;//初始化 printf("歡迎使用簡易四則運算器,請輸入:\n"); scanf("%s",dat); for(i=0;*(dat+i)!='\0';i++) { if((*(dat+i)<'0')||(*(dat+i)>'9'))//如果輸入的不是0-9的自然數(shù) { if(i==0) { printf("算式有誤,請重新輸入!\n");//如果輸入字符不是以數(shù)字開頭 break; } *(sig+j)=*(dat+i);//如果是運算符就存儲 j++;//指針位置加一 } else { *(num+j)=*(num+j)*10+(*(dat+i)-'0');//不是運算符就轉(zhuǎn)化為數(shù)據(jù)存儲 } }}//判讀與否存在高優(yōu)先級運算符,若存在首先計算其運算成果并保存voiddata_make(float*num,char*sig){ inti=0; for(i=0;*(sig+i)!='\0';i++)//掃描一遍先乘除后加減 { if(*(sig+i)=='*')//執(zhí)行對應(yīng)法則計算成果存入后一種數(shù)據(jù)單元 { *(num+i+1)=(*(num+i))*(*(num+i+1)); *(num+i)=0;//清空前一種數(shù)據(jù)單元,便于加減的運算 *(sig+i)='+';//把乘除轉(zhuǎn)換為加避免運算符干擾 } if(*(sig+i)=='/') { *(num+i+1)=(*(num+i))/(*(num+i+1)); *(num+i)=0; *(sig+i)='+'; } } for(i=0;*(sig+i)!='\0';i++)//掃描一遍加減運算 { if(*(sig+i)=='+')//執(zhí)行對應(yīng)法則計算成果存入后一種數(shù)據(jù)單元 { *(num+i+1)=(*(num+i))+(*(num+i+1)); *(num+i)=0;//清空前一種數(shù)據(jù)單元,便于下一種運算 } if(*(sig+i)=='-') { *(num+i+1)=(*(num+i))-(*(num+i+1)); *(num+i)=0; } } printf("計算答案是:%.3f\n",*(num+i));//最后一種數(shù)據(jù)單元為計算成果}/*******************************主函數(shù)**********************************/intmain()//主函數(shù){ inti=0; charcalc_dat[200]={0};//定義一種保存算式的字符數(shù)組 charcalc_sig[100]={0};//定義一種保存運算符的字符數(shù)組 floatnum_dat[100]={0};//定義一種保存運算數(shù)據(jù)的數(shù)組//字符串解析函數(shù)顧客輸入算式運算符運算數(shù)據(jù) get_dat(calc_dat,num_dat,calc_sig);//運算數(shù)據(jù)運算符先乘除后加減 data_make(num_dat,calc_sig); return0;}第四題問題描述一、題目:數(shù)字游戲玲玲喜歡通過玩數(shù)字游戲的方式來加深別人對她的印象。她最喜歡的一種數(shù)字游戲是讓人給出一種數(shù)N,然后她會立刻說出N的階乘最末尾有多少個持續(xù)的零。很顯然,這會讓別人會對她印象深刻,由于,普通來說N!是一種非常大的數(shù)。例如,N為100時,100!會比地球上全部原子的數(shù)目還要大,但玲玲能夠很快說出100!末尾有持續(xù)24個0。但是,她的某些朋友普通不是以10為進制的。這時,玲玲卻不懂得該怎么修改她的技巧來適應(yīng)這些朋友了。問題:給出一種進制b和一種數(shù)n,計算當采用b進制時,n!末尾有多少個持續(xù)的0。例如,當b=2和n=5時,由于5!=120=1111000(2),成果應(yīng)當為3.輸入:第一行包含了總的計算次數(shù)。接下來的每一行給出了不同狀況下的問題中的兩個數(shù)b(2≤b≤1000)和n(1≤n≤1000000),這兩個數(shù)都是10進制的。輸出:輸出成果中,對每一次計算都以"Scenario#i:"開始,其中的i是從1開始的第i次計算。然后打印一行,輸出:當采用b進制時,n!末尾有多少個持續(xù)的0(以十進制形式)。對每一次計算都以一種空白行結(jié)束。輸入樣例:325101004510000對樣例的對的輸出:Scenario#1:3Scenario#2:24Scenario#3:2498功效描述這個問題是對n!背面有幾個0的變種。如果是問n!最后有幾個0應(yīng)當怎么算?必定不是先算出n!是幾,然后再數(shù)0的。如題目所言,N為100時,100!會比地球上全部原子的數(shù)目還要大,那么如何得出我們想要的成果呢?現(xiàn)在我們懂得,5!=120,因此當5!采用十進制表達的時候,5!末尾有一種零。也就是說5!只能被一種10整除!那么同理,當問5!采用二進制表達的時候,5!末尾有幾個零,實際就是5!能被多少個2整除,120能被3個2整除,因此末尾就是3個0。例如現(xiàn)在規(guī)定12進制時9!末尾有幾個0。我們先把12分解質(zhì)因數(shù),得12=2*2*3,然后再算9!=1*2*3*4*5*6*7*8*9,把這些階乘逐個分解質(zhì)因數(shù),算出共有幾個2,幾個3相乘。顯然里面有2+(2+2)+2+(2+2+2)共7個2,有3+3+(3+3)共4個3,又由于12里面有2個2,因此7/2=3.5,一種3,因此4/1=4,顯然只能取3,因此9!能被3個12整除,末尾必有3個0。解決方案(流程圖)Main函數(shù)Main函數(shù)主函數(shù)result_calc函數(shù)對兩次的質(zhì)因數(shù)進行計算display函數(shù)成果顯示data_calcresult_calc函數(shù)對兩次的質(zhì)因數(shù)進行計算display函數(shù)成果顯示data_calc函數(shù)對階乘逐次分解質(zhì)因數(shù)factor_calc函數(shù)對進制分解質(zhì)因數(shù)scanf函數(shù)掃描運算次數(shù)和對應(yīng)的數(shù)據(jù)重要函數(shù)描述1)factor_calc()//對進制進行分解質(zhì)因數(shù)data_calc()//對階乘逐個進行分解質(zhì)因數(shù)result_calc//對統(tǒng)計的質(zhì)因數(shù)進行比較display()//成果輸出重要技術(shù)問題該題事實上是求n!能夠被多少個對應(yīng)的進制整除。運用C語言對進制進行分解質(zhì)因數(shù)。運用C語言對階乘逐個分解質(zhì)因數(shù)。把兩個成果進行比較,得出n!至多能被多少個進制整除,則在該進制下,它的末尾就有幾個0。結(jié)論(實驗心得)巧妙的算法很重要。附錄:第四題源程序#include<stdio.h>voidfactor_calc(intbase,int*factor,int*factor_num)//計算進制的因數(shù)種類和個數(shù){ inti=0,j=0,n=2,flag=0; while(n<=base) { if(base%n==0)//如果整除 { flag=1;//整除標志 base=base/n;//下次用商進行計算 *(factor+i)=n;//統(tǒng)計因數(shù) *(factor_num+i)=++j;//對應(yīng)次數(shù)加一 } else { n++;//除數(shù)加一 if(flag==1)//如果上次整除了 { i++;//統(tǒng)計的因數(shù)的數(shù)組向后移 j=0;//釋放j flag=0;//釋放flag } } }}voiddata_calc(intdata,int*factor,int*data_factor)//階乘的因素計算{ inti=0,data_s=0,value=1;//計算n!中各個數(shù)所含因數(shù) inttemp=0;//臨時值用于存儲n的階乘 for(i=0;*(factor+i)!=0;i++)//因數(shù)一種個比較下去 { for(data_s=2;data_s<=data;data_s++)//階乘一種個計算下去 { temp=data_s; while(temp%(*(factor+i))==0)//如果整除對應(yīng)計數(shù)值就加一 { *(data_factor+i)=value++; temp=temp/(*(factor+i));
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度兼職業(yè)務(wù)員線上線下銷售合作合同2篇
- 二零二五年度農(nóng)業(yè)科技示范園農(nóng)民勞務(wù)合作合同
- 二零二五年度智能交通系統(tǒng)股東股權(quán)交易及技術(shù)支持協(xié)議3篇
- 2025年度大型養(yǎng)殖場租賃征收補償協(xié)議書3篇
- 2025農(nóng)村兄弟家庭財產(chǎn)分割與分家協(xié)議書
- 2025年度年度教育機構(gòu)兼職教師教學(xué)資源共享與保護條款3篇
- 二零二五年度智能化農(nóng)機設(shè)備買賣合作協(xié)議3篇
- 二零二五年度農(nóng)村村委會村莊農(nóng)業(yè)產(chǎn)業(yè)結(jié)構(gòu)調(diào)整與改造合同
- 2025年石材加工與安裝一體化服務(wù)合同3篇
- 二零二五年度新能源工廠設(shè)備整體轉(zhuǎn)讓協(xié)議3篇
- 野外生存2-1課件
- 謝孟媛中級文法講義整理版
- 關(guān)于歷史大單元、大概念教學(xué)的討論 課件-高考歷史一輪復(fù)習(xí)
- 旅游者對鼓浪嶼旅游產(chǎn)品的滿意度調(diào)查問卷
- 人教版初二數(shù)學(xué)下冊《第十七章小結(jié)與復(fù)習(xí)》課件
- 科技水晶質(zhì)感產(chǎn)品推廣PPT模板
- 化工儀表及自動化第六版-課后-答案
- 老化箱點檢表A3版本
- 消防設(shè)施驗收移交單
- 教師教學(xué)質(zhì)量評估表(學(xué)生用)
- 2022年自考4月英語真題帶解析
評論
0/150
提交評論