?
目錄
選擇題
1、設(shè)變量已正確定義,以下不能統(tǒng)計(jì)出一行中輸入字符個(gè)數(shù)(不包含回車(chē)符)的程序段是( )
2、運(yùn)行以下程序后,如果從鍵盤(pán)上輸入 65 14<回車(chē)> ,則輸出結(jié)果為( )?
3、若運(yùn)行以下程序時(shí),從鍵盤(pán)輸入 ADescriptor<回車(chē)> ,則下面程序的運(yùn)行結(jié)果是( )
4、如下函數(shù)是求兩個(gè)int數(shù)字最大公約數(shù)的,指出其中存在的問(wèn)題【多選】( )?
?5、執(zhí)行下面的程序段,語(yǔ)句3的執(zhí)行次數(shù)為( )
掌握continue和break的區(qū)別
?編程題
1.錯(cuò)誤的集合
2.密碼檢查?
?
選擇題
1、設(shè)變量已正確定義,以下不能統(tǒng)計(jì)出一行中輸入字符個(gè)數(shù)(不包含回車(chē)符)的程序段是( )
A: n=0;while(ch=getchar()!='\n')n++; ? ? B: n=0;while(getchar()!='\n')n++;
C: for(n=0;getchar()!='\n';n++); ? ? ? ? ? ? ?D: n=0;for(ch=getchar();ch!='\n';n++);
解析:
? ? ? ?本體考察的是對(duì)for循環(huán)? ? ??
????????for循環(huán)語(yǔ)句,其中第一項(xiàng)初始化表達(dá)式只執(zhí)行一次,因此ch只從輸入流中取一個(gè)字符,之后就再不會(huì)取字符,因此會(huì)死循環(huán)。選D
for(賦值語(yǔ)句;判斷語(yǔ)句;調(diào)整語(yǔ)句);? ? ? //(循環(huán)變量賦初值; 循環(huán)條件; 循環(huán)變量增值)
? ?{
? ? ? ? //...
}
2、運(yùn)行以下程序后,如果從鍵盤(pán)上輸入 65 14<回車(chē)> ,則輸出結(jié)果為( )?
int main()
{
int m, n;
printf("Enter m,n;");
scanf("%d%d", &m,&n);
while(m!=n) //1
{
while(m>n) m=m-n; //2
while(n>m) n=n-m; //3
}
printf("m=%d\n",m);
return 0;
}
A: 3? ????????? B: 2? ??????????C: 1? ??????????D: 0
解析:
本題考察的是while循環(huán),循環(huán)嵌套的理解
? ????????初值m=65,n=14;循環(huán)1判斷m!=n為真,來(lái)到循環(huán)2判斷m>n為真,執(zhí)行m=m-n;直到m=9,n=14;
循環(huán)2結(jié)束來(lái)到循環(huán)3判斷n>m為真,執(zhí)行n=n-m;直到m=9,n=5;循環(huán)3結(jié)束回到循環(huán)1,如此往復(fù)直到m==n時(shí),循環(huán)結(jié)束。選C
while(循環(huán)控制表達(dá)式)
{
??語(yǔ)句序列
}
3、若運(yùn)行以下程序時(shí),從鍵盤(pán)輸入 ADescriptor<回車(chē)> ,則下面程序的運(yùn)行結(jié)果是( )
#include <stdio.h>
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;
}
A: v0=7,v1=4,v2=7? ? ? ? ? ?B: v0=8,v1=4,V2=8
C: v0=11,v1=4,v2=11??? ? ?D: v0=12,v1=4,v2=12
解析:
? ? ? ? 本題考察的是switch-case-default 語(yǔ)句
switch 語(yǔ)句中,如果進(jìn)入某條case入口中沒(méi)有break; 會(huì)進(jìn)入下一條case中一直到default,直到遇到break;或者代碼結(jié)束;? ? ? ??
例當(dāng)c為'A'時(shí),從case 'A'進(jìn)入,先后執(zhí)行v1+=1;v0+=1;v2+=1;,
而當(dāng)c為'p'時(shí),從default進(jìn)入,先后執(zhí)行v0+=1;v2+=1;,最終v0和v2是相等的。選D
switch(表達(dá)式)
{
case 常量1:語(yǔ)句1
case 常量2:語(yǔ)句2
default:語(yǔ)句n ??
? ? break;
}
4、如下函數(shù)是求兩個(gè)int數(shù)字最大公約數(shù)的,指出其中存在的問(wèn)題【多選】( )?
int gcd(char x, char y)
{
int min = x < y ? x : y;
for (min = 0; min > 0; min--)
if (x% min = 0 && y % min = 0)
return min;
}
A: 參數(shù)類(lèi)型不對(duì)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???B: 循環(huán)變量min初值不對(duì)
C: 判斷等于的符號(hào)不對(duì)?????????????????????????D: 返回類(lèi)型不對(duì)
解析:
本題考察的:==和=(==表示判斷是否相等,=表示賦值運(yùn)算符)
1.函數(shù)實(shí)參是int,形參用char不對(duì),會(huì)發(fā)生截?cái)鄟G失數(shù)據(jù);2.min在for循環(huán)開(kāi)始時(shí)更新為0,不再是兩個(gè)形參中的較小值;
3.判斷是否整除的時(shí)候誤將==寫(xiě)成=賦值運(yùn)算符;
4.函數(shù)最終要返回一個(gè)int值,返回值類(lèi)型沒(méi)問(wèn)題,但是這里要強(qiáng)調(diào)一個(gè)選項(xiàng)中沒(méi)寫(xiě)出的問(wèn)題
選ABC
知識(shí)點(diǎn):'==' 和 '='
???“=”是賦值。
? ? ? ? ??它的作用是將一個(gè)表達(dá)式的值賦給一個(gè)左值。一個(gè)表達(dá)式或者是一個(gè)左值,或者是一個(gè)右值。所謂左值是指一個(gè)能用于賦值運(yùn)算左邊的表達(dá)式。左值必須能夠被修改,不能是常量。我們用變量作左值,還可以看到,指針和引用也可以作左值。
? “==”是相等操作符,?????? ????判斷兩邊是否相等。利用相等運(yùn)算符,如果希望相等運(yùn)算符返回true,則運(yùn)算符兩側(cè)的值或語(yǔ)句必須使相等的;如果不相等,則==運(yùn)算符返回false。
?5、執(zhí)行下面的程序段,語(yǔ)句3的執(zhí)行次數(shù)為( )
for (i = 0; i <= n - 1; i++) // (1)
for (j = n; j > i; j--) // (2)
state; // (3)
A: n(n+2)/2? ? ????????B: (n-1)(n+2)/2? ??????????C: n(n+1)/2? ?????????D: (n-1)(n+2)
解析:?
? ? ? ? 本題考察多重循環(huán)體? ? ? ?
外循環(huán)有n次,
????????當(dāng)i=0,內(nèi)循環(huán)為n次,
????????當(dāng)i=1,內(nèi)循環(huán)為n-1次,
????????當(dāng)i=2時(shí),內(nèi)循環(huán)為n-2次,
以此類(lèi)推,總次數(shù)為 n+(n-1)+(n-2)+......+2+1,就是個(gè)等差數(shù)列,等于n(n+1)/2。?選C
在多重循環(huán)中有很多類(lèi)型的循環(huán)嵌套
// 外層循環(huán) while(條件1){? ? ? // 內(nèi)層循環(huán) ? ? for(條件2){ ? ? ? ? ? ? } ? ? do{ ? ?? ? ? }while(條件3); }
在循環(huán)嵌套中最需要注意的就是跳轉(zhuǎn)語(yǔ)句
掌握continue和break的區(qū)別
??break:
????????退出當(dāng)前循環(huán)!如果出現(xiàn)在多重循環(huán)的內(nèi)層循環(huán)中,不會(huì)退出外層循環(huán),只會(huì)退出當(dāng)前循環(huán)。
??continue(繼續(xù)):
????????結(jié)束本次循環(huán)(后面的代碼不執(zhí)行了),進(jìn)入下一次循環(huán)。
break可以出現(xiàn)在switch選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中,continue只能出現(xiàn)在循環(huán)中。
利用continue和break實(shí)現(xiàn)重復(fù)輸入。
?編程題
1.錯(cuò)誤的集合
645.錯(cuò)誤的集合——力扣
集合?
s
?包含從?1
?到?n
?的整數(shù)。不幸的是,因?yàn)閿?shù)據(jù)錯(cuò)誤,導(dǎo)致集合里面某一個(gè)數(shù)字復(fù)制了成了集合里面的另外一個(gè)數(shù)字的值,導(dǎo)致集合?丟失了一個(gè)數(shù)字?并且?有一個(gè)數(shù)字重復(fù)?。給定一個(gè)數(shù)組?
nums
?代表了集合?S
?發(fā)生錯(cuò)誤后的結(jié)果。請(qǐng)你找出重復(fù)出現(xiàn)的整數(shù),再找到丟失的整數(shù),將它們以數(shù)組的形式返回。
解析:
將數(shù)組排序,才能去遍歷;
????????returnSize是指返回?cái)?shù)組元素的個(gè)數(shù)。
1.:使用qsort()函數(shù)將數(shù)組排序成升序;
2:為返回值數(shù)組開(kāi)辟動(dòng)態(tài)內(nèi)存空間,否則在出函數(shù)時(shí)會(huì)釋放;
3:定義一個(gè)數(shù)來(lái)記錄數(shù)組的前一個(gè)數(shù);
4:遍歷數(shù)組:相同記錄為num[0],數(shù)組當(dāng)前元素-前一個(gè)元素值大于一說(shuō)明中間的就是缺的元素num[1];
5:如果最后一個(gè)元素不等于長(zhǎng)度,說(shuō)明最后一個(gè)就是缺的元素。
int my_cmp(const void* p1,const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
int* findErrorNums(int* nums, int numsSize, int* returnSize)
{
//將數(shù)組進(jìn)行升序排序
qsort(nums,numsSize,4,my_cmp);
//returnSize為返回?cái)?shù)組元素個(gè)數(shù)
*returnSize = 2;
//開(kāi)辟動(dòng)態(tài)內(nèi)存空間,否則在出函數(shù)時(shí)會(huì)釋放
int* num = (int*)malloc(sizeof(int)*2);
//定義數(shù)組的前一個(gè)數(shù)
int front = 0;
//遍歷數(shù)組
for(int i = 0; i < numsSize;i++ )
{
//相同記錄為num[0]
if(nums[i] == front)
{
num[0] = nums[i];
}
//數(shù)組當(dāng)前元素-前一個(gè)元素值大于一說(shuō)明中間的就是缺的元素
else if(nums[i] - front > 1)
{
num[1] = nums[i]-1;
}
front = nums[i];
}
//最后一個(gè)元素不等于長(zhǎng)度,說(shuō)明最后一個(gè)就是缺的元素
if(nums[numsSize-1] != numsSize)
{
num[1] = numsSize;
}
return num;
}
2.密碼檢查?
密碼檢查_(kāi)??皖}霸_牛客網(wǎng) (nowcoder.com)
輸入一個(gè)數(shù)n,接下來(lái)有n(n≤100)行,每行一個(gè)字符串,表示一個(gè)密碼,輸入保證字符串中只出現(xiàn)大寫(xiě)字母,小寫(xiě)字母和數(shù)字,字符串長(zhǎng)度不超過(guò)100。?
解析
1:創(chuàng)建輸入密碼數(shù)量的n,和字符串a(chǎn)rr;
2:for循環(huán)遍歷,創(chuàng)建用于記錄密碼的字符是否正確count,順便求字符串長(zhǎng)度;
3:判斷字符串長(zhǎng)度是否合法;
4:遍歷一遍字符串,格式正確就記錄count;
5:最后將字符串長(zhǎng)度與count比較,相同“YES”,反之“NO”。
int main()
{
int n = 0;
scanf("%d", &n);
//字符串長(zhǎng)度限制
char arr[100] = { 0 };
//密碼個(gè)數(shù)
for (int j = 0; j < n; j++)
{
scanf("%s", arr);
//用于記錄密碼的字符是否正確
int count = 0;
//字符串長(zhǎng)度
int sz = strlen(arr);
//是否符合長(zhǎng)度要求
if (sz >= 8 && sz <= 100)
{
//遍歷一遍字符串,格式正確就記錄
for (int i = 0; i < sz; i++)
{
if (arr[i] >= 'A' && arr[i] <= 'Z' ||
arr[i] >= 'a' && arr[i] <= 'z' ||
arr[i] >= '0' && arr[i] <= '9')
{
count++;
}
}
}
//長(zhǎng)度對(duì)比
if (sz == count)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-726286.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-726286.html
到了這里,關(guān)于【C語(yǔ)言】每日一題(半月斬)——day4的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!