??博客主頁:小王又困了
??系列專欄:每日一練
??人之為學(xué),不日近則日退?
??感謝大家點贊??收藏?評論??
目錄
一、選擇題
??1.第一題?
??2.第二題
??3.第三題
??4.第四題
二、編程題
??1.第一題?
??2.第二題
???前言:
在前面我們學(xué)習(xí)完C語言的所以知識,當(dāng)然練習(xí)鞏固也不能落下。俗話說:“無財之謂貧,學(xué)而不能行之謂病。”可見實踐對我們學(xué)習(xí)的重要。接下來就讓小王帶著大家進行練習(xí),鞏固我們C語言的學(xué)習(xí)。
一、選擇題
??1.第一題?
若運行以下程序時,從鍵盤輸入ADescriptor<回車> ,則下面程序的運行結(jié)果是( )
int main()
{
char c;
int v0 = 0, v1 = 0, v2 = 0;
do
{
switch (c = getchar())
{
case'a':
case'A':
case'e':
case'E':
case'i':
case'I':
case'o':
case'O':
case'u':
case'U':
v1 += 1;
default:
v0 += 1; v2 += 1;
}
} while (c != '\n');
printf("v0=%d,v1=%d,v2=%d\n", v0, v1, v2);
return 0;
}
???解題思路:
我們通過觀察代碼發(fā)現(xiàn),這個程序讀取字符,在switch語句中進行計算,當(dāng)讀到 ‘\0’ 時停止 。判斷是否是元音字母進行不同的計算,但是在本題switch語句中沒有break,執(zhí)行完case語句還會繼續(xù)執(zhí)行default語句。輸入ADescriptor這串字符中有4個元音字母,所以case語句和default語句都執(zhí)行,v0=v1=v2=4;其他7個字符只執(zhí)行default語句,所以v1=4,v0=v2=11。但是這里要注意,本題使用的是do…while循環(huán),先執(zhí)行在判斷,所以輸入‘\0’也要執(zhí)行語句,最后結(jié)果為v1=4,v0=v2=12。
??2.第二題
下面代碼 *pa 的值是()
float a[3] = { 1.5,2.5,3.5 };
float* pa = a;
*(pa++) *= 3;
??解題思路:
a 是數(shù)組名,數(shù)組名是首元素地址,pa中存放的就是數(shù)組名是首元素地址。*(pa++) *= 3 這里是后置++,要先使用,再++。*pa 就是數(shù)組的首元素1.5,1.5*=3的結(jié)果為4.5,這時數(shù)組首元素的值被修改為4.5,這里我們不要忘記++,pa++就指向了2.5所在的位置,對pa解引用結(jié)果就是2.5。
??3.第三題
若給定條件表達(dá)式 (M)?(a++):(a--) ,則下面表達(dá)式哪個 M 等價( )?
A: 和(M==0)等價 B: 和(M==1)等價 C: 和(M!=0)等價 D: 和(M!=1)等價
??解題思路:
我們觀察題目,代碼的意思是:M為真,執(zhí)行a++;M為假,執(zhí)行a--。當(dāng)M非0時為真,M為0時為假。
選項A: M==0 的意思是,M為0時,表達(dá)式為真;M非0時,表達(dá)式為假,與題中M不等價。
選項B: M==1 的意思是,M為1時,表達(dá)式為真,但題意是M非0時為真,不等價。
選項C: M!=0 的意思是, M不等于0時為真,也就是非0;M為0,表達(dá)式為假,與M等價。
選項D:?M!=1 的意思是, M不等于1時為真,但題意是M非0時為真,不等價。
??4.第四題
?test.c 文件中包括如下語句,文件中定義的四個變量中,是指針類型的變量為【多選】( )
define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;
??解題思路:
根據(jù)宏定義的理解,我們直接將INT_PTR給替換成int*,則為int*a,b;故可以判斷出,a為指針變量,b不是,而typedef int* int_ptr相當(dāng)于是給int*取了個叫int_ptr的類型,是一個將int和*聯(lián)合在一起的整體,故c,d為指針變量?
二、編程題
??1.第一題?
???解題思路:
我們將A和B進行異或操作,異或的作用是對應(yīng)的二進制位相同位0,相異為1。異或后我們只需要統(tǒng)計二進制中1個數(shù),就可以知道A轉(zhuǎn)成B要改變幾位。
統(tǒng)計個數(shù)時,我們通過?num>>i&1==1 判斷,條件成立計數(shù)器就加1。
- &? -? 對應(yīng)的二進制位有0,則為0;都為1,則為1
- ^? -? 對應(yīng)的二進制位相同位0,相異為1
int convertInteger(int A, int B) { int num=A^B; int count=0; for(int i=0;i<32;i++) { if(num>>i&1==1) { count++; } } return count; }
??2.第二題
????解題思路:
我們通過觀察可以發(fā)現(xiàn),楊氏矩陣的右上角的元素是有特點的,右上角的元素是一行中最大的,一列中最小的。我們從右上角開始查找,當(dāng)右上角的元素比我們要查找的元素小,我們就可以去掉右上角元素所在的這一行;右上角的元素比我們要查找的元素大,我們就可以去掉右上角元素所在的這一列。然后繼續(xù)找右上角的元素和要查找的值比較。這樣每一次去掉一行或一列,小路遠(yuǎn)高于遍歷數(shù)組元素。
文章來源:http://www.zghlxwxcb.cn/news/detail-673074.html
int main() { int k = 0; scanf("%d", &k); int arr[3][3] = { 1,2,3,4,5,6,7,8,9 }; int flag = 0; //右上角的元素 int x = 0; int y = 2; while (x <= 2 && y >= 0) { //去掉一行 if (arr[x][y] < k) { x++; } //去掉一列 else if (arr[x][y] > k) { y--; } else { printf("找到了,下標(biāo)為%d %d\n", x, y); flag = 1; break; } } if (flag == 0) { printf("找不到\n"); } return 0; }
本次的內(nèi)容到這里就結(jié)束啦。希望大家閱讀完可以有所收獲,同時也感謝各位讀者三連支持。文章有問題可以在評論區(qū)留言,博主一定認(rèn)真認(rèn)真修改,以后寫出更好的文章。你們的支持就是博主最大的動力。文章來源地址http://www.zghlxwxcb.cn/news/detail-673074.html
到了這里,關(guān)于拒絕擺爛!C語言練習(xí)打卡第六天的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!