今天是刷題第10天,放棄不難,但堅(jiān)持一定很酷~
十多年專注成都網(wǎng)站制作,成都定制網(wǎng)站,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)站,高端網(wǎng)頁(yè)制作,對(duì)玻璃鋼坐凳等多個(gè)行業(yè),擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)。
快來(lái)跟我一起刷題吧。
C語(yǔ)言百日刷題第十天
輸入兩個(gè)字符串 strl 和 st2,對(duì)輸入的字符串進(jìn)行長(zhǎng)度比較,然后將小的連接在大的字符串后面,最后輸出連接好的新串并計(jì)算新串的長(zhǎng)度。
題目分析:本題有兩種解法,第一種是直接使用C語(yǔ)言里面的庫(kù)函數(shù),第二種是自己模擬對(duì)應(yīng)的庫(kù)函數(shù)。
方法一:使用庫(kù)函數(shù)
#include#includeint main()
{int len;
char str1[80], str2[80];
printf("輸入字符串1:\n");
scanf("%s", str1);
printf("輸入字符串2:\n");
scanf("%s", str2);
if (strlen(str1)>= strlen(str2))
{strcat(str1, str2);
len = strlen(str1);
printf("連接后的字符串為:%s,長(zhǎng)度為:%d\n", str1, len);
}
else
{strcat(str2, str1);
len = strlen(str2);
printf("連接后的字符串為:%s,長(zhǎng)度為:%d\n", str2, len);
}
return 0;
}
這里使用了兩個(gè)字符串函數(shù),我們分別介紹一下。
strlen函數(shù):求字符串的長(zhǎng)度。
strcat函數(shù):連接兩個(gè)字符串
方法二:使用自己模擬的函數(shù)
首先我們可以模擬一下strlen函數(shù),strlen函數(shù)的作用就是計(jì)算字符串的長(zhǎng)度。對(duì)于該函數(shù),我們有三種方法可以進(jìn)行模擬。
模擬方法一:循環(huán)+計(jì)數(shù)器模擬
int strlen1 (char * str)
{int count = 0;
while(*str)
{count++;
str++;
}
return count;
}
模擬方法二:遞歸模擬
int strlen2 (char * str)
{if(*str == '\0')
return 0;
else
return 1 + strlen2(str+1);
}
模擬方法三:指針運(yùn)算模擬
int strlen3 (char *s)
{ char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
接下來(lái),我們可以嘗試去模擬一下strcat函數(shù),而strcat函數(shù)的原理其實(shí)就是先找到目標(biāo)字符串的結(jié)尾(‘\0’),然后從此處開始進(jìn)行數(shù)據(jù)的復(fù)制,當(dāng)找到源字符串的結(jié)束標(biāo)志(’\0’)時(shí)停止復(fù)制。
char *strcat1(char *dest, const char*src)
{char *ret = dest;
assert(dest != NULL); //斷言防止為空指針
assert(src != NULL); //斷言防止為空指針
while(*dest)
{dest++;
}
while(*dest = *src)
{dest++;
src++;
}
return ret;
}
如此一來(lái),我們就模擬了兩個(gè)字符串函數(shù),接下來(lái)把他們封裝,直接調(diào)用就行了,這里的strlen函數(shù)我就使用第一種模擬的函數(shù)吧。
#include#include
int strlen1(char* str)
{int count = 0;
while (*str)
{count++;
str++;
}
return count;
}
char* strcat1(char* dest, const char* src)
{char* ret = dest;
assert(dest != NULL); //斷言防止為空指針
assert(src != NULL); //斷言防止為空指針
while (*dest)
{dest++;
}
while (*dest = *src)
{dest++;
src++;
}
return ret;
}
int main()
{int len;
char str1[80], str2[80];
printf("輸入字符串1:\n");
scanf("%s", str1);
printf("輸入字符串2:\n");
scanf("%s", str2);
if (strlen1(str1) >= strlen1(str2))
{strcat1(str1, str2);
len = strlen1(str1);
printf("連接后的字符串為:%s,長(zhǎng)度為:%d\n", str1, len);
}
else
{strcat1(str2, str1);
len = strlen1(str2);
printf("連接后的字符串為:%s,長(zhǎng)度為:%d\n", str2, len);
}
return 0;
}
82.輸入一行字符,分別統(tǒng)計(jì)其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。輸入一行字符,分別統(tǒng)計(jì)其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。
題目分析:分別統(tǒng)計(jì)英文、空格和數(shù)字,及其其他,我們自然就想到了使用分支語(yǔ)句進(jìn)行判斷,那么如何進(jìn)行判斷以上四種情況呢,柿子先撿軟的捏,最容易判斷的當(dāng)然就是空格,其次就是英文字母和數(shù)字,最難判斷的就是其他字符,但是如果我們把前面三種都判斷了,那么最后的不就剩下其他字符了嘛?但是因?yàn)槲覀儾恢烙脩糨斎氲木唧w是多少,所以我們無(wú)法判斷分支語(yǔ)句寫多少條,所以我們就應(yīng)該用循環(huán),因?yàn)槲覀冚斎胪旰髸?huì)敲回車,而回車相當(dāng)于換行,所以我們要將換行作為循環(huán)結(jié)束的標(biāo)志。
#includeint main()
{char c;
int letter = 0, space = 0, digit = 0, other = 0;
printf("請(qǐng)輸入需要統(tǒng)計(jì)的字段:\n");
while ((c = getchar()) != '\n')
{if (c >= 'a' && c<= 'z' || c >= 'A' && c<= 'Z')
letter++;
else if (c == ' ')
space++;
else if (c >= '0' && c<= '9')
digit++;
else
other++;
}
printf("英文有:%d\n空格有:%d\n數(shù)字有:%d\n其他有:%d", letter, space, digit, other);
return 0;
}
83.寫一個(gè)排序函數(shù)實(shí)現(xiàn)數(shù)組從小到大的排序排序的方法有很多,這里我寫一個(gè)我比較常用的排序方法-------快速排序。
快速排序的核心思想就是分治,這里我提供一個(gè)我比較常用的模板。
#include//快速排序的實(shí)現(xiàn)
void quick_sort(int q[], int left, int right)
{if (left >= right)
return;
int i = left - 1, j = right + 1, x = q[left + right >>1];// >>一位相當(dāng)于除以二
while (i< j)
{do i++; while (q[i]< x);
do j--; while (q[j] >x);
if (i< j)
{int tmp;
tmp = q[i];
q[i] = q[j];
q[j] = tmp;
}
}
//遞歸處理左右邊界
quick_sort(q, left, j), quick_sort(q, j + 1, right);
}
//驗(yàn)證
int main()
{int q[10] = {1,2,56,2552,5,325,2,69,348,222 };
quick_sort(q, 0, 9);
for (int i = 0; i< 10; i++)
{printf("%d ", q[i]);
}
return 0;
}
84.字母的大小寫轉(zhuǎn)換從鍵盤輸入一個(gè)字符,判斷其是否為大寫字母,若是大寫字母,則將其轉(zhuǎn)換為小寫;否則,不進(jìn)行轉(zhuǎn)換。
題目分析:本題的核心是了解ASCII碼之間的關(guān)系,從表上來(lái)看,對(duì)于字母來(lái)說(shuō),小寫的字母的ASCII碼比大寫的ASCII碼值大32
代碼如下:
#includeint main()
{char input;
scanf("%c", &input);
if (input >= 'A' && input<= 'Z')
{input = input + 32;
}
printf("%c", input);
return 0;
}
85.找乒乓球隊(duì)名單現(xiàn)有兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出三人。甲隊(duì)為A,B,C 三人,乙隊(duì)為X,Y,Z 三人。已抽簽決定比賽名單。有人向隊(duì)員打聽比賽的名單。A說(shuō)他不和X比,C說(shuō)他不和X,Z比,請(qǐng)編程序找出三隊(duì)賽手的名單。
分析:需要通過(guò)循環(huán)進(jìn)行比較,并且需要if語(yǔ)句來(lái)判斷參賽隊(duì)員是否重復(fù)。
#includeint main()
{for (char i = 'X'; i<= 'Z'; i++)
{for (char j = 'X'; j<= 'Z'; j++)
{if (i != j)
{for (char k = 'X'; k<= 'Z'; k++)
{if (i != k && j != k)
{if (i != 'X' && k != 'X' && k != 'Z')
{printf("A對(duì)%c\nB對(duì)%c\nC對(duì)%c\n", i, j, k);
}
}
}
}
}
}
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧