目錄
?編輯選擇題:?
題一:
題二:
題三:
題四:
題五:
編程題:
題一:至少是其他數(shù)字兩倍的最大數(shù)
思路一:
思路二:
題二:兩個數(shù)組的交集
?思路一:
本人實力有限可能對一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評論區(qū)指出錯誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
選擇題:?
題一:
1、以下敘述中正確的是( )
A: 只能在循環(huán)體內(nèi)和switch語句體內(nèi)使用break語句
B: 當break出現(xiàn)在循環(huán)體中的switch語句體內(nèi)時,其作用是跳出該switch語句體,并中止循環(huán)體的執(zhí)行
C: continue語句的作用是:在執(zhí)行完本次循環(huán)體中剩余語句后,中止循環(huán)
D: 在while語句和do-while語句中無法使用continue語句
答案解析:
????????break語句通常用在循環(huán)語句和switch語句中。當break用于switch語句中時,可使程序跳出switch而執(zhí)行switch以后的語句;當break語句用于do-while、for、while循環(huán)語句中時,可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句,即滿足條件時便跳出循環(huán)。continue語句的作用是跳過循環(huán)體中剩余的語句而強行執(zhí)行下一次循環(huán)。B、C和D三個選項中均有錯誤。因此A選項正確。
題二:
2、下列 for 循環(huán)的次數(shù)為( )
for(int i = 0 ; i || i++ < 5;);
A: 0? ? B: 5? ? C: 1? ? D: 無限
答案解析:
????????邏輯或運算如果前表達式為真,后表達式不計算,第一次循環(huán)時i為0,執(zhí)行i++,第二次循環(huán)時i為1,是個真值,不再執(zhí)行i++,也就死循環(huán)了。
題三:
3、以下描述中正確的是( )
A: 由于do-while循環(huán)中循環(huán)體語句只能是一條可執(zhí)行語句,所以循環(huán)體內(nèi)不能使用復合語句
B: do-while循環(huán)由do開始,用while結(jié)束,在while(表達式)后面不能寫分號
C: 在do-while循環(huán)體中,不一定要有能使while后面表達式的值變?yōu)榱?"假")的操作
D: do-while循環(huán)中,根據(jù)情況可以省略while
答案解析:
????????do-while循環(huán)中的循環(huán)體通常都是復合語句代碼塊,A錯誤,while(表達式)后面要寫分號,B錯誤,while不能省,D錯誤。
題四:
4、設函數(shù) fun 和實參數(shù)組的說明是如下形式,則對函數(shù)的調(diào)用語句中,正確的是( )
void fun(char ch,float x[]);
float a[10];
A:fun("asd" , a[]);? ? ? ?? B:fun('x' , A);
C:fun('68' , 2.8);? ? ? ? ?? D:fun(32 , a);
答案解析:
????????A選項數(shù)組傳參只需要寫數(shù)組名就行,a[]時錯誤的,B選項第二個參數(shù)寫成了大寫,錯了。C選項第二個參數(shù)是浮點數(shù),但是fun函數(shù)的第二參數(shù)是數(shù)組不匹配,fun函數(shù)參數(shù)x需要傳一個數(shù)組或者float *指針,只有D選項的形式是正確的。
題五:
5、在C語言中,一個函數(shù)不寫返回值類型,默認返回值類型為()A:int? ? B:char? ? C:void? ? D:都不是
答案解析:
????????一個函數(shù)不寫返回值類型,默認的返回類型是int,但不提倡這么做。
編程題:
題一:至少是其他數(shù)字兩倍的最大數(shù)
747. 至少是其他數(shù)字兩倍的最大數(shù) - 力扣(LeetCode)
?示例:
輸入:nums = [3,6,1,0] 輸出:1 解釋:6 是最大的整數(shù),對于數(shù)組中的其他整數(shù),6 至少是數(shù)組中其他元素的兩倍。6 的下標是 1 ,所以返回 1 。
思路一:
排序查找法:
? ? ? ? 第一步:將原數(shù)組拷貝一份,然后直接將數(shù)組按升序排序;
? ? ? ? 第二步:判斷倒數(shù)第一位是不是倒數(shù)第二位的兩倍,不是:直接返回;是:記錄最后一位的值;
? ? ? ? 第三步:然后遍歷原數(shù)組找到下標返回。
//比較函數(shù)升序
int my_cmp(const void* p1,const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
int dominantIndex(int* nums, int numsSize)
{
if(numsSize == 1)
{
return -1;
}
int num[1000] = {0};
//拷貝一份到num中
memcpy(num,nums,sizeof(nums[0])*numsSize);
//將num數(shù)組的元素升序排序
qsort(num,numsSize,sizeof(nums[0]),my_cmp);
//比較后兩個是否滿足題目條件
if(num[numsSize-1] >= num[numsSize-2]*2)
{
//記錄最大元素
int count = num[numsSize-1];
//查找最大元素
for(int i = 0;i < numsSize;i++)
{
if(nums[i] == count)
{
return i;
}
}
}
return -1;
}
思路二:
下標比較法:
? ? ? ? 第一步:分別從用來找次小值a=?-1 ,用來找最大值b=?0 下標開始遍歷數(shù)組;
????????第二步:如果當前遍歷過程中的值比下標“ b ”的值大,那么a記錄b和b記錄當前最大值,當當前遍歷值比b下標值小或者下標不在數(shù)組中,就將當前遍歷值給a,通過循環(huán)達到a為次小值,b為最大值;
????????第三步:然后判斷是否為兩倍,是輸出b,不是則輸出“-1”。
int dominantIndex(int* nums, int numsSize)
{
if(numsSize == 1)
return 0;
int a = -1
int b = 0;
for(int i = 1; i < numsSize; i++)
{
if (nums[i] > nums[b])
{
a = b; b = i;
}
else if (a == -1 || nums[i] > nums[a])
{
a = i;
}
}
return nums[b] >= nums[a] * 2 ? b : -1;
}
題二:兩個數(shù)組的交集
349. 兩個數(shù)組的交集 - 力扣(LeetCode)
?思路一:
? ? ? ? 第一步:首先分別將兩個數(shù)組按升序排列,開辟足夠容納交集大小的數(shù)組tmp;
? ? ? ? 第二步:同時遍歷兩個數(shù)組:只要任意一個數(shù)組遍歷結(jié)束,就結(jié)束,當數(shù)組值相同時,第一次放數(shù)據(jù)或者不重復,則將數(shù)據(jù)存放到tmp數(shù)組中,否則:數(shù)組1值比數(shù)組2值小,數(shù)組1下標增加,反之數(shù)組2下標增加,循環(huán)操作,直到一個數(shù)組遍歷結(jié)束;
? ? ? ? 第三步:然后返回tmp數(shù)組。文章來源:http://www.zghlxwxcb.cn/news/detail-666539.html
//升序排列
int my_cmp(const void* p1,const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
//分別將兩個數(shù)組按升序排列
qsort(nums1,nums1Size,sizeof(nums1[0]),my_cmp);
qsort(nums2,nums2Size,sizeof(nums1[0]),my_cmp);
//開辟足夠容納交集大小的數(shù)組
int* tmp = (int*)malloc(sizeof(nums1[0])*(nums1Size + nums2Size));
*returnSize = 0;
//遍歷兩個數(shù)組的下標
int s1 = 0;
int s2 = 0;
//只要任意一個數(shù)組遍歷結(jié)束,就結(jié)束
while(s1 < nums1Size && s2 < nums2Size)
{
//數(shù)組值相同
if(nums1[s1] == nums2[s2])
{
//保證唯一性
if(!(*returnSize) || tmp[(*returnSize)-1] != nums1[s1])
{
tmp[(*returnSize)++] = nums1[s1];
}
s1++;
s2++;
}
//數(shù)組1值比數(shù)組2值小,數(shù)組1下標增加,反正數(shù)組2下標增加
else if(nums1[s1] < nums2[s2])
{
s1++;
}
else
{
s2++;
}
}
return tmp;
}
本人實力有限可能對一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評論區(qū)指出錯誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??文章來源地址http://www.zghlxwxcb.cn/news/detail-666539.html
到了這里,關(guān)于C語言:選擇+編程(每日一練Day6)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!