目錄
- 選擇題1
- 選擇題2
- 選擇題3
- 選擇題4
- 編程題一
選擇題1
執行下面程序,正確的輸出是( )
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
【分析】 首先我們可以看到x和y有兩個不同的值,為x=5和3,y=7和8,其中x=5和y=7的范圍比x=3和y=8的范圍更大(即作用域更大),而printf函數有一個就近原則,即輸出與它最近的x和y,swap函數則是將x=5和y=7進行交換(因為swap函數沒有就近原則,而x=5和y=7作用域更大)
選擇題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
【分析】\8表示8進制的8,而8進制的數字表示為0~7,因此\8表示錯誤
選擇題3
若給定條件表達式 (M)?(a++):(a--) ,則其中表達式 M ()
A: 和(M==0)等價 B: 和(M==1)等價 C: 和(M!=0)等價 D: 和(M!=1)等價
【答案】 C
【分析】(M)?(a++):(a–)的含義為判斷表達式M是否為真(M!=0)(因為為表達式,所以只要非0就為真),如果為真就a++,反之則a–
選擇題4
有如下定義語句,則正確的輸入語句是【多選】( )
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
【分析】這里可能會有人認為scanf后面都應該要有&,其實&只是為了儲存數據地址,而數組可以省略&。
我們舉一個例子
#include<stdio.h>
void jack( int *arr)
{for (int i = 0; i <= 5; i++){arr[i] = i;}
}
int main()
{int arr[6] = { 0 };jack(arr);for (int i = 0; i <= 5; i++){printf("%d ", arr[i]);}return 0;
}
這個代碼運行結果如圖
而加上&后
#include<stdio.h>
void jack( int *arr)
{for (int i = 0; i <= 5; i++){arr[i] = i;}
}
int main()
{int arr[6] = { 0 };jack(&arr);for (int i = 0; i <= 5; i++){printf("%d ", arr[i]);}return 0;
}
我們可以看出結果并沒有變,所以&可加可不加。
編程題一
根據輸入的日期,計算是這一年的第幾天。輸入保證年份為4位數且日期合法。
輸入描述:輸入一行,每行空格分割,分別是年,月,日。
輸出描述:輸出是這一年的第幾天
示例:
輸入:2012 12 31 輸入:1982 3 4
輸出:366 輸出:63
牛客網題目鏈接
【題目分析】
1:由于每個月的天數都不一定相同,如果我們不用數組的話是非常難搞定這問題的(我去試了),因此我們需要定義一個數組,以每個月的天數為元素,按順序輸入進數組,又因為閏年的二月和非閏年的二月天數不同,因此我們要定義兩個數組分別代表閏年和非閏年。
2:因為我們最后輸入的日不一定是這個月的最后一天,因此我們需要少計算一個月,然后將前面月的天數相加,再加上輸入的天數,即可得到最終結果
【代碼】
#include <stdio.h>
int main()
{int year, month, day,sum=0;scanf("%d %d %d", &year, &month, &day);int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };int notrun[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){for (int i = 0; i <= month - 2; i++){sum = sum+run[i];}sum += day;}else{for (int i = 0; i <= month - 2; i++){sum =sum+ notrun[i];}sum += day;}printf("%d", sum);return 0;
}