![教學(xué)相關(guān)函數(shù)-循環(huán)數(shù)組指針_第1頁](http://file4.renrendoc.com/view/7a0be3a8bccb83fb7b9998d04677c8c0/7a0be3a8bccb83fb7b9998d04677c8c01.gif)
![教學(xué)相關(guān)函數(shù)-循環(huán)數(shù)組指針_第2頁](http://file4.renrendoc.com/view/7a0be3a8bccb83fb7b9998d04677c8c0/7a0be3a8bccb83fb7b9998d04677c8c02.gif)
![教學(xué)相關(guān)函數(shù)-循環(huán)數(shù)組指針_第3頁](http://file4.renrendoc.com/view/7a0be3a8bccb83fb7b9998d04677c8c0/7a0be3a8bccb83fb7b9998d04677c8c03.gif)
![教學(xué)相關(guān)函數(shù)-循環(huán)數(shù)組指針_第4頁](http://file4.renrendoc.com/view/7a0be3a8bccb83fb7b9998d04677c8c0/7a0be3a8bccb83fb7b9998d04677c8c04.gif)
![教學(xué)相關(guān)函數(shù)-循環(huán)數(shù)組指針_第5頁](http://file4.renrendoc.com/view/7a0be3a8bccb83fb7b9998d04677c8c0/7a0be3a8bccb83fb7b9998d04677c8c05.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
11關(guān)于數(shù)組、指針、函數(shù)
的綜合討論(1)2011.05.2022任務(wù)3:姓名排序電視歌手大獎(jiǎng)賽開賽報(bào)名時(shí),由于人數(shù)較多,一些參賽信息需要及時(shí)錄入計(jì)算機(jī)并用計(jì)算機(jī)進(jìn)行管理。其中一個(gè)很重要的工作就是:要按選手姓名(漢語拼音)排序后編號(hào),以決定選手比賽的順序。請你編程實(shí)現(xiàn)對姓名拼音串按英文字典順序排序的程序。為測試程序,假定共有10名選手,選手姓名拼音最長不超過20個(gè)英文字符,且中間無空格。引子33#include<stdio.h>voidmain()
{ charnamelist[10][20]; for(inti=0;i<10;i++)
{ printf("inputthe%dsingername:“,i); scanf(“%s”,&namelist[i]); }
//此處代碼省略(見后)-用冒泡排序法對姓名進(jìn)行排序 for(inti=0;i<10;i++)
printf(“the%d%s\n”,namelist[i]);
}44#include<stdio.h>voidmain()
{
charnamelist[10][20];//數(shù)組下標(biāo)從0開始! for(inti=0;i<10;i++)
{ printf("inputthe%dsingername:“,i); scanf(“%s”,&namelist[i]); }
//此處代碼省略(見后)-用冒泡排序法對姓名進(jìn)行排序 for(inti=0;i<10;i++)
printf(“the%d%s\n”,namelist[i]);}55#include<stdio.h>Voidmain()
{
charnamelist[10][20];//數(shù)組下標(biāo)從0開始! for(inti=0;i<10;i++)
{ printf("inputthe%dsingername:“,i); scanf(“%s”,&namelist[i]); }
//此處代碼省略(見后)-用冒泡排序法對姓名進(jìn)行排序 for(inti=0;i<10;i++)
printf(“the%d%s\n”,namelist[i]);}66#include<stdio.h>voidmain()
{
charnamelist[10][20];//數(shù)組下標(biāo)從0開始! for(inti=0;i<10;i++)
{ printf("inputthe%dsingername:“,i); scanf(“%s”,&namelist[i]); }
//此處代碼省略(見后)-用冒泡排序法對姓名進(jìn)行排序
for(inti=0;i<10;i++)
printf(“the%d%s\n”,namelist[i]);}77先看看整數(shù)數(shù)組的冒泡算法for(j=0;j<n-1;j++)//比較n-1趟{(lán)
for(i=0;i<n-1-j;i++)//每一趟比較n-j-1次
{
if(a[i]<a[i+1])//若小數(shù)在前交換
{
p=a[i];
a[i]=a[i+1];
a[i+1]=p;
}
}}Page88完整的程序代碼#include<stdio.h>#include<memory.h>intmain()
{ inti,j,p,a[10];
memset(a,0,sizeof(a)); for(i=0;i<10;i++)
{ printf("請輸入待排序的數(shù)a[%d]=“,i); scanf(“%d”,&a[i]); }
for(j=0;j<9;j++)
{ for(i=0;i<9-j;i++)
{ if(a[i]<a[i+1])
{ p=a[i]; a[i]=a[i+1]; a[i+1]=p; } } } for(i=0;i<10;i++)
printf(“%d””,a[i]); }99依樣畫葫蘆for(j=0;j<9;j++){
for(i=0;i<9-j;i++)
{
if(a[i]<a[i+1])
{
p=a[i];
a[i]=a[i+1];
a[i+1]=p;
}
}}for(j=0;j<9;j++){
for(i=0;i<9-j;i++)
{
if(namelist[i]<namelist[i+1])
{
p=namelist[i]; namelist[i]=namelist[i+1]; namelist[i+1]=p;
}
}}1010 for(inti=0;i<9;i++)
//輪(遍,趟)數(shù)=元素?cái)?shù)目-1 { for(intj=0;j<9-i;j++)
//比較數(shù)=總輪數(shù)–當(dāng)前輪次 { if(strcmp(namelist[j],namelist[j+1])>0) { chartmp[20];
strcpy(tmp,namelist[j]); strcpy(namelist[j],namelist[j+1]); strcpy(namelist[j+1],tmp); } } }1111 for(inti=0;i<9;i++)
{ for(intj=0;j<9-i;j++)
{//page328,“strcmp()” if(strcmp(namelist[j],namelist[j+1])>0) { chartmp[20];
strcpy(tmp,namelist[j]); strcpy(namelist[j],namelist[j+1]); strcpy(namelist[j+1],tmp); } } }1212 for(inti=0;i<9;i++)
{ for(intj=0;j<9-i;j++)
{ if(strcmp(namelist[j],namelist[j+1])>0) { chartmp[20];
strcpy(tmp,namelist[j]); strcpy(namelist[j],namelist[j+1]); strcpy(namelist[j+1],tmp); } } }字符串元素的特殊交換算法1313 for(inti=0;i<9;i++)
{ for(intj=0;j<9-i;j++)
{ if(strcmp(namelist[j],namelist[j+1])>0) {
//page327,“strcpy()” chartmp[20];
strcpy(tmp,namelist[j]); strcpy(namelist[j],namelist[j+1]); strcpy(namelist[j+1],tmp); } } }字符串元素的特殊交換算法如何按字典逆序來排序姓名呢?1414如何按字典逆序來排序姓名 for(inti=0;i<9;i++)
{ for(intj=0;j<9-i;j++)
{ if(strcmp(namelist[j],namelist[j+1])<
0) {
//同前省略 } } }比較關(guān)系符改為小于號(hào),即按字典逆序排序姓名。1515如何按字典逆序來排序姓名 for(inti=0;i<9;i++)
{ for(intj=0;j<9-i;j++)
{ if(strcmp(namelist[j],namelist[j+1])<
0) {
//同前省略 } } }比較關(guān)系符改為小于號(hào),即按字典逆序排序姓名。如何根據(jù)用戶輸入來決定按何種次序排序姓名呢?1616可以用一個(gè)變量來記錄用戶的輸入,根據(jù)輸入選擇來判定用戶是想正逆排序姓名還是想逆序排序姓名。該變量的類型可以是?排序準(zhǔn)則的動(dòng)態(tài)變化1717可以用一個(gè)變量來記錄用戶的輸入,根據(jù)輸入選擇來判定用戶是想正逆排序姓名還是想逆序排序姓名。該變量的類型可以是:整數(shù)類型int字符類型char。。。排序準(zhǔn)則的動(dòng)態(tài)變化為什么這些類型都可以?假設(shè)使用charUserInput;來記錄用戶選擇:'U'表示升序,'D'表示降序1818排序準(zhǔn)則的動(dòng)態(tài)變化if(UserInput==‘D’){//Down,降序排列
if(strcmp(namelist[j],namelist[j+1])<
0)
{
//交換相鄰元素,同前省略
}
}
if(UserInput==‘U’){//Up,升序排序
if(strcmp(namelist[j],namelist[j+1])>
0){
//交換相鄰元素,同前省略}
}1919
charUserInput; cout<<"Pleaseinputorder(U=Up,D=Down):"; cin>>UserInput;
//確保輸入合法
assert(UserInput=='D'||
UserInput=='U');
如果輸入不合法,則程序會(huì)以崩潰的方式退出。2020for(inti=0;i<9;i++)
{
for(intj=0;j<9-i;j++)
{
if(UserInput=='D')
{
if(strcmp(namelist[j],namelist[j+1])<0)
{
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
}
}
if(UserInput=='U')
{
if(strcmp(namelist[j],namelist[j+1])>0)
{
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
}
} }}程序代碼還能簡化使之更清晰嗎?2121程序代碼的簡化
if(UserInput=='D')
{
if(strcmp(namelist[j],namelist[j+1])<0)
{
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
}
}2222程序代碼的簡化
if(UserInput=='D')
{
if(strcmp(namelist[j],namelist[j+1])<0)
{
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
}
}接連兩個(gè)if判斷,可合成一個(gè)!if(cond_1){if(cond_2){//...}}if(cond_1&&cond_2){//...}}2323for(inti=0;i<9;i++)
{
for(intj=0;j<9-i;j++)
{
if((UserInput=='D')&&
(strcmp(namelist[j],namelist[j+1])<0))
{
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
}
if((UserInput=='U')&&
(strcmp(namelist[j],namelist[j+1])>0))
{
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
} }}程序代碼還能做進(jìn)一步的簡化嗎?2424for(inti=0;i<9;i++)
{
for(intj=0;j<9-i;j++)
{
if((UserInput=='D')&&
(strcmp(namelist[j],namelist[j+1])<0)){
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
}
if((UserInput=='U')&&
(strcmp(namelist[j],namelist[j+1])>0)){
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
} }}怎么簡化?2525for(inti=0;i<9;i++)
{
for(intj=0;j<9-i;j++)
{
if((UserInput=='D')&&
(strcmp(namelist[j],namelist[j+1])<0)){
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
}
if((UserInput=='U')&&
(strcmp(namelist[j],namelist[j+1])>0)){
chartmp[20];
strcpy(tmp,namelist[j]);
strcpy(namelist[j],namelist[j+1]);
strcpy(namelist[j+1],tmp);
} }}怎么定義這個(gè)函數(shù)呢?Swap(namelist[j],namelist[j+1]);Swap(namelist[j],namelist[j+1]);2626Swap(…)函數(shù)的定義注意到:調(diào)用該函數(shù)時(shí),實(shí)參是namelist[j]和namelist[j+1],它們分別對應(yīng)二維數(shù)組變量namelist的第j“行”和第j+1“行”二維數(shù)組的“行變量”是一個(gè)數(shù)組,所以有://voidSwap(char[]first,char[]second);//ERRORvoidSwap(charfirst[],charsecond[]);//OK2727voidSwap(charfirst[],charsecond[]){ chartmp[20]; strcpy(tmp,first); strcpy(first,second); strcpy(second,tmp);}if((UserInput=='D')&&
(strcmp(namelist[j],namelist[j+1])<0)){ chartmp[20]; strcpy(tmp,namelist[j]); strcpy(namelist[j],namelist[j+1]); strcpy(namelist[j+1],tmp);}2828for(inti=0;i<9;i++){ for(intj=0;j<9-i;j++){ if((UserInput=='D')&& (strcmp(namelist[j],namelist[j+1])<0))
Swap(namelist[j],namelist[j+1]); if((UserInput=='U')&& (strcmp(namelist[j],namelist[j+1])>0))
Swap(namelist[j],namelist[j+1]); }}2929依樣畫葫蘆for(j=0;j<5;j++){ for(i=0;i<5-j;i++) { if(a[i]<a[i+1]) { p=a[i];
a[i]=a[i+1]; a[i+1]=p; } }}for(j=0;j<5;j++){ for(i=0;i<5-j;i++) { if(a[i]<a[i+1]) {
Swap(a[i],a[i+1]); } }}Page3030Swap(…)函數(shù)的定義注意到:調(diào)用該函數(shù)時(shí),程序中的實(shí)參是a[i]和a[i+1],它們分別對應(yīng)一維數(shù)組變量a的第i和第i+1個(gè)元素一維整數(shù)數(shù)組的元素,是一個(gè)整數(shù),其類型是整數(shù)類型故有voidSwap(intfirst,intsecond);依樣畫葫蘆3131#include<stdio.h>#include<meomry.h>voidSwap(intfirst,intsecond)
{ intp; p=first; first=second; second=p;}Voidmain()
{ inti,j,p,a[6]; memset(a,0,sizeof(a)); for(i=0;i<6;i++)
{ printf("請輸入待排序的數(shù)a[%d]=“,i); scanf(“%d”,&a[i]); }依樣畫葫蘆3232
for(j=0;j<9;j++) {
for(i=0;i<9-j;i++)
{
if(a[i]<a[i+1]) Swap(a[i],a[i+1]); }} for(i=0;i<10;i++) printf(“%d\n”,a[i]); return0;}依樣畫葫蘆可惜?。〕绦蚪Y(jié)果并不正確!3333BUG(問題)在哪里?voidSwap(intfirst,intsecond)
{
intp;
p=first;
first=second;
second=p;}變量first和second是函數(shù)Swap的形式參數(shù),該函數(shù)被調(diào)用時(shí),實(shí)參的值是被賦值給形參的,即相當(dāng)于是復(fù)制了一份。所以,在函數(shù)Swap中交換的是“復(fù)制品”之間內(nèi)容的交換,并不影響實(shí)參的內(nèi)容(值)!3434驗(yàn)證一下#include<iostream>usingnamespacestd;voidSwap(intfirst,intsecond){ intp; p=first; first=second; second=p;}Voidmain(){
inta=3,b=4; printf("BeforecallingSwap(),a=%d,b=%d“,a,b); Swap(a,b); printf("AftercallingSwap(),a=%d,b=%d“,a,b);}3535voidSwap(intfirst,intsecond)
{ printf("&first=%p,&second=%p“,&first,&second);
//同前省略}Voidmain()
{ inta=3,b=4; printf("&a=%p,&b=%p“,&a,&b);
//同前省略}進(jìn)一步驗(yàn)證3636比較實(shí)參與形參的內(nèi)存單元3737如何改正這個(gè)BUG(問題)?voidSwap(int*first,int*second){ intp; p=*first; *first=*second; *second=p;}//inmain()for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(a[i]<a[i+1])
Swap(&(a[i]),&(a[i+1]));3838為什么這樣BUG就被去掉了?firstsecond3849a[i]a[i+1]0X22FF400X22FF440X22FF400X22FF443849a[i]a[i+1]0X22FF400X22FF44intp=*first;
*first=*second;
*second=p;0X22FF400X22FF444938a[i]a[i+1]0X22FF400X22FF44??????0X22FF400X22FF440X22FF400X22FF400X22FF440X22FF440X22FF400X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函數(shù)調(diào)用前函數(shù)調(diào)用時(shí)函數(shù)調(diào)用后3939for(inti=0;i<9;i++){ for(intj=0;j<9-i;j++){ if((UserInput=='D')&& (strcmp(namelist[j],namelist[j+1])<0))
Swap(namelist[j],namelist[j+1]); if((UserInput=='U')&& (strcmp(namelist[j],namelist[j+1])>0))
Swap(namelist[j],namelist[j+1]); }}程序代碼還能做進(jìn)一步的簡化嗎?還是回到姓名排序(二維數(shù)組)的問題上來4040strcmp(…)的返回值是什么?#include<stdio.h>#include<string.h>intmain(){ cout<<strcmp("AAA","BBB")<<endl; cout<<strcmp("DDD","BBB")<<endl; return0;}程序輸出為:-114141for(inti=0;i<9;i++){ for(intj=0;j<9-i;j++){ if((UserInput=='D')&& (strcmp(namelist[j],namelist[j+1])==-1))
Swap(namelist[j],namelist[j+1]); if((UserInput=='U')&& (strcmp(namelist[j],namelist[j+1])==1))
Swap(namelist[j],namelist[j+1]); }}charUserInput?4242//...intUserInput;//用整數(shù)-1和1來表示排序準(zhǔn)則Scanf(“%d”,&UserInput);assert(UserInput==-1||UserInput==1);for(inti=0;i<9;i++){ for(intj=0;j<9-i;j++){ if(strcmp(namelist[j],namelist[j+1])
==UserInput)
Swap(namelist[j],namelist[j+1]); }}//...4343下面,任務(wù)又改變啦!領(lǐng)導(dǎo)和觀眾都強(qiáng)烈要求按歌手類型分開比賽,以保證公平競爭。即,會(huì)有多個(gè)不同人數(shù)的姓名數(shù)組需要排序處理。程序該如何修改呢?如通俗歌手有20人,美聲歌手有15人。4444難道是這樣么?不過…有點(diǎn)…for(inti=0;i<19;i++)//通俗歌手排序 for(intj=0;j<19-i;j++) if(strcmp(NL_1[j],NL_1[j+1])
==UserInput)
Swap(NL_1[j],NL_1[j+1]);for(inti=0;i<14;i++)//美聲歌手排序 for(intj=0;j<14-i;j++) if(strcmp(NL_2[j],NL_2[j+1])
==UserInput)
Swap(NL_2[j],NL_2[j+1]);4545冒泡泡的函數(shù)上場啦Voidbubble(charNL[][20],intnum,intUserInput){
for(inti=0;i<num-1;i++)
for(intj=0;j<num-1-i;j++)
if(strcmp(NL[j],NL[j+1])
==UserInput)
Swap(NL[j],NL[j+1]);}//...
bubble(NL_1,20,UserInput); bubble(NL_2,15,UserINput);4646voidbubble(inta[],intnum){
for(j=0;j<num-1;j++) {
for(i=0;i<num-1-j;i++)
{
if(a[i]<a[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運(yùn)動(dòng)與健康促進(jìn)工作計(jì)劃
- 管理者的影響力與說服力計(jì)劃
- 2025年雙氰胺合作協(xié)議書
- 評優(yōu)評先活動(dòng)與實(shí)施方案計(jì)劃
- 包裝行業(yè)設(shè)計(jì)創(chuàng)新包裝材料計(jì)劃
- 2025年微循環(huán)測試系統(tǒng)項(xiàng)目建議書
- 2025年激光轉(zhuǎn)速測量儀合作協(xié)議書
- 2025年中國消毒柜行業(yè)發(fā)展環(huán)境、供需態(tài)勢及投資前景分析報(bào)告(智研咨詢發(fā)布)
- 七年級(jí)下冊《平行線》課件與練習(xí)
- 電子政務(wù)系統(tǒng)權(quán)限設(shè)置指南
- 初中八年級(jí)音樂-勞動(dòng)號(hào)子《軍民大生產(chǎn)》
- 寒假社會(huì)實(shí)踐大學(xué)生返鄉(xiāng)
- 站樁的知識(shí)講座
- 【物業(yè)】《維修資金管理與使用》培訓(xùn)課件
- 革命文物主題陳列展覽導(dǎo)則(試行)
- 鋁合金時(shí)效爐安全操作規(guī)程模版
- DB2201T 59-2023 冬季供暖運(yùn)行參數(shù)氣象指標(biāo)及分級(jí)
- 醫(yī)學(xué)遺傳學(xué)第三版課件
- 四川家庭農(nóng)場補(bǔ)貼標(biāo)準(zhǔn)2023年
- 五年級(jí)下冊字帖
- 設(shè)備采購供貨安裝實(shí)施方案
評論
0/150
提交評論