韓國(guó)免費(fèi)行情網(wǎng)站的推薦理由seo優(yōu)化方式包括
目錄
- 選擇題一
- 選擇題二
- 選擇題三
- 選擇題四
- 選擇題五
- 編程題一
選擇題一
已知函數(shù)的原型是: int fun(char b[10], int *a);
設(shè)定義: char c[10];int d; ,正確的調(diào)用語(yǔ)句是( )
A: fun(c,&d); B: fun(c,d); C: fun(&c,&d); D: fun(&c,d);
【答案】A
【分析】
數(shù)組:在傳參時(shí)我們需要注意參數(shù)類型,對(duì)于數(shù)組而言,傳參時(shí)我們可以直接省略[]和里面的數(shù)字
指針:當(dāng)傳參時(shí)為指針時(shí),我們就需要注意了,指針int*a表示傳入?yún)?shù)為整形類型的指針地址,因此表示整形地址則需&和整形類型的元素d
選擇題二
請(qǐng)問下列表達(dá)式哪些會(huì)被編譯器禁止【多選】( )
int a = 248, b = 4;
int const *c = 21;
const int *d = &a;
int *const e = &b;
int const * const f = &a;
A: *c = 32; B: *d = 43 C: e=&a D: f=0x321f
【答案】ABCD
【分析】這道題注意是考察const的理解
int const c = 21因?yàn)閏onst在c的左邊,因此為常量指針,即c是不能改變的,所以c=32錯(cuò)誤,但是只是*c不能改變,c是可以改變的,比如c=&a…
const int d = &a因?yàn)閏onst在d的左邊,因此d不能改變,這個(gè)和上邊的錯(cuò)誤一樣
int const e = &b const只在e的左邊,因此只有e不能被改變,而e是可以改變的,因此e=&a錯(cuò)誤,但是e=248是正確的
int const * const f = &a,我們可以看到有兩個(gè)const,一個(gè)在f左邊,另一個(gè)在f左邊,因此不管是f還是f都是不能被改變的,f=0x321f是16進(jìn)制,表示的是地址,反正不管是f還是*f改變都是錯(cuò)的
選擇題三
以下程序的輸出結(jié)果為( )
#include <stdio.h>
int i;
void prt()
{
for (i = 5; i < 8; i++)
printf("%c", '*');
printf("\t");
}
int main()
{
for (i = 5; i <= 8; i++)
prt();
return 0;
}
A: *** B: *** *** *** *** C: *** *** D: * * *
【答案】A
【分析】注意int i是全局變量,因此生命周期和主函數(shù)一樣,只有當(dāng)程序銷毀了才會(huì)消失
在prt循環(huán)后i=8,跳出prt后,主函數(shù)循環(huán)中i=8是滿足i<=8,然后i++使i=9,由于i=9在prt中不滿足循環(huán)條件i<8直接跳出循環(huán),最終值輸出了***
注意不是prt循環(huán)三次跳出后在主函數(shù)中再循環(huán),然后又進(jìn)prt中循環(huán),這樣的結(jié)果是B,是因?yàn)闆]有理解到全局變量的含義。
\t的含義約等于TAB鍵,可以理解為按了幾次空格鍵
下面是我用調(diào)試對(duì)關(guān)鍵過程的截圖
選擇題四
下面代碼段的輸出是( )
int main()
{
int a=3;
printf("%d\n",(a+=a-=a*a));
return 0;
}
A: -6 B: 12 C: 0 D: -12
【答案】D
【分析】這種題我覺得就和我之前寫的一篇博客講的一樣操作符詳解下(非常詳細(xì))有點(diǎn)花里胡哨,根本沒必要這樣來寫,如果分步驟來寫的話清晰明了
下面是對(duì)這道題的分析
這種算法是從右向左進(jìn)行的,因此先看a-=a*a,這樣算出的結(jié)果a=-6,再看a+=a,這樣算出結(jié)果是-12。
選擇題五
下列不能實(shí)現(xiàn)死循環(huán)的是( )
A: while(1){} B: for(;1;){} C: do{}while(1); D: for(;0;){}
【答案】 D
【分析】對(duì)于while來說要想實(shí)現(xiàn)死循環(huán),只需讓while()里面的內(nèi)容為真,并且while里面的語(yǔ)句沒有break就可以實(shí)現(xiàn)死循環(huán)
而for中(;x;)x為1則為真死循環(huán),為0則為假,不循環(huán)。
編程題一
題目鏈接
首先輸入要輸入的整數(shù)個(gè)數(shù) n ,然后輸入 n 個(gè)整數(shù)。
輸出為 n 個(gè)整數(shù)中負(fù)數(shù)的個(gè)數(shù),和所有正整數(shù)的平均值
結(jié)果保留一位小數(shù)。
注意: 0 即不是正整數(shù),也不是負(fù)數(shù),不計(jì)入計(jì)算
本題有多組輸入用例。
輸入描述:首先輸入一個(gè)正整數(shù) n ,然后輸入 n 個(gè)整數(shù)
輸出描述:輸出負(fù)數(shù)的個(gè)數(shù),和所有正整數(shù)的平均值
【題目分析】題目要求輸出負(fù)數(shù)的個(gè)數(shù)和正整數(shù)的平均值,并且要排除輸入0的情況,因此需要用到if語(yǔ)句將這幾種情況分開
我們假設(shè)sum=0為統(tǒng)計(jì)輸入負(fù)數(shù)的個(gè)數(shù),average=0為正整數(shù)的平均值,x為輸入的數(shù)字,當(dāng)輸入負(fù)數(shù)是sum++,而輸入正整數(shù)時(shí)average+x
0這種情況就有點(diǎn)麻煩,我們還需要設(shè)一個(gè)y=0,當(dāng)輸入0時(shí)y–,并且將x賦值為1,這樣x有0變到1,y由0變到-1,這樣輸入0是x+y就可以抵消,并且y也就統(tǒng)計(jì)出了輸入0的個(gè)數(shù),之后我們就可以在計(jì)算平均值時(shí)加上y,就相當(dāng)于減去輸入0的個(gè)數(shù),值得注意的是負(fù)數(shù)的個(gè)數(shù)也需要減去(我因?yàn)闆]有減所以一直沒做出來)
【代碼】
#include<stdio.h>
int main()
{int n, sum = 0, x, y = 0;double average = 0;scanf("%d", &n);for (int i = 1; i <= n; i++){scanf("%d", &x);if (x == 0){x = 1;average += x;/*因?yàn)檫@樣做x+y=0,這樣就可以抵消,并且n最后也可以減掉x=0的個(gè)數(shù)*/y--;}else if (x > 0){average += x;//x為正數(shù)}else{sum++;//x為負(fù)數(shù)}}if (n + y == 0)average = 0.0;//全部為0的情況else{average = average + y;/*不全部為0的情況+y后就把x=0變成x=1的都減掉*/n = n + y-sum;//減去x=0的個(gè)數(shù)average = average / n;//算平均值}printf("%d %.1f", sum, average);return 0;
}