版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
-24-8.1合并字符串輸入兩個(gè)已經(jīng)按從小到大順序排列好的字符串,編寫一個(gè)合并兩個(gè)字符串的函數(shù),使合并后的字符串,仍然是從小到大排列。輸入:兩個(gè)已經(jīng)排好順序(升序)的兩個(gè)字符串輸出:一個(gè)合并在一起的有序(升序)的字符串要求:設(shè)計(jì)一個(gè)效率盡量高的算法,對(duì)每個(gè)字符串只掃描一遍就可以了。如果采用先進(jìn)行串連接,然后再進(jìn)行排序的算法,則效率太低了。#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){chara[100],b[100],t;intk,i,j;gets(a);gets(b);strcat(a,b);k=strlen(a);for(j=1;j<=k;j++)for(i=0;i<k-j;i++)if(a[i]>=a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}puts(a);return0;}8.3刪除重復(fù)字符背景:輸入一個(gè)長度不超過100的字符串,刪除串中的重復(fù)字符。輸入:輸入要檢查的字符串,長度不超過100個(gè)字符。例如:abacaeedabcdcd。輸出:刪除重復(fù)字符后的字符串。例如:abced。#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){chara[100],b[100];intn,i,j,cnt=1;gets(a);n=strlen(a);b[0]=a[0];for(i=1;i<n;i++){for(j=0;j<i;j++){if(a[i]==a[j])break;}if(a[i]==a[j]&&i==j){b[cnt]=a[i];cnt++;}}for(i=0;i<cnt;i++)printf("%c",b[i]);printf("\n");return0;}8.4刪除字符串中指定字符輸入兩個(gè)字符串s1和s2,在s1中刪除任何s2中有的字符。例如,s1:“abc123ad”,s2:“a1”,則輸出“bc23d”。輸入:兩個(gè)字符串s1和s2輸出:刪除后的字符串s1#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){chara[100],b[100],c[100];intx,y,i,j,cnt;scanf("%s",a);scanf("%s",b);x=strlen(b);y=strlen(a);for(j=0;j<x;j++){cnt=0;for(i=0;i<y;i++)if(a[i]!=b[j]){c[cnt]=a[i];cnt++;}strcpy(a,c);y=cnt;}for(i=0;i<cnt;i++)printf("%c",c[i]);printf("\n");return0;}8.5單詞有多少用空格或換行分開的字符串稱為單詞。輸入多行字符串,直到遇到了單詞"stop"時(shí)才停止。最后輸出單詞的數(shù)量。用于分割單詞的空格或換行可能多于1個(gè)。輸入:多個(gè)字符串輸出:單詞的數(shù)量#include<stdio.h>#include<malloc.h>#include<string.h>voidmain(){intcount=0;char*word;while(1){word=(char*)malloc(sizeof(char)*20);scanf("%s",word);++count;if(0==strcmp(word,"stop"))break;free(word);}printf("%d\n",count-1);}8.6在指定位置插入字符串輸入兩個(gè)字符串s1、s2和s1中任意字符k,在s1中的指定字符k第一次出現(xiàn)的位置處插入字符串s2并輸出。輸入:兩個(gè)字符串s1、s2和s1中任意字符k輸出:插入后的字符串s1#include<stdio.h>#include<string.h>voidmain(){chars1[100],s2[100],s3[100];charc;inti,j,n,t,count=-1;gets(s1);gets(s2);n=strlen(s1);t=strlen(s2);scanf("%c",&c);for(i=0;i<=n-1;i++){count=count+1;if(c==s1[i])break;}for(i=0;i<count;i++)s3[i]=s1[i];for(i=count;i<count+t;i++)s3[i]=s2[i-count];for(i=count+t;i<=n+t;i++)s3[i]=s1[i-t];puts(s3);/*for(i=0;i<q;i++){printf("%c",s3[i]);}printf("\n");*/}選做T8.1拱豬計(jì)分背景:拱豬是一種很有趣的撲克牌游戲。即使你不知道它的玩法,你也可以由它的計(jì)分方式來了解它的趣味性。假設(shè)在此我們僅考慮四個(gè)人的拱豬牌局,本題要求你根據(jù)下面的計(jì)分規(guī)則,在牌局結(jié)束時(shí)計(jì)算四位玩家所得分?jǐn)?shù)。我們分別以S、H、D及C來代表黑桃,紅心,方塊及梅花,并以數(shù)字1至13來代表A、2、…、Q、K等牌點(diǎn),例如:H1為紅心A,S13為黑桃K。牌局結(jié)束時(shí),由各玩家持有的有關(guān)計(jì)分的牌(計(jì)分牌)僅有S12(豬),所有紅心牌,D11(羊)及C10(加倍)等16張牌。其它牌均棄置不計(jì)。若未持有這16張牌之任一張則以得零分計(jì)算。若持有C10的玩家只有該張牌而沒有任何其它牌則得+50分,若除了C10還有其它計(jì)分牌,則將其它計(jì)分牌所得分?jǐn)?shù)加倍計(jì)算。若紅心牌不在同一家,則H1至H13等13張牌均以負(fù)分計(jì),其數(shù)值為-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40。而且S12與D11分別以-100及+100分計(jì)算。若紅心牌H1至H13均在同一家,有下列情形:所有紅心牌以+200分計(jì)算。若S12、D11皆在吃下所有紅心牌之一家,則此玩家得+500分。而C10還是以前面所述原則計(jì)算之。例一:若各玩家持有計(jì)分牌如下:(每行代表一玩家所持有之牌)S12H3H5H13D11H8H9C10H1H2H4H6H7H10H11H12則各家之得分依序?yàn)椋?148、+83、-138及-60。例二:若各玩家持有計(jì)分牌如下:(第四家未持有任何計(jì)分牌)H1H2H3H4H5H6H7H8H9H10H11H12H13S12C10D11則各家之得分依序?yàn)椋?200、-200、+100及0。例三:若有一玩家持有所有16張計(jì)分牌,則得+1000分。其余三家均得零分。輸入:每個(gè)輸入文件由多組測(cè)試數(shù)據(jù)構(gòu)成,每組測(cè)試數(shù)據(jù)有四行,每一行第一個(gè)數(shù)為該玩家所持有計(jì)分牌總數(shù),而后列出其所持有之所有計(jì)分牌,牌數(shù)與各計(jì)分牌均以一個(gè)以上的空格分開。相鄰兩組測(cè)試數(shù)據(jù)之間不會(huì)有空白行,讀到四家持牌數(shù)都為0表示文件結(jié)束。輸出:每一行輸出一組測(cè)試數(shù)據(jù)對(duì)應(yīng)的結(jié)果,依次輸出各家所得分?jǐn)?shù),共四個(gè)整數(shù)(含正負(fù)號(hào),0除外),相鄰兩個(gè)整數(shù)之間以一個(gè)空格分開,符號(hào)和數(shù)字間不可以有空格。每組輸出間不需要有空白行。#include"stdio.h"intmyinput(intcard[],intnumber[]){inti,n;chars[5];for(i=0;i<4;i++){scanf("%d",&n);number[i]=n;while(n--){scanf("%s",s);switch(s[0]){case'S':card[13]=i;break;case'D':card[14]=i;break;case'C':card[15]=i;break;case'H':s[2]=='\0'?(card[s[1]-'1']=i):(card[s[2]-'1'+10]=i);}}}returnnumber[0]+number[1]+number[2]+number[3];}intmain(){intvalue[15]={-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40,-100,100},card[16],score[4]={0,0,0,0},number[4],i,s,input();while(myinput(card,number)){for(i=0,s=0;i<13;i++)s+=card[i];if(s%13){for(i=0;i<15;i++)score[card[i]]+=value[i];}else{if(card[0]==card[13]&&card[13]==card[14])score[card[0]]+=500;else{score[card[0]]+=200;score[card[14]]+=value[14];score[card[13]]+=value[13];}}score[card[15]]+=number[card[15]]==1?50:score[card[15]];for(i=0;i<4;i++)printf("%s%d%s",score[i]>0?"+":"",score[i],i==3?"\n":"");for(i=0;i<4;i++)score[i]=0;}return0;}選作T8.2合并果子在一個(gè)果園里,多多已經(jīng)將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合并,多多可以把兩堆果子合并到一起,消耗的體力等于兩堆果子的重量之和。可以看出,所有的果子經(jīng)過n-1次合并之后,就只剩下一堆了。多多在合并果子時(shí)總共消耗的體力等于每次合并所耗體力之和。因?yàn)檫€要花大力氣把這些果子搬回家,所以多多在合并果子時(shí)要盡可能地節(jié)省體力。假定每個(gè)果子重量都為1,并且已知果子的種類數(shù)和每種果子的數(shù)目,你的任務(wù)是設(shè)計(jì)出合并的次序方案,使多多耗費(fèi)的體力最少,并輸出這個(gè)最小的體力耗費(fèi)值。例如有3種果子,數(shù)目依次為1,2,9??梢韵葘?、2堆合并,新堆數(shù)目為3,耗費(fèi)體力為3。接著,將新堆與原先的第三堆合并,又得到新的堆,數(shù)目為12,耗費(fèi)體力為12。所以多多總共耗費(fèi)體力=3+12=15??梢宰C明15為最小的體力耗費(fèi)值。輸入:輸入包括兩行,第一行是一個(gè)整數(shù)n(1<=n<=10000),表示果子的種類數(shù)。第二行包含n個(gè)整數(shù),用空格分隔,第i個(gè)整數(shù)ai(1<=ai<=10000)是第i種果子的數(shù)目。輸出:輸出包括一行,這一行只包含一個(gè)整數(shù),也就是最小的體力耗費(fèi)值。輸入數(shù)據(jù)保證這個(gè)值小于231。#include<stdio.h>#include<string.h>#include<math.h>voidmain(){inti,j,k,t,n,sum=0;inta[10]={0};intb[10]={0};chars[10][100];scanf("%d",&n);for(i=1;i<=n;i++)scanf("%s",s[i]);for(t=1;t<=n;t++)a[t]=strlen(s[t]);for(i=1;i<=n;i++)for(j=0;j<a[i];j++)s[i][j]=s[i][j]-48;for(j=1;j<=n;j++){for(i=0;i<=a[j]/2-1;i++){t=s[j][i];s[j][i]=s[j][a[j]-1-i];s[j][a[j]-1-i]=t;}}for(j=1;j<=n;j++){for(i=0;i<=a[j];i++){b[j]=b[j]+s[j][i]*pow(10,i);}}for(j=1;j<=n-1;j++)for(i=1;i<=n-j;i++){if(b[i]>b[i+1]){t=b[i];b[i]=b[i+1];b[i+1]=t;}}sum=(n-1)*(b[1]+b[2]);for(i=2;i<=n-1;i++)sum=sum+(n-i)*b[i+1];printf("%d\n",sum);}選作T8.3安全的密碼隨著電子設(shè)備的廣泛運(yùn)用,密碼也漸漸融入每個(gè)人的生活。保護(hù)好密碼,不僅關(guān)系到個(gè)人隱私,更關(guān)系到個(gè)人的財(cái)產(chǎn)和安全。一個(gè)安全的密碼,最好由大小寫字母、數(shù)字或符號(hào)組成。包含越多種類的字符,其安全性就越高。同時(shí)密碼還需要有一定的長度,通常至少要由六個(gè)以上的字符組成。并不是每個(gè)人都喜歡這樣復(fù)雜的密碼,很多人在設(shè)置密碼的時(shí)候,喜歡使用自己的名字或者生日,但這是很大的安全隱患。任務(wù)小林正在設(shè)計(jì)一個(gè)網(wǎng)絡(luò)交易系統(tǒng),為了保證用戶的密碼安全,他需要一個(gè)程序,判斷用戶自己設(shè)置的密碼是否安全,如果不安全,則給出提示。現(xiàn)在他向你求助,請(qǐng)你幫忙設(shè)計(jì)一個(gè)程序來解決這個(gè)問題。應(yīng)當(dāng)按照以下的規(guī)則來判斷密碼是否安全:如果密碼長度小于6位,則不安全如果組成密碼的字符只有一類,則不安全如果組成密碼的字符有兩類,則為中度安全如果組成密碼的字符有三類或以上,則為安全通常,可以認(rèn)為數(shù)字、大寫字母、小寫字母和其它符號(hào)為四類不同的字符。輸入:輸入的第一行是一個(gè)整數(shù)N,表明后面有多少組密碼。隨后的N行輸入包括N個(gè)密碼,每個(gè)密碼的長度均小于20個(gè)字符。輸出:針對(duì)每一個(gè)密碼判斷并輸出它是否安全。對(duì)于不安全的密碼輸出"NotSafe",對(duì)于中度安全的密碼輸出"MediumSafe",對(duì)于安全的密碼輸出"Safe"輸入樣例41234abcdefABC1231#c3Gh輸出樣例NotSafeNotSafeMediumSafeSafe#include<stdio.h>#include<string.h>voidmain(){intn,i,j,k,t,flag1=0,flag2=0,flag3=0,flag4=0;chars[20][50];scanf("%d",&n);for(i=0;i<=n;i++)gets(s[i]);for(i=1;i<=n;i++){t=strlen(s[i]);if(t<6)printf("NotSafe\n");if(t>=6){for(flag1=0,flag2=0,flag3=0,flag4=0,j=0;s[i][j]!='\0';j++){if(s[i][j]>=48&&s[i][j]<=57)flag1++;if(s[i][j]>=65&&s[i][j]<=90)flag2++;if(s[i][j]>=97&&s[i][j]<=122)flag3++;if((s[i][j]>=33&&s[i][j]<=47&&s[i][j]>=58&&s[i][j]<=64&&s[i][j]>=91&&s[i][j]<=96&&s[i][j]>=123&&s[i][j]<=126)||(s[i][j]==''))flag4++;}if(flag1==t||flag2==t||flag3==t||flag4==t)printf("NotSafe\n");if((flag1*flag2>0&&flag3==0&&flag4==0)||(flag1*flag3>0&&flag2==0&&flag4==0)||(flag1*flag4>0&&flag2==0&&flag3==0)||(flag2*flag3>0&&flag1==0&&flag4==0)||(flag2*flag4>0&&flag3==0&&flag1==0)||(flag3*flag4>0&&flag1==0&&flag2==0))printf("MediumSafe\n");if((flag1*flag2*flag3>0&&flag4==0)||(flag1*flag2*flag4>0&&flag3==0)||(flag1*flag4*flag3>0&&flag2==0)||(flag4*flag2*flag3>0&&flag1==0)||(flag1*flag2*flag3*flag4>0))printf("Safe\n");}}}選作T8.4掃雷背景:你玩兒過掃雷游戲吧?有個(gè)操作系統(tǒng)中帶了這個(gè)小游戲,那個(gè)系統(tǒng)叫什么來著?在游戲中要想過關(guān),就必須要在一個(gè)NxM的區(qū)域上找出所有的地雷。游戲過程中,計(jì)算機(jī)會(huì)在地圖上顯示一些數(shù)字從而幫助你確定哪里有地雷。例如,在下面這個(gè)有兩顆地雷的4x4的地圖(*表示地雷):**根據(jù)上面的地圖,可以計(jì)算出應(yīng)該提供給游戲者的數(shù)字如下所示:*10022101*101110每個(gè)數(shù)字表示了該方格周圍到底有幾個(gè)地雷,當(dāng)然,一個(gè)方格周圍最多的時(shí)候只會(huì)有八個(gè)。輸入:輸入中將包括一系列的地圖,每個(gè)地圖的第一行有兩個(gè)整數(shù)n和m(0<n,m<=100),它們表示了地圖的行數(shù)和列數(shù)。下面的n行每行都有m個(gè)字符,其中"."表示安全而"*"表示地雷。如果地圖的n和m都為0,則表示輸入結(jié)束。輸出:針對(duì)每一個(gè)地圖,首先輸出一行:Field#x:其中x是當(dāng)前地圖的編號(hào)(從1開始)。下面的n行則將地圖中的"."以數(shù)字表示,該數(shù)字表示該方格周圍有多少顆地雷。#include<stdio.h>#include<string.h>#include<stdlib.h>#defineN9voidmain(){inti,j,k,t=1,x1,x2;intn[100],m[100];charc[100][100][100];chars[100][100][100];for(k=1;k<=N;k++){scanf("%d%d",&n[k],&m[k]);if(n[k]==0&&m[k]==0)break;t++;for(j=0;j<n[k];j++){scanf("%s",&c[k][j]);}for(j=0;j<n[k];j++)for(i=0;i<m[k];i++)s[k][j][i]='0';for(j=0;j<n[k];j++){for(i=0;i<m[k];i++){if(c[k][j][i]=='*'){s[k][j][i]=c[k][j][i];}}}for(j=0;j<n[k];j++){for(i=0;i<m[k];i++){if(c[k][j][i]=='*'){s[k][j][i]=c[k][j][i];if(j==0&&i==0){for(x1=0;x1<=1;x1++)for(x2=0;x2<=1;x2++)if(s[k][j+x1][i+x2]!='*'){s[k][j+x1][i+x2]++;}}if(j==0&&i>0){for(x1=0;x1<=1;x1++)for(x2=-1;x2<=1;x2++)if(s[k][j+x1][i+x2]!='*'){s[k][j+x1][i+x2]++;}}if(i==0&&j>0){for(x1=-1;x1<=1;x1++)for(x2=0;x2<=1;x2++)if(s[k][j+x1][i+x2]!='*'){s[k][j+x1][i+x2]++;}}if(i>0&&j>0){for(x1=-1;x1<=1;x1++)for(x2=-1;x2<=1;x2++)if(s[k][j+x1][i+x2]!='*'){s[k][j+x1][i+x2]++;}}}}}}for(k=1;k<=t-1;k++){printf("Field#%d:\n",k);for(j=0;j<n[k];j++){for(i=0;i<m[k];i++)printf("%c",s[k][j][i]);printf("\n");}if(k!=t-1)printf("\n");}}選作T8.5身份證的奧秘背景18位身份證標(biāo)準(zhǔn)在國家質(zhì)量技術(shù)監(jiān)督局于1999年7月1日實(shí)施的GB11643-1999《公民身份號(hào)碼》中做了明確的規(guī)定。GB11643-1999《公民身份號(hào)碼》為GB11643-1989《社會(huì)保障號(hào)碼》的修訂版,其中指出將原標(biāo)準(zhǔn)名稱"社會(huì)保障號(hào)碼"更名為"公民身份號(hào)碼",另外GB11643-1999《公民身份號(hào)碼》從實(shí)施之日起代替GB11643-1989。GB11643-1999《公民身份號(hào)碼》主要內(nèi)容如下:一、范圍該標(biāo)準(zhǔn)規(guī)定了公民身份號(hào)碼的編碼對(duì)象、號(hào)碼的結(jié)構(gòu)和表現(xiàn)形式,使每個(gè)編碼對(duì)象獲得一個(gè)唯一的、不變的法定號(hào)碼。二、編碼對(duì)象公民身份號(hào)碼的編碼對(duì)象是具有中華人民共和國國籍的公民。三、號(hào)碼的結(jié)構(gòu)和表示形式1、號(hào)碼的結(jié)構(gòu)公民身份號(hào)碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗(yàn)碼組成。排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗(yàn)碼。2、地址碼表示編碼對(duì)象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼,按GB/T2260的規(guī)定執(zhí)行。3、出生日期碼表示編碼對(duì)象出生的年、月、日,按GB/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。4、順序碼表示在同一地址碼所標(biāo)識(shí)的區(qū)域范圍內(nèi),對(duì)同年、同月、同日出生的人編定的順序號(hào),順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。5、校驗(yàn)碼(1)十七位數(shù)字本體碼加權(quán)求和公式S=Sum(Ai*Wi),i=0,...,16,先對(duì)前17位數(shù)字的權(quán)求和Ai:表示第i位置上的身份證號(hào)碼數(shù)字值Wi:表示第i位置上的加權(quán)因子Wi:7910584216379105842(2)計(jì)算模Y=mod(S,11)(3)通過模得到對(duì)應(yīng)的校驗(yàn)碼Y:012345678910校驗(yàn)碼:10X98765432四、舉例如下:北京市朝陽區(qū)東省汕頭市:44052418800101001415位的身份證號(hào)升級(jí)辦法:15位的身份證號(hào):ddddddyymmddxxp18位的身份證號(hào):ddddddyyyymmddxxpy其中dddddd為地址碼(省地縣三級(jí))yyyymmddyymmdd為出生年月日xx順號(hào)類編碼p性別15位的yy年升為18位后,變成19yy年,但對(duì)于百歲以上老人,則為18yy年,此時(shí),他們的最后三位順序碼為996,997,998或999來標(biāo)記。輸入輸入n組身份證號(hào)碼,第一行為個(gè)數(shù),以后每行為身份證號(hào)碼。輸出如果輸入的身份證號(hào)碼為15位,則將其升級(jí)為18位后顯示輸出;否則判斷其是否為合法身份證號(hào),并逐行輸出#include<stdio.h>#include<string.h>voidmain(){intWi[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};charyan[11]={'1','0','X','9','8','7','6','5','4','3','2'};inti,j,k,n,sum=0,Y=0,q,sum1=0,Y1=0;intt[20];chars[10][19];charb[10][19];scanf("%d",&n);for(i=1;i<=n;i++)scanf("%s",s[i]);for(i=1;i<=n;i++)t[i]=strlen(s[i]);for(k=1;k<=n;k++){if(t[k]==18){Y=0;sum=0;for(i=0;i<=17;i++)s[k][i]=s[k][i]-48;//for(Y=0,sum=0,i=1;i<=n;i++)//{for(j=0;j<=16;j++)sum=sum+s[k][j]*Wi[j];Y=sum%11;//}for(j=0;j<=17;j++)s[k][j]=s[k][j]+48;if(s[k][17]==yan[Y])printf("Valid\n");if(s[k][17]!=yan[Y])printf("Invalid\n");}if(t[k]==15){Y1=0;sum1=0;for(q=0;q<=5;q++)b[k][q]=s[k][q];if(s[k][12]=='9'&&s[k][13]=='9'){b[k][6]='1';b[k][7]='8';}if(s[k][12]!='9'||s[k][13]!='9'){b[k][6]='1';b[k][7]='9';}for(q=6;q<=14;q++){b[k][q+2]=s[k][q];}for(j=0;j<=16;j++)b[k][j]=b[k][j]-48;//for(i=1;i<=n;i++)//{for(j=0;j<=16;j++)sum1=sum1+b[k][j]*Wi[j];Y1=sum1%11;//}for(j=0;j<=16;j++)b[k][j]=b[k][j]+48;b[k][17]=yan[Y1];for(j=0;j<=17;j++)printf("%c",b[k][j]);printf("\n");}}}9.1數(shù)的合并請(qǐng)編寫函數(shù)fun,其功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并形成一個(gè)整數(shù)放在c中。合并的方式是:將a的十位和個(gè)位依次存放在c數(shù)的十位和千位上,b的十位和個(gè)位依次存放在c數(shù)的個(gè)位和百位上。例如:當(dāng)a=45,b=12,調(diào)用該函數(shù)后,c=5241。部分源程序如下,只需要完成fun函數(shù)的編寫即可。#include<stdio.h>intfun(inta,intb){//只需要完成此函數(shù)的功能即可}intmain(){inta,b,c;scanf("%d%d",&a,&b);c=fun(a,b);printf("c=%d\n",c);}#include<stdio.h>intfun(inta,intb){intc,d;d=a%10;a=a/10;c=d*1000+a*10;d=b%10;b=b/10;c=c+b+d*100;returnc;}intmain(){inta,b,c;scanf("%d%d",&a,&b);c=fun(a,b);printf("c=%d\n",c);}9.2素?cái)?shù)的判斷請(qǐng)編寫函數(shù)fun,其功能是判斷一個(gè)整數(shù)n是否為素?cái)?shù),如果是素?cái)?shù),則返回1,否則返回0。部分源程序給出如下,請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù),僅在函數(shù)fun的花括號(hào)中填入所編寫的代碼即可。#include<stdio.h>intfun(intn){//僅需要在此完成函數(shù)的功能即可}intmain(){inta;scanf("%d",&a);if(fun(a))printf("Prime\n");elseprintf("NonPrime\n");}#include<stdio.h>intfun(intn){inti,flag=0;for(i=2;i<n;i++){if(n%i==0)flag++;}if(flag==0)return1;if(flag>0)return0;}intmain(){inta;scanf("%d",&a);if(fun(a))printf("Prime\n");elseprintf("NonPrime\n");}9.3求級(jí)數(shù)請(qǐng)編寫函數(shù)fun,它的功能是計(jì)算下列級(jí)數(shù)和,值由函數(shù)值返回。例如,當(dāng)n=10,x=0.3時(shí),函數(shù)值為1.349859。請(qǐng)勿改動(dòng)主函數(shù)main,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。#include<stdio.h>doublefun(doublex,intn){}intmain(){doublex;intn;scanf("%lf%d",&x,&n);printf("%lf\n",fun(x,n));}#include<stdio.h>#include<math.h>doublen1(intn){doublesum1=1;intj;for(j=1;j<=n;j++)sum1=sum1*j;return(sum1);}doublefun(doublex,intn){doublesum=1;inti;for(i=1;i<=n;i++)sum=sum+pow(x,i)/n1(i);returnsum;}intmain(){doublex;intn;scanf("%lf%d",&x,&n);printf("%lf\n",fun(x,n));}9.4求大于m且緊靠m的k個(gè)素?cái)?shù)請(qǐng)編寫一個(gè)函數(shù),其功能是:將大于整數(shù)m且緊靠m的k個(gè)素?cái)?shù)存入xx所指的數(shù)組中。例如,若輸入175,則應(yīng)輸出1923293137請(qǐng)勿改動(dòng)主函數(shù)main,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。#include<stdio.h>voidfun(intm,intk,intxx[]){}intmain(){intm,n,zz[1000];scanf("%d%d",&m,&n);fun(m,n,zz);for(m=0;m<n;m++)printf("%6d",zz[m]);printf("\n");return0;}#include<stdio.h>#include<math.h>voidfun(intm,intk,intxx[]){inti,j,t=0,n;for(i=m+1;;i++){n=sqrt(i);for(j=2;j<=n;j++)if(i%j==0)break;if(j>=n+1){xx[t]=i;t++;}if(t==k)break;}}intmain(){intm,n,zz[1000];scanf("%d%d",&m,&n);fun(m,n,zz);for(m=0;m<n;m++)printf("%6d",zz[m]);printf("\n");return0;}9.5刪除指定字符請(qǐng)編寫函數(shù)fun,其功能是:從字符串中刪除指定的字符。同一字母的大、小寫按照不同的字符處理。部分源程序給出如下:#include<stdio.h>voidfun(chars[],charc){}intmain(){charstr[80];charch;gets(str);scanf("%c",&ch);fun(str,ch);printf("%s\n",str);return0;}#include<stdio.h>#include<string.h>voidfun(chars[],charc){inti,t,j;t=strlen(s);for(i=0;i<t;i++)if(s[i]==c)for(j=i;j<t;j++)s[j]=s[j+1];}intmain(){charstr[80];charch;gets(str);scanf("%c",&ch);fun(str,ch);printf("%s\n",str);return0;}9.6殺雞用牛刀——學(xué)習(xí)遞歸嘍背景:哈哈!我們終于學(xué)了遞歸了,現(xiàn)在大家一定感到非常有意思吧,那個(gè)典型的“漢諾塔”問題,一個(gè)非常短的程序居然可以完成如此復(fù)雜的工作,真是神奇?。戆?,讓我們也動(dòng)手編寫一個(gè)遞歸程序,當(dāng)然,我們要編寫的不可能太復(fù)雜。功能:求整數(shù)n到m區(qū)間的累加和,其中n<=m。輸入:區(qū)間的起始點(diǎn)n區(qū)間的終止點(diǎn)m輸出:累加和要求:使用遞歸算法完成。#include<stdio.h>#include<string.h>intfun(inti,intj){intsum=0,t;for(t=i;t<=j;t++)sum=sum+t;return(sum);}intmain(){inti,j;scanf("%d%d",&i,&j);printf("%d\n",fun(i,j));return0;}9.7求最大公約數(shù)——遞歸請(qǐng)使用遞歸算法計(jì)算正整數(shù)n和m的最大公約數(shù)GCD(n,m)。輸入:n和m輸出:n和m的最大公約數(shù)#include<stdio.h>intf(intn,intm){inti;if(m<=n&&n%m==0)i=m;if(n<m)i=f(m,n);if(m<=n&&n%m!=0)i=f(m,n%m);returni;}voidmain(){intn,m;scanf("%d%d",&n,&m);printf("%d\n",f(n,m));}9.8求數(shù)列的第N項(xiàng)已知整數(shù)數(shù)列第一項(xiàng)和第二項(xiàng)是1,該數(shù)列從第三項(xiàng)開始,如果該項(xiàng)是奇數(shù)項(xiàng),則它是前兩項(xiàng)之和,如果該項(xiàng)是偶數(shù)項(xiàng),則它是前兩項(xiàng)之差,即:f(n)=1當(dāng)n=1或2時(shí),f(n)=f(n-1)-f(n-2)當(dāng)n是偶數(shù)時(shí),f(n)=f(n-1)+f(n-2)當(dāng)n是奇數(shù)時(shí),編寫一個(gè)遞歸函數(shù),求數(shù)列的第N項(xiàng)。#include<stdio.h>intf(intn){intsum;inti;if(n==1||n==2)i=1;if(n>2&&n%2==0){i=f(n-1)-f(n-2);}if(n>2&&n%2!=0){i=f(n-1)+f(n-2);}return(i);}voidmain(){intn,i;scanf("%d",&n);printf("%d\n",f(n));}9.9偶數(shù)分解編寫程序,輸入若干個(gè)大于2的正整數(shù),如果是偶數(shù),則將其分解為兩個(gè)素?cái)?shù)并輸出;如果輸入的奇數(shù),則輸出“×××isoddnumber!”;輸入為0時(shí)程序結(jié)束。只有1和它本身這兩個(gè)因數(shù)的自然數(shù)叫做素?cái)?shù),0和1既不是素?cái)?shù)也不是和數(shù)。實(shí)現(xiàn)分解的過程用函數(shù)實(shí)現(xiàn)。輸入:整數(shù)序列,0輸出:偶數(shù)1=素?cái)?shù)A+素?cái)?shù)B(當(dāng)輸入是偶數(shù)時(shí))奇數(shù)1isoddnumber!(當(dāng)輸入是奇數(shù)時(shí))#include<stdio.h>#include<stdlib.h>intss(intn){inti,t;for(i=2;i<n;i++)if(n%i==0){t=0;break;}if(i>=n)t=1;return(t);}voidfun(intq){intk;if(q%2!=0)printf("%disoddnumber!\n",q);if(q%2==0){for(k=2;k<q;k++){if(ss(k)==1&&ss(q-k)==1){printf("%d=%d+%d\n",q,k,q-k);break;}}}}intmain(){inta[100],i,k=1,count,q;for(i=0;k!=0;i++){scanf("%d",&k);a[i]=k;}count=i-2;for(i=0;i<=count;i++){q=a[i];fun(q);}return0;}9.10子串反序--遞歸請(qǐng)編寫一個(gè)遞歸函數(shù)reverse(charstr[],intstart,intend),該函數(shù)的功能是將串str中下標(biāo)從start開始到end結(jié)束的字符顛倒順序。假設(shè)start和end都在合理的取值范圍。例如:執(zhí)行前:str[]="0123456";start=1;end=4執(zhí)行后:strr[]="0432156"要求在該函數(shù)中不使用新的數(shù)組,沒有循環(huán)。#include<stdio.h>voidreverse(charstr[],intstart,intend){//請(qǐng)完成此函數(shù)}intmain(){charstr[100];intstart,end;gets(str);scanf("%d%d",&start,&end);reverse(str,start,end);printf("%s\n",str);return0;}#include<stdio.h>voidreverse(charstr[],intstart,intend){inti,j=0;for(i=0;i<=(end-start-1)/2;i++){j=str[start+i];str[start+i]=str[end-i];str[end-i]=j;}}intmain(){charstr[100];intstart,end;gets(str);scanf("%d%d",&start,&end);reverse(str,start,end);printf("%s\n",str);return0;}7.1數(shù)的合并請(qǐng)編寫函數(shù)fun,其功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并形成一個(gè)整數(shù)放在c中。合并的方式是:將a的十位和個(gè)位依次存放在c數(shù)的十位和千位上,b的十位和個(gè)位依次存放在c數(shù)的個(gè)位和百位上。例如:當(dāng)a=45,b=12,調(diào)用該函數(shù)后,c=5241。部分源程序如下,只需要完成fun函數(shù)的編寫即可。#include<stdio.h>voidfun(inta,intb,int*c){//只需要完成此函數(shù)的功能即可}intmain(){inta,b,c;scanf("%d%d",&a,&b);fun(a,b,&c);printf("%d\n",c);}#include<stdio.h>voidfun(inta,intb,int*c){*c=(a/10)*10+(a%10)*1000+(b/10)*1+(b%10)*100;}intmain(){inta,b,c;scanf("%d%d",&a,&b);fun(a,b,&c);printf("%d\n",c);}7.2數(shù)組中奇偶數(shù)請(qǐng)編一個(gè)函數(shù)fun(int*a,intn,int*odd,int*even),函數(shù)的功能是分別求出數(shù)組中所有奇數(shù)之和以及所有偶數(shù)之和。形參n給了數(shù)組中數(shù)據(jù)的個(gè)數(shù):利用指針odd返回奇數(shù)之和,利用指針even返回偶數(shù)之和。例如:數(shù)組中的值依次為:1,8,2,3,11,6;則利用指針odd返回奇數(shù)之和15;利用指針even返回偶數(shù)之和16。部分程序源碼如下。#include<stdio.h>#defineN20voidfun(int*a,intn,int*odd,int*even){//只需要完成此處代碼即可}intmain(){inta[N],i,n,odd,even;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);fun(a,n,&odd,&even);printf("Thesumofoddnumbers:%d\n",odd);printf("Thesumofevennumbers:%d\n",even);return0;}#include<stdio.h>#defineN20voidfun(int*a,intn,int*odd,int*even){inti;int*p;*odd=0;*even=0;for(p=a,i=0;i<n;i++){if(*(p+i)%2==0)*even=*even+*(p+i);if(*(p+i)%2!=0)*odd=*odd+*(p+i);}}intmain(){inta[N],i,n,odd,even;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);fun(a,n,&odd,&even);printf("Thesumofoddnumbers:%d\n",odd);printf("Thesumofevennumbers:%d\n",even);return0;}7.3浮點(diǎn)數(shù)四舍五入請(qǐng)編一個(gè)函數(shù)voidfun(doublea,double*h),函數(shù)的功能是對(duì)變量h中的值保留2位小數(shù),并對(duì)第三位進(jìn)行四舍五入(規(guī)定h中的值為正數(shù))。例如:h值為8.32433,則函數(shù)返回8.32;h值為8.32533,則函數(shù)返回8.33。部分程序源碼如下。#include<stdio.h>voidfun(doublea,double*h){//只需要完成此函數(shù)的功能即可}intmain(){doublea,h;scanf("%lf",&a);fun(a,&h);printf("Theresult:%lf\n",h);return0;}#include<stdio.h>voidfun(doublea,double*h){//只需要完成此函數(shù)的功能即可inti,t;t=(int)(a*1000);if(t%10<5)*h=((double)((int)(a*100)))/100;if(t%10>=5)*h=((double)((int)(a*100)+1))/100;}intmain(){doublea,h;scanf("%lf",&a);fun(a,&h);printf("Theresult:%lf\n",h);return0;}7.4字符移動(dòng)請(qǐng)編一個(gè)函數(shù)voidfun(char*s),函數(shù)的功能是把字符串中所有的字符前移一個(gè)位置,串中的第一個(gè)字符移到最后。例如:原有的字符串為:Mn.123xyZ,則調(diào)用該函數(shù)后,串中的內(nèi)容為:n.123xyZM。部分程序源碼如下:#include<stdio.h>#defineN81voidfun(char*s){//只需要完成此處代碼即可}intmain(){chara[N];gets(a);fun(a);printf("%s\n",a);}#include<stdio.h>#defineN81voidfun(char*s){//只需要完成此處代碼即可char*p,t;t=*s;p=s+1;for(;*s!='\0';s++,p++)*s=*p;*(s-1)=t;}intmain(){chara[N];gets(a);fun(a);printf("%s\n",a);}7.5生成新數(shù)給定程序中,函數(shù)fun的功能是:將形參n所指變量中,各位上為偶數(shù)的數(shù)去除,剩余的數(shù)按原來從高位到低位的順序組成一個(gè)新的數(shù),并通過形參指針n傳回所指變量。例如,輸入一個(gè)數(shù):27638496,新的數(shù):為739。部分源程序如下:#include<stdio.h>voidfun(int*n){//只需要完成此部分功能即可}intmain(){intn=-1;while(n>99999999||n<0){scanf("%ld",&n);}fun(&n);printf("%d\n",n);return0;}#include<stdio.h>#include<math.h>voidfun(int*n){//只需要完成此部分功能即可inta[10],b[10];intp=0;inti,j=0,t,k,r,count=0;for(i=0;*n!=0;i++){a[i]=*n%10;*n=*n/10;count++;}//printf("%d\n",count);//for(k=0;k<count;k++)//printf("%d",a[k]);//printf("\n");for(i=0;i<=count-1;i++){if(a[i]%2!=0){b[j]=a[i];j++;}}//printf("%d\n",j);//for(t=0;t<=j-1;t++)//printf("%d",b[t]);//printf("\n");for(r=j-1;r>=0;r--){p=p+b[r]*pow(10,r);}*n=p;}intmain(){intn=-1;while(n>99999999||n<0){scanf("%ld",&n);}fun(&n);printf("%d\n",n);return0;}7.6字符串轉(zhuǎn)換成整數(shù)請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:將一個(gè)數(shù)字字符串轉(zhuǎn)換為一個(gè)整數(shù)。例如,若輸入字符串"-1234",則函數(shù)把它轉(zhuǎn)換為整數(shù)值-1234。函數(shù)fun中給出的語句僅供參考。部分源程序如下:#include<stdio.h>#include<string.h>intfun(char*p){//只需要完成此處功能即可}intmain()/*主函數(shù)*/{chars[6];intn;gets(s);n=fun(s);printf("%d\n",n);return0;}#include<stdio.h>#include<string.h>#include<math.h>intfun(char*p){//只需要完成此處功能即可inti,n=0,flag=0,j=0,t,k;inta[10];for(i=0;*(p+i)!='\0';i++){if(*p=='-')flag=1;if(*(p+i)>='0'&&*(p+i)<='9'){a[j]=*(p+i)-48;j++;}}//printf("%d\n",j);//for(k=0;k<=j-1;k++)//printf("%d",a[k]);//printf("\n");for(t=0;t<=j-1;t++){n=n+a[t]*pow(10,j-1-t);}n=n*pow(-1,flag);return(n);}intmain()/*主函數(shù)*/{chars[6];intn;gets(s);n=fun(s);printf("%d\n",n);return0;}7.7二維數(shù)組按列優(yōu)先存放請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:將M行N列的二維數(shù)組中的字符數(shù)據(jù),按列的順序依次放到一個(gè)字符串中。例如,二維數(shù)組中的數(shù)據(jù)為:WWWWSSSSHHHH則字符串中的內(nèi)容應(yīng)是:WSHWSHWSHWSH。部分源程序如下:#include<stdio.h>#defineM3#defineN4voidfun(chars[][N],char*b){//只需要完成此部分功能即可}intmain(){chara[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};fun(w,a);puts(a);return0;}#include<stdio.h>#defineM3#defineN4voidfun(chars[][N],char*b){//只需要完成此部分功能即可inti,j,t=0,k,q;charc[12];for(j=0;j<100;j++){*(b+j)=0;}for(j=0;j<=3;j++)for(i=0;i<=2;i++){c[t]=s[i][j];t++;}//for(k=0;k<t;k++)//printf("%c",c[k]);//printf("\n");for(q=0;q<t;q++){*(b+q)=c[q];}}intmain(){chara[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};fun(w,a);puts(a);return0;}選做T7.1數(shù)組元素移動(dòng)請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:移動(dòng)一維數(shù)組中的內(nèi)容;若數(shù)組中有n個(gè)整數(shù),要求把下標(biāo)從0到p(含p,p小于等于n-1)的數(shù)組元素平移到數(shù)組的最后。例如,一維數(shù)組中的原始內(nèi)容為:1,2,3,4,5,6,7,8,9,10;p的值為3。移動(dòng)后,一維數(shù)組中的內(nèi)容應(yīng)為:5,6,7,8,9,10,1,2,3,4。部分源程序如下:#include<stdio.h>#defineN80voidfun(int*w,intp,intn){//只需要完成此部分功能即可}intmain(){inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,p,n=15;scanf("%d",&p);fun(a,p,n);for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n");return0;}#include<stdio.h>#defineN80voidfun(int*w,intp,intn){//只需要完成此部分功能即可inti,j=0;intb[N],a[15];for(i=0;i<=14;i++)a[i]=*(w+i);for(i=p+1;i<=14;i++){b[j]=a[i];j++;}for(i=0;i<j;i++)*(w+i)=b[i];for(i=0;i<=p;i++)*(w+j+i)=a[i];}intmain(){inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,p,n=15;scanf("%d",&p);fun(a,p,n);for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n");return0;}選做T7.2字符串匹配給定程序中函數(shù)fun的功能是:計(jì)算s所指字符串中含有t所指字符串的數(shù)目,并作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。只能改/*********found**********/的下一行。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。給定源程序:#include<stdio.h>#include<string.h>#defineN80intfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){p=s;/*********found**********/r=p;while(*r)if(*r==*p){r++;p++;}elsebreak;/*********found**********/if(*r=0)n++;s++;}returnn;}intmain(){chara[N],b[N];intm;gets(a);gets(b);m=fun(a,b);printf("m=%d\n",m);return0;}#include<stdio.h>#include<string.h>#defineN80intfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){p=s;/*********found**********/r=t;while(*r)if(*r==*p){r++;p++;}elsebreak;/*********found**********/if(*r=='\0')n++;s++;}returnn;}intmain(){chara[N],b[N];intm;gets(a);gets(b);m=fun(a,b);printf("m=%d\n",m);return0;}選做T7.3形成新的字符串給定程序MODI1.C中函數(shù)fun的功能是:將s所指字符串中位于奇數(shù)位置的字符或ASCII碼為偶數(shù)的字符放入t所指數(shù)組中(規(guī)定第一個(gè)字符放在第0位中)。例如,字符串中的數(shù)據(jù)為:AABBCCDDEEFF,則輸出應(yīng)當(dāng)是:ABBCDDEFF。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。只能修改/***********found**********/的下一行。注意:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 店鋪?zhàn)赓U(出租)意向協(xié)議書
- 2025年度高端摩托車租賃及保養(yǎng)服務(wù)合同2篇
- 2025版?zhèn)€人入股合作協(xié)議書:互聯(lián)網(wǎng)公司股權(quán)分配合同4篇
- 2025年度個(gè)人消費(fèi)分期付款合同標(biāo)準(zhǔn)7篇
- 2025-2030全球石墨氮化碳行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球封離型CO2激光器冷水機(jī)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國鼻炎光療儀行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國常壓等離子體裝置行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年度國際貨運(yùn)代理及物流服務(wù)合同
- 商家聯(lián)盟協(xié)議書
- 江蘇省蘇州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 銷售與銷售目標(biāo)管理制度
- 人教版(2025新版)七年級(jí)下冊(cè)英語:寒假課內(nèi)預(yù)習(xí)重點(diǎn)知識(shí)默寫練習(xí)
- 2024年食品行業(yè)員工勞動(dòng)合同標(biāo)準(zhǔn)文本
- 2025年第一次工地開工會(huì)議主要議程開工大吉模板
- 全屋整裝售后保修合同模板
- 壁壘加筑未來可期:2024年短保面包行業(yè)白皮書
- 高中生物學(xué)科學(xué)推理能力測(cè)試
- GB/T 44423-2024近紅外腦功能康復(fù)評(píng)估設(shè)備通用要求
- 2024-2030年中國減肥行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)與投資研究報(bào)告
- 運(yùn)動(dòng)技能學(xué)習(xí)
評(píng)論
0/150
提交評(píng)論