目錄
選擇題:?
題一:
題二:
題三:
題四:
題五:
編程題:
題一:字符個(gè)數(shù)統(tǒng)計(jì)
思路一:
題二:多數(shù)元素
思路一:?
本人實(shí)力有限可能對(duì)一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評(píng)論區(qū)指出錯(cuò)誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
選擇題:?
題一:
1、如下程序的運(yùn)行結(jié)果是( )
char c[5]={'a', 'b', '\0', 'c', '\0'};
printf("%s", c);
A: 'a' 'b'? ? B: ab\0c\0? ? C: ab c? ? D: ab
答案解析:
????????字符串的結(jié)束標(biāo)志是'\0',而'\0'的ASCII值是0,而c[2]被初始化為0,就相當(dāng)于是'\0',故字符串打印的內(nèi)容只有"ab"。
題二:
2、若有定義: int a[2][3]; ,以下選項(xiàng)中對(duì) a 數(shù)組元素正確引用的是( )
??
A: a[2][0]? ? B: a[2][3]? ? C: a[0][3]? ? D: a[1>2][1]
答案解析:
????????本題主要考慮數(shù)組越界訪問(wèn)的情況,二維數(shù)組的行和列都是從0開(kāi)始的,對(duì)于a數(shù)組來(lái)說(shuō),行下標(biāo)最大是1,列下標(biāo)最大是2,D選項(xiàng)中1>2表達(dá)式的值是0,是正確的,其他選項(xiàng)行和列都可能存在越界,A是行越界,B是行和列都越界,C是列越界。
題三:
3、在下面的字符數(shù)組定義中,哪一個(gè)有語(yǔ)法錯(cuò)誤( )
A: char a[20]="abcdefg";? ?? B: char a[]="x+y=5.";C: char a[15];? ? ? ? ? ? ? ? ? ? ?? D: char a[10]='5';
答案解析:
????????D中的'5'是一個(gè)字符常量,不能給字符型數(shù)組a初始化。
題四:
4、下列定義數(shù)組的語(yǔ)句中正確的是【多選】( )
A:#define size 10
char str1[size], str2[size+2];B:char str[];
C:int num['10'];
D:int n=5; int a[n][n+2];
答案解析:
????????A選項(xiàng):宏替換,沒(méi)問(wèn)題;B選項(xiàng):非法定義,一維數(shù)組必須定義數(shù)組元素個(gè)數(shù);C選項(xiàng):字符'0',轉(zhuǎn)換成十進(jìn)制為48,所以該選項(xiàng)最終為int num[48];D選項(xiàng):錯(cuò)誤,數(shù)組定義下角標(biāo)不能為變量,注:C99標(biāo)準(zhǔn)中支持了使用變量,這里不做特殊考慮。
題五:
5、已知 “ i ” “ j ”都是整型變量,下列表達(dá)式中,與下標(biāo)引用X[i][j]不等效的是【多選】()
A:*(X[i]+j)? ??B:*(X+i)[j]? ? ?C:*(X+i+j)?? ? D:*(*(X+i)+j)
答案解析:
????????本題考查的是二維數(shù)組的元素訪問(wèn),A選項(xiàng)是 正確的,X[i]就是第i行的數(shù)組名,數(shù)組名表示首元素的地址,X[i]表示第i行的第一個(gè)元素的地址,+j后就是第i行下標(biāo)為j的元素的地址,整體解引用就是X[i][j],A正確。B選項(xiàng)因?yàn)閇]的優(yōu)先級(jí)高于*,
所以代碼相當(dāng)于**((x+i)+j),X+i+j后就越界了,并不代表X[i][j],所以錯(cuò)誤。C選項(xiàng)也明顯不對(duì),X是二維數(shù)組的數(shù)組名,數(shù)組名相當(dāng)于第一行的地址,X+i+j,跳過(guò)了i+j行,就越界了,C錯(cuò)誤。D選項(xiàng)是標(biāo)準(zhǔn)的指針形式訪問(wèn)二位數(shù)組的一個(gè)元素。
編程題:
題一:字符個(gè)數(shù)統(tǒng)計(jì)
字符個(gè)數(shù)統(tǒng)計(jì)_??皖}霸_??途W(wǎng) (nowcoder.com)
示例:
? ?輸入:
abc
? ?輸出:
3
思路一:
排序記錄法:
? ? ? ? 第一步:創(chuàng)建足夠大小的數(shù)組arr,輸入數(shù)組的元素,計(jì)算數(shù)組長(zhǎng)度sz,通過(guò)my_string函數(shù)傳參計(jì)算;
? ? ? ? 第二步:在函數(shù)中將數(shù)組按升序排序,以及記錄數(shù)的定義count;
? ? ? ? 第三步:遍歷數(shù)組:確保唯一性當(dāng)數(shù)組為空或沒(méi)有記錄相同的字符時(shí)放入數(shù)組,每次記錄完記錄數(shù)都+1;
? ? ? ? 第四步:將記錄數(shù)count返回,打印。
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
//升序排列
int my_cmp(const void* p1,const void* p2)
{
return strcmp((char*)p1,(char*)p2);
}
//計(jì)算字符個(gè)數(shù)函數(shù)
int my_string(char* arr,int sz)
{
assert(arr);
//升序排列
qsort(arr,sz,sizeof(arr[0]),my_cmp);
char sum[500]= {0};
int count = 0;
//遍歷數(shù)組
for(int i = 0;i < sz;i++ )
{
//當(dāng)數(shù)組為空或沒(méi)有記錄相同的字符時(shí)放入數(shù)組
if(count == 0 || arr[i] != sum[count-1])
{
sum[count++] = arr[i];
}
}
return count;
}
int main()
{
char arr[500] ={0};
scanf("%s",&arr);
//就是數(shù)組長(zhǎng)度
int sz = strlen(arr);
//記錄不同個(gè)數(shù)
int num = my_string(arr,sz);
printf("%d\n",num);
return 0;
}
題二:多數(shù)元素
169. 多數(shù)元素 - 力扣(LeetCode)
思路一:?
輪番比較:
? ? ? ? 第一步:定義記錄數(shù)count,比較數(shù)k,題目返回條件;
? ? ? ? 第二步:將數(shù)組num按升序排列;
? ? ? ? 第三步:遍歷數(shù)組:先判斷k與上一個(gè)k值是否相同,不相同則開(kāi)始下一個(gè)數(shù)的記錄;相同則記錄數(shù)+1;當(dāng)滿足題目返回條件時(shí),退出。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-670629.html
//比較函數(shù)升序
int my_cmp(const void* p1,const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
int majorityElement(int* nums, int numsSize)
{
int num = numsSize/2;
int count = 0;
int k = -1;
//升序排序
qsort(nums,numsSize,sizeof(nums[0]),my_cmp);
//遍歷數(shù)組
for(int i = 0;i < numsSize;i++)
{
//與k不相同就重新開(kāi)始記錄
if(k != nums[i])
{
k = nums[i];
count = 0;
}
//相同記錄+1
if(nums[i] == k)
{
count++;
}
//達(dá)到要求返回
if(count > num)
{
return k;
}
}
return 0;
}
本人實(shí)力有限可能對(duì)一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評(píng)論區(qū)指出錯(cuò)誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-670629.html
到了這里,關(guān)于C語(yǔ)言:選擇+編程(每日一練Day8)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!