版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章指針【練習(xí)8-1】如果有定義”intm,n=5,*p=&m;與m=n等價(jià)的語(yǔ)句就是B。Am=*p;B、*p=*&n;C、m=&n;D、m=*p;解答:A:p就是指向m的指針變量,所以*p等價(jià)于m。即m=m。B:&n就是n的地址,*&n就是n的值,即把n的值賦給p指向的值m。即m=n。C:&n就是n的地址。即把n的地址賦給m。D:*p就是指p指向的指針?biāo)赶虻闹?在此無(wú)意義。故選B?!揪毩?xí)8-2】調(diào)用函數(shù)求兩個(gè)數(shù)的與與差:計(jì)算輸入的兩個(gè)數(shù)的與與差,要求自定義一個(gè)函數(shù)sum_diff(floatop1,floatop2,float*psum,float*pdiff),其中op1與op2就是輸
2、入的兩個(gè)數(shù),*psum與*pdiff就是計(jì)算得出的與與差。解答:#includevoidsum_diff(floatop1,floatop2,float*psum,float*pdiff);intmain(void)floatop1,op2,sum,diff;printf(Inputop1andop2:);scanf(%f%f,&op1,&op2);sum_diff(op1,op2,&sum,&diff);printf(%f+%f=%f;%f-%f=%fn,op1,op2,sum,op1,op2,diff);return0;voidsum_diff(floatop1,floatop2,floa
3、t*psum,float*pdiff)*psum=op1+op2;*pdiff=op1-op2;【練習(xí)8-3】?jī)蓚€(gè)相同類型的指針變量能不能相加?為什么?解答:不能。因?yàn)橹羔樧兞烤褪且环N特殊的變量,指針變量的值存放的就是所指向變量的地址,兩個(gè)地址相加并不能保證結(jié)果為一個(gè)有效的地址值,因而在C語(yǔ)言中指針變量相加就是非法的?!揪毩?xí)8-4】根據(jù)表8、2所示,這組數(shù)據(jù)的冒泡排序其實(shí)循環(huán)到第6遍(即n-2)時(shí)就已經(jīng)排好序了,說(shuō)明有時(shí)候并不一定需要n-1次循環(huán)。請(qǐng)思考如何改進(jìn)冒泡排序算法并編程實(shí)現(xiàn)(提示:當(dāng)發(fā)現(xiàn)一遍循環(huán)后沒(méi)有數(shù)據(jù)發(fā)生交換,說(shuō)明已經(jīng)排好序了)。解答:設(shè)置一個(gè)標(biāo)志變量“&進(jìn)入一輪循環(huán)前設(shè)置為0,
4、在循環(huán)中有發(fā)生數(shù)據(jù)交換就改寫(xiě)flag值為1。當(dāng)該輪循環(huán)結(jié)束后檢查flag值,如果變?yōu)?說(shuō)明發(fā)生了數(shù)據(jù)交換,還沒(méi)有排好序,如果為0說(shuō)明沒(méi)有發(fā)生交換,已經(jīng)排好序。#includevoidbubble(inta,intn);intmain(void)intn,i,a8;printf(Entern(n=8):);scanf(%d,&n);printf(Entera%d:,n);for(i=0;in;i+)scanf(%d,&ai);bubble(a,n);printf(Aftersorted,a%d=,n);for(i=0;in;i+)printf(%3d,ai);return0;voidbubble
5、(inta,intn)inti,j,temp,flag;for(i=1;in;i+)flag=0;for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;flag=1;if(flag=0)break;【練習(xí)8-5】重做例8-9,要求使用選擇排序算法。解答:#includevoidbubble(inta,intn);intmain(void)inti,n,a8;printf(Entern(n=8):);scanf(%d,&n);printf(Entera%d:,n);for(i=0;in;i+)scanf(%d,&ai);bubble(a,n);printf(Afters
6、orted,a%d=,n);for(i=0;in;i+)printf(%3d,ai);return0;voidbubble(inta,intn)inti,j,temp,index;for(i=0;in-1;i+)index=i;for(j=i+1;jn;j+)if(ajaindex)index=j;temp=ai;ai=aindex;aindex=temp;8、4電碼加密【練習(xí)8-6】在使用scanf()函數(shù)時(shí),輸入?yún)?shù)列表需要使用取地址操作符&,但當(dāng)參數(shù)為字符數(shù)組名時(shí)并沒(méi)有使用,為什么?如果在字符數(shù)組名前加上取地址操作符&,會(huì)發(fā)生什么?解答:因?yàn)樽址麛?shù)組名的值就是一個(gè)特殊的固定地址,可以瞧作
7、就是常量指針,因此不需要再使用取地址符來(lái)獲取該數(shù)組的地址。如果在字符數(shù)組名str前加上取地址操作符&,那么對(duì)其取地址&str可以瞧做就是這個(gè)數(shù)組的第一個(gè)元素的地址,由于數(shù)組地址與數(shù)組第一個(gè)元素的地址相同,所以&str表示地址值與str表示的地址值就是相等的。對(duì)scanf()的變長(zhǎng)參數(shù)列表的話,編譯器只負(fù)責(zé)參數(shù)傳遞,怎么解釋后邊的幾個(gè)地址的含義,就是由前邊的字符串確定的。所以使用scanf(s,str)s與anf(“s”,&str)都能通過(guò)編譯且正常執(zhí)行?!揪毩?xí)8-7】C語(yǔ)言不允許用賦值表達(dá)式直接對(duì)數(shù)組賦,為值什么?解答:數(shù)組名可以瞧作就是常量指針,因?yàn)椴豢梢詫?duì)一個(gè)常量進(jìn)行賦值,所以不允許用賦值
8、表達(dá)式直接對(duì)數(shù)組進(jìn)行賦值?!揪毩?xí)8-8】輸入一個(gè)字符串,把該字符串的前3個(gè)字母移到最后,輸出變換后的字符串。比如輸入“abcdef”,輸出為“defabc”。解答:#include#include#defineMAXLINE100intmain(void)charlineMAXLINE,str4;inti;printf(Inputthestring:);gets(line);if(strlen(line)3)printf(字符串長(zhǎng)度小于3,不符合要求!n);for(i=0;i3;i+)stri=linei;stri=0;for(i=3;linei!=0;i+)linei-3=linei;lin
9、ei-3=0;strcat(line,str);printf(%s%sn,Afterchanging:,line);return0;【練習(xí)8-9】使用動(dòng)態(tài)內(nèi)存分配的方法實(shí)現(xiàn)例8-9的冒泡排序。解答:#include#includevoidbubble(inta,intn);intmain(void)intn,j,*a,i,temp;printf(Entern(n=8):);scanf(%d,&n);if(a=(int*)calloc(n,sizeof(int)=NULL)printf(Notabletoallocatememory、n);exit(1);printf(Entea%d:,n);f
10、or(i=0;in;i+)scanf(%d,a+i);bubble(a,n);printf(Aftersorted,a%d=,n);for(i=0;in;i+)printf(%3d,*(a+i);free(a);return0;voidbubble(inta,intn)inti,j,temp;for(i=1;in;i+)for(j=0;j*(a+j+1)temp=*(a+j);*(a+j)=*(a+j+1);*(a+j+1)=temp;習(xí)題8一、選擇題1、下列語(yǔ)句定義x為指向int類型變量a的指針,其中哪一個(gè)就是正確的B。A.inta,*x=a;、Binta,*x=&a;C.int*x=&a,
11、a;D.inta,x=a;.以下選項(xiàng)中,對(duì)基本類型相同的指針變量不能進(jìn)行運(yùn)算的運(yùn)算符就是A。A.+B.-C.=D.=.若有以下說(shuō)明,且0=i=0)的元素前。如果i=元素的個(gè)數(shù),則x插入到末尾。原有的元素個(gè)數(shù)存放在指針n所指向的變量中,插入后元素個(gè)數(shù)加1。請(qǐng)?zhí)羁铡oidinsert(doublea,int*n,doublex,inti)intj;if_(i=i_;j-)_aj+1_=aj;else=*n;ai=_x_;(*n)+;2.下列程序先消除輸入字符串的前后空格,再判斷就是否就是“回文”(即字符串正讀與倒讀都就是一樣),若就是則輸出YES,否則輸出NO。請(qǐng)?zhí)羁铡?include#incl
12、udeintmain(void)chars80,ch,*p,*q;inti,j,n;gets(s);p=_s_;while(*p=)_p+_;n=strlen(s);q=_s+n-1_;while(*q=)_q-_;while(_pq_&*p=*q)p+;_q-_;if(pq)printf(“NOn”);elseprintf(“YESn”);return0;3、下列程序在數(shù)組中同時(shí)查找最大元素與最小元素的下標(biāo),分別存放在main()函數(shù)的fmax與min變量中。請(qǐng)?zhí)羁?。voidfind(int*,int,int*,int*);intmain(void)intmax,min,a=5,3,7,9,
13、2,0,4,1,6,8;find(_a,10,&max,&min_);printf(“%d,%dn”,max,min);return0;voidfind(int*a,intn,int*max,int*min)inti;*max=*min=0;for(i=1;ia*max)_*max=i_;if(aia*min)_*min=i_;TOC o 1-5 h z4、寫(xiě)出下列程序的執(zhí)行結(jié)果001224002346#includeintmain(void)inta10,b10,*pa,*pb,i;pa=a;pb=b;for(i=0;i3;i+,pa+,pb+)*pa=i;*pb=2*i;printf(“%
14、dt%dn”,*pa,*pb);pa=&a0;pb=&b0;for(i=0;i3;i+)*pa=*pa+i;*pb=*pb+i;printf(“%dt%dn”,*pa+,*pb+);return0;三、程序設(shè)計(jì)題、拆分實(shí)數(shù)的整數(shù)與小數(shù)部分:要求定義一個(gè)函數(shù)voidsplitfloat(floatx,int*intpart,float*fracpart),其中x就是被拆分的實(shí)數(shù),*intpart與*fracpart分別就是將實(shí)數(shù)x拆分出來(lái)的整數(shù)部分與小數(shù)部分。編寫(xiě)主函數(shù),并在其中調(diào)用函數(shù)splitfloat()。試編寫(xiě)相應(yīng)程序。解答:#includevoidsplitfloat(floatx,i
15、nt*intpart,float*fracpart);intmain(void)floatx,fracpart;intintpart;printf(Inputanumber:);scanf(%f,&x);splitfloat(x,&intpart,&fracpart);printf(Theintpartis:%d,intpart);printf(Thefracpartis:%f,fracpart);return0;voidsplitfloat(floatx,int*intpart,float*fracpart)*intpart=(int)x;*fracpart=x-*intpart;.在數(shù)組中
16、查找指定元素:輸入1個(gè)正整數(shù)n(1n=10),然后輸入n個(gè)整數(shù)存入數(shù)組a中,再輸入一個(gè)整數(shù)x,在數(shù)組a中查找x,若找到則輸出相應(yīng)的下標(biāo),否則顯示“Notfound”。要求定義與調(diào)用函數(shù)search(intlist,intn,intx),在數(shù)組list中查找元素x,若找到則返回相應(yīng)下標(biāo),否則返回-1,參數(shù)n代表數(shù)組list中元素的數(shù)量。試編寫(xiě)相應(yīng)程序。解答:#includeintsearch(intlist,intn,intx);intmain(void)inti,n,res,x;inta10;printf(Inputn:);scanf(%d,&n);for(i=0;i=0)printf(ind
17、ex=%dn,res);elseprintf(Notfoundn);return0;intsearch(intlist,intn,intx)inti;for(i=0;in;i+)if(listi=x)returni;return-1;3、循環(huán)后移:有n個(gè)整數(shù),使前面各數(shù)順序向后移m個(gè)位置,移出的數(shù)再?gòu)拈_(kāi)頭移入。編寫(xiě)一個(gè)函數(shù)實(shí)現(xiàn)以上功能,在主函數(shù)中輸入n個(gè)整數(shù)并輸出調(diào)整后的n個(gè)數(shù)。試編寫(xiě)相應(yīng)程序。解答:#includevoidmove(int*x,intn,intm);intmain(void)inti,m,n;inta80;printf(Entern:);scanf(%d,&n);printf
18、(Enterm:);scanf(%d,&m);for(i=0;in;i+)scanf(%d,&ai);move(a,n,m);printf(Aftermove:);for(i=0;in;i+)printf(%d,ai);return0;voidmove(int*p,intn,intm)inti,j,k=0,a80;for(i=0;in;i+)if(in-m)ai+m=pi;elseak+=pi;for(i=0;in;i+)pi=ai;4、報(bào)數(shù):有n個(gè)人圍成一圈,按順序從1到n編好號(hào)。從第一個(gè)人開(kāi)始報(bào)數(shù),報(bào)到m(mn)的人退出圈子,下一個(gè)人從1開(kāi)始報(bào)數(shù),報(bào)到m的人退出圈子。如此下去,直到留下最后
19、一個(gè)人。編寫(xiě)程序,輸入整數(shù)n與山,并按退出順序輸出退出圈子的人的編號(hào)。試編寫(xiě)相應(yīng)程序。解答:#includeintmain(void)intcount,i,j,m,n;intnum80=0;printf(Inputn:);scanf(%d,&n);printf(Inputm:);scanf(%d,&m);i=j=count=0;while(countn-1)if(numi=0)j+;if(j%m=0&j)count+;numi=-1;j=0;/報(bào)數(shù)報(bào)到m后,j重歸0,開(kāi)始下次報(bào)數(shù)i+;/讀取下一個(gè)元素i%=n;/一次n個(gè)跟報(bào)完數(shù),開(kāi)始下一次(除余n就是因?yàn)閕就是下標(biāo),從0開(kāi)始,n就是具體數(shù)/從
20、1開(kāi)始/i為n時(shí)下次a0報(bào)數(shù))for(i=0;in;i+)if(numi=0)printf(LastNois:%dn,i+1);return0;5、使用函數(shù)實(shí)現(xiàn)字符串復(fù)制:輸入一個(gè)字符串t與一個(gè)正整數(shù)m,將字符串中從第m個(gè)字符開(kāi)始的全部字符復(fù)制到字符串s中,再輸出字符串s。要求自定義并調(diào)用函數(shù)voidstrmcpy(char*s,char*t,intm)。試編寫(xiě)相應(yīng)程序。解答:#include#includevoidstrmcpy(char*s,char*t,intm);intmain(void)chars80,t80;intm;printf(Inputthestring:);gets(t);
21、printf(Enterm:);scanf(%d,&m);if(strlen(t)m)printf(ErrorInput);return0;elsestrmcpy(s,t,m);puts(s);return0;voidstrmcpy(char*s,char*t,intm)t=t+m-1;while(*t!=0)*s=*t;s+;t+;*s=0;6、刪除字符:輸入一個(gè)字符串,再輸入一個(gè)字符ch,將字符串中所有的ch字符刪除后輸出該字符串。要求定義與調(diào)用函數(shù)delchar(s,c),該函數(shù)將字符串s中出現(xiàn)的所有c字符刪除。試編寫(xiě)相應(yīng)程序。解答:#includevoiddelchar(char*s,
22、charc);intmain(void)charc;chars80;printf(Inputthestring:);gets(s);printf(Inputach:);scanf(%c,&c);delchar(s,c);printf(result:);puts(s);return0;voiddelchar(char*s,charc)inti,j;i=j=0;while(si!=0)if(si!=c)sj=si;j+;i+;sj=0;字符串排序:輸入5個(gè)字符串,按由小到大的順序輸出。試編寫(xiě)相應(yīng)程序。解答:#include#includeintmain(void)intn,i,j,index;charsx8080,stemp80;prin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年福建中醫(yī)藥大學(xué)輔導(dǎo)員考試筆試真題匯編附答案
- 2024年蘇州農(nóng)業(yè)職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試參考題庫(kù)附答案
- 2024年蚌埠醫(yī)科大學(xué)輔導(dǎo)員考試筆試真題匯編附答案
- 2024年西安石油大學(xué)輔導(dǎo)員考試參考題庫(kù)附答案
- 2024年鄭州工程技術(shù)學(xué)院輔導(dǎo)員考試筆試真題匯編附答案
- 2024年陜西工業(yè)職業(yè)技術(shù)大學(xué)輔導(dǎo)員考試筆試真題匯編附答案
- 2025南平武夷新區(qū)業(yè)務(wù)部門招聘3人備考題庫(kù)含答案
- 2025年商丘工學(xué)院輔導(dǎo)員招聘考試真題匯編附答案
- 2025年西安精動(dòng)微電機(jī)科技有限公司招聘(6人)參考題庫(kù)附答案
- 2025廣東河源市紫金縣招聘應(yīng)急救援隊(duì)員1人參考題庫(kù)含答案
- 2026年湖南吉利汽車職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)及答案1套
- 【語(yǔ)文】上海市黃浦區(qū)上海實(shí)驗(yàn)小學(xué)小學(xué)二年級(jí)上冊(cè)期末試題(含答案)
- 廣西名校高考模擬2026屆高三上學(xué)期第二次摸底考試數(shù)學(xué)試卷(含答案)
- 醫(yī)院培訓(xùn)課件:《靜配中心審方與分批規(guī)則》
- 2025年擔(dān)保公司個(gè)人年度總結(jié)
- 2025年九年級(jí)上學(xué)期期末英語(yǔ)試卷及答案(共三套)
- 三峽集團(tuán)2025招聘筆試真題及答案解析
- 尾礦綜合利用技術(shù)在生態(tài)環(huán)境保護(hù)中的應(yīng)用與經(jīng)濟(jì)效益分析報(bào)告
- 施工現(xiàn)場(chǎng)火災(zāi)事故預(yù)防及應(yīng)急措施
- 污水處理站施工安全管理方案
- 2025年蘇州市事業(yè)單位招聘考試教師招聘體育學(xué)科專業(yè)知識(shí)試卷
評(píng)論
0/150
提交評(píng)論