目錄
一、選擇題
二、編程題
- 🎈個人主頁:庫庫的里昂
- ?🎐CSDN新晉作者
- ?🎉歡迎 👍點贊?評論?收藏
- ?收錄專欄:C語言每日一練
- ???其他專欄:代碼小游戲C語言初階
- 🤝希望作者的文章能對你有所幫助,有不足的地方請在評論區留言指正,大家一起學習交流!🤗
【前言】
在大家學完初階C語言后,有很多知識點是比較模糊的,我們應該多刷題,這樣才能鞏固我們所學知識。所以我開了一個新專欄C語言每日一刷,每一篇都包含5道選擇題,2道編程題,每一道題后面都會有詳細的解析。這個系列每日一更,大家來看看吧!?
一、選擇題
1、執行下面程序,正確的輸出是( )
?
#include<stdio.h>
int x=5,y=7;
void swap()
{int z;z=x;x=y;y=z;
}
int main()
{int x=3,y=8;swap();printf("%d,%d\n",x,y);return 0;
}
A: 5,7? ? B: 7,5? ? C: 3,8? ? D: 8,3
【答案】C
【解析】
swap函數用的是全局的x和y,但是不會發生交換 注意:printf函數在進行輸出的時候是就近原則的,所以輸出的x和y是main函數里面的,而不是全局的x和y。輸出語句這里,考慮局部優先的原則,故選C
2、以下不正確的定義語句是( )
A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};
B: char c2[] = {'\x10', '\xa', '\8'};
C: char c1[] = {'1','2','3','4','5'};
D: int y[5+3]={0, 1, 3, 5, 7, 9};
【答案】B
【解析】
轉義字符,有如下格式,但八進制數字是0-7,沒有8,故B選項中’\8’是錯誤的 。
\ddd ddd表示1到3個八進制數 如:\130?
\xhh hh表示1到2位十六進制數 如:\x30?
3、 test.c 文件中包括如下語句,文件中定義的四個變量中,是指針類型的變量為【多選】( )
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;
A: a? ? B: b? ? C: c? ? D: d
【答案】ACD
【解析】
因為#define是宏定義,僅僅是直接替換,INT_PTR a, b; 進行宏替換后代碼是這樣的:int *a, b;這里的int *是a的 類型,b的類型是int,故此次b只是int類型。而typedef是把該類型定義一個別名,別名是一個獨立的類型了,使用這個類型創建的變量都是這個類型的。
所以 a,c,d才是指針類型。
4、 若給定條件表達式 (M)?(a++):(a--) ,則其中表達式 M ( )
A: 和(M==0)等價? ? B: 和(M==1)等價? ? C: 和(M!=0)等價? ? D: 和(M!=1)等價
【答案】C
【解析】
給定條件表達式(M)?(a++):(a--)。 (表達式1)? (表達式2): (表達式3)為三目運算符。
計算規則為:先判斷表達式1是否為真,若為真,則計算表達式2,并將表達式2的結果作為整個表達式最終的結果,表達式3不計算;否則,表達式3的結果為最終結果,表達式2不計算。 在此表達式中,若M=0,為假,計算a--; 若M≠0,為真,計算a++; 若要求與M等價,則要滿足M取0時為假,取非0數值時為真。 c選項中:假定M取0,則M表示假,當M是0時,表達式M!=0不成立,為假,計算a--; 當M取非0數值時,M為真,表達式M!=0成立,為真,計算a++; 符合題意,選C
5、有如下定義語句,則正確的輸入語句是【多選】( )
?
int b;
char c[10];
A: scanf("%d%s",&b,&c);? ? ?B: scanf("%d%s",&b,c);
C: scanf("%d%s",b,c);? ? ? ? ?D:?scanf("%d%s",b,&c);
【答案】AB
【解析】
&c和c兩個地址值是一樣的,程序的效果相同,也沒錯,但同時也必須把變量b的地址給scanf,故CD錯誤,AB正確
二、編程題
1.OJ鏈接【牛客網題號:?JZ17
?打印從1到最大的n位數】【難度:入門】
輸入數字?n,按順序打印出從 1 到最大的 n 位十進制數。比如輸入 3,則打印出 1、2、3 一直到最大的 3 位數 999。
- 用返回一個整數列表來代替打印
- n 為正整數(0 < n <= 5)
示例:
輸入:1
返回值:[1,2,3,4,5,6,7,8,9]
static int a[100010];
int* printNumbers(int n, int* returnSize ) {int k = 1;int i = 0;for (int i = 0; i < n; i++){k *= 10;}for (i = 1; i < k; i++){a[i - 1] = i;}*returnSize = --i;return a;
}
2.OJ鏈接【牛客網題號: HJ73 計算日期到天數轉換】【難度:簡單】
根據輸入的日期,計算是這一年的第幾天。輸入保證年份為4位數且日期合法。
輸入描述:輸入一行,每行空格分割,分別是年,月,日
輸出描述:輸出是這一年的第幾天
示例1:
輸入:2012 12 31? ? 輸入:1982 3 4
輸出:366? ? ? ? ? ? ? ? 輸出:63
#include<stdio.h>
int main() {int year = 0;int month = 0;int day = 0;scanf("%d %d %d", &year, &month, &day);int d[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){d[1] = 29;}int count = 0;for (int i = 0; i < month - 1; i++){count += d[i];}count += day;printf("%d", count);return 0;
}
好了,今天的每日一刷就到這里結束了,感謝大家的觀看!
??