目錄
選擇題:
題一:
題二:
題三:
題四:
題五:
編程題:
題一:尋找奇數(shù)
思路一:
題二:尋找峰值
思路一:
本人實(shí)力有限可能對(duì)一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評(píng)論區(qū)指出錯(cuò)誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
選擇題:
題一:
1、有如下代碼,則 *(p[0]+1) 所代表的數(shù)組元素是()
int a[3][2] = {1, 2, 3, 4, 5, 6}, *p[3];
p[0] = a[1];
A: a[0][1]? ? B: a[1][0]? ? C: a[1][1]? ? D: a[1][2]
答案解析:
????????p是一個(gè)指針數(shù)組,p[0] = a[1];此處a[1]是二維數(shù)組的第二行的數(shù)組名,數(shù)組名表示首元素的地址,a[1]是a[1][0]的地址,所以p[0]中存儲(chǔ)的是第2行第1個(gè)元素的地址,p[0]+1就是第二行第2個(gè)元素的地址,*(p[0]+1)就是第二行第二個(gè)元素了。所以C正確。
題二:
2、關(guān)于指針下列說(shuō)法正確的是【多選】( )
A: 任何指針都可以轉(zhuǎn)化為void *? ? ? B: void *可以轉(zhuǎn)化為任何指針
C: 指針的大小為8個(gè)字節(jié)? ? ? ? ? ? ? ? ?D: 指針雖然高效、靈活但可能不安全
答案解析:
????????C選項(xiàng),指針占幾個(gè)字節(jié)要看平臺(tái),64位環(huán)境下8個(gè)字節(jié),32位環(huán)境下4個(gè)字節(jié)。
題三:
3、以下 scanf 函數(shù)調(diào)用選項(xiàng)中, 錯(cuò)誤的是( )
struct T
{? ? ? ? char name[20];
????????int age;
????????int sex;
} a[5], *pa=a;
A: scanf("%s",a[0].name);? ? ? ? ?B: scanf("%d", &pa[0].age);
C: scanf("%d",&(pa->age));? ? ? ?D: scanf("%d", pa->age);
答案解析:
????????該題考察的是通過(guò)scanf函數(shù)的調(diào)用對(duì)結(jié)構(gòu)體數(shù)據(jù)類型進(jìn)行初始化。scanf("輸入控制符", 輸入?yún)?shù));功能:將從鍵盤輸入的字符轉(zhuǎn)化為“輸入控制符”所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中。scanf輸入時(shí)要通過(guò)地址找空間,B、C用了&是正確的。name屬于字符數(shù)組的數(shù)組名,相當(dāng)于數(shù)組的首地址,A正確。單獨(dú)的pa->age可用于輸出語(yǔ)句獲取
值的形式,用在scanf中的時(shí)候需要&操作符,D錯(cuò)誤。
題四:
4、如下函數(shù) fun 計(jì)算 prod=1*2*3*…*n ,并返回計(jì)算結(jié)果值。但當(dāng) n>12 時(shí),返回值不正確。要找出該程序的錯(cuò)誤,正確的調(diào)試方法是( )
int fun(int n)
{
????????int prod = 1 , i = 0;
????????for(i = 1;i <= n;i++)
????????{
????????????????prod *= i;
????????}????????return prod;
}
A: 監(jiān)視變量prod的值,在prod *= i;行處設(shè)置斷點(diǎn),然后單步運(yùn)行,直到發(fā)現(xiàn)錯(cuò)誤原因
B: 監(jiān)視變量prod的值,在return prod;行處設(shè)置斷點(diǎn),程序中斷后,即可發(fā)現(xiàn)錯(cuò)誤原因
C: 在prod=1;處設(shè)置斷點(diǎn),然后在函數(shù)調(diào)用堆棧中即可發(fā)現(xiàn)錯(cuò)誤原因
D: 監(jiān)視變量i的值,在for (i=1; i<=n; i++)行處設(shè)置斷點(diǎn),然后單步運(yùn)行,直到發(fā)現(xiàn)錯(cuò)誤原因
答案解析:
????????依題目已知情況,當(dāng)n<=12時(shí)結(jié)果是正確的,說(shuō)明是隨著參數(shù)的變大計(jì)算過(guò)程中哪里出了問(wèn)題,故而要在prod *= i;處設(shè)斷點(diǎn),查看原因。錯(cuò)誤原因是數(shù)據(jù)過(guò)大時(shí)整型溢出。
題五:
5、下列給定程序中,函數(shù) fun 的功能是:把形參a所指數(shù)組中的奇數(shù)按原順序依次存放到 a[0]、a[1]、a[2]… 中,把偶數(shù)從數(shù)組中刪除,奇數(shù)個(gè)數(shù)通過(guò)函數(shù)值返回。 例如,若a所指數(shù)組中的數(shù)據(jù)最初排列為: 9,1,4,2,3,6,5,8,7 ,刪除偶數(shù)后,a所指數(shù)組中的數(shù)據(jù)為: 9,1,3,5,7 ,返回值為5。請(qǐng)?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果( )
int fun(int a[], int n)
{
????????int i, j;
????????j=0;
????????for (i=0; i<n; i++)
????????????????if (a[i]%2== _________ )
????????????????{
????????????????????????a[j]=a[i];
????????????????????????_________;
????????????????}????????return _________;
}
A: 0 j++ j? ? B: 1 j++ j+1? ? C: 0 j++ j+1? ? D: 1 j++ j
答案解析:
????????代碼實(shí)現(xiàn)的思路應(yīng)該是arr[i]是奇數(shù)的時(shí)候要存儲(chǔ)起來(lái),所以第一個(gè)空是1,最開(kāi)始j是0,每次找到一個(gè)奇數(shù)就存儲(chǔ)到arr[j]的位置,那接下里j需要+1,所以得第二個(gè)空是j++,當(dāng)循環(huán)停止的時(shí)候,j其實(shí)就是奇數(shù)的個(gè)數(shù)。所以最后返回j,第三個(gè)空是j。所以選D。
編程題:
題一:尋找奇數(shù)
尋找奇數(shù)_??皖}霸_??途W(wǎng) (nowcoder.com)
示例1
????????輸入:
????????5 ????????2 1 2 3 1????????輸出:
????????3
思路一:
必懂知識(shí):按位異或(“ ^ ”):二進(jìn)制位相同為“0”,不同為“1”。
? ? ? ? 第一步:定義記錄元素值的result,以及元素個(gè)數(shù)n;
? ? ? ? 第二步:遍歷題目所給數(shù)組,并輸入各個(gè)下標(biāo)對(duì)應(yīng)的元素給result,按位異或,最終將相同的數(shù)抵消為“0”;
????????第三步:最后得到的就是數(shù)組中奇數(shù)個(gè)元素,打印。
#include <stdio.h>
#include <string.h>
int main()
{
int n = 0;
int result = 0;
scanf("%d", &n);
int num = 0;
//遍歷題目數(shù)組
for (int i = 0; i < n; i++)
{
//輸入各個(gè)下標(biāo)對(duì)應(yīng)的元素
scanf("%d", &result);
//按位異或,最終將相同的數(shù)抵消為“0”
num ^= result;
}
//最后得到的就是數(shù)組中奇數(shù)個(gè)元素
printf("%d\n", num);
return 0;
}
題二:尋找峰值
尋找峰值_牛客題霸_??途W(wǎng) (nowcoder.com)
示例1
????????輸入:
????????[2,4,1,2,7,8,4]??????返回值:
????????1???????說(shuō)明:
????????4和8都是峰值元素,返回4的索引1或者8的索引5都可以
思路一:
二分查找:
? ? ? ? 第一步:首先排除邊界情況,再定義首元素下標(biāo)left,尾元素下標(biāo)right;
? ? ? ? 第二步:二分查找:nums[mid] < nums[mid+1]時(shí),說(shuō)明峰在右邊,即需要left = mid + 1;
????????????????????????????????????????nums[mid] >=?nums[mid+1]時(shí),說(shuō)明峰在左邊,即需要?right = mid;
????????第三步:最后二分查找使下標(biāo)left就是最大值,返回left。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-695139.html
int findPeakElement(int* nums, int numsLen )
{
//排除邊界情況
if(numsLen == 1 || nums[0] > nums[1])
return 0;
if(nums[numsLen-1] > nums[numsLen-2])
return numsLen-1;
int left = 0;
int right = numsLen-1;
//二分查找使下標(biāo)left就是最大值
while(left < right)
{
int mid = (left + right) / 2;
if(nums[mid] < nums[mid+1])
{
left = mid + 1;
}
else
{
right = mid;
}
}
return left;
}
本人實(shí)力有限可能對(duì)一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評(píng)論區(qū)指出錯(cuò)誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-695139.html
到了這里,關(guān)于C語(yǔ)言:選擇+編程(每日一練Day15)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!