版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計實驗報告專業(yè)班級日期11月26日成績實驗組別第3(2.7)次實驗指導(dǎo)教師李開學(xué)生姓名學(xué)號同組人姓名實驗名稱實驗8指針實驗一、實驗?zāi)康模?)熟練掌握指針的說明、賦值、使用。(2)掌握用指針引用數(shù)組的元素,熟悉指向數(shù)組的指針的使用。(3)熟練掌握字符數(shù)組與字符串的使用,掌握指針數(shù)組及字符指針數(shù)組的用法。(4)掌握指針函數(shù)與函數(shù)指針的用法。(5)掌握帶有參數(shù)的main函數(shù)的用法。二、實驗任務(wù)8.2實驗內(nèi)容及要求1.源程序改錯2.源程序完善、修改、替換3.跟蹤調(diào)試4.程序設(shè)計5.選做題8.3指定main函數(shù)的參數(shù)三、實驗步驟及結(jié)果(要求給出源程序和程序運行結(jié)果。另外,根據(jù)實驗內(nèi)容,記錄編輯、編譯、鏈接、調(diào)試程序的操作過程和實驗現(xiàn)象)8.2實驗內(nèi)容及要求1.源程序改錯下面程序是否存在錯誤?如果存在,原因是什么?如果存在錯誤,要求在計算機(jī)上對這個例子程序進(jìn)行調(diào)試修改,使之能夠正確執(zhí)行。#include<stdio.h>voidmain(void){float*p;scanf("%f",p);printf("%f\n",*p);}存在,錯誤為指針一開始沒有初始化,而sacnf傳入的是float型指針指向的地址,我們并不知道系統(tǒng)能給我們分配什么地址,所以說我們輸入的地址很有可能使程序崩潰。修改后代碼:#include<stdio.h>intmain(void){float*p;floata[10];//這里可以換成其他數(shù)字p=&a[0];scanf("%f",p);printf("%f\n",*p);return0;}2.源程序完善、修改、替換(1)下面的程序通過函數(shù)指針和菜單選擇來調(diào)用字符串拷貝函數(shù)或字符串連接函數(shù),請在下劃線處填寫合適的表達(dá)式、語句、或代碼片段來完善該程序。#include<stdio.h>#include<string.h>voidmain(void){char*(*p)(chara[],charb[]);chara[80],b[80],c[160],*result=c; intchoice,i; do{ printf("\t\t1copystring.\n"); printf("\t\t2connectstring.\n"); printf("\t\t3exit.\n"); printf("\t\tinputanumber(1-3)please!\n"); scanf("%d",&choice); }while(choice<1||choice>5); switch(choice){ case1: p=strcpy; break; case2: p=strcat; break; case3: gotodown; } getchar(); printf("inputthefirststringplease!\n"); i=0; gets(a); printf("inputthesecondstringplease!\n"); i=0; gets(b); result=p(a,b); printf("theresultis%s\n",result);down: ;}(2)請上機(jī)運行第(1)題程序,使之能按要求輸出下面結(jié)果:((輸入)表示該數(shù)據(jù)是鍵盤輸入數(shù)據(jù))1copystring.2connectstring.3exit.inputanumber(1-3)please!2(輸入)inputthefirststringplease!themoreyoulearn,(輸入)inputthesecondstringplease!themoreyouget.(輸入)theresultisthemoreyoulearn,themoreyouget.3.跟蹤調(diào)試#include<stdio.h>char*strcpy(char*,char*);voidmain(void){chara[20],b[60]="thereisaboatonthelake.";printf("%s\n",strcpy(a,b));}char*strcpy(char*s,char*t){while(*s++=*t++);return(s);}單步執(zhí)行。進(jìn)入strcpy時watch窗口中s為何值?返回main時,watch窗口中s為何值?進(jìn)入strcpy時:返回main時:排除錯誤,使程序輸出結(jié)果為:thereisaboatonthelake.#include<stdio.h>void*strcpy(char*,char*);intmain(void){chara[30],b[60]="thereisaboatonthelake.";strcpy(a,b);printf("%s\n",a);return0;}void*strcpy(char*s,char*t){while(*t!='\0'){ *s++=*t++; }*s='\0';//將函數(shù)類型設(shè)置為void型,然后不再返回直接打印a字符串即可}4.程序設(shè)計(1)一個長整型變量占4個字節(jié),其中每個字節(jié)又分成高4位和低4位。試從該長整型變量的高字節(jié)開始,依次取出每個字節(jié)的高4位和低4位并以數(shù)字字符的形式進(jìn)行顯示。#include<stdio.h>intmain(void){intn,i;scanf("%x",&n);char*p=(char*)&n;inthigh_half,low_half;for(i=3;i>=0;i--){low_half=p[i]&0x0f;if(low_half<10)low_half+='0';elselow_half+='A'-10;high_half=(p[i]&0xf0)>>4;if(high_half<10)high_half+='0';elsehigh_half+='A'-10;printf("%c%c\n",high_half,low_half);}return0;}利用大小為n的指針數(shù)組指向用gets函數(shù)輸入的n行,每行不超過80個字符。編寫一個函數(shù),它將每一行中連續(xù)的多個空格字符壓縮為一個空格字符。在調(diào)用函數(shù)中輸出壓縮空格后的各行,空行不予輸出。#include<stdio.h>#defineN10voidreducespace(char*p,intn);intmain(){ inti; char*p[N],arr[N][81]; printf("Input%d-linestrings:\n",N); for(i=0;i<N;i++) { *(p+i)=arr[i]; printf("the%dline:",i+1); gets(*(p+i)); } printf("\n\naftercompression:\n"); for(i=0;i<N;i++) { reducespace(*(p+i),i); } putchar(10); return0;}voidreducespace(char*p,intn)//削減空格的函數(shù),將多行空格壓縮成一個空格{ intflag=1,i,j=0,sum=0; chartemp[81]; for(i=0;*(p+i)!='\0';i++) { if(*(p+i)!=''&&flag) { temp[j++]=*(p+i); sum++; } if(*(p+i)==''&&flag)flag=0; if(*(p+i)!=''&&!flag) { temp[j++]=''; temp[j++]=*(p+i); flag=1; sum++; } temp[j]='\0'; } if(sum)printf("The%dline:%s\n",n+1,temp); elseprintf("Ofthe%dlinethereareallspaces\n",n+1);}輸入n個整數(shù),排序后輸出。排序的原則由命令行可選參數(shù)-d決定,有參數(shù)-d時按遞減順序排序,否則按遞增順序排序。要求將排序算法定義成函數(shù),利用指向函數(shù)的指針使該函數(shù)實現(xiàn)遞增或遞減排序。(main函數(shù)參數(shù)的處理見8.3節(jié))#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(intargc,char*argv[]){voiddownsort(char**p,intm);voidupsort(char**q,intk);intn=0;while(n<argc){printf("%s",argv[n]);n++;}printf("\n");if(!strcmp(argv[1],"-d"))downsort(&argv[2],n-2);elseupsort(&argv[1],n-1);return0;}voiddownsort(char**p,intm){inti,j;chart;for(i=0;i<m-1;i++)for(j=0;j<m-1;j++)if(*p[j]<*p[j+1])t=*p[j],*p[j]=*p[j+1],*p[j+1]=t;for(i=0;i<m;i++){*p[i]=*p[i]-'0';printf("%d",*p[i]);}}voidup_sort(char**q,intk){chart;inti,j;for(i=0;i<k-1;i++)for(j=0;j<k-1;j++)if(*q[j]>*q[j+1])t=*q[j],*q[j]=*q[j+1],*q[j+1]=t;for(i=0;i<k;i++){*q[i]=*q[i]-'0';printf("%d",*q[i]);}}注:我的電腦總是缺少一個插件,當(dāng)我把這個插件安裝到C盤指定目錄下仍然沒有效果,所以只能無法得知寫的程序是否正確。(4)設(shè)某個班有N個學(xué)生,每個學(xué)生修了M門課程(用#define定義N、M)。輸入M門課程的名稱,然后依次輸入N個學(xué)生中每個學(xué)生所修的M門課程的成績并且都存放到相應(yīng)的數(shù)組中。編寫下列函數(shù):a.計算每個學(xué)生各門課程平均成績;b.計算全班每門課程的平均成績;c.分別統(tǒng)計低于全班各門課程平均成績的人數(shù);d.分別統(tǒng)計全班各門課程不及格的人數(shù)和90分以上(含90分)的人數(shù)。在調(diào)用函數(shù)中輸出上面各函數(shù)的計算結(jié)果。(要求都用指針操作,不得使用下標(biāo)操作。)#include<stdio.h>#defineM2//course#defineN2//studentsintmain(void){charcourses[M][30],students[N][20];floattables[N][M];intc,s;char*co=&courses[0][0];//courses[2]co+2*30char*st=&students[0][0];float*gr=&tables[0][0];for(c=0;c<M;c++){printf("PleaseInputThe%dCourse\n",c+1);scanf("%s",courses[c]);}//coursenamesfor(s=0;s<N;s++){printf("PleaseInputThe%dStudent\n",s+1);scanf("%s",students[s]);}//studentsnamesfor(s=0;s<N;s++){printf("Forstudents:%s\n",students[s]);printf("Inputhis/hergrades:\n");for(c=0;c<M;c++) {printf("PleaseInputThe%s\n",courses[c]);scanf("%f",&tables[s][c]); }}//tablesfloatsum=0;for(s=0;s<N;s++){sum=0; printf("theaveragegradesof%s:\n",st+s*20); for(c=0;c<M;c++) { sum+=*(gr+s*M+c); } printf("%f\n",sum/M);}//(1)floatsum_=0;for(c=0;c<M;c++){sum_=0; printf("theaveragegradesof%s:\n",co+c*30); for(s=0;s<N;s++) { sum_+=*(gr+s*M+c); } printf("%f\n",sum_/N);}//(2)for(c=0;c<M;c++){sum_=0;printf("thenumberwhosegradesunderaverageof%s\n",co+c*30);intcou=0;for(s=0;s<N;s++) { sum_+=*(gr+s*M+c); }for(s=0;s<N;s++){if(*(gr+s*M+c)<sum_/N){cou++;}}printf("%d\n",cou);cou=0;}//(3)for(c=0;c<M;c++){printf("thenumberwhosegradesunder60of%s\n",co+c*30);intcou=0;for(s=0;s<N;s++){if(*(gr+s*M+c)<60)cou++;}printf("%d\n",cou);cou=0;}for(c=0;c<M;c++){printf("thenumberwhosegradeshigherthan90of%s\n",co+c*30);intcou=0;for(s=0;s<N;s++){if(*(gr+s*M+c)>=90)cou++;}printf("%d\n",cou);cou=0;}return0;}5.選做題(1)設(shè)有N位整數(shù)和M位小數(shù)(N=20,M=10)的數(shù)據(jù)a,b。編程計算a+b并輸出結(jié)果。如:12345678912345678912.1234567891+98765432109876543210.0123456789#include"stdio.h"#include"ctype.h"#defineN100/*N表示參與運算數(shù)據(jù)最長的長度*/voidadd_decimals(char*a,char*b,int*c,intn,char*d);voidadd_inte(char*a,char*b,intc,intn,char*d);intmain(void){chara1[N],b1[N],c1[N+1],a2[N],b2[N],c2[N+1];charc;intq,w,e,r;//tocountq=0;while((c=getchar())!='.'){if(isdigit(c))*(a1+q)=c;q++;}*(a1+q)='\0';w=0;while((c=getchar())!='\n'){if(isdigit(c))*(b1+w)=c;w++;}*(b1+w)='\0';e=0;chard;while((d=getchar())!='.'){if(isdigit(d))*(a2+e)=d;e++;}*(a2+e)='\0';r=0;while((d=getchar())!='\n'){if(isdigit(d))*(b2+r)=d;r++;}*(b2+r)='\0';//inputintmax,max_;if(w>r){max=w;intt;for(t=r;t<w;t++)*(b2+t)='0';}else{max=r;intt;for(t=w;t<r;t++)*(b1+t)='0';}//decimals!if(q>e){max_=q;inty;for(y=0;y<e;y++){*(a2+y+q-e)=*(a2+y);}for(y=0;y<q-e;y++){*(a2+y)='0';}*(a2+q)='\0';}else{max_=e;inty;for(y=0;y<q;y++){*(a1+y+e-q)=*(a1+y);}for(y=0;y<e-q;y++){*(a1+y)='0';}*(a1+e)='\0';}//zhengshuintjinwei=0;int*p=&jinwei;char*pc1=&a1[0];char*pc2=&a2[0];char*pc3=&b1[0];char*pc4=&b2[0];char*pc5=&c1[0];char*pc6=&c2[0];printf("a1=%s\n",a1);printf("a2=%s\n",a2);printf("b1=%s\n",b1);printf("b2=%s\n",b2);add_decimals(pc3,pc4,p,max,pc6);add_inte(pc1,pc2,jinwei,max_,pc5);printf("theresultis:\n");printf("%s.%s\n",c1,c2);return0;}voidadd_decimals(char*
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校建筑膨脹聚苯板外墻保溫方案
- 診所提升顧客滿意度的創(chuàng)新方案
- 商場節(jié)能技術(shù)改進(jìn)方案
- 高層建筑施工方案要點
- 舉行民事結(jié)婚儀式行業(yè)營銷策略方案
- 職業(yè)病危害預(yù)評價方案模板
- 建筑鋁擠壓材相關(guān)行業(yè)投資方案
- 7.1鐵塔基礎(chǔ)澆筑施工方案-
- 3.冬季施工專項方案
- 保衛(wèi)部木門改造施工方案
- 《成本會計》考試復(fù)習(xí)題庫(濃縮300題)
- 工作成功案例分享模板
- 國網(wǎng)基建各專業(yè)考試題庫大全-安全專業(yè)-上(單選題匯總)
- 新疆烏魯木齊2022學(xué)年高二上學(xué)期期中考試 英語
- (完整版)安全管理體系
- 2023年湖南有色金屬職業(yè)技術(shù)學(xué)院單招考試職業(yè)技能考試模擬試題及答案解析
- 中班健康《魔幻消氣屋》有聲動態(tài)課件
- 基于蘭州市局部路網(wǎng)數(shù)據(jù)的非平衡交通分配模型分析
- 夏商周考古課件 第1章 緒論
- GB/T 709-2019熱軋鋼板和鋼帶的尺寸、外形、重量及允許偏差
- GB/T 29602-2013固體飲料
評論
0/150
提交評論