目錄
選擇題:
題一:
題二:
題三:
題四:
題五:
編程題:
題一:自除數(shù)
思路一:
題二:除自身以外數(shù)組的乘積
思路二:
本人實(shí)力有限可能對(duì)一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評(píng)論區(qū)指出錯(cuò)誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
選擇題:
題一:
1、下列程序的輸出是( )
#include<stdio.h>
int main()
{
????????int a [12]= {1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;
????????for(i=0;i<4;i++)
????????p[i]=&a [i*3];
????????printf("%d\n",p[3][2]);
????????return 0;
}
A: 上述程序有錯(cuò)誤? ? B: 6? ? C: 8? ? D: 12
答案解析:
????????p是一個(gè)指針數(shù)組,p[i] = &a[i*3]相當(dāng)于是把數(shù)組a每3個(gè)一組分開并把每組的首地址存在p數(shù)組,此時(shí)p類似一個(gè)4行3列的二維數(shù)組,p[3][2]就是4行第3個(gè)元素12。
題二:
2、二維數(shù)組X按行順序存儲(chǔ),其中每個(gè)元素占1個(gè)存儲(chǔ)單元。若 X[4][4] 的存儲(chǔ)地址為 Oxf8b82140 , X[9][9] 的存儲(chǔ)地址為 Oxf8b8221c ,則 X[7][7] 的存儲(chǔ)地址為( )
A: Oxf8b821c4? ? ? ?B: Oxf8b821a6
C: Oxf8b82198? ? ? ?D: Oxf8b821c0
答案解析:
????????假設(shè)每行有n個(gè)元素:那x[9][9]元素的地址 - x[4][4]元素的地址 = 0x21c0x140=5n+5(21c和140是地址末三位的十六進(jìn)制數(shù)),這里n是43,假設(shè)x[7][7]的地址是z,x[7][7]元素的地址 - x[4][4]元素的地址 = z-0x140 = 3n+3,z = 3n+3+140 =3*43+3+0x140 = 0x84+0x140 = 0x1c4,看地址的尾數(shù),選擇A。
題三:
3、以下哪個(gè)選項(xiàng)可以正確描述 sizeof(double) ( )
A: 一個(gè)整型表達(dá)式? ? ? ? ? ? ? B: 一個(gè)雙精度型表達(dá)式
C: 一個(gè)不合法的表達(dá)式? ? ? ?D: 一種函數(shù)調(diào)用
答案解析:
????????sizeof是C語言中的一個(gè)操作符,不是函數(shù)調(diào)用,簡單的說其作用就是返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù),結(jié)果是無符號(hào)整數(shù),因此可以把它看作是整型表達(dá)式。所以選擇A。
題四:
4、下列代碼運(yùn)行后的結(jié)果是什么( )
int main()
{
????????char a = 'a',b;
????????printf("%c,", ++a);
????????printf("%c\n", b = a++);
????????return 0;
}
A: b,b? ? B: b,c? ? C: a,b? ? D: a,c
答案解析:
????????變量a里邊存的是字符'a',第一次輸出先加加再輸出,輸出的是'b';第二次輸出的時(shí)候,a先賦值再加加,賦值給b的就是a原來的值,輸出b的時(shí)候的還是‘b’。
題五:
5、以下逗號(hào)表達(dá)式的值為( )
(x= 4 * 5 , x * 5) , x + 5;
A: 25? ? ?B: 20? ? C: 100? ? D: 45
答案解析:
????????逗號(hào)表達(dá)式是從前到后依次計(jì)算子表達(dá)式,而其結(jié)果是最后一項(xiàng)的值,此題去掉括號(hào)后的表達(dá)式,和原表達(dá)式是等價(jià)的,先計(jì)算4*5并賦值給x,x變?yōu)?0,中間x*5并沒有改變x的值,最后一項(xiàng)x+5值是25,也就是整個(gè)表達(dá)式的值。
編程題:
題一:自除數(shù)
728. 自除數(shù) - 力扣(LeetCode)
示例 1:
輸入:left = 1, right = 22 輸出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
思路一:
????????第一步:將returnSize的初始值設(shè)為“0”,開辟足夠容納所有可能值的數(shù)組num;
? ? ? ? 第二步:將題目所給的值域遍歷一遍,每次用“n”記錄當(dāng)前遍歷值;
? ? ? ? 第三步:在確保每次都將一個(gè)數(shù)遍歷完,當(dāng)n=“0”,就循環(huán)結(jié)束,否則開始判斷是不是自除數(shù),分別拿到個(gè)位、十位、百位的數(shù)值并取余;
? ? ? ? 第四步:如果最后n的值為“0”,說明是自除數(shù)并放入數(shù)組中,否則,不是。
int* selfDividingNumbers(int left, int right, int* returnSize)
{
int i = 0;
*returnSize = 0;
//開辟數(shù)組空間
int* num = (int*)malloc(4000);
//遍歷數(shù)組所給元素范圍
for(i = left; i <= right;i++)
{
int n = i;
//確保每次都將一個(gè)數(shù)遍歷完
for(int j = 0;j < 4;j++)
{
//n為0,就不執(zhí)行
if(n % 10 != 0)
{
int k = n % 10;
//判斷是不是自除數(shù)
if(i % k == 0)
{
n = n / 10;
}
}
}
//最后遍歷完的就是自除數(shù)
if(n == 0)
{
num[(*returnSize)++] = i;
}
}
return num;
}
題二:除自身以外數(shù)組的乘積
238. 除自身以外數(shù)組的乘積 - 力扣(LeetCode)
示例 1:
輸入: nums =[1,2,3,4]
輸出:[24,12,8,6]
思路二:
需要明確知道:?題目意思是數(shù)組下標(biāo)位置定義的值為除了自身以外數(shù)組里的所有元素相乘的值!
? ? ? ? 第一步:分別定義兩個(gè)足夠大小的數(shù)組,前綴arr1(當(dāng)前數(shù)之前所有元素的乘積),后綴arr2(當(dāng)前數(shù)之后所有元素的乘積),開辟相同大小的數(shù)組tmp;
? ? ? ? 第二步:前綴:前綴數(shù)組第一個(gè)元素為“1”即arr1[i] = left;,然后乘以原數(shù)組的第“i”位,得到的值放到left中;
? ? ? ? 第三步:從后往前,后綴:后綴數(shù)組最后一個(gè)元素為“1”即arr2[i] = right;然后乘以原數(shù)組的第“i”位,得到的值放到right中;
? ? ? ? 第四步:前綴與后綴的各個(gè)對(duì)應(yīng)的元素相乘就是除自身以外的所有元素相乘。文章來源:http://www.zghlxwxcb.cn/news/detail-706974.html
//題目意思是數(shù)組下標(biāo)位置定義的值為除了自身以外數(shù)組里的所有元素相乘的值
int* productExceptSelf(int* nums, int numsSize, int* returnSize)
{
int n = numsSize;
int arr1[100000] = {0};
int arr2[100000] = {0};
//開辟空間
int* tmp = (int*)malloc(sizeof(int)*n);
*returnSize = n;
int left = 1;
int right = 1;
int i = 0;
//計(jì)算各個(gè)元素的前綴
for(i = 0;i < n;i++)
{
arr1[i] = left;
left = arr1[i] * nums[i];
}
//計(jì)算各個(gè)元素的后綴
for(i = n-1;i >= 0;i--)
{
arr2[i] = right;
right = right * nums[i];
}
//前綴乘以后綴即結(jié)果
for(i = 0;i < n;i++)
{
tmp[i] = arr1[i] * arr2[i];
}
return tmp;
}
本人實(shí)力有限可能對(duì)一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評(píng)論區(qū)指出錯(cuò)誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??文章來源地址http://www.zghlxwxcb.cn/news/detail-706974.html
到了這里,關(guān)于C語言:選擇+編程(每日一練Day9)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!