我的刷題之旅2-創(chuàng)新互聯(lián)

寫幾個函數(shù):

成都創(chuàng)新互聯(lián):自2013年起為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為近1000家公司企業(yè)提供了專業(yè)的網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計和網(wǎng)站推廣服務(wù), 定制網(wǎng)站建設(shè)由設(shè)計師親自精心設(shè)計,設(shè)計的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

①輸入10個職工的姓名和職工號;

②按職工號由小到大順序排列,姓名順序也隨之調(diào)整;

③要求輸入一個職工號,用折半查找找出該職工的姓名,從主函數(shù)輸入要查找的職工號,輸出該職工姓名。

想了一天代碼終于出來了:

#include
#include

void putin(int num[],char name[10][8])
{
? int i;
? for( i=0; i<10; i++)
? {
? printf("請輸入職工號和姓名:");
? scanf("%d",&num[i]);//
? getchar();//jialezhegecaikeyishuzifu
? gets(name[i]);

? }

}

void sort(int num[],char name[10][8])
{
? char h[8];
? for(int i=0; i<9; i++)
? {
? for(int j=i+1; j<10; j++)
? {
? if(num[j] ? {
? int t=num[j];
? strcpy(h,name[j]);
? num[j]=num[i];
? strcpy(name[j],name[i]);
? num[i]=t;
? strcpy(name[i],h);

? }
? }
? }
? for(int i=0;i<10;i++)
? printf(" ?%d ?%s \n ",num[i],name[i]);//sbawohaicanle
}
void search(int n,int num[],char name[10][8])
{
? int sta=0,en=9,mid;
? int i;
? for( i=0; i<10; i++)
? {
? mid=(sta+en)/2;
? if(n==num[mid]){printf("該職工號對應(yīng)的名字為%s",name[mid]);break;}
? else if(n>mid)sta=mid+1;
? else en=mid-1;
? }
? if(i==n&&n!=mid)printf("no search");

}
int main()
{
? int n,num[10];
? char name[10][8];//可以是統(tǒng)一標(biāo)識符表示
? putin(num,name);
? sort(num,name);
? printf("請輸入職工號:");
? scanf("%d",&n);
? search(n,num,name);

? return 0;

}

總結(jié)一下我的心路和錯誤:

1.有時候我用字符函數(shù)不會引用字符的頭文件沒事,但是有時候又會報錯,所以還是養(yǎng)成用的習(xí)慣比較好;

2.關(guān)于第一個函數(shù)里的東西我倒是糾結(jié)了好久:我在想人的名字不可能就一個字符呀,所以肯定不能用字符數(shù)組了但是沒想到還可以這么用:把二維數(shù)組看作一維字符串?dāng)?shù)組,每個數(shù)組里有一個字符串,但是人的名字也有漢字呀!我在想這個漢字可以作為字符存在里面嗎?又或者說,是不是占用的元素個數(shù)不一樣呢?后來我查到漢字原來是字符串,每個漢字兩個以上字符組成的。所以我做了這個實驗:

#include
int main()
{
? char a[2];
? scanf("%c",&a[0]);
? printf("%c",a[0]);
? return 0;

}

把代碼再改一下#include
#include
int main()
{
? char a[]={"你"};
? printf("%d",strlen(a));
? return 0;
}

答案是二,說明一個漢字就相當(dāng)于一個字符數(shù)量為二的字符串。所以在上面的題目里我們把名字長度設(shè)為八也就是四個漢字。

3.在第一個函數(shù)里如果你直接在輸入之后加gets的話,你會發(fā)現(xiàn)自己在和后面輸不了名字,從而要加個getchar()在這里getchar的作用是啥呢?你會發(fā)現(xiàn)其實在輸入數(shù)字之后我們還會輸一個回車,而這個個回車也就被存進(jìn)了getchar所以才會不能輸入名字,而這的getchar則是用來清除緩存的,比如殘留在電腦的回車;

4.你會發(fā)現(xiàn)在這里我們可以看見一個問題,為什么輸入的時候二維數(shù)組只有一個框框,你可以這么理解,你可以把它看成成一個字符串?dāng)?shù)組,但實際上是由于字符數(shù)組本身就是地址,這里可以說是行地址,具體的可以百度一下。這個方法是要記住的,以后會常用;

5.在第二個函數(shù)里我用的是選擇排序(可以去b站自學(xué))和復(fù)制,中途犯的一個錯誤的是把數(shù)組賦在了變量里,無論字符變量還是什么都不行,因為一個是字符串,一個是字符,裝不下,當(dāng)然,但如果是這樣

好像還是不可以TAT;突然發(fā)現(xiàn)一個錯誤,我把數(shù)組和元素概念搞混了,在定義數(shù)組時,方括號里的下標(biāo)指的是數(shù)組的個數(shù),而在元素里面因為要從0開始所以最后一個元素比總數(shù)減一;我再次打一個代碼:

#include
#include
int main()
{
? int a[2]={1,2};
? int j;
? strcpy(a[2],a[1]);
? strcpy(j,a[1]);
? printf("%d %d",a[2],j);
? return 0;

}

為什么還是運行不了?我想了很久,后來才知道它只能復(fù)制字符,不能是數(shù)字;我再改:

#include
#include
int main()
{
? char a[2]={'1','2'};
? char j=0;
? strcpy(a[2],a[1]);
? strcpy(j,a[1]);
? printf("%c %c",a[2],j);
? return 0;

}
這樣寫也是錯的,因為strcpy復(fù)制的是不同字符數(shù)組,可以這么理解。

6.剛開始在第二個函數(shù)的時候我還不明白為什么要復(fù)制,現(xiàn)在明白了:這里注意一下:我們?yōu)槭裁匆诟阋粋€數(shù)組num來記職工號這是因為職工號不一定是單純的是1,2,3等可能是其他的,而我們的計數(shù)又是從1-10的,而且我們剛開始輸入不是按順序來的也就是說我們記得第一個是234 小一,第二個就是224 笑梅 了所以要專門用一個數(shù)組來記數(shù);而我們在循環(huán)里的這個是按也就是輸入順序排序的,我們現(xiàn)在的職工號和姓名還沒有很大的聯(lián)系只是num[i]對應(yīng)name[i]所以在num變的時候,name對應(yīng)的就不一定會變了,要讓name隨著num變即讓num賦值的時候,name跟著,由于name原本就是字符串?dāng)?shù)組,如果要交換的話,剛開始我想為什么不可以直接和上面一樣賦值呢?其實是不可以的,c語言有規(guī)定,數(shù)組不能直接給數(shù)組賦值;而我們?nèi)绻o字符串?dāng)?shù)組排序,就必須定義性新數(shù)組(不用數(shù)組做中間變量就暫存不了這么多字符),而那是不合法的。(具體很難說清,自己去試試就知道)

7.而第三個函數(shù)就是利用折半查找法(可以去自學(xué)一下)注意:在這個函數(shù)里面,我了解到,其實很多代碼還是要考慮全面的,這樣會大大減少時間,比如可能有些代碼叫你輸入大于零的整數(shù),然后可能我們不會考慮小于零的代碼,但是在有些刷題網(wǎng)站,這樣是過不了的。所以我們還是要考慮多一點,比如這里,就因為我經(jīng)??紤]不多,導(dǎo)致忘記了搜不到no search的情況。

小小激勵一下自己:泥沙俱下并不完美的生活,正是組成寶貴生命的原材料。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前標(biāo)題:我的刷題之旅2-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://bm7419.com/article34/ijese.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、外貿(mào)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、搜索引擎優(yōu)化面包屑導(dǎo)航、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管