目錄
選擇題:
題一:
題二:
題三:
題四:
題五:
編程題:
題一:數(shù)組顛倒
思路一:
題二:?jiǎn)卧~倒排
思路一:
思路二:
本人實(shí)力有限可能對(duì)一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評(píng)論區(qū)指出錯(cuò)誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
選擇題:
題一:
1、請(qǐng)閱讀以下程序,其運(yùn)行結(jié)果是( )
int main()
{
????????char c='A';
????????if('0'<=c<='9')????????printf("YES");
????????else????????printf("NO");
????????return 0;
}
A: YES? ? B: NO? ? C: YESNO? ? D: 語(yǔ)句錯(cuò)誤
答案解析:
????????'0'<=c<='9'并非判斷x大于等于字符0,小于等于字符9,而是先執(zhí)行'0'<=c,使用這個(gè)表達(dá)式的結(jié)果再和'9'比較,'0'的ASCII碼值是48,'A'的ASCII碼值是'65',故'0'<c是真值1,1無疑是小于字符'9'的,最終是真。
題二:
2、假設(shè)編譯器規(guī)定 int 和 short 類型長(zhǎng)度分別為32位和16位,若有下列C語(yǔ)言語(yǔ)句,則 y 的機(jī)器數(shù)為( )
unsigned short x = 65530;
unsigned int y = x;
A: 0000 7FFA? ? ? ? ?B: 0000 FFFA? ?
C: FFFF 7FFA? ? ? ? D: FFFF FFFA
答案解析:
????????unsigned short類型的x變量2個(gè)字節(jié)保存了65530,十六進(jìn)制形式為0xFFFA,x給y賦值時(shí)會(huì)整型提升,而無符號(hào)數(shù)在提升時(shí)高位補(bǔ)0,其實(shí)就相當(dāng)于把x的值放在了y的低2個(gè)字節(jié)的空間中,故選B。
題三:
3、下列程序的輸出結(jié)果是什么( )
#include<stdio.h>
int main()
{
????????int n = 1001;
????????int ans = 0;
????????for(int i = 1; i <= n; ++i)
????????{
????????????????ans ^= i % 3;
????????}
????????printf("%d",ans);
????????return 0;
}
A: -2? ? B: 0? ? C: 1? ? D: 2
答案解析:
?????????????i % 3 的值按1、2、0循環(huán),可推算出ans按1、3、3、2、0、0循環(huán),循環(huán)進(jìn)行1001次,而1001%6=5,也就是ans按規(guī)律得到的第5個(gè)數(shù)為最終結(jié)果,故ans=0?。
題四:
4、C 語(yǔ)言中,下列運(yùn)算符優(yōu)先級(jí)最高的是 ( )
A: !? ? B: %? ? C: >>? ? D: ==
答案解析:
????????單目運(yùn)算符的優(yōu)先級(jí)通常都比較高,具體情況可查閱運(yùn)算符優(yōu)先級(jí)表格。
題五:
5、要使 a 的低四位翻轉(zhuǎn),需要進(jìn)行操作是( )??
?A: a|0xF? ? B: a&0xF? ? C: a^0xF? ? D: ~a
答案解析:
????????十六進(jìn)制數(shù)0xF是4位1,參與運(yùn)算時(shí)整型提升,高位都是0。低四位和1異或,0^1是1,1^1是0;高位和0異或,0^0是0,1^0是1。故而可以通過異或F使得a的低四位翻轉(zhuǎn),并保持高位不變。
編程題:
題一:數(shù)組顛倒
數(shù)字顛倒_??皖}霸_??途W(wǎng) (nowcoder.com)
示例1
????????輸入:
????????1516000????????輸出:
????????0006151
思路一:
前后交換法:
? ? ? ? 第一步:定義一個(gè)數(shù)組接收元素,并計(jì)算數(shù)組長(zhǎng)度,left指向第一個(gè)元素,right指向最后一個(gè)元素;
? ? ? ? 第二步:只要left < right,就交換兩個(gè)元素;
????????第三步:打印字符串。
#include <stdio.h>
#include <string.h>
int main()
{
char arr[10] = {0};
scanf("%s",&arr);
int sz = strlen(arr);
int left = 0;
int right = sz-1;
//前后交換
while(left < right)
{
char num = arr[left];
arr[left] = arr[right];
arr[right] = num;
left++;
right--;
}
printf("%s",arr);
return 0;
}
題二:?jiǎn)卧~倒排
單詞倒排_(tái)??皖}霸_牛客網(wǎng) (nowcoder.com)
示例1
????????輸入:
????????I am a student????????輸出:
????????student a am I
思路一:
逆置整個(gè)數(shù)組:?I am a student——>tneduts a ma I
分別逆置各個(gè)單詞:student a ma I
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?student a? ma I
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?student a am I
? ? ? ? 第一步:由于正常情況下scanf的局限性,這里用gets來接收元素,并計(jì)算長(zhǎng)度sz;
? ? ? ? 第二步:分別定義當(dāng)前節(jié)點(diǎn)cur,開始節(jié)點(diǎn)start來定位一個(gè)單詞的范圍,以及記錄數(shù)count;
????????第三步:首先數(shù)組整體倒置,然后從第一位開始,判斷是字母就cur后移一位,不是字母就將start到cur-1區(qū)間的字母進(jìn)行倒置,倒置完不是最后一個(gè)元素就添‘ ’(空格),再跳過所以非字母的元素;
? ? ? ? 第四步:循環(huán)判斷直到全部遍歷一遍,就是需要的結(jié)果。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//倒置
void my_reverse(char* left, char* right)
{
while (left < right)
{
char* tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[10000] = { 0 };
gets(arr);
//數(shù)組長(zhǎng)度
int sz = strlen(arr);
//定位單詞范圍
char* cur = arr;
char* start = arr;
//記錄單詞有幾個(gè)字母
int count = 0;
//整體倒置
my_reverse(arr, arr + sz - 1);
while (*cur != '\0')
{
//是字母就++
while (isalpha(*cur))
{
cur++;
}
//一個(gè)單詞倒置
my_reverse(start, cur - 1);
//倒置后補(bǔ)空格
if(*cur != '\0')
*cur = ' ';
//跳過所有非字母
while (!isalpha(*cur) && *cur != '\0')
{
start = ++cur;
}
}
//打印
printf("%s", arr);
return 0;
}
思路二:
????????scanf("%[a-z|A-Z]",arr[i]);? ? %["a-z | A-Z"]意思是是只接收字母元素,與二維數(shù)組連用,就是將一串字符連成的單詞放到一維數(shù)組中。
如:
? ? ? ? I? like? bit
即:I
? ? ? ? like
? ? ? ? bit
????????第一步:定義一個(gè)足夠接收字符串長(zhǎng)度的二維數(shù)組arr,以及初始化為“0”的“ i ”“ x ”;
????????第二步:scanf返回值,正確輸入n個(gè)變量返回n,不匹配返回0,輸入結(jié)束EOF,接收字母字符到一維數(shù)組中,只要后面不是'\n'就i++,否則直接退出循環(huán);
????????第三步:從后往前將打印單詞打印。文章來源:http://www.zghlxwxcb.cn/news/detail-707286.html
#include <stdio.h>
#include <stdlib.h>
int main()
{
char arr[10000][21] = {0};
int i = 0;
int x = 0;
while(1)
{
//scanf返回值,正確輸入n個(gè)變量返回n,不匹配返回0,輸入結(jié)束EOF
x = scanf("%[a-z|A-Z]",arr[i]);
//如果輸入結(jié)束,退出
if(getchar() == '\n')
break;
//記錄單詞個(gè)數(shù)
if(x)
i++;
}
//從后往前打印單詞
for(int j = i;j >= 0;j--)
{
if(j > 0)
printf("%s ",arr[j]);
else
printf("%s",arr[j]);
}
return 0;
}
本人實(shí)力有限可能對(duì)一些地方解釋和理解的不夠清晰,可以自己嘗試讀代碼,或者評(píng)論區(qū)指出錯(cuò)誤,望海涵!
感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???文章來源地址http://www.zghlxwxcb.cn/news/detail-707286.html
到了這里,關(guān)于C語(yǔ)言:選擇+編程(每日一練Day12)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!