?2022年湖北專升本C語言程序設(shè)計(jì)模擬題(2)
摘要:本文是2022年湖北專升本C語言程序設(shè)計(jì)模擬題(2),有打算報(bào)考湖北2022年專升本需要考核C語言程序設(shè)計(jì)的考生可以收藏下來參考一下。下面是具體內(nèi)容。
第四章 邏輯運(yùn)算和判斷選取控制
4.1 選擇題
4.1邏輯運(yùn)算符兩則運(yùn)算對(duì)象的數(shù)據(jù)類型 。
A)只能是0或1 B)只能是0或非0正數(shù)
C)只能是整型或字符型數(shù)據(jù) D)可以是任何類型的數(shù)據(jù)
參考答案:D
參考分析:c語言中沒有專用的邏輯量,任何數(shù)值類型的數(shù)據(jù)都可以作為邏輯數(shù)據(jù)使用,判斷時(shí)0為假,非零為真,計(jì)算時(shí)真置1,假置0。
4.2以下關(guān)于運(yùn)算符優(yōu)先順序的描述中正確的是
A)關(guān)系運(yùn)算符<算術(shù)運(yùn)算符<賦值運(yùn)算符<邏輯運(yùn)算符
B)邏輯運(yùn)算符<關(guān)系運(yùn)算符<算術(shù)運(yùn)算符<賦值運(yùn)算符
C)賦值運(yùn)算符<邏輯運(yùn)算符<關(guān)系運(yùn)算符<算術(shù)運(yùn)算符
D)算術(shù)運(yùn)算符<關(guān)系運(yùn)算符<賦值運(yùn)算符<邏輯運(yùn)算符
參考答案:C
4.3 下列運(yùn)算符中優(yōu)先級(jí)最高的是 。
A)< B)+ C)&& D)!=
參考答案:B
4.4能正確表示“當(dāng)x的取值在[1,10]和[200,210]范圍內(nèi)為真”的C語言表達(dá)式為 。
A) (x>=1)&&(x
B) (x>=1)&&(x
C) (x>=1)||(x
D) (x>=1)||(x
參考答案:B
參考分析:C語言中實(shí)際上與運(yùn)算和或運(yùn)算優(yōu)先級(jí)相等,由于C采用短路算法,所以不會(huì)影響B(tài)的結(jié)果,即不需要改成((x>=1)&&(x
4.5 表示圖中坐標(biāo)軸上陰影部分正確的表達(dá)式是 。
| | |
a b c
A)(x
C)(x
參考答案:C
4.6判斷char型變量ch是否為大寫字母的正確表達(dá)式為 。
A)'A'<=ch
C) (ch>='A')&&(ch<='Z') D)('A'
參考答案:C
4.7 有int x=3,y=4,z=5;則下面表達(dá)式中值為0的是 。
A)'x'&&'y' B)x<=y C)x||y+z&&y-z D)!((x
參考答案:D
4.8 已知x=43,ch='A',y=0;則表達(dá)式(x>=y&&ch<'B'&&!y)的值是 。
A)0 B)語法錯(cuò)誤 C)1 D)"假"
參考答案:C
4.9若希望當(dāng)A的值為奇數(shù)時(shí),表達(dá)式的值為“真”,A的值為偶數(shù)時(shí),表達(dá)式的值為“假”。則以下不能滿足要求的表達(dá)式是 。
A)A%2= =1 B)!(A%2= =0) C)!(A%2) D)A%2
參考答案:C
4.10設(shè)有:int a=1,b=2,c=3,d=4,m=2,n=2;執(zhí)行(m=a>b)&&(n=c>d)后n的值為 。
A)1 B)2 C)3 D)4
參考答案:B
參考分析:本題為標(biāo)準(zhǔn)的短路算法,由于第一個(gè)表達(dá)式m=a>b為真,故第二個(gè)表達(dá)式n=c>d被短路不再計(jì)算。因此,n值仍然保持原來的值2不變。
4.11判斷char型變量ch是否為小寫字母的正確表達(dá)式為 。
A)'a'<=ch
C) (ch>='a')||(ch
參考答案:D
4.12 以下程序的運(yùn)行結(jié)果是 。
#include
main()
{int a,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf("%d,%d",a,b);
}
A)6,1 B)2,1 C)6,0 D)2,0
參考答案:B
參考分析:計(jì)算時(shí),非零為真。
4.13 執(zhí)行以下語句后a的值為 ,b的值為 。
int a,b,c;
a=b=c=1;
++a||++b&&++c;
A)0 B)1 C)2 D)錯(cuò)誤
參考答案:C B
參考分析:c語言在計(jì)算表達(dá)式時(shí)采用短路算法。
4.13-改 執(zhí)行以下語句后,a,b,c的值分別為 。
int a,b,c;
a=b=c=1;
++a||++b&&++c;
A)1,1,1 B)2,1,1 C)2,2,1 D)2,2,2
參考答案:B
4.14 執(zhí)行以下語句后a的值為 ,b的值為 。
int a=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y>z);
(1)A)5 B)0 C)2 D)1
(2)A)6 B)0 C)1 D)4
參考答案:B A
參考分析:短路算法。
4.15 以下不正確的if語句形式是 。
A)if (x>y&&x!=y);
B)if (x==y) x+=y;
C)if(x!=y) scanf("%d",&x) else scanf("%d",&y);
D)if(x
參考答案:C
4.16 下列運(yùn)算符中優(yōu)先級(jí)最低的是 ,優(yōu)先級(jí)最高的是 。
A)? : B)&& C)+ D)!=
參考答案:A C
4.17 已知int x=10,y=20,z=30;以下語句執(zhí)行后x,y,z的值是 。
if(x>y)
z=x;x=y;y=z;
A)10,20,30 B)20,30,30 C)20,30,10 D)20,30,20
參考答案:C
4.18 以下if語句語法正確的是 。
A)if (x>0) printf("%f",x) else printf("%f",-x);
B)if(x>0){x=x+y;printf("%f",x);} else printf("%f",-x);
C)if(x>0){x=x+y;printf("%f",x);};else printf("%f",-x);
D)if(x>0){x=x+y;printf("%f",x)} else printf("%f",-x);
參考答案:B
4.19有程序:main()
{int a=5,b=1,c=0;
if (a=b+c) printf("\n");
else printf("$$$\n");}
該程序 。
A)有語法錯(cuò)誤不能通過編譯 B)可以通過編譯,但不能通過連接
C)輸出: D)輸出:$$$
參考答案:C
參考分析:注意條件表達(dá)式不是a= =b+c。
4.20 以下程序的運(yùn)行結(jié)果是 。
main()
{int m=5;
if(m++>5) printf("%d",--m);
else printf("%d",m++);
}
A)4 B)5 C)6 D)7
參考答案:C
參考分析:m先與5進(jìn)行關(guān)系比較,然后進(jìn)行增量運(yùn)算,m值為6,因比較結(jié)果為假,執(zhí)行else,輸出為6,m為7。
4.21 當(dāng)a=1,b=3,c=5,d=4時(shí),執(zhí)行完下面一段程序后x的值是 。
if(a
if(c
else
if(a
if(b
else x=3;
else x=6;
else x=3;
A)1 B2 C)3 D)6
參考答案:B4.22有函數(shù)關(guān)系如下,能正確表示該關(guān)系的程序段是 。
xy
x<0x-1
x=0x
x>0x+1
A)y=x+1; B)y=x-1;
if(x>=0) if(x!=0)
if(x= =0) y=x; if (x>0) y=x+1;
else y=x-1; else y=x;
C)if (x<=0) D) y=x;
if (x<0) y=x-1; if(x<=0)
else y=x; if (x<0) y=x-1;
else y=x+1 else y=x+1;
參考答案:C
4.23 以下程序的輸出結(jié)果是 。
main()
{int a=100,x=10,y=20,ok1=5,ok2=0;
if(x
if(y!=10)
if(!ok1)
a=1;
else
if(ok2) a=10;
a=-1;
printf("%d\n",a);
}
A)1 B)0 C)-1 D)值不確定
參考答案:C
參考分析:無論前面的分支如何執(zhí)行,由于a=-1和上面的語句為順序關(guān)系,因此不會(huì)影響到a的值。
4.24 以下程序的輸出結(jié)果是 。
main()
{int x=2,y=-1,z=2;
if(x
if(y<0) z=0;
else z+=1;
printf("%d\n",z);
}
A)3 B)2 C)1 D)0
參考答案:B
4.25為了避免在嵌套的條件語句if-else中產(chǎn)生二義性,C語言規(guī)定:else子句總是與 配對(duì)。
A)縮排位置相同的if B)其之前最近的沒有else配對(duì)的if
C)其之后最近的if D)同一行上的if
參考答案:B
參考分析:本題表述不嚴(yán)謹(jǐn)。
4.26以下不正確的語句為 。
A)if (x>y);
B)if (x=y)&&(x!=0) x+=y;
C)if (x) z=z/x;
D)if (x>y) {x++;y++;}
參考答案:B
4.27 請(qǐng)閱讀以下程序:
#include
main()
{float a,b;
scanf("%f",&a);
if(a<0.0) b=0.0;
else if((a<0.5)&&(a!=2.0)) b=1.0/(a+2.0);
else if(a<10.0) b=1.0/a;
else b=10.0;
printf("%f\n",b);
}
若運(yùn)行時(shí)輸入2.0,則上面程序的輸出結(jié)果是 。
A)0.000000 B)0.500000 C)1.000000 D)0.250000
參考答案:B
4.28 若有條件表達(dá)式(exp)?a++:b--,則以下表達(dá)式中能完全等價(jià)于表達(dá)式(exp)的是 。
A)exp==0 B)exp!=0 C)exp==1 D)exp!=1
參考答案:B
參考分析:在C語言中,當(dāng)一個(gè)表達(dá)式不等于0時(shí),可以將不等于部分省略,其效果完全一樣。
4.29 若運(yùn)行時(shí)給變量輸入12,則以下程序的運(yùn)行結(jié)果是 。
main()
{int x,y;
scanf("%d",&x);
y=x>12?x+10:x-12;
printf("%d\n",y);
}
A)0 B)22 C)12 D)10
參考答案:A
參考分析:x>12為假,取x-12。
4.30 以下程序的運(yùn)行結(jié)果是 。
main()
{int k=4,a=3,b=2,c=1;
printf("\n%d\n",k
}
A)4 B)3 C)2 D)1
參考答案:D
4.31執(zhí)行下列程序段后,變量a,b,c的值分別是 。
int x=10,y=9;
int a,b,c;
a=(--x= =y++)?--x:++y;
b=x++;
c=y;
A)a=9,b=9,c=9 B)a=8,b=8,c=10
C)a=9,b=10,c=9 D)a=8,b=8,c=9
參考答案:B
參考分析:首先x進(jìn)行--操作,x為9,然后與y進(jìn)行等于比較,即9==9,然后y++為10。由于比較結(jié)果為真,故計(jì)算--x,為8,賦給a。
4.32 閱讀以下程序,則執(zhí)行下面語句后m的值是 。
int w=1,x=2,y=3,z=4,m;
m=w
m=m
m=m
A)1 B)2 C)3 D)4
參考答案:A
4.33 若有int w=1,x=2,y=3,z=4;則表達(dá)式w
A)4 B)3 C)2 D)1
參考答案:D
4.34 執(zhí)行以下程序后的輸出結(jié)果是 。
int w=3,z=7,x=10;
printf("%d",x>10?x+100:x-10);
printf("%d",w++||z++);
printf("%d",!w>z);
printf("%d",w&&z);
A)0111 B)1111 C)0101 D)0100
參考答案:C
4.2 填空題
4.35 若int a=3,b=2,c=1,f;表達(dá)式f=a>b>c的值是( )。
參考答案:0
參考分析:計(jì)算過程如下,a>b計(jì)算為真,然后計(jì)算 真(1)>c,結(jié)果為假
4.36 若int a=5,b=4,c=2;表達(dá)式a>b!=c的值是( )。
參考答案:1
4.37 以下程序的運(yùn)行結(jié)果是( )。
#include
main()
{int x=1,y,z;
x=3+2;
printf("%d\t",x);
x=y=z=5;
printf("%d\t",x);
x=y==z;
printf("%d\n",x);
參考答案:5□□□□□□□25□□□□□□1(制表符為7個(gè))
4.38 在C語言中,表示邏輯“真”值用( )。
參考答案:非0的數(shù)值。
4.39 設(shè)y為int型變量,請(qǐng)寫出描述“y是奇數(shù)”的表達(dá)式( )。
參考答案:y%2==1 y%2!=0 y%2 (y-1)%2==0 !(y%2==0)
4.40 c語言提供的三種邏輯運(yùn)算符是( )、( )和( )。
參考答案:&& || !
4.41 設(shè)x,y,z均為int型變量,請(qǐng)寫出描述“x或y中有一個(gè)小于z”的表達(dá)式( )。
參考答案:x
4.42設(shè)x,y,z均為int型變量,請(qǐng)寫出描述“x,y,z中有兩個(gè)為負(fù)數(shù)”的表達(dá)式( )。
參考答案:x*y*z>=0&&((x<0&&y<0)||(x<0&&z<0)||(y<0&&z<0))
參考分析:原書提供的答案是(x<0&&y<0)||(x<0&&z<0)||(y<0&&z
4.43 已知A=7.5,B=2,C=3.6,表達(dá)式A>B&&C>A||AB的值是( )。
參考答案:0
參考分析:在本表達(dá)式的計(jì)算過程中A
4.44 若int a=6,b=4,c=2;表達(dá)式!(a-b)+c-1&&b+c/2的值是( )。
參考答案:1
4.45 若a=2,b=4,則表達(dá)式!(x=a)||(y=b)&&0的值是( )。
參考答案:0
4.46 若a=1,b=4,c=3,則表達(dá)式!(a
參考答案:0
4.47 若a=6,b=4,c=3,則表達(dá)式a&&b+c||b-c的值是( )。
參考答案:1
4.48 若a=5,b=2,c=1,則表達(dá)式a-b
參考答案:0
4.49 若a=3,b=4,c=5,則表達(dá)式a||b+c&&b的值是( )。
參考答案:1
4.50 條件“2
參考答案:x>2&&x<3||x<-10
4.51 當(dāng)m=2,n=1,a=1,b=2,c=3時(shí),執(zhí)行完d=(m=a!=b)&&(n=b>c)后,n的值為( ),m的值為( )。
參考答案:0 1
4.52 以下程序的運(yùn)行結(jié)果是 。
main()
{int x,y,z;
x=1;y=2;z=3;
x=y--<=x||x+y!=z;
printf("%d,%d",x,y);
}
參考答案:1,1
參考分析:這是兩個(gè)表達(dá)式的或運(yùn)算,第一個(gè)表達(dá)式y(tǒng)--<=x相當(dāng)于2<=1為假,y變量增為1,第二表達(dá)式x+y!=z相當(dāng)于1+1!=3為真,故x的值為1。
4.53 以下程序的運(yùn)行結(jié)果是 。
main()
{int a1,a2,b1,b2;
int i=5,j=7,k=0;
a1=!k;
a2=i!=j;
printf("a1=%d\ta2=%d\n",a1,a2);
b1=k&&j;
b2=k||j;
printf("b1=%d\tb2=%d\n",b1,b2);
}
參考答案:a1=1 a2=1
b1=0 b2=1
4.54 以下程序的運(yùn)行結(jié)果是 。
main()
{int x,y,z;
x=1;y=1;z=0;
x=x||y&&z;
printf("%d,%d",x,x&&!y||z);
}
參考答案:1,0
參考分析:本題采用短路算法,由于x為真,后面的或和與運(yùn)算均被短路。
4.55 有int x,y,z;且x=3,y=-4,z=5,則表達(dá)式(x&&y)==(x||z)的值為( )。
參考答案:1
4.56 有int x,y,z;且x=3,y=-4,z=5,則表達(dá)式!(x>y)+y!=z)||(x+y)&&(y-z)的值為( )。
參考答案:1
4.57有int x,y,z;且x=3,y=-4,z=5,則表達(dá)式x++-y+(++z)的值為( )。
參考答案:13
4.58 有int a=3,b=4,c=5;則表達(dá)式a||b+c&&b==c的值為( )。
參考答案:1
4.59 有int a=3,b=4,c=5,x,y;則表達(dá)式!(x=a)&&(y=b)&&0的值為( )。
參考答案:0
4.60 有int a=3,b=4,c=5;則表達(dá)式!(a+b)+c-1&&b+c/2的值為( )。
參考答案:1
4.61 若運(yùn)行時(shí)輸入:16,則以下程序的運(yùn)行結(jié)果是 。
#include
void main(void)
{int year;
printf("Input your year:");
scanf("%d",&year);
if (year>=18)
printf("your $4.5 yuan/xiaoshi");
else
printf("your $3.0 yuan/xiaoshi");
}
參考答案:your $3.0 yuan/xiaoshi
4.62 若運(yùn)行時(shí)輸入:2,則以下程序的運(yùn)行結(jié)果是 。
#include
void main(void)
{char class;
printf("Enter 1 for 1st class post or 2 for 2nd post");
scanf("%c",&class);
if (class=='1')
printf("1st class postage is 19p");
else
printf("2nd class postage is 14p");
}
參考答案:2nd class postage is 14p
4.63 若運(yùn)行時(shí)輸入:4.4,則以下程序的運(yùn)行結(jié)果是 。
#include
void main(void)
{float costprice,sellingprice;
printf("Enter Cost Price $:");
scanf("%f",&costprice);
if(costprice>=5)
{sellingprice=costprice+costprice*0.25;
printf("Selling Price(0.25)$%6.2f",sellingprice);
}
else
{sellingprice=costprice+costprice*0.30;
printf("Selling Price(0.30)$%6.2f",sellingprice);
}
}
參考答案:Selling Price(0.30)$ 5.72
4.64 以下程序的運(yùn)行結(jié)果是 。
main()
{if (2*2==5<2*2==4)
printf("T");
else
printf("F");
}
參考答案:F
4.65 請(qǐng)閱讀以下程序,若運(yùn)行時(shí)輸入:1605時(shí),程序的運(yùn)行結(jié)果是 。
main()
{int t,h,m;
scanf("%d",&t);
h=t/100%12;
if(h==0) h=12;
printf("%d:",h);
m=t%100;
if(m<10) printf("0");
printf("%d",m);
if (t<1200||t==2400)
printf("AM");
else
printf("PM");
}
參考答案:4:05PM
4.66 以下程序?qū)崿F(xiàn):輸入園的半徑r和運(yùn)算標(biāo)志m,按照運(yùn)算標(biāo)志進(jìn)行指定計(jì)算,請(qǐng)?zhí)羁铡?/p>
標(biāo)志 運(yùn)算
a 面積
c 周長(zhǎng)
b 二者均計(jì)算
#define pi=3.14159
main()
{char m;
float r,c,a;
printf("Input mark a c or b && r\n");
scanf("%c %f",&m,&r);
if (【1】)
{a=pi*r*r;printf("area is %f",a);}
if (【2】)
{c=2*pi*r;printf("circle is %f",c);}
if (【3】)
{a=pi*r*r;c=2*pi*r;
printf("area && circle are %f %f",a,c);
}
}
參考答案:【1】m=='a' 【2】m=='c' 【3】m=='b'
4.67 若運(yùn)行時(shí)輸入:5999,則以下程序的運(yùn)行結(jié)果是 。
main()
{int x;
float y;
scanf("%d",&x);
if(x>=0&&xx<=2999) y=18+0.12*x;
if(x>=3000&&x<=5999) y=36+0.6*x;
if(x>=6000&&x<=10000)y=54+0.3*x;
printf("%6.1f",y);
}
參考答案:3635.4
4.68 以下程序?qū)崿F(xiàn)輸出x,y,z三個(gè)數(shù)中的最大者。請(qǐng)分析程序填空。
main()
{int x=4,y=6,z=7;;
int 【1】;
if(【2】) u=x;
else u=y;
if (【3】) v=u;
else v=z;
printf("v=%d",v);
}
參考答案:【1】u,v 【2】x>y【3】u>z
4.69 以下程序?qū)⑤斎氲娜齻€(gè)整數(shù)按從大到小順序輸出,請(qǐng)分析程序填空。
main()
{int x,y,z,c;
scanf("%d%d%d",&x,&y,&z);
if(【1】)
{c=y;y=z;z=c;}
if(【2】)
{c=x;x=z;z=c;}
if(【3】)
{c=x;x=y;y=c;}
printf("%d,%d,%d",x,y,z);
}
參考答案:【1】y
4.70 以下程序?qū)斎氲膬蓚€(gè)整數(shù),按從大到小順序輸出,請(qǐng)分析程序填空。
main()
{int x,y,z;
scanf("%d,%d",&x,&y);
if(【1】)
{z=x;【2】}
printf("%d,%d",x,y);
}
參考答案:【1】x
4.71 以下程序?qū)斎氲囊粋€(gè)小寫字母進(jìn)行循環(huán)后移5個(gè)位置后輸出。如'a'變成'f','w'變成'b'。請(qǐng)分析程序填空。
#include
main()
{char c;
c=getchar();
if (c>='a'&&c<='u') 【1】;
else if (c>='v'&&c<='z') 【2】;
putchar(c);
}
參考答案:【1】c=c+5【2】c=c+6-26
4.72 輸入一個(gè)字符,如果它是大寫字母,則把它變成小寫字母,如果它是一個(gè)小寫字母,則把它變成大寫字母,其它字符不變。請(qǐng)分析程序填空。
main()
{char ch;
scanf("%c",&ch);
if(【1】) ch=ch+32;
else if(ch>='a'&&ch<='z') 【2】;
printf("%c",ch);
}
參考答案:【1】ch>='A'&&ch<='Z'【2】ch=ch-32
4.73 以下程序的運(yùn)行結(jié)果是 。
main()
{int a,b,c;
int s,w,t;
s=w=t=0;
a=-1;b=3;c=3;
if(c>0) s=a+b;
if(a<=0)
{if(b>0)
if(c<=0) w=a-b;
}
else if(c>0) w=a-b;
else t=c;
printf("%d %d %d",s,w,t);
}
參考答案:2 0 0
4.74以下程序的運(yùn)行結(jié)果是 。
main()
{int a,b,c,d;
a=c=0;
b=1;
d=20;
if(a) d=d-10;
else if(!b)
if(!c) d=15;
else d=25;
printf("%d\n",d);
}
參考答案:20
4.75 以下程序的運(yùn)行結(jié)果是 。
#include
main()
{int x,y=1,z;
if(y!=0) x=5;
printf("\t%d\n",x);
if(y==0) x=4;
else x=5;
printf("\t%d\n",x);
x=1;
if(y<0)
if(y>0) x=4;
else x=5;
printf("\t%d\n",x);
}
參考答案:
□□□□□□□□5
□□□□□□□□5
□□□□□□□□1
*4.76以下程序的運(yùn)行結(jié)果是 。
#include
main()
{int x,y=-2,z=0;
if((z=y)<0) x=4;
else if(y==0) x=5;
else x=6;
printf("\t%d\t%d\n",x,z);
if(z=(y==0))
x=5;
x=4;
printf("\t%d\t%d\n",x,z);
if(x=z=y) x=4;
printf("\t%d\t%d\n",x,z);
}
參考答案:
□□□□□□□□4□□□□□□□-2
□□□□□□□□4□□□□□□□0
□□□□□□□□4□□□□□□□-2
*4.77 請(qǐng)閱讀以下程序,為使輸出時(shí)t值為4,輸入量a和b應(yīng)滿足的條件是 。
main()
{int s,t,a,b;
scanf("%d,%d",&a,&b);
s=1;t=1;
if(a>0) s=s+1;
if(a>b) t=s+t;
else if(a==b) t=5;
else t=2*s;
printf("s=%d,t=%d",s,t);
}
參考答案:00&&a
4.78 請(qǐng)閱讀下面的程序,為使輸出s=1,t=5的結(jié)果,輸入量a和b應(yīng)滿足的條件是 a=b<=0 。
main()
{int s,t,a,b;
scanf("%d,%d",&a,&b);
s=1;t=1;
if(a>0) s=s+1;
if(a>b) t=s+t;
else if(a==b) t=5;
else t=2*s;
printf("s=%d,t=%d",s,t);
4.79 下面程序根據(jù)以下函數(shù)關(guān)系,對(duì)輸入的每個(gè)x值,計(jì)算出y值。請(qǐng)分析程序填空。
xy
2
-1
x≤-1x-1
main()
{int x,y;
scanf("%d",&x);
if(【1】) y=x*(x+2);
else if(【2】) y=x-1;
else 【3】;
if(y!=-1) printf("%d",y);
else printf("error");
}
參考答案:【1】2
4.80下面程序根據(jù)以下函數(shù)關(guān)系,對(duì)輸入的每個(gè)x值,計(jì)算出y值。請(qǐng)分析程序填空。
xy
x=a或x=-a0
-a
x
#include
main()
{int x,a;
float y;
scanf("%d %d",&x,&a);
if(【1】) y=0;
else if(【2】) y=sqrt(a*a-x*x);
else y=x;
printf("%f",y);
}
參考答案:【1】x==-a||x==a【2】x>-a&&x
*4.81 以下程序的功能是計(jì)算一元二次方程ax2+bx+c=0的根,請(qǐng)分析程序填空。
#include
main()
{float a,b,c,t,disc,twoa,term1,term2;
printf("Enter a,b,c:");
scanf("%f %f %f",&a,&b,&c);
if(【1】)
if(【2】) printf("no answer due to input error.\n");
else printf("the single root is %f\n",-c/b);
else
{disc=b*b-4*a*c;
twoa=2*a;
term1=-b/twoa;
t=abs(disc);
term2=sqrt(t)/twoa;
if(【3】)
printf("complex root\nreal part=%f imag part=%f\n",term1,term2);
else
printf("real roots\nroot1=%froot2=%f\n",term1+term2,term1-term2);
}
}
參考答案:【1】a==0 fabs(a)<1e-4【2】b==0【3】disc<0
4.82 以下程序根據(jù)輸入的三角形的三邊判斷是否能組成三角形,若可以則輸出它的面積和三角形的類型。請(qǐng)分析程序填空。
#include "math.h"
main()
{float a,b,c,s,area;
scanf("%f%f%f",&a,&b,&c);
if(【1】)
{s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%f",area);
if(【2】)
printf("等邊三角形");
else if(【3】)
printf("等腰三角形");
else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c=a*a))
printf("直角三角形");
else printf("一般三角形");
}
else printf("不能組成三角形");
}
參考答案:【1】a+b>c&&b+c>a&&c+a>b【2】a==b&&b==c
【3】a==b||b==c||a==c
4.83 某郵局對(duì)郵寄包裹有如下規(guī)定:若包裹的長(zhǎng)寬高任一尺寸超過1米或重量超過30千克,不予郵寄;對(duì)可以郵寄的包裹每件收取手續(xù)費(fèi)0.2元,在加上根據(jù)下表按重量wei計(jì)算的郵資。請(qǐng)分析程序填空。
重量(千克)收費(fèi)標(biāo)準(zhǔn)
wei<100.80
10
20
main()
{float len,wei,hei,wid,mon,r;
scanf("%f %f %f %f",&len,&wid,&hei,&wei);
if(len>1||wid>1||hei>1||wei>30) 【1】;
else if(wei<10) r=0.8;
else if(wei<=20) r=0.75;
else if(wei<=30) 【2】;
if(r==-1) printf("error\n");
else
{【3】;printf("%f",mon);}
}
參考答案:【1】r=-1【2】r=0.70【3】m=0.2+r*wei
**4.84 某服裝店經(jīng)營(yíng)套服,也單件出售。若買的不少于50套每套80元;不足50套的每套90元;只買上衣每件60元;只買褲子每條45元。以下程序的功能是讀入所買上衣c和褲子t的件數(shù),計(jì)算應(yīng)付款m。請(qǐng)分析程序填空。
main()
{int c,t,m;
printf("input the number of coat and trousers your want buy:\n");
scanf("%d %d",&c,&t);
if(【1】)
if(c>=50) m=c*80;
else m=c*90;
else
if(【2】)
if(t>=50) m=t*80+(c-t)*60;
else m=t*90+(c-t)*60;
else
if(【3】) m=c*80+(t-c)*45;
else m=c*90+(t-c)*45;
printf("cost=%d\n",m);
}
參考答案:【1】t==c 【2】c>t 【3】c>=50
4.85 以下程序的功能是判斷輸入的年份是否是閏年。請(qǐng)分析程序填空。
main()
{int y,f;
scanf("%d",&y);
if(y%400==0) f=1;
else if(【1】) f=1;
else 【2】;
if (f) printf("%d is",y);
else printf("%d is not",y);
printf(" a leap year.\n");
}
參考答案:【1】year%4== 0&&year%100!=0【2】f=0
*4.86 以下程序段針對(duì)輸入的截止日期(年:yend,月:mend,日:dend)和出生日期(yman,mman,dman),計(jì)算出實(shí)際年齡。請(qǐng)分析程序填空。
設(shè)有:int yend,mend,dend,yman,mman,dman;
age=yend-yman;
if(mend【1】)mman) age--;
else if(mend【2】mman&&dend【3】dman)
age--;
參考答案:【1】<【2】==【3】<
4.87 有四個(gè)數(shù)a,b,c,d,要求從大到小的順序輸出。請(qǐng)分析程序填空。
main()
{int a,b,c,d,t;
scanf("%d %d %d %d",&a,&b,&c,&d);
if(a
if(【1】){t=c;c=d;d=t;}
if(a
if(【2】){t=b;b=c;c=t;}
if(b
if(c
printf("%d %d %d %d",a,b,c,d);
}
參考答案:【1】c
4.88 以下程序的運(yùn)行結(jié)果是 。
main()
{int a=2,b=3,c;
c=a;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1
printf("%d\n",c);
}
參考答案:-1
4.89 若a=1,b=2,則表達(dá)式a>b?a:b+1的值是 。
參考答案:3
4.90 若a=1,b=2,c=3,d=4,則表達(dá)式a>b?a:c>d?c:d的值是 。
參考答案:4
*4.91 設(shè)有變量定義:int a=10,c=9;則表達(dá)式(--a!=c++)?--a:++c的值是 。
參考答案:11
4.92 若有說明語句:int x=1,y=0;則表達(dá)式x>(y+x)?10:12.5>y++?'a':'A'的值是 。
參考答案:'a'
*4.93 若有說明語句:int a=1,b=0;則表達(dá)式++a*--a==b?12%5:'x'的值是 。
參考答案:'x'
4.94 若有x=1,y=2,z=3,則表達(dá)式(x
參考答案:0
**4.95 若有說明語句:int x=1,y=0;則表達(dá)式x-->(y+x)?5:25>y++?'1':'2'的值是 。
參考答案:5
參考分析:增量運(yùn)算在條件運(yùn)算的第一個(gè)表達(dá)式中時(shí),關(guān)系運(yùn)算符兩側(cè)各為一個(gè)處理單元。x--中的值是1,然后增為0,故y+x為0+0,因此整個(gè)表達(dá)式計(jì)算結(jié)果為真。
4.96 以下程序的運(yùn)行結(jié)果是 。
#include
main()
{int a=-10,b=-3;
printf("%d,",-a%b);
printf("%d,",(a-b,a+b));
printf("%d\n",a-b?a-b:a+b);
}
參考答案:1,-13,-7
4.97以下程序的運(yùn)行結(jié)果是 。
main()
{int x=1,y=1,z=1;
y=y+z;
x=x+y;
printf("%d,",x
printf("%d,",x
printf("%d,%d",x,y);
}
參考答案:3,2,3,3
4.98 以下程序的運(yùn)行結(jié)果是 。
main()
{int x,y,z;
x=3;
y=z=4;
printf("%d,",(x>=y>=x)?1:0);
printf("%d\n",z>=y&&y>=x);
}
參考答案:0,1
4.99 若運(yùn)行時(shí)輸入:-2,則以下程序的輸出結(jié)果是 。
main()
{int a,b;
scanf("%d",&a);
b=(a>=0)?a:-a;
printf("b=%d",b);
}
參考答案:b=2
4.100 若運(yùn)行時(shí)輸入:100,下面程序的運(yùn)行結(jié)果是 。
main()
{int a;
scanf("%d",&a);
printf("%s",(a%2!=0)?"no":"yes");
}
參考答案:yes
4.101 如果運(yùn)行時(shí)輸入字符'Q',則以下程序的運(yùn)行結(jié)果是 。
main()
{char ch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
ch=(ch>='a'&&ch<='z')?(ch-32):ch;
printf("%c",ch);
}
參考答案:Q
4.102 當(dāng)運(yùn)行時(shí)輸入:1992,則以下程序的運(yùn)行結(jié)果是 。
main()
{int y,t;
scanf("%d",&y);
t=((y%4==0)&&(y%100!=0)||y%400==0)?1:0;
if(t) printf("%d is",y);
else printf("%d is not",y);
printf("a leap year");
}
參考答案:1992 is a leap year
4.103 以下程序是計(jì)算x,y,z三個(gè)數(shù)中最小的。請(qǐng)分析程序填空。
main()
{int x=4,y=5,z=8;
int u,v;
u=x
v=u
printf("%d",v);
}
參考答案:【1】x:y【2】u:z
4.104 設(shè)有變量定義:int a=5,c=4;則(--a==++c)?--a:c++的值是【1】,此時(shí)c的存儲(chǔ)單元的值為【2】。
參考答案:【1】5【2】6
4.105 執(zhí)行以下程序后,a=【1】,b=【2】,c=【3】。
int x=10,y=9;
int a,b,c;
a=(x-- == y++) ? x-- : y++;
b=x++;
c=y;
參考答案:【1】10【2】9【3】11
*4.106 設(shè)有int x=1,y=0;則以下表達(dá)式的值為 。
x-->(y+x)?10:12.5>y++?'A':'Z'
參考答案:10
參考分析:在本題中x-->(y+x)的實(shí)際比較運(yùn)算是1>0+0為真。
*4.107 設(shè)有int x=0,y=1;則以下表達(dá)式的值為 。
x++*x--!='y'?8-4:y
參考答案:4
參考分析:此處x++*x—實(shí)際計(jì)算為0*0。
4.108 若運(yùn)行時(shí)輸入:3 5/,則以下程序的運(yùn)行結(jié)果是 。
main()
{float x,y;
char o;
double r;
scanf("%f %f %c",&x,&y,&o);
switch(o)
{case '+':r=x+y;break;
case '-':r=x-y;break;
case '*':r=x*y;break;
case '/':r=x/y;break;
}
printf("%f",r);
}
參考答案:0.600000
4.109 根據(jù)以下嵌套的if語句所給條件,填寫switch語句,使它完成相同的功能。
(假設(shè)mark的取值在1-100之間)
if語句:
if(mark<60) k=1;
else if(mark<70) k=2;
else if(mark<80) k=3;
else if(mark<90) k=4;
else k=5;
switch語句:
switch(【1】)
{【2】k=1;break;
case 6 :k=2;break;
case 7 :k=3;break;
case 8 :k=4;break;
【3】k=5;
}
參考答案:【1】mark/10 【2】default: 【3】case 9:case 10:
4.110 設(shè)有如下程序段,若grade的值為'C',則輸出結(jié)果是 。
switch(grade)
{case 'A':printf("85-100\n");
case 'B':printf("70-84\n");
case 'C':printf("60-69\n");
case 'D':printf("<60\n");
default:printf("error!\n");
}
參考答案:
60-69
<60
error!
4.111 以下程序段的運(yùn)行結(jié)果是 。
int x=1,y=0;
switch(x)
{case 1:
switch(y)
{case 0:printf("**1**\n");break;
case 1:printf("**2**\n");break;
}
case 2:printf("**3**\n");
}
參考答案:
**1**
**3**
4.112 根據(jù)以下函數(shù)關(guān)系,對(duì)輸入的每個(gè)x值,計(jì)算出相應(yīng)的y值。請(qǐng)分析程序填空。
xy
x<00
0≤x<10x
10≤x<2010
20≤x<40-0.5x+20
main()
{int x,c;
float y;
scanf("%d",&x);
if(【1】) c=-1;
else c=【2】;
switch(c)
{case –1:y=0;break;
case 0:y=x;break;
case 1:y=10;reak;
case 2:case 3:y=-0.5*x+20;break;
default:y=-2;
}
if(【3】) printf("y=%f",y);
else printf("error\n");
}
參考答案:【1】x<0 【2】x/10 【3】y!=-2
4.113 以下程序的運(yùn)行結(jié)果是 。
main()
{int a=2,b=7,c=5;
switch(a>0)
{case 1:switch(b<0)
{case 1:printf("@");break;
case 2:printf("!");break;
}
case 0:switch(c==5)
{case 0:printf("*");break;
case 1:printf("#");break;
default:printf("#");break;
}
default:printf("&");
}
printf("\n");
}
參考答案:#&
4.114 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int x=1,y=0,a=0,b=0;
switch(x)
{case 1:switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
}
printf("a=%d,b=%d",a,b);
}
參考答案:a=2,b=1
4.115 假設(shè)獎(jiǎng)金稅率如下(a代表獎(jiǎng)金,r代表稅率)
a<500 r=0%
500≤a<1000 r=5%
1000≤a<2000 r=8%
2000≤a<3000 r=10%
3000≤a r=15%
以下程序?qū)斎氲囊粋€(gè)獎(jiǎng)金數(shù),求稅率和應(yīng)交稅款以及實(shí)得獎(jiǎng)金數(shù)(扣除獎(jiǎng)金稅后)。請(qǐng)分析程序填空。
main()
{float a,r,t,b;
int c;
scanf("%f",&a);
if(a>=3000) c=6;
else c=【1】;
switch(c)
{case 0:r=0;break;
case 1:r=0.05;break;
case 2:case 3:【2】;break;
case 4:case 5:r=0.1;break;
case 6:r=0.15;break;
}
t=a*r;
b=a-t;
printf("r=%f,t=%f,b=%f",r,t,b);
}
參考答案:【1】a/500 【2】r=0.08
4.116 某個(gè)自動(dòng)加油站有'a','b','c'三種汽油,單價(jià)分別為1.50,1.35,1.18(元/千克),也提供了“自己加”和“協(xié)助加”兩個(gè)服務(wù)等級(jí)。這樣用戶可以得到5%或10%的優(yōu)惠。本程序針對(duì)用戶輸入加油量a,汽油品種b和服務(wù)類型c('f'--自動(dòng),'m'--自己,'e'--協(xié)助),輸出應(yīng)付款m。請(qǐng)分析程序填空。
main()
{float a,r1,r2,m;
char b,c;
scanf("%f %c %c",&a,&b,&c);
swith(b)
{case 'a':r1=1.5;break;
case 'b': 【1】 ;break;
case 'c':r1=1.18;break;
}
switch(c)
{case 'f':r2=0;break;
case 'm':r2=0.05;break;
case【2】:r2=0.1;break;
}
m=【3】;
printf("%f",m);
}
參考答案:【1】r1=1.35【2】'e'【3】a*r1*(1-r2)
4.117 以下程序計(jì)算某年某月有幾天。其中判別閏年的條件是:能被4整除但不能被100整除的年是閏年,能被400整除的年也是閏年。請(qǐng)分析程序填空。
main()
{int yy,mm,len;
printf("year,month=");
scanf("%d %d",&yy,&mm);
switch(mm)
{case 1: case 3: case 5: case 7:case 8:
case 10:case 12:【1】;break;
case 4: case 6: case 9: case 11:len=30;break;
case 2:if(yy%4==0&&yy%100!=0||yy%400==0)【2】;
else【3】;
break;
default:printf("input error");break;
}
printf("the length of %d %d is %d\n",yy,mm,len);
}
參考答案:【1】len=31【2】len=29【3】len=28
*4.118 以下程序用以計(jì)算y年m1月d1日與同年的m2月d2日之間的天數(shù)(m2>=m1),并打印計(jì)算結(jié)果。若m1=m2且d1=d2則算一天。請(qǐng)分析程序填空。
main()
{int y,m1,d1,m2,d2;
int i,d;
scanf("%d,%d,%d,%d,%d",&y,&m1,&d1,&m2,&d2);
y=(y%4==0【1】y%100!=0【2】y%400==0)?1:0;
d=0-d1;
for(i=m1;i
switch(i)
{case 1:case 3:case 5: case 7:case 8:
case 10:case 12:d+=31;break;
case 2:d=d+28+y; break;
case 4:case 6:case 9:case 11:【3】;
}
printf("%d",d+d2+1);
}
參考答案:【1】&&【2】||【3】d=d+30
4.3 編程題
4.119 編制程序,要求輸入整數(shù)a和b,若a2+b2大于100,則輸出a2+b2百位以上的數(shù)字,否則輸出兩數(shù)之和。
參考程序:
main()
{int a,b;
printf("Input a & b:");
scanf("%d%d",&a,&b);
if (a*a+b*b>100) printf("%d\n",(a*a+b*b)/100);
else printf("%d\n",a+b);
}
4.120 試編程判斷輸入的正整數(shù)是否既是5又是7的整數(shù)倍,若是輸出yes,否則輸出no。
參考程序:
main()
{int a;
printf("Input a:");
scanf("%d",&a);
if (a%5==0&&a%7==0) printf("yes\n");
else printf("no\n");
}
4.121 請(qǐng)編程序,根據(jù)以下函數(shù)關(guān)系,對(duì)輸入的每個(gè)x值,計(jì)算出相應(yīng)的y值。
xy
x≤00
0
10
20
參考程序:
main()
{float x,y;
printf("Input x:");
scanf("%f",&x);
y=-1;
if(x<0) y=0;
else if(x<=10) y=x;
else if(x<=20) y=10;
else if(x<40) y=0.5*x+20
else y=-1;
if (y==-1) printf("error");
else printf("y=%f\n",y);
}
4.122 輸入一個(gè)整數(shù),判斷它能否被3,5,7整除,并輸出以下信息之一:
(1)能同時(shí)被3,5,7整除
(2)能被其中兩數(shù)整除(要指出哪兩個(gè))。
(3)能被其中一個(gè)數(shù)整除(要指出哪一個(gè))。
(4)不能被任何一個(gè)整除。
參考程序:
main()
{int m;
printf("Input a number:");
scanf("%d",&m);
if(m%3==0&&m%5==0&&m%7==0)
printf("能同時(shí)被3,5,7整除");
else if((m%3==0&&m%5==0)||(m%3==0&&m%7==0)||(m%5==0&&m%7==0))
{printf("能被其中兩數(shù)整除");
if(m%3==0&&m%5==0) printf("(3,5)");
else if(m%3==0&&m%7==0) printf("(3,7)");
else printf("(5,7)");
}
else if(m%3==0||m%5==0||m%7==0)
{printf("能被其中一個(gè)數(shù)整除");
if(m%3==0) printf("(3)");
else if(m%5==0) printf("(5)");
else printf("(7)");
}
else printf("不能被任何一個(gè)整除");
}
4.123 將以下程序段改用非嵌套的if語句實(shí)現(xiàn)。
int s,t,m;
t=(int)(s/10);
switch(t)
{case 10:m=5;break;
case 9:m=4;break;
case 8:m=3;break;
case 7:m=2;break;
case 6:m=1;break;
default: m=0;
}
參考程序:
m=0;
if(s>=100&&s<110) m=5;
if(s>=90&&s<100) m=4;
if(s>=80&&s<90) m=3;
if(s>=70&&s<80) m=2;
if(s>=60&&s<70) m=1;
4.124 用switch編程實(shí)現(xiàn):
-1 (x<0)
y={0 (x=0)
1 (x>0)
參考程序:
void main()
{float x;
int y;
printf("Input a x:");
scanf("%f",&x);
switch(x<0)
{case 1:y=-1;break;
case 0:switch(x==0)
{case 1:y=0;break;
case 0:y=1;
}
}
printf("y=%d\n",y);
}
4.125 將以下程序段改用嵌套的if語句實(shí)現(xiàn)。
int s,t,m;
t=(int)(s/10);
switch(t)
{case:m=5;break;
case 9:m=4;break;
case 8:m=3;break;
case 7:m=2;break;
case 6:m=1;break;
default: m=0;
}
參考程序:
if(s>=110&&s<60) m=0
else if(s<110) m=5;
else if(s<100) m=4;
else if(s<90) m=3;
else if(s<80) m=2;
else m=1;
4.126 請(qǐng)將以下語句改寫成為switch語句。
if(s>0&&s<=10)
if(s>=3&&s<=6) x=2;
else if(s>1||s>8) x=3;
else x=1;
else x=0;
參考程序:
switch(s>0&&s<=10)
{case 0:x=0;break;
case 1:switch(s>=3&&s<=6)
{case 1:x=2;break;
case 0:switch(s>1||s>8)
{case 1:x=3;break;
case 0:x=1;break;
}
}
}
4.127編程實(shí)現(xiàn)以下功能:讀入兩個(gè)運(yùn)算數(shù)(data1和data2)及一個(gè)運(yùn)算符(op),計(jì)算表達(dá)式data1 op data2的值,其中op可為+,-,*,/(用switch語句實(shí)現(xiàn))。
參考程序:
#include
#include
main()
{float data1,data2,result;
char op;
printf("Type in your expression:");
scanf("%f %c %f",&data1,&op,&data2);
switch(op)
{case '+':result=data1+data2;break;
case '-':result=data1-data2;break;
case '*':result=data1*data2;break;
case '/':if(data2==0){printf("\nDivision by zero!");exit(1);}
result=data1/data2;break;
}
printf("This is %6.2f %c %6.2f=%6.2f\n",data1,op,data2,result);
}
4.128 編一程序,對(duì)于給定的一個(gè)百分制成績(jī),輸出相應(yīng)的五分值成績(jī)。設(shè)90分以上為'A',80-89分為'B',70-79分為'C',60-69分為'D',60分以下為'E'(用switch語句實(shí)現(xiàn))。
參考程序:
main()
{int score=-1,temp;
char grade;
while(score>=0&&score<=100)
{ printf("Enter score:");
scanf("%d",&score);
}
temp=score/10;
switch(temp)
{case 0:case 1:case 2:case 3:case 4:case 5:grade='E';break;
case 6:grade='D';break;
case 7:grade='C';break;
case 8:grade='B';break;
case 9:case 10:grade='A';
}
printf("score=%d,grade=%c\n",score,grade);
}
第五章 循環(huán)控制
5.1 選擇題
5.1 設(shè)有程序段
int k=10;
while(k=0) k=k-1;
則下面描述中正確的是 。
A)while循環(huán)執(zhí)行10次 B)循環(huán)是無限循環(huán)
C)循環(huán)體語句一次也不執(zhí)行 D)循環(huán)體語句執(zhí)行一次
參考答案:C
5.2設(shè)有以下程序段
int x=0,s=0;
while(!x!=0) s+=++x;
printf("%d",s);
則 。
A)運(yùn)行程序段后輸出0 B)運(yùn)行程序段后輸出1
C)循環(huán)的控制表達(dá)式不正確 D)程序段執(zhí)行無限次
參考答案:B
5.3語句while(!E);中的!E等價(jià)于 。
A)E= =0 B)E!=1 C)E!=0 D)E= =1
參考答案:A
5.4下面程序段的運(yùn)行結(jié)果是 。
a=1;b=2;c=2;
while(a
printf("%d,%d,%d",a,b,c);
A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1
參考答案:A
5.5 下面程序段的運(yùn)行結(jié)果是 。
x=y=0;
while(x<15)
y++,x+=++y;
printf("%d,%d",y,x);
A)20,7 B)6,12 C)20,8 D)8,20
參考答案:D
5.6下面程序段的運(yùn)行結(jié)果是 。
int n=0;
while(n++<=2);
printf("%d",n);
A)2 B)3 C)4 D)語法錯(cuò)誤
參考答案:C
5.7 設(shè)有程序段
t=0;
while(printf("*"))
{t++;
if(t<3) break;
}
下面描述正確的是 。
A)其中循環(huán)控制表達(dá)式與0等價(jià) B)其中循環(huán)控制表達(dá)式與'0'等價(jià)
C)其中循環(huán)控制表達(dá)式是不合法的 D)以上說法都不對(duì)
參考答案:B
參考分析:printf的返回值為數(shù)值1,恒真,故與B等價(jià)。
5.8 下面程序的功能是將從鍵盤輸入的一對(duì)數(shù),由小到大排序輸出。當(dāng)輸入一對(duì)相等數(shù)時(shí)結(jié)束循環(huán),請(qǐng)選擇填空。
#include
main()
{int a,b,t;
scanf("%d%d",&a,&b);
while( )
{if (a>b)
{t=a;a=b;b=t;}
printf("%d,%d\n",a,b);
scanf("%d%d",&a,&b);
}
}
A)!a=b B)a!=b C)a==b D)a=b
參考答案:B
5.9下面程序的功能是從鍵盤輸入的一組字符中統(tǒng)計(jì)出大寫字母的個(gè)數(shù)m和小寫字母的個(gè)數(shù)n,并輸出m,n中的較大者
#include "stdio.h"
main()
{int m=0,n=0;
char c;
while ((【1】)!='\n')
{ if(c>='A'&&c<='Z') m++;
if (c>='a'&&c<='z') n++;
}
printf("%d",m
【1】A)c=getchar() B)getchar() C)c=gets() D)scanf("%c",c)
【2】A)m:n B)m:m C)n:n D)n:m
參考答案:【1】A【2】D
5.10下面程序的功能是將小寫字母變成對(duì)應(yīng)大寫字母后的第二個(gè)字母,其中y變成A,z變成B。請(qǐng)選擇填空。
#include "stdio.h"
main()
{ char c;
while ((c=getchar())!='\n')
{if (c>='a'&&c<='z')
{【1】;
if (c>'Z')
【2】;
}
printf("%c",c);
}
}
【1】A)c+=2 B)c-=32 C)c=c+32+2 D)c-=30
【2】A)c='B' B)c='A' C)c-=26 D)c=c+26
參考答案:【1】D【2】 C
5.11下面程序的功能是在輸入一批正整數(shù)中求出最大者,輸入0結(jié)束循環(huán),請(qǐng)選擇填空 。
#include "stdio.h"
main()
{int a,max=0;
scanf("%d",&a);
while ( )
{if (max
scanf("%d",&a);
}
printf("%d",max);}
A)a= =0 B)a C)a= =1 D)!a
參考答案:B
5.12 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int num=0;
while(num<=2)
{num++;
printf("%d\n",num);
}
}
A)1 B)1 C)1 D)1
2 2 2
3 3
4
參考答案:C
5.13若運(yùn)行以下程序時(shí),從鍵盤輸入2473(表示回車),則下面程序的運(yùn)行結(jié)果是 。
#include "stdio.h"
{int c;
while ((c=getchar())!='\n')
switch (c-'2')
{case 0:
case 1: putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break;
}
printf("\n");}
A)668977 B)668966 C)66778777 D)6688766
參考答案:A
5.14 C語言中while和do while循環(huán)的主要區(qū)別是 。
A)do-while的循環(huán)至少無條件執(zhí)行一次。
B)while循環(huán)控制條件比do-while的循環(huán)控制條件嚴(yán)格。
C)do-while允許從外部轉(zhuǎn)入到循環(huán)體內(nèi)。
D)do-while的循環(huán)體不能是復(fù)合語句。
參考答案:A
5.15 以下能正確計(jì)算10!的程序段是 。
A)do {i=1;s=1; B)do{i=1;s=0;
s=s*i; s=s*i;
i++; i++;
}while(i<=10); }while(i<=10);
C)i=1;s=1; D)i=1;s=0;
do{s=s*i; do{s=s*i;
i++; i++;
}while(i<=10); }while(i<=10);
5.16 以下程序段 。
x=-1;
do x=x*x;
while(!x);
A)是死循環(huán) B)循環(huán)執(zhí)行兩次
C)循環(huán)執(zhí)行一次 D)有語法錯(cuò)誤
參考答案:C
5.17 以下描述中正確的是 。
A)由于do-while循環(huán)中循環(huán)體語句只能是一條可執(zhí)行語句,所以循環(huán)體內(nèi)不能使用復(fù)合語句。
B)do-while循環(huán)由do開始,用while結(jié)束,在while(表達(dá)式)后面不能寫分號(hào)。
C)在do-while循環(huán)體中,一定要有能使while后面表達(dá)式的值變?yōu)榱?"假")的操作。
D)do-while循環(huán)中,根據(jù)情況可以省略while。
參考答案:C
5.18 若有語句如下,則程序段的輸出是 。
int x=3;
do {printf("%d",x-=2);}while(!(--x));
A)1 B)1和-2 C)3和0 D)死循環(huán)
*5.19下面程序的功能是計(jì)算正整數(shù)2345的各位數(shù)字平方和。
#include "stdio.h"
main()
{int n,sum=0;
n=2345;
do {sum=sum+【1】;
n=【2】;
} while(n);
printf("sum=%d",sum);}
【1】A)n%10 B)(n%10)*(n%10) C)n/10 D)(n/10)*(n/10)
【2】A)n/1000 B)b/100 C)n/10 D)n%10
參考答案:【1】B 【2】C
5.20 下面程序是從鍵盤輸入學(xué)號(hào),然后輸出學(xué)號(hào)中百位數(shù)是3的學(xué)號(hào),輸入0時(shí)結(jié)束循環(huán)。請(qǐng)選擇填空。
#include
main()
{long int num;
scanf("%ld",&num);
do
{if(【1】) printf("%ld",num);
scanf("%ld",&num);
}while(【2】);
}
【1】A)num%100/10==3 B)num/100%10==3
C)num%10/10==3 D)num/10%10==3
【2】A)!num B)num>0==0 C)!num==0 D)!num!=0
參考答案:【1】B 【2】C
5.21 等比數(shù)列的第一項(xiàng)a=1,公比q=2,下面程序的功能是求滿足前n項(xiàng)和小于100的最大n,請(qǐng)選擇填空。
#include
main()
{int a,q,n,sum;
a=1;q=2;n=sum=0;
do
{【1】;
++n;a*=q;
}while(sum<100);
【2】;
printf("%d\n",n);
}
【1】A)sum++ B)sum+=a C)sum*=a D)a+=sum
【2】A)n=n-2 B)n=n C)n++ D)n-=1
參考答案:【1】B 【2】D
5.22 下面程序的功能是把316表示為兩個(gè)加數(shù)的和,使兩個(gè)加數(shù)分別能被13和11整除。請(qǐng)選擇填空。
#include
main()
{int i=0,j,k;
do
{i++;k=316-13*i;}while( );
j=k/11;
printf("316=13*%d+11*%d",i,j);
}
A)k/11 B)k%11 C)k/11==0 D)k%11==0
參考答案:B
5.23 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int y=10;
do {y--;}while(--y);
printf("%d\n",y--);
}
A)-1 B)1 C)8 D)0
參考答案:D
5.24若運(yùn)行以下程序時(shí),從鍵盤輸入Adescriptor(表示回車),則下面程序的運(yùn)行結(jié)果是 。
#include
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:v2+=1;
}
v0+=1;
} while(c!='\n');
printf("v0-%d,v1=%d,v2=%d\n",v0,v1,v2);
}
A)v0=7,v1=4,v2=7 B)v0=11,v1=4,v2=11
C)v0=12,v1=4,v2=11 D)v0=12,v1=4,v2=12
參考答案:D
5.25 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int a=1,b=10;
do
{b-=a;a++;}while(b--<0);
printf("a=%d,b=%d\n",a,b);
}
A)a=3,b=11 B)a=2,b=8 C)a=1,b=-1 D)a=4,b=9
參考答案:B
5.26下面有關(guān)for循環(huán)的正確描述是 。
A)for循環(huán)只能用于循環(huán)次數(shù)已經(jīng)確定的情況
B)for循環(huán)是先執(zhí)行循環(huán)體語句,后判斷表達(dá)式
C)在for循環(huán)中,不能用break語句跳出循環(huán)體
D)for循環(huán)的循環(huán)體可以包括多條語句,但必須用花括號(hào)括起來
參考答案:D
5.27對(duì)for(表達(dá)式1; ;表達(dá)式3)可理解為 。
A) for (表達(dá)式1;0;表達(dá)式3) B) for (表達(dá)式1;1;表達(dá)式3)
C) for (表達(dá)式1;null;表達(dá)式3) D)缺少一個(gè)表達(dá)式
參考答案:B
5.28 若i為整型變量,則以下循環(huán)執(zhí)行次數(shù)是 。
for (i=2;i==0;)printf("%d",i--);
A)無限次 B)0次 C)1次 D)2次
參考答案:B
5.29 以下for循環(huán)的執(zhí)行次數(shù)是 。
for(x=0,y=0;(y=123)&&(x<4);x++);
A)是無限循環(huán) B)循環(huán)次數(shù)不定 C)4次 D)3次
參考答案:C
5.30 以下不是無限循環(huán)的語句為 。
A)for(y=0,x=1;x>++y;x=i++) i=x;
B)for(;;x++=i);
C)while(1){x++;}
D)for(i=10;;i--) sum+=i;
參考答案:A
5.31下面程序段的運(yùn)行結(jié)果是 。
for(y=1;y<10;)y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y);
A)x=27,y=27 B)x=12,y=13 C)x=15,y=14 D)x=y=27
參考答案:C
5.32下面程序段的運(yùn)行結(jié)果是 。
for(x=3;x<6;x++) printf((x%2)?("**%d"):("##%d\n")),x);
A)**3 B)##3 C)##3 D)**3##4
##4 **4 **4##5 **5
**5 ##5
參考答案:D
*5.33以下不是無限循環(huán)的語句為 。
A)int i=100;
while(1)
{i=i%100+1;
if(i>100)break;
}
B)for(;;);
C)int k=0;
do{++k;}while(k>=0);
D)int s=36;
while(s);--s;
參考答案:C
5.34 執(zhí)行語句for(i=1;i++<4;);后變量的值為 。
A)3 B)4 C)5 D)不定
參考答案:C
5.35 有一堆零件(100到200之間),如果分成4個(gè)零件一組則多出2個(gè)零件;若分成7個(gè)零件一組,則多3個(gè)零件;若分成9個(gè)零件一組,則多出5個(gè)零件。下面程序是求這堆零件總數(shù),請(qǐng)選擇填空。
#include
main()
{int i;
for(i=100;i<200;i++)
if((i-2)%4==0)
if(!((i-3)%7))
if( )
printf("%d",i);
}
A)i%9=5 B)i%9!=5 C)(i-5)%9!=0 D)i%9==5
參考答案:D
5.36 下面程序的功能是計(jì)算1至50中是7的倍數(shù)的數(shù)值之和,請(qǐng)選擇填空。
#include
main()
{int i,sum=0;
for(i=1;i<=50;i++)
if( 【1】 )sum+=i;
printf("%d",sum);
}
A)(int)(i/7)==i/7 B)(int)i/7==i/7 C)i%7!=0 D)i%7==0
參考答案:D
5.37 下面程序的功能是計(jì)算1至10之間的奇數(shù)之和和偶數(shù)之和。請(qǐng)選擇填空。
#include
main()
{int a,b,c,i;
a=c=0;
for(i=0;i<=10;i+=2)
{a+=i;
【1】;
c+=b;
}
printf("偶數(shù)之和=%d\n",a);
printf("奇數(shù)之和=%d\n", 【2】 );
}
【1】A)b=i-- B)b=i+1 C)b=i++ D)b=i-1
【2】A)c-10 B)c C)c-11 D)c-b
參考答案:【1】B 【2】CD
參考分析:奇數(shù)累加和根據(jù)題目的要求多計(jì)算了11,需要從累加和中去除,但退出循環(huán)后b變量的值也是11,故【2】中的D也正確。
5.38 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i;
for(i=1;i<=5;i++)
switch(i%5)
{case 0:printf("*");break;
case 1:printf("#");break;
default:printf("\n");break;
case 2:printf("&");
}
}
A)#&&* B)#& C)# D)#&
& &
&* & *
&*
參考答案:B
5.39 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int x,i;
for(i=1;i<=100;i++)
{x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%3d",x);
}
}
A) 39 81 B)42 84 C)26 68 D)28 70
參考答案:D
5.40 下面程序段的功能是計(jì)算1000!的末尾含有多少個(gè)零。請(qǐng)選擇填空。(提示:只要計(jì)算出1000!中含有因子5的個(gè)數(shù)即可)
for(k=0,i=5;i<=1000;i+=5)
{m=i;
while( ){k++;m=m/5;}
A)m%5=0 B)m=m%5==0 C)m%5==0 D)m%!=0
5.41 下面程序的功能是求算式xyz+yzz=532中x,y,z的值(其中xyz和yzz分別表示一個(gè)三位數(shù)),請(qǐng)選擇填空。
#include
main()
{int x,y,z,i,result=532;
for(x=1;x<10;x++)
for(y=1;y<10;y++)
for(【1】;z<10;z++)
{i=100*x+10*y+z+100*y+10*z+z;
if(【2】)printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
【1】A)z=x B)z=1 C)z=0 D)z=y
【2】A)i/result==1 B)i=result C)i!=result D)i==result
參考答案:【1】CB 【2】D
參考分析:【1】由于z不需要作為百位數(shù),因此可以為0。若更進(jìn)一步考慮到z為兩個(gè)數(shù)的末尾,2倍的z不可能為0,故z也不可能為0,所以B也應(yīng)當(dāng)正確。
**5.42 下面程序是對(duì)輸出一個(gè)正整數(shù)等差數(shù)列的前十項(xiàng),此數(shù)列前四項(xiàng)之和及積分別是26和880,請(qǐng)選擇填空。
#include
main()
{int a,d,i,s,f,x;
for (a=1;a<=6;a++)
for(d=1;【1】;d++)
{s=0;f=1;x=a;
for(i=1;i<=4;i++)
{s=s+x;
f=f*x;
x=x+d;
}
if(s==26&&f==880)
for(i=0;i<10;i++)
printf("%3d", 【2】 ;
}
}
【1】A)d<=a B)空 C)d<=5 D)d
【2】a+i*d B)i*d C)a+(i+1)*d D)a+d
參考答案:【1】C【2】A
5.43 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,b,k=0;
for(i=1;i<=5;i++)
{b=i%2;
while(b-->=0) k++;
}
printf("%d,%d",k,b);
}
A)3,-1 B)8,-1 C)3,0 D)8,-2
參考答案:D
5.44 以下正確的描述是 。
A)continue語句的作用是結(jié)束整個(gè)循環(huán)的執(zhí)行。
B)只能在循環(huán)體內(nèi)和switch語句體內(nèi)使用break語句。
C)在循環(huán)體內(nèi)使用break語句或continue語句的作用相同。
D)從多層循環(huán)嵌套中退出時(shí),只能使用goto語句。
參考答案:B
5.45 下面程序段 。
for(t=1;t<=100;t++)
{scanf("%d",&x);
if(x<0)continue;
printf("%3d",t);
}
A)當(dāng)x
C)printf函數(shù)永遠(yuǎn)也不執(zhí)行 D)最多允許輸出100個(gè)非負(fù)整數(shù)
參考答案:D
5.46下面程序段 。
x=3;
do{y=x--;
if(!y) {printf("*"); continue;}
printf("#");
}while(1<=x<=2);
A)將輸出## B)將輸出###*
C)是死循環(huán) D)含有不合法的控制表達(dá)式
參考答案:C
5.47 以下是死循環(huán)的程序段是 。
A)for(i=1; ; )
if(++i%2==0) continue;
if(++i%3==0) break;
}
B)i=32767;
do{if(i<0) break;}while(++i);
C)for(i=1; ; ) if(++i<10) continue;
D)i=1;
while(i--);
參考答案:C
5.48 以下描述正確的是 。
A)goto語句只能用于退出多層循環(huán)。
B)switch語句中不能出現(xiàn)continue語句。
C)只能用continue語句來中止本次循環(huán)。
D)在循環(huán)中break語句不能獨(dú)立出現(xiàn)。
參考答案:C
5.49 與下面程序段等價(jià)的是 。
for(n=100;n<=200;n++)
{if(n%3==0) continue;
printf("%4d",n);
}
A)for(n=100;(n%3)&&n<=200;n++) printf("%4d",n);
B)for(n=100;(n%3)||n<=200;n++) printf("%4d",n);
C)for(n=100;n<=200;n++) if(n%3!=0) printf("%4d",n);
D) for(n=100;n<=200;n++)
{if(n%3) printf("%4d",n);
else continue;
break;
}
參考答案:C
**5.50 下面程序的功能是將從鍵盤輸入的偶數(shù)寫成兩個(gè)素?cái)?shù)之和。請(qǐng)選擇填空。
#include
#include
main()
{int a,b,c,d;
scanf("%d",&a);
for(b=3,b<=a/2;b+=2)
{for(c=2;c<=sqrt(b);c++) if(b%c==0) break;
if(c>sqrt(b)) d= ;else continue;
for(c=2;c<=sqrt(d);c++) if(d%c==0) break;
if(c>sqrt(d)) printf("%d=%d+%d\n",a,b,d);
}
}
A)a+b B)a-b C)a*b D)a/b
參考答案:B
5.51下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int k=0;char c='A';
do
{switch(c++)
{case 'A':k++;break;
case 'B':k--;
case 'C':k+=2;break;
case 'D':k=k%2;break;
case 'E':k=k*10;break;
default:k=k/3;
}
k++;
}while(c<'G');
printf("k=%d\n",k);
}
A)k=3 B)k=4 C)k=2 D)k=0
參考答案:B
5.52 若運(yùn)行以下程序時(shí),從鍵盤輸入3.6 2.4,則下面程序的運(yùn)行結(jié)果是 。
#include
#include
main()
{float x,y,z;
scanf("%f%f",&x,&y);
z=x/y;
while(1)
{if(fabs(z)>1.0) {x=y;y=z;z=x/y;}
else break;
}
printf("%f\n",y);
}
A)1.500000 B)1.600000 C)2.000000 D)2.400000
參考答案:B
5.53下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int a,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20) break;
if(b%3==1){b+=3;continue;}
b-=5;
}
printf("%d\n",a);
}
A)7 B)8 C)9 D)10
參考答案:B
5.54下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,j,x=0;
for(i=0;i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2) continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
A)x=4 B)x=8 C)x=6 D)x=12
參考答案:B
5.55下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i;
for(i=1;i<=5;i++)
{if(i%2) printf("*");
else continue;
printf("#");
}
printf("$\n");
}
A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$
參考答案:A
5.56下面程序的運(yùn)行結(jié)果是 。
main()
{int i,j,a=0;
for(i=0;i<2;i++)
{for(j=0;j<4;j++)
{if(j%2) break;
a++;
}
a++;
}
printf("%d\n",a);
}
A)4 B)5 C)6 D)7
參考答案:A
5.2 填空題
5.57 下面程序段是從鍵盤輸入的字符中統(tǒng)計(jì)數(shù)字字符的個(gè)數(shù),當(dāng)輸入換行符時(shí)結(jié)束循環(huán)。請(qǐng)分析程序填空。
int n=0,c;
c=gethar();
while(【1】)
{if(【2】) n++;
c=getchar();
}
參考答案:【1】c!='\n' 【2】c>='0'&&c<='9'
5.58 下面程序的功能是用公式π2/6≈1/12+1/22+1/32+...+1/n2求π的近似值,直到最后一項(xiàng)的值小于10-6為止,請(qǐng)分析程序填空。
#include
#include
main()
{long i=1;
【1】pi=0;
while(i*i>=1e6)
{pi=【2】;i++;}
pi=sqrt(6.0*pi);
printf("pi=%10.6f\n",pi);
}
參考答案:【1】double 【2】pi+1/i/i
5.59 有1020個(gè)西瓜,第一天賣一半多兩個(gè),以后每天賣剩下的一半多兩個(gè),問幾天以后能賣完?請(qǐng)分析程序填空。
#include
main()
{int day,x1,x2;
day=0;x1=1020;
while(【1】){x2=【2】;x1=x2;day++;}
printf("day=%d\n",day);
}
參考答案:【1】x1 【2】x1/2-2
5.60 下面程序的功能是用“輾轉(zhuǎn)相除法”求兩個(gè)正整數(shù)的最大公約數(shù)。請(qǐng)分析程序填空。
#include
main()
{int r,m,n;
scanf("%d%d",&m,&n);
if(m
r=m%n;
while(r){m=n;n=r;r=【2】;}
printf("%d\n",n);
}
參考答案:【1】r=m,m=n,n=r 【2】m%n
5.61 執(zhí)行以下程序時(shí)輸入right?,則下面程序的運(yùn)行結(jié)果是 。
#include
main()
{char c;
while((c=getchar())!='?') putchar(++c);
}
參考答案:sjhiu
5.62下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int a,s,n,count;
a=2;s=0;n=1;count=1;
while(count<=7) {n=n*a;s=s+n;++count;}
printf("s=%d\n",s);
}
參考答案:s=254
參考分析:本題是計(jì)算21+22+...+27之和。
5.63當(dāng)運(yùn)行以下程序,用戶輸入China# 程序的運(yùn)行結(jié)果是 。
#include "stdio.h"
main()
{int v1=0,v2=0;
char ch;
while ((ch=getchar())!='#')
switch(ch)
{case 'a':
case 'h':
default:v1++;
case 'o': v2++;
}
printf("%d,%d\n",v1,v2);}
參考答案:5,5
5.64 執(zhí)行下面程序段后,k值是 。
k=1;n=263;
do{k*=n%10;n/=10;}while(n);
參考答案:36
5.65 下面程序段中循環(huán)體的執(zhí)行次數(shù)是 。
a=10;b=0;
do{b+=2;a-=2+b;}while(a>=0);
參考答案:3次
5.66下面程序段的運(yùn)行結(jié)果是 。
x=2;
do{printf("*");x--;}while(!x==0);
參考答案:**
5.67下面程序段的運(yùn)行結(jié)果是 。
i=1;a=0;s=1;
do{a=a+s*i;s=-s;i++;}while(i<=10);
printf("a=%d",a);
參考答案:a=-5
5.68 下面的程序是用do while語句求1至1000之間滿足“用3除余2;用5除余3;用7除余2"的數(shù),且一行只打印五個(gè)數(shù)。請(qǐng)分析程序填空。
#include
main()
{int i=1,j=0;
do
{if(【1】)
{printf("%4d",i);
j=j+1;
if(【2】) printf("\n");
}
i=i+1;
}while(i<1000);
}
參考答案:【1】i%3==2&&i%5==3&&i%7==2 【2】j%5==0
5.69 下面程序的功能是統(tǒng)計(jì)正整數(shù)的各位數(shù)字中零的個(gè)數(shù),并求各位數(shù)字中的最大者。請(qǐng)分析程序填空。
#include
main()
{int n,count,max,t;
count=max=0;
scanf("%d",&n);
do
{t=【1】;
if(t==0) ++count;
else if(max
n/=10;
}while(n);
printf("count=%d,max=%d",count,max);
}
參考答案:【1】n%10 【2】max=t
5.70 等差數(shù)列的第一項(xiàng)a=2,公差d=3,下面程序的功能是在前n項(xiàng)和中,輸出能被4整除的所有數(shù)的和。請(qǐng)分析程序填空。
#include
main()
{int a,d,sum;
a=2;d=3;sum=0;
do
{sum+=a;
a+=d;
if( )printf("%4d\n",sum);
}while(sum<200);
}
參考答案:sum%4==0
*5.71 下面程序的功能是求1111的個(gè)、十、百位上的數(shù)字之和。請(qǐng)分析程序填空。
#include
main()
{int i,s=1,m=0;
for(i=1;i<=11;i++) s=s*11%1000;
do {m+=【1】;s=【2】;}while(s);
printf("m=%d\n",m);
}
參考答案:【1】s%10 【2】s/10
參考分析:本題各位數(shù)的分離,沒有什么新意,一個(gè)十進(jìn)制大數(shù)的人為“高位溢出”這種技巧,值得學(xué)習(xí)和模仿。
5.72 當(dāng)運(yùn)行以下程序時(shí),從鍵盤輸入1 2 3 4 5 -1,則下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int k=0,n;
do{scanf("%d",&n);k+=n;}while(n!=-1);
printf("k=%d n=%d\n",k,n);
}
參考答案:k=14 n=-1
5.73下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,x,y;
i=x=y=0;
do{++i;
if(i%2!=0){x=x+i;i++;}
y=y+i++;
}while(i<=7);
printf("x=%d,y=%d\n",x,y);
}
參考答案:x=1,y=20
5.74下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int a,b,i;
a=1;b=3;i=1;
do{printf("%d,%d,",a,b);
a=(b-a)*2+b;
b=(a-b)*2+a;
if(i++%2==0) printf("\n");
}while(b<100);
}
參考答案:1,3,7,15,
31,63,
5.75 當(dāng)從鍵盤輸入-1 0,則以下程序的運(yùn)行結(jié)果是 。
#include
main()
{int a,b,m,n;
m=n=1;
scanf("%d%d",&a,&b);
do{if(a>0) {m=2*n;b++;}
else {n=m+n;a+=2;b++;}
}while(a==b);
printf("m=%d n=%d\n",m,n);
}
參考答案:m=4 n=2
5.76下面程序段是找出整數(shù)的所有因子,請(qǐng)分析程序填空。
scanf("%d",&x);
for (i=1; ; i++)
if (x%i==0) printf("%3d",i);
參考答案:i<=x
5.77 雞兔同籠,頭30,腳90,下面程序段計(jì)算雞兔各有多少只。請(qǐng)分析程序填空。
for(x=1;x<=30;x++ )
{y=30-x;
if(【1】) printf("%d,%d",x,y);
}
參考答案:2*x+4*y==90
5.78 下面程序段的運(yùn)行結(jié)果是 。
for(a=1,i=-1;-1<=i<1;i++)
{a++;printf("%d,",a);}
printf("%2d",i);
參考答案:-1
5.79 循環(huán)語句for(i=0;i<3;i++) printf("*");表達(dá)式i=0執(zhí)行【1】次,表達(dá)式i++執(zhí)行【2】次。
參考答案:【1】1 【2】3
5.80 下面程序的功能是計(jì)算1-3+5-7+...-99+101的值,請(qǐng)分析程序填空。
#include
main()
{int i,t=1,s=0;
for(i=1;i<=101;i+=2)
{【1】;s=s+t;【2】;}
printf("%d\n",s);
}
參考答案:【1】t=t*i 【2】t=-t/i
5.81 以下程序是用梯形法求sin(x)*cos(x)的定積分。求定積分的公式為:
s=h/2(f(a)+f(b))+h∑f(xi) (i=1~n-1)
其中xi=a+ih,h=(b-a)/n。設(shè)a=0,b=1.2為積分上下限,積分區(qū)間分隔數(shù)n=100,請(qǐng)分析程序填空。
#include
#include
main()
{int i,n;double h,s,a,b;
printf("Input a,b:");
scanf("%lf%lf",【1】);
n=100;h=【2】;
s=0.5*(sin(a)*cos(a)+sin(b)*cos(b));
for(i=1;i<=n-1;i++) s+=【3】;
s*=h;
printf("s=%10.4lf\n",s);
}
參考答案:【1】&a,&b 【2】(b-a)/n 【3】sin(a+i*h)*cos(a+i*h)
5.82 以下程序的功能是根據(jù)公式e=1+1/1!+1/2!+...1/n!求e的近似值,精度要求為10-6。請(qǐng)分析程序填空。
#include
main()
{int i;double e,new;
【1】;new=1.0;
for(i=1;【2】;i++)
{new/=(double)i; e+=new;}
printf("e=%lf\n",e);
}
參考答案:【1】e=1 【2】new>1e-6
*5.83 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,t,sum=0;
for(t=i=1;i<=10;)
{sum+=t;++i;
if(i%3==0) t=-i;
else t=i;
}
printf("sum=%d",sum);
}
參考答案:sum=19
參考分析:此題為1+2-3+4+5-6+7+8-9+10之和。
*5.84下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i;
for(i=1;i<=5;i++)
switch(i%2)
{case 0:i++;printf("#");break;
case 1:i+=2;printf("*");
default:printf("\n");
}
}
參考答案:*
#
參考分析:由于在程序中改變了循環(huán)變量的值,導(dǎo)致循環(huán)只能循環(huán)2次。
5.85下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,j=4;
for(i=j;i<=2*j;i++)
switch(i/j)
{case 0:case 1:printf("*");break;
case 2:printf("#");
}
}
參考答案:****#
5.86 下面程序的功能是求出用數(shù)字0至9可以組成多少個(gè)不重復(fù)的三位偶數(shù)。請(qǐng)分析程序填空。
#include
main()
{int n=0,i,j,k;
for(i=1;i<=9;i++)
for(k=0;k<=8;【1】)
if(k!=i)
for(j=0;j<=9;j++)
if(【2】) n++;
printf("n=%d\n",n);
}
參考答案:【1】k+=2 【2】i!=j&&k!=j
5.87 下面程序的功能是輸出1至100之間每位數(shù)的乘積大于每位數(shù)的和的數(shù),請(qǐng)分析程序填空。
#include
main()
{int n,k=1,s=0,m;
for(n=1;n<=100;n++)
{k=1;s=0;
【1】;
while(【2】)
{k*=m%10;
s+=m%10;
【3】;
}
if(k>s) printf("%3d",n);
}
}
參考答案:【1】m=n 【2】m 【3】m=m/10
*5.88 下面程序的功能是求1000以內(nèi)的所有完全數(shù)。說明:一個(gè)數(shù)如果恰好等于它的因子之和(除自身外),則稱該數(shù)為完全數(shù)。例如:6=1+2+3。
#include
main()
{int a,i,m;
for(a=1;a<=1000;a++)
{for(【1】;i<=a/2;i++)
if(!(a%i)) 【2】;
if(m==a) printf("%4d",a);
}
}
參考答案:【1】i=1,m=0 【2】m=m+i
5.89 下面程序的功能是完成用一元人民幣兌換一分、兩分、五分零幣的所有兌換方案。請(qǐng)分析程序填空。
#include
main()
{int i,j,k,l=1;
for(i=0;i<=20;i++)
for(j=0;j<=50;j++)
{k=【1】;
if(【2】)
{printf(" %2d %2d %2d ",i,j,k);
l=l+1;
if(l%5==0) printf("\n");
}
}
}
參考答案:【1】100-5*i-2*j 【2】k>=0
5.90 下面程序的功能是從三個(gè)紅球、五個(gè)白球、六個(gè)黑球中任意取出八個(gè)球,且其中必須有白球,輸出所有可能的方案。請(qǐng)分析程序填空。
#include
main()
{int i,j,k;
printf("\n hong bai hei\n");
for(i=0;i<=3;i++)
for(【1】;j<=5;j++)
{k=8-i-j;
if(【2】) printf(" %3d %3d %3d\n",i,j,k);
}
}
參考答案:【1】j=1 【2】k<7
*5.91 若從鍵盤輸入65 14,則下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int m,n;
printf("Enter m,n:");
scanf("%d%d",&m,&n);
while(m!=n)
{while(m>n) m-=n;
while(n>m) n-=m;
}
printf("m=%d\n",m);
}
參考答案:m=1
參考分析:這是一種計(jì)算兩個(gè)整型數(shù)最大公約數(shù)的一種算法。
5.92 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int y=2,a=1;
while(y--!=-1)
{do {a*=y; a++;}while(y--);}
printf("%d,%d",a,y);
}
參考答案:1,-2
5.93 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,j;
for(i=0;i<=3;i++)
{for(j=0;j<=5;j++)
if(i==0||j==0||i==3||j==5) printf("*");
else printf(" ");
printf("\n");
}
}
參考答案:
******
* *
* *
******
5.94下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,j;
for(i=4;i>=1;i--)
{for(j=1;j<=i;j++) putchar('#');
for(j=1;j<=4-i;j++) putchar('*');
putchar('\n');
}
}
參考答案:
####
###*
##**
#***
5.95下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,k=0;
for(i=1; ;i++)
{k++;
while(k<i*i)< p="">
{k++;
if(k%3==0) goto loop;
}
}
loop:printf("%d,%d",i,k);
}
參考答案:2,3
5.96 下面程序段的運(yùn)行結(jié)果是 。
i=1;s=3;
do{s+=i++;
if(s%7==0) continue;
else ++i;
}while(s<15);
printf("%d",i);
參考答案:8
5.97 若用0至9之間不同的三個(gè)數(shù)構(gòu)成一個(gè)三位數(shù),下面程序?qū)⒔y(tǒng)計(jì)出共有多少種方法。請(qǐng)分析程序填空。
#include
main()
{int i,j,k,count=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if(【1】)continue;
else for(k=0;k<=9;k++)
if(【2】) count++;
printf("%d",count);
}
參考答案:【1】i==j 【2】k!=i&&k!=j
5.98 下面程序的功能是計(jì)算100至1000之間有多少個(gè)數(shù)其各位數(shù)字之和是5。請(qǐng)分析程序填空。
#include
main()
{int i,s,k,count=0;
for(i=100;i<=1000;i++)
{s=0;k=i;
while(【1】){s+=k%10;k=【2】;}
if(s!=5) 【3】;
else count++;
}
printf("%d",count);
}
參考答案:【1】k 【2】k/10 【3】continue
5.99 下面程序的功能是從鍵盤輸入的10個(gè)整數(shù)中,找出第一個(gè)能被7整除的數(shù)。若找到,打印此數(shù)后退出循環(huán);若未找到,打印“not exist”。請(qǐng)分析程序填空。
#include
main()
{int i,a;
for(i=1;i<=10;i++)
{scanf("%d",&a);
if(a%7==0) {printf("%d",a); 【1】;}
}
if(【2】) printf("not exist\n");
}
參考答案:【1】break 【2】i>10
5.100 下面程序的功能是輸出100以內(nèi)個(gè)位數(shù)為6且能被3整除的所有數(shù)。請(qǐng)分析程序填空。
#include
main()
{int i,j;
for(i=0;【1】;i++)
{j=i*10+6;
if(【2】) continue;
printf("%d",j);
}
}
參考答案:【1】i<=9 【2】j%3
5.101 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i=1;
while(i<=15)
if(++i%3!=2) continue;
else printf("%d ",i);
printf("\n");
}
參考答案:2 5 8 11 14
5.102下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,j,k=19;
while(i=k-1)
{k-=3;
if(k%5==0){i++;continue;}
else if(k<5) break;
i++;
}
printf("i=%d,k=%d\n",i,k);
}
參考答案:i=6,k=4
5.103下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int a=10,y=0;
do
{a+=2;y+=a;
if(y>50) break;
}while(a=14);
printf("a=%d y=%d\n",a,y);
}
參考答案:a=16 y=60
5.104下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i=5;
do
{switch(i%2)
{case 4:i--;break;
case 6:i--;continue;
}
i--;i--;
printf(%d ",i);
}while(i>0);
}
參考答案:3 1 -1
5.3 編程題
5.105 每個(gè)蘋果0.8元,第一天買2個(gè)蘋果,第二天開始買前一天的2倍,直至購買的蘋果個(gè)數(shù)達(dá)到不超過100的最大值。編寫程序求每天平均花多少錢。
參考程序:
main()
{int day=0,buy=2;
float sum=0,ave;
do
{sum=sum+0.8*buy;
day++;buy=buy*2;
}while(buy<=100);
ave=sum/day;
printf("average=%f\n",ave);
}
5.106 編寫程序,找出1至99之間的全部同構(gòu)數(shù)。同構(gòu)數(shù)是這樣一組數(shù):它出現(xiàn)在平方數(shù)的右邊。例如,5是25右邊的數(shù),25是625右邊的數(shù),5和25就是同構(gòu)數(shù)。
參考程序:
main()
{int i;
for(i=1;i<100;i++)
if(i*i%10==i||i*i%100==i) printf("%3d",i);
}
5.107 編寫程序,求一個(gè)整數(shù)任意次方的最后三位數(shù)。即求xy值的最后三位數(shù),要求x,y從鍵盤輸入。
參考程序:
main()
{int x,y,i,s=1;
printf("Input x and y:");
scanf("%d%d",&x,&y);
for(i=1;i<=y;i++)
s=s*x%1000;
printf("The last 3 digit of %d*%d is:%d\n",x,y,s);
}
5.108 編寫程序,從鍵盤輸入6名學(xué)生的五門成績(jī),分別統(tǒng)計(jì)出每個(gè)學(xué)生的平均成績(jī)。
參考程序:
main()
{int i,j;
float s,sum,ave;
for(i=0;i<6;i++)
{sum=0;
for(j=1;j<=5;j++)
{scanf("%f",&s);
sum=sum+s;
}
ave=sum/5;
printf("No.%d ave=%6.2f\n",i+1,ave);
}
}
第六章 數(shù)組
6.1 選擇題
6.1在c語言中,引用數(shù)組元素時(shí),其數(shù)組下標(biāo)的數(shù)據(jù)類型是 。
A)整型常量 B)整型表達(dá)式
C)整型常量或整型表達(dá)式 D)任何類型的表達(dá)式
參考答案:C
參考分析:嚴(yán)格的說法應(yīng)當(dāng)是常量表達(dá)式。
6.2以下對(duì)一維數(shù)組a的正確說明是 。
A) int n; scanf("%d",&n); int a[n]; B)int n=10,a[n];
C) int a(10); D)#define SIZE 10
int a[SIZE];
參考答案:D
6.3若有說明:int a[10];則對(duì)數(shù)組元素的正確引用是 。
A)a[10] B)a[3,5] C)a(5) D)a[10-10]
參考答案:D
6.4 在C語言中,一維數(shù)組的定義方式為:類型說明符 數(shù)組名 。
A)[常量表達(dá)式] B)[整型表達(dá)式]
C)[整型表達(dá)式]或[整型常量] D)[整型常量]
參考答案:A
6.5 以下能對(duì)一維數(shù)組a進(jìn)行正確初始化的語句是 。
A)int a[10]=(0,0,0); B)int a[10]={};
C)int a[]={0}; D)int a[10]={10*1};
參考答案:CD
參考分析:本題題目設(shè)計(jì)有問題,D也是正確的。
6.6 以下對(duì)二維數(shù)組a的正確說明是 。
A)int a[3][]; B)float a(3,4);
C)double a[1][4]; D)float a(3)(4);
參考答案:C
6.7若有說明:int a[3][4];則對(duì)a數(shù)組元素的正確引用是 。
A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)
參考答案:C
參考分析:在實(shí)際應(yīng)用中a[2][4]這種應(yīng)用方式實(shí)質(zhì)上訪問的是a[3][0],這是越界訪問。
6.8 若有說明:int a[3][4];則對(duì)a數(shù)組元素的非法引用是 。
A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]
參考答案:D
參考分析:a[0][4]實(shí)質(zhì)上訪問的是a[1][0],嚴(yán)格意義上并不非法。
6.9 以下能對(duì)二維數(shù)組a進(jìn)行正確初始化的語句是 。
A)int a[2][]={{1,0,1},{5,2,3}};
B)int a[][3]={{1,2,3},{4,5,6}};
C)int a[2][4]={{1,2,3},{4,5},{6}};
D)int a[][3]={{1,0,1}{},{1,1}};
參考答案:B
6.10以下不能對(duì)二維數(shù)組a進(jìn)行正確初始化的說明是 。
A)int a[2][3]={0}; B)int a[][3]={{1,2},{0}};
C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[][3]={1,2,3,4,5,6};
參考答案:C
6.11 若有說明:int a[3][4]={0};則下面正確的敘述是 。
A)只有元素a[0][0]可以得到初值0
B)此說明語句不正確
C)數(shù)組中各元素都可以得到初值,但其值不一定為0
D)數(shù)組中每個(gè)元素均可得到初值0
參考答案:D
6.12若有說明:int a[][4]={0,0};則下面不正確的敘述是 。
A)數(shù)組a的每個(gè)元素都可得到初值0
B)二維數(shù)組a的第一維大小為1
C)因?yàn)槎S數(shù)組a中第二維大小的值除初值個(gè)數(shù)的商為0,故數(shù)組a的行數(shù)為1
D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
參考答案:D
6.13 若有說明:static int a[3][4];則數(shù)組中各元素 。
A)可在程序的運(yùn)行階段得到初值0
B)可在程序的編譯階段得到初值0
C)不能得到確定的初值
D)可在程序的編譯或運(yùn)行階段得到初值0
參考答案:B
6.14 以下各組選項(xiàng)中,均能正確定義二維實(shí)型數(shù)組a的選項(xiàng)是 。
A)float a[3][4]; B)float a(3,4);
float a[][4]; float a[3][4];
float a[3][]={{1},{0}}; float a[][]={{0},{0}};
C)float a[3][4]; D)float a[3][4];
static float a[][4]={{0},{0}}; float a[3][];
auto float a[][4]={{0},{0},{0}}; float a[][4];
參考答案:C
6.15 下面程序有錯(cuò)誤的行是 (行前數(shù)字表示行號(hào))。
1 main()
2 { int a[3]={3*0};
3 int i;
4 for(i=0;i<3;i++)
5 scanf("%d",&a[i]);
6 for(i=1;i<3;i++) a[0]=a[0]+a[i];
7 printf("%d\n",a[0]);
8 }
A)第2行有錯(cuò)誤 B)第6行有錯(cuò)誤
C)第7行有錯(cuò)誤 D)沒有錯(cuò)誤
參考答案:習(xí)題集中答案為A,實(shí)質(zhì)上應(yīng)當(dāng)選擇D
6.16下面程序有錯(cuò)誤的行是 (行前數(shù)字表示行號(hào))。
1 main()
2 {
3 float a[10]={0.0};
4 int i;
5 for(i=0;i<3;i++) scanf("%d",&a[i]);
6 for(i=1;i<10;i++) a[0]=a[0]+a[i];
7 printf("%f\n",a[0]);
8 }
A)沒有錯(cuò)誤 B)第3行有錯(cuò)誤
C)第5行有錯(cuò)誤 D)第7行有錯(cuò)誤
參考答案:C
6.17下面程序有錯(cuò)誤的行是 (行前數(shù)字表示行號(hào))。
1 main()
2 {
3 int a[3]={1};
4 int i;
5 scanf("%d",&a);
6 for(i=1;i<3;i++) a[0]=a[0]+a[i];
7 printf("a[0]=%d\n",a[0]);
8 }
A)3 B)6 C)7 D)5
參考答案:D
6.18下面程序有錯(cuò)誤的行是 (行前數(shù)字表示行號(hào))。
1 main()
2 {
3 int a[3]={0};
4 int i;
5 for(i=0;i<3;i++) scanf("%d",&a[i]);
6 for(i=1;i<4;i++) a[0]=a[0]+a[i];
7 printf("%d\n",a[0]);
8 }
A)沒有錯(cuò)誤 B)3 C)5 D)6
參考答案:D
6.19 若二維數(shù)組a有m列,則計(jì)算任一元素a[i][j]在數(shù)組中位置的公式為(假設(shè)a[0][0]位于數(shù)組的第一個(gè)位置上) 。
A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1
參考答案:D
6.20 對(duì)說明語句int a[10]={6,7,8,9,10};的正確理解是 。
A)將5個(gè)初值依次a[1]至a[5]
B)將5個(gè)初值依次a[0]至a[4]
C)將5個(gè)初值依次a[5]至a[9]
D)將5個(gè)初值依次a[6]至a[10]
參考答案:B
6.21 以下不正確的定義語句是 。
A)double x[5]={2.0,4.0,6.0,8.0,10.0};
B)int y[5]={0,1,3,5,7,9};
C)char c1[]={'1','2','3','4','5'};
D)char c2[]={'\x10','\xa','\x8'};
參考答案:B
6.22 若有說明:int a[][3]={1,2,3,4,5,6,7};則a數(shù)組第一維的大小是 。
A)2 B)3 C)4 D)無法確定
參考答案:B
6.23 若二維數(shù)組a有m列,則在a[i][j]前的元素個(gè)數(shù)為 。
A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1
參考答案:B
6.24 定義如下變量和數(shù)組:int k,a[3][3]={1,2,3,4,5,6,7,8,9};則下面語句的輸出結(jié)果是 。
for(k=0;k<3;k++) printf("%d ",a[k][2-k]);
A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7
參考答案:A
6.25以下程序段的作用是 。
int a[]={4,0,2,3,1},i,j,t;
for (i=1;i<5;i++)
{t=a[i];j=i-1;
while (j>=0&&t>a[j])
{a[j+1]=a[j];j- -;}
a[j+1]=t;
}
A)對(duì)數(shù)組a進(jìn)行插入排序(升序)
B)對(duì)數(shù)組a進(jìn)行插入排序(降序)
C)對(duì)數(shù)組a進(jìn)行選擇排序(升序)
D)對(duì)數(shù)組a進(jìn)行選擇排序(降序)
參考答案:B
6.26 以下正確的定義語句是 。
A)int a[1][4]={1,2,3,4,5}; B)float x[3][]={{1},{2},{3}};
C)long b[2][3]={{1},{2,3},{4,5,6}}; D)double y[][3]={0};
參考答案:D
6.27 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int a[6][6],i,j;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for(i=1;i<6;i++)
{for(j=1;j<6;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
A) 1 1 1 1 1 B) 0 0 0 0 1 C) 1 0 0 0 0 D) 1 0 0 0 1
1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0
1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0
1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0
1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1
參考答案:C
6.28 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int a[6],i;
for(i=1;i<6;i++)
{a[i]=9*(i-2+4*(i>3))%5;
printf("%2d",a[i]);
}
}
A)-4 0 4 0 4 B)-4 0 4 0 3 C)-4 0 4 4 3 D)-4 0 4 4 0
參考答案:C
*6.29下面是對(duì)s的初始化,其中不正確的是 。
A)char s[5]={"abc"}; B)char s[5]={'a','b','c'};
C)char s[5]=""; D)char s[5]="abcde";
參考答案:D
*6.30下面程序段的運(yùn)行結(jié)果是 。
char c[5]={'a','b','\0','c','\0'};
printf("%s",c);
A)'a''b' B)ab C)ab c D)ab▄(▄表示空格)
參考答案:B
*6.31對(duì)兩個(gè)數(shù)組a和b進(jìn)行如下初始化
char a[]="ABCDEF";
char b[]={'A','B','C','D','E','F'};
則以下敘述正確的是 。
A)a與b數(shù)組完全相同 B)a與b數(shù)組長(zhǎng)度相同
C)a和b中都存放字符串 D)a數(shù)組比b數(shù)組長(zhǎng)度長(zhǎng)
參考答案:D
6.32有兩個(gè)字符數(shù)組a、b,則以下正確的輸入語句是 。
A)gets(a,b); B)scanf("%s%s",a,b);
C)scanf("%s%s",&a,&b); D)gets("a");gets("b");
參考答案:B
6.33有字符數(shù)組a[80]和b[80],則正確的輸出語句是 。
A)puts(a,b); B)printf("%s,%s",a[],b[]);
C)putchar(a,b); D)puts(a),puts(b);
參考答案:D
*6.34 下面程序段的運(yùn)行結(jié)果是 。
char a[7]="abcdef",b[4]="ABC";
strcpy(a,b);
printf("%c",a[4]);
A)■ B)\0 C)e D)ef
參考答案:C
6.35有下面程序段,上機(jī)運(yùn)行,將 。
char a[3],b[]="China";
a=b;
printf("%s",a);
A)輸出China B)輸出Chi C)輸出Ch D)編譯出錯(cuò)
參考答案:D
*6.36下面程序段的運(yùn)行結(jié)果是 。
char c[]="\t\v\\\0will\n";
printf("%d",strlen(c));
A)3 B)6 C)9 D)14
參考答案:A
6.37 判斷字符串a(chǎn)和b是否相等,應(yīng)當(dāng)使用 。
A)if(a==b) B)if(a=b) C)if(strcmp(a,b)) D)if(strcmp(a,b)==0)
參考答案:D
6.38判斷字符串s1是否大于字符串s2,應(yīng)當(dāng)使用 。
A) if (s1>s2) B) if (strcmp(s1,s2)
C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)
參考答案:D
6.39下面程序段輸出兩個(gè)字符串中對(duì)應(yīng)相等的字符。請(qǐng)分析程序填空。
char x[]="programming";
char y[]="Fortran";
ini i=0;
while (x[i]!='\0'&&y[i]!='\0')
if (x[i]= =y[i]) printf("%c", );
else i++;
A)x[i++] B)y[++i] C)x[i] D)y[i]
參考答案:A
6.40 下面描述正確的是 。
A)兩個(gè)字符串包含的字符個(gè)數(shù)相同時(shí),才能比較字符串
B)字符個(gè)數(shù)多的字符串比字符個(gè)數(shù)少的字符串大
C)字符串"STOP"與"STOP■"相等
D)字符串"That"小于字符串"The"
參考答案:D
6.41 下面對(duì)C語言字符數(shù)組的描述中錯(cuò)誤的是 。
A)字符數(shù)組可以存放字符串
B)字符數(shù)組的字符串可以整體輸入、輸出
C)可以在賦值語句中通過賦值運(yùn)算符對(duì)字符數(shù)組整體賦值
D)不可以用關(guān)系運(yùn)算符對(duì)字符數(shù)組中的字符串進(jìn)行比較
參考答案:C
***6.42 有已排好序的字符串a(chǎn),下面的程序是將字符串s中的每個(gè)字符按升序的規(guī)律插入到a中。請(qǐng)選擇填空。
#include
main()
{char a[20]="cehiknqtw";
char s[]="fbla";
int i,k,j;
for(k=0;s[k]!='\0';k++)
{j=0;
while(s[k]>=a[j]&&a[j]!='\0') j++;
for(【1】) 【2】;
s[j]=s[k];
}
puts(a);
}
【1】A)i=strlen(a)+k;i>=j;i-- B)i=strlen(a);i>=j;i--
C)i=j;i<=strlen(a)+k;i++ D)i=j;i<=strlen(a);i++
【2】A)a[i]=a[i+1] B)a[i+1]=a[i]
C)a[i]=a[i-1] D)a[i-1]=a[i]
參考答案:【1】B 【2】B
參考分析:向有序數(shù)據(jù)中插入數(shù)據(jù)關(guān)鍵在于兩點(diǎn),一是查找插入位置——查找插入位置注意兩個(gè)問題,插入的數(shù)據(jù)與有序數(shù)組中數(shù)據(jù)的大小關(guān)系和注意防止向右越界。再一個(gè)是有序數(shù)組元素后移時(shí)自后向前。
***6.43下面程序的功能是將已按升序排好序的兩個(gè)字符串a(chǎn)和b中的字符,按升序歸并到字符串c中。請(qǐng)分析程序填空。
#include "stdio.h"
main()
{char a[]="acegikm";
char b[]="bdfhjlnpq";
char c[80],*p;
int i=0,j=0,k=0;
while (a[i]!='\0'&&b[j]!='\0')
{if (a[i]<b[j]) p="" {【1】}
else {【2】};
k++;
}
c[k]='\0';
if (【3】) p=b+j;
else p=a+i;
strcat(c,p);
puts(c);
}
【1】【2】
A)c[k]=a[i];i++ B)c[k]=b[j];i++
C)c[k]=a[i];j++ D)c[k]=b[j];j++
【3】A)a[i]=='\0' B)a[i]!='\0' C)a[i-1]=='\0' D)a[i-1]!='\0'
參考答案:【1】A 【2】D 【3】A
參考分析:歸并排序的要點(diǎn)是將兩個(gè)數(shù)組a和b的下標(biāo)逐次后移,存放的是那個(gè)數(shù)組的元素,就移動(dòng)那個(gè)數(shù)組的下標(biāo),而目標(biāo)數(shù)組c則每次循環(huán)都要移動(dòng),當(dāng)a,b數(shù)組其中一個(gè)到達(dá)結(jié)束標(biāo)志后,再將沒到達(dá)結(jié)束標(biāo)志的數(shù)組中剩余的數(shù)據(jù)全部寫到目的數(shù)組中。
***6.44下面程序的功能是將字符串s中所有的字符'c'刪除。
#include "stdio.h"
main()
{char s[80];
int i,j;
gets(s);
for (i=j=0;s[i]!='\0';i++)
if (s[i]!='c') ;
s[j]='\0';
puts(s);}
A)s[j++]=s[i] B)s[++j]=s[i] C)s[j]=s[i];j++ D)s[j]=s[i]
參考答案:A
參考分析:刪除指定字符的程序要點(diǎn)在于采用雙下標(biāo),一個(gè)下標(biāo)對(duì)數(shù)組從頭到尾進(jìn)行逐個(gè)掃描,另外一個(gè)下標(biāo)則只有當(dāng)寫入不刪除字符時(shí)才向后移動(dòng)。其關(guān)鍵思想就是:s[j++]=s[j]。
*6.45 下面程序的功能是從鍵盤輸入一行字符,統(tǒng)計(jì)其中有多少個(gè)單詞,單詞之間用空格分隔。請(qǐng)分析程序填空。
#include
main()
{char s[80],c1,c2=' ';
int i=0,num=0;
gets(s);
while(s[i]!='\0')
{c1=s[i];
if( ) num++;
i++;
c2=c1;
}
printf("There are %d words.\n",num);
}
A)c1==' '&&c2==' ' B)c1!=' '&&c2==' '
C)c1==' '&&c2!=' ' D)c1!=' '&&c2!=' '
參考答案:B
參考分析:判斷是不是一個(gè)單詞的要點(diǎn)就是當(dāng)前字符不是空格而前一個(gè)字符是空格。
6.46 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{char ch[7]={"12ab56"};
int i,s=0;
for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=10*s+ch[i]-'0';
printf("%d\n",s);
}
A)1 B)1256 C)12ab56 D)1 2 5 6
參考答案:A
6.47 當(dāng)運(yùn)行以下程序時(shí),從鍵盤輸入:aa bbcc dd則下面程序的運(yùn)行結(jié)果是 。
#include
main()
{char a1[5],a2[5],a3[5],a4[5];
scanf("%s%s",a1,a2);
gets(a3);gets(a4);
puts(a1);puts(a2);puts(a3);puts(a4);
}
A)aa B)aa C)aa D)aa bb
bb bb bb cc
cc cc dd dd
cc dd dd ee
參考答案:A
6.48 當(dāng)運(yùn)行以下程序時(shí),從鍵盤輸入abcdef,則下面程序的運(yùn)行結(jié)果是 。
#include
#define N 6
main()
{char c[N];int i=0;
for(;i<n;c[i]=getchar(),i++);< p="">
for(i=0;i<n;i++) p="" putchar(c[i]);
}
A)abcdef B)ab C)a D)ab
c c c
def d d
參考答案:D
6.49 當(dāng)運(yùn)行以下程序時(shí),從鍵盤輸入:AhaMA Aha,則下面程序的運(yùn)行結(jié)果是 。
#include
main()
{char s[80],c='a';
int i=0;
scanf("%s",s);
while(s[i]!='\0')
{if(s[i]==c) s[i]=s[i]-32;
else if(s[i]==c-32) s[i]=s[i]+32;
i++;
}
puts(s);
}
A)ahAMa B)AhAMa C)AhAMa ahA D)ahAMa ahA
參考答案:A
6.50 下面程序的運(yùn)行結(jié)果是 。
#include
#include
main()
{char a[20]="AB",b[20]="LMNP";
int i=0;strcat(a,b);
while(a[i++]!='\0') b[i]=a[i];
puts(b);
}
A)LB B)ABLMNP C)AB D)LBLMNP
參考答案:D
6.51下面程序的運(yùn)行結(jié)果是 。
#include
main()
{char str[]="SSSWLIA",c;
int k;
for(k=2;(c=str[k])!='\0';k++)
{switch(c)
{case 'I':++k;break;
case 'L':continue;
default:putchar(c);continue;
}
putchar('*');
}
}
A)SSW* B)SW* C)SW*A D)SW
參考答案:B
6.52下面程序的運(yùn)行結(jié)果是 。
#include
main()
{char a[]="morning",t;
int i,j=0;
for(i=1;i<7;i++) if(a[j]
t=a[j];a[j]=a[7];a[7]=t;
puts(a);
}
A)mogninr B)mo C)morning D)mornin
參考答案:B
6.2 填空題
6.53 在c語言中,二維數(shù)組的定義方式為:類型說明符 數(shù)組名[【1】][【2】];
參考答案:【1】【2】常量表達(dá)式
6.54 在c語言中,二維數(shù)組在內(nèi)存中的存放順序是【 】。
參考答案:按行主順序存放
6.55 若有定義:double x[3][5];則x數(shù)組中行下標(biāo)的下限為【1】,列下標(biāo)的上限為【2】。
參考答案:【1】0 【2】4
6.56 若二維數(shù)組a有m列,則計(jì)算任一元素a[i][j]在數(shù)組中位置的公式為【 】。(假設(shè)a[0][0]位于數(shù)組的第一個(gè)位置上)
參考答案:i*m+j+1
6.57 若有定義:int a[3][4]={{1,2},{0},{4,6,8,10}};則初始化后,a[1][2]得到的初值是【1】,a[2][1]得到的初值是【2】。
參考答案:【1】0【2】6
6.58 若有以下輸入(數(shù)之間有空格),則下面程序的運(yùn)行結(jié)果是 。
7 16 5 4 6 7 9 8 3 2 4 6 12 2 -1
main()
{int b[51],x,i,j=0,n=0;
scanf("%d",&x);
while(x>-1){b[++n]=x;scanf("%d",&x);}
for(i=1;i<=n;i++)
if(b[i]%2==0) b[++j]=b[i];
for(i=1;i<=j;i++) printf("%3d ",b[i]);
}
參考答案:16 4 6 8 2 4 6 12 2
參考分析:本程序是刪除用戶所輸入的所有奇數(shù)。
6.59 下面程序以每行4個(gè)數(shù)的形式輸出a數(shù)組,請(qǐng)分析程序填空。
#define N 20
main()
{int a[N],i;
for(i=0;i<n;i++) p="" scanf(?%d?,【1】);
for(i=0;i<n;i++)< p="">
{if(【2】) 【3】;
printf("%3d",a[i]);
}
}
參考答案:【1】&a[i] 【2】i%4==0 【3】printf("\n");
6.60 下面程序?qū)⒍S數(shù)組a的行和列元素互換后存到另一個(gè)二維數(shù)組b中。請(qǐng)分析程序填空。
main()
{int a[2][3]={{1,2,3},{4,5,6}}, int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<=1;i++)
{for(j=0;【1】;j++)
{printf("%5d",a[i][j]);
【2】;
}
printf("\n");
}
printf("array b:\n");
for(i=0;【3】;i++)
{for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
參考答案:【1】j<=2 【2】b[j][i]=a[i][j] 【3】i<=2
6.61 下面程序的運(yùn)行結(jié)果是 。
main()
{int a[2][3]={{1,2,3},{4,5,6}}, int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b:\n");
for(i=0;i<=2;i++)
{for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
參考答案:
array a:
1 2 3
4 5 6
array b:
1 4
2 5
3 6
6.62 下面程序可求出矩陣兩條對(duì)角線上的元素之和。請(qǐng)分析程序填空。
main()
{int a[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j) sum1+=a[i][j];
for(i=0;i<3;i++)
for(【1】;【2】;j--)
if(i+j==2) sum2+=a[i][j];
printf("sum1=%d,sum2=%d\n",sum1,sum2);
}
參考答案:【1】j=2 【2】j>=0
6.63 下面程序的運(yùn)行結(jié)果是 。
main()
{int a[5][5],i,j,n=1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=n++;
printf("The result is:\n");
for(i=0;i<5;i++)
{for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
參考答案:1
6 7
11 12 13
16 17 18 19
21 22 23 24 25
6.64 下面程序可求出矩陣a的主對(duì)角線上的元素之和。請(qǐng)分析程序填空。
main()
{int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(【1】) sum+=【2】;
printf("sum=%d\n",sum);
}
參考答案:【1】i==j 【2】a[i][j]
6.65 以下程序可求出所有的水仙花數(shù)。(水仙花數(shù)是三位正數(shù),其各位數(shù)字的立方和等于該正數(shù),如:407=4*4*4+0*0*0+7*7*7)
main()
{int x,y,z,a[8],m,i=0;
printf("The special numbers are :\n");
for (【1】;m++)
{x=m/100;
y=【2】;
z=m%10;
if (m= =x*x*x+y*y*y+z*z*z)
{【3】;i++;}
}
for (x=0;x<i;x++)< p="">
printf(%6d",a[x]);
}
參考答案:【1】m=100;m<1000 【2】m/10%10或m%100/10 【3】a[i]=m
6.66下面程序的功能是生成并打印某數(shù)列的前20項(xiàng),該數(shù)列第1,2項(xiàng)分別為0和1,以后每個(gè)奇數(shù)編號(hào)的項(xiàng)是前兩項(xiàng)之和,偶數(shù)編號(hào)的項(xiàng)是前兩項(xiàng)差的絕對(duì)值。生成的20個(gè)數(shù)存在一維數(shù)組x中,并按每行4項(xiàng)的形式輸出。
main()
{ int x[21],i,j;
x[0]=0;x[2]=1;
i=3;
do
{x[i]=【1】;
x[i+1]=【2】;
i=【3】;
} while (i<=20);
for (i=1;i<=20;i++)
{printf("%5d",x[i]);
if (i%4= =0)
printf("\n");
}
}
參考答案:【1】x[i-2]+x[i-1] 【2】x[i]-x[i-1] 【3】i+2
6.67 若有以下輸入,則下面程序的運(yùn)行結(jié)果是 。
1 4 2 3 3 4 1 2 3 3 2 2 2 3 3 1 1 1 4 1 1 1 -1
#define M 50
main()
{int a[M],c[4],i,n=0,x;
printf("Enter 1 or 2 or 3 or 4,to end with -1\n");
scanf("%d",&x);
while(x!=-1)
{if(x>0&&x<=4)
{a[n-1]=x;n++;}
scanf("%d",&x);
}
for(i=0;i<4;i++) c[i]=0;
for(i=0;i<n;i++) p="" c[a[i]-1]++;
printf("The result is:\n");
for(i=1;i<=4;i++) printf("%d:%d\n",i,c[i-1]);
printf("\n");
}
參考答案:
The result is:
1:8
2:5
3:6
4:3
6.68 下面程序的運(yùn)行結(jié)果是 。
main()
{int i,j,a[2][3]={{2,4,6},{8,10,12}};
printf("The original array is:\n");
for(i=0;i<2;i++)
{for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\nThe result is:\n");
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf("%4d",a[j][i]);
printf("\n");
}
}
參考答案:
The original array is:
2 4 6
8 10 12
The result is:
2 8
4 10
6 12
6.69 設(shè)數(shù)組a包括10個(gè)整型元素,下面程序的功能是求出a中各相鄰兩個(gè)元素的和,并將這些和存在數(shù)組b中,按每行3個(gè)元素的形式輸出。請(qǐng)分析程序填空。
void main()
{int a[10],b[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(【1】;i<10;i++)
【2】;
for(i=1;i<10;i++)
{printf("%3d",b[i]);
if(【3】==0) printf("\n");
}
}
參考答案:【1】i=1【2】b[i]=a[i-1]+a[i]【3】i%3
6.70 下面程序是將十進(jìn)制數(shù)轉(zhuǎn)換成不超過十六進(jìn)制的n進(jìn)制。請(qǐng)分析程序填空。
#include
main()
{int i=0,base,n,j,num[20];
printf("Enter data that will be converted:\n");
scanf("%d",&n);
printf("Enter base:\n");
scanf("%d",&base);
do
{i++;
num[i]=n【1】base;
n=n【2】base;
} while(n);
printf("The data %d has been converted into the %d base data:\n",n,base);
for(【3】)
if(num[j]>9) putchar(num[j]+'A'-10);
else putchar(num[j]+'0');
}
參考答案:【1】%【2】/【3】j=i;j>=1;j--
6.71下面程序的功能是輸入5個(gè)整數(shù),找出最大數(shù)和最小數(shù)所在的位置,并把二者對(duì)調(diào),然后輸出調(diào)整后的5個(gè)數(shù)。
main()
{int a[5],max,min,i,j,k;
for (i=0;i<5;i++)
scanf("%d:,&a[i];
min=a[0];
for (i=1;i<5;i++)
if (a[i]
max=a[0];
for (i=1;i<5;i++)
if a[i]>max) {max=a[i]; 【2】;}
【3】
printf("\nThe position of min is:%3d\n",k);
printf("\nThe position of max is:%3d\n",j);
for (i=0;i<5;i++)
printf("%5d",a[i]);
}
參考答案:【1】j=i【2】k=i【3】a[j]=max;a[k]=min;
6.72 下面程序的運(yùn)行結(jié)果是 。
main()
{int i,f[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{if(i%4==0) printf("\n");
printf("%3d",f[i]);
}
}
參考答案:
1 1 2 3
5 8 13 21
34 55
6.73 下面程序的運(yùn)行結(jié)果是 。
main()
{int a[10]={1,2,2,3,4,3,4,5,1,5};
int n=0,i,j,c,k;
for(i=0;i<10-n;i++)
{c=a[i];
for(j=i+1;j<10-n;j++)
if(a[j]==c)
{for(k=j;k<10-n;k++)
a[k]=a[k+1];
n++;
}
}
for(i=0;i<10-n;i++)
printf("%3d",a[i]);
}
參考答案: 1 2 3 4 5
**6.74 下面程序的功能是給一維數(shù)組a任意輸入6個(gè)整數(shù),假設(shè)為7 4 8 9 1 5,然后建立一個(gè)具有以下內(nèi)容的方陣并打印。請(qǐng)分析程序填空。
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
main()
{int a[6],i,j,k,m;
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=5;i>=0;i--)
{k=a[5];
for(【1】;j>=0;j--)
a[j+1]=a[j];
【2】;
for(m=0;m<6;m++)
printf("%d ",a[m]);
printf("\n");
}
}
參考答案:【1】j=4 【2】a[0]=k
參考分析:采用二維數(shù)組可以采用a[i][j]=a[i-1][(j-1+M)%M]的方式為0行以后的行進(jìn)行賦值。
**6.75 下面程序的功能是輸出以下n*n階(最大為9階)方陣。請(qǐng)分析程序填空。(以下例子是6階方陣)
1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
main()
{int a[9][9],n,i,j,m;
scanf("%d",&n);
m=(n+1)/2;
for(i=0;i<m;i++)< p="">
for(j=0;j<n-i;j++)< p="">
{a[i][j]=i+1;
a[【1】][j]=i+1;
a[j][i]=i+1;
a[j][【2】]=i+1;
}
for(i=0;i<n;i++)< p="">
{for(j=0;j<n;j++)< p="">
printf("%3d",a[i][j]);
printf("\n");
}
}
參考答案:【1】【2】n-i-1
6.76 當(dāng)從鍵盤輸入18并回車后,下面程序的執(zhí)行結(jié)果是 。
main()
{int x,y,i,j,a[10];
scanf("%d",&x);
y=x;i=0;
do
{a[i++]=y%2;
y=y/2;
}while(y);
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
}
參考答案:10010
6.77 下面程序的功能是將二維數(shù)組a中每個(gè)元素向右一列,最后一列換到最左一列,移后的數(shù)組存到另一二維數(shù)組b中,并按矩陣形式輸出a和b。請(qǐng)分析程序填空。
例如:array a: array b:
4 5 6 6 4 5
1 2 3 3 1 2
main()
{int i,j,a[2][3]={4,5,6,1,2,3},b[2][3];
printf("array a:\n");
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{printf("%4d",a[i][j];
【1】;
}
for(【2】;i++) b[i][0]=a[i][2];
printf("array b:\n");
for(i=0;i<2;i++)
{ for(j=0;j<3;j++)
printf("%4d",b[i][j]);
【3】;
}
}
參考答案:【1】b[i][j+1]=a[i][j] 【2】i=0;i<2 【3】printf("\n")
*6.78 下面程序的功能是統(tǒng)計(jì)年齡在16-31歲之間的學(xué)生人數(shù)。請(qǐng)分析程序填空。
main()
{int a[16],n,age,i;
for(i=0;i<16;i++) a[i]=0;
printf("Enter the age of each student(to end with -1):\n");
scanf("%d",&age);
while(age>-1)
{【1】;
scanf("%d",&age);
}
printf("The result is:\n");
for(【2】;i++)
printf("%3d%6d\n",i,a[i-16]);
}
參考答案:【1】a[age-16]++ 【2】i=16;i<=31
6.79 下面程序的功能是檢查一個(gè)二維數(shù)組是否對(duì)稱(即對(duì)所有i和j都有a[i][j]=a[j][i])。請(qǐng)分析程序填空。
main()
{int i,j,found=0,a[4][4];
printf("Enter array(4*4):\n");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(j=0;j<4;j++)
for(【1】;i<4;i++)
if(a[j][i]!=a[i][j])
{【2】;break;}
if(found) printf("No");
else printf("Yes");
}
參考答案:【1】i=j+1 【2】found=1
6.80 下面程序中的數(shù)組a包括10個(gè)整數(shù)元素,從a中第二個(gè)元素起,分別將后項(xiàng)減前項(xiàng)之差存入數(shù)組b,并按每行3個(gè)元素輸出數(shù)組b。請(qǐng)分析程序填空。
main()
{int a[10],b[10],i;
for(i=0;【1】;i++)
scanf("%d",&a[i]);
for(i=1;【2】;i++)
b[i]=a[i]-a[i-1];
for(i=1;i<10;i++)
{printf("%3d",b[i]);
if(【3】) printf("\n");
}
}
參考答案:【1】i<10 【2】i<10 【3】i%3==0
6.81 下面程序的運(yùn)行結(jié)果是 。
main()
{int i=1,n=3,j,k=3, a[5]={1,4,5};
while(i
for(j=n-1;j>=i;j--)
a[j+1]=a[j];
a[i]=k;
for(i=0;i<=n;i++)
printf("%3d",a[i]);
}
參考答案: 1 3 4 5
**6.82下面程序的運(yùn)行結(jié)果是 。
#include "stdio.h"
#define LEN 12
int num[]={3,4,5,6,7,8,9,10,11,12,13,14};
main()
{int i,j,k,x,y;
x=0;y=LEN-1;
while(x<=y)
{j=num[x];i=2;k=1;
while (i<=j/2&&k) //判斷j是否為素?cái)?shù)
k=j%i++;
if (k)
printf(“%3d”,num[x++];
else //j不是素?cái)?shù)首尾數(shù)據(jù)互換,尾指針前移
{num[x]=num[y];
num[y--]=j;
}
}
for (i=0;i<x;i--)< p="">
printf(“%5d”,num[i]);
}
參考答案: 3 13 5 11 7
參考分析:該程序?qū)?shù)組設(shè)置了頭尾兩個(gè)下標(biāo),對(duì)數(shù)組自前向后檢查各元素是否為素?cái)?shù),如果是則輸出該元素,頭下標(biāo)后移,繼續(xù)檢查下一個(gè)元素;如果不是,則將數(shù)組后面的元素與正檢查的數(shù)組元素互換,尾下標(biāo)前移,繼續(xù)檢查,直到頭下標(biāo)大于尾下標(biāo)。
6.83 設(shè)數(shù)組中的元素均為正整數(shù),以下程序是求a中偶數(shù)的個(gè)數(shù)和偶數(shù)的平均值。請(qǐng)分析程序填空。
main()
{int a[10]={1,2,3,4,5,6,7,8,9,10},k,i;
float ave,s=0;
for(k=s=i=0;i<10;i++)
{if(a[i]%2!=0) 【1】;
s+=【2】;
k++;
}
if(k!=0) {ave=s/k;printf("%d,%f\n",k,ave);}
}
參考答案:【1】continue 【2】a[i]
6.84 以下程序是求矩陣a,b的和,結(jié)果存入矩陣c中,并按矩陣形式輸出。請(qǐng)分析程序填空。
main()
{int a[3][4]={{1,3,5,7},{4,7,2,5},{-8,2,5,6}};
int b[3][4]={{-2,6,7,3},{-1,5,4,7},{8,9,3,2}};
int i,j,c[3][4];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
c[i][j]=【1】;
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
printf("%3d",c[i][j]);
【2】;
}
}
參考答案:【1】a[i][j]+b[i][j] 【2】printf("\n")
6.85 以下程序是求矩陣a,b的乘積,結(jié)果存入矩陣c中并按矩陣形式輸出。請(qǐng)分析程序填空。
main()
{int a[3][2]={2,3,4,6,3,1},b[2][2]={6,-1,8,3};
int i,j,k,s,c[3][2];
for(i=0;i<3;i++)
for(j=0;j<2;j++)
{for(【1】;k<2;k++)
s+=【2】;
c[i][j]=s;
}
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf("%6d",c[i][j]);
【3】;
}
}
參考答案:【1】s=0,k=0 【2】a[i][k]*b[k][j] 【3】printf("\n")
6.86 已知以下矩陣:
y1 1 -0.2 0 0 1
y2 -0.8 1 -0.2 -0.2 1
y3= 0 -0.8 1 -0.2 × 1
y4 0 -0.8 -0.8 1 1
下面程序的功能是求出y1,y2,y3,y4的值。請(qǐng)分析程序填空。
main()
{float a[4][4]={{1,-0.2,0,0},{-0.8,1,-0.2,-0.2},{0,-0.8,1,-0.2},{0,-0.8,-0.8,1}};
float x[4]={1,1,1,1},y[4];
int i,j,k;
for(i=0;i<4;i++)
{y[i]=0;
for(j=0;j<4;j++)
【1】;
}
for(k=0;k<4;k++)
printf("\ny[%d]=%-6.2f",k+1,【2】);
}
參考答案:【1】y[i]+=a[i][j]*x[i] 【2】y[k]
6.87 以下程序的功能是求數(shù)組num中小于零的數(shù)據(jù)之和。請(qǐng)分析程序填空。
main()
{int num[20]={2,-3,51,-72,86,4,0,-23,3,-65,-1,0,5,8,2,-4,-7,-9,4,-8};
int sum=0,i;
for(i=0;i<20;i++)
{if(【1】)
sum=【2】;
}
printf("sum=%d\n",sum);
}
參考答案:【1】num[i]<0 【2】sum+num[i]
6.88 以下程序的功能是 。
main()
{int num[20]={2,-3,51,-72,86,4,0,-23,3,-65,-1,0,5,8,2,-4,-7,-9,4,-8};
int sum=0,i;
for(i=0;i<20;i++)
{if(num[i]>0)
sum+=num[i];
}
printf("sum=%d\n",sum);
}
參考答案:求取num數(shù)組中大于0的所有數(shù)據(jù)之和。
6.89 下面程序的運(yùn)行結(jié)果是 。
main()
{int i,j,row,col,min;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,7,-5}};
min=a[0][0];row=0;col=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i][j]<min)< p="">
{min=a[i][j];row=i;col=j;}
printf("min=%d,row=%d,col=%d\n",min,row,col);
}
參考答案:min=-5,row=2,col=3
參考分析:在二維數(shù)組中查找最小值及它的下標(biāo)。
***6.90 若輸入52,則下面程序的運(yùn)行結(jié)果是 。
main()
{int a[8]={6,12,18,42,46,52,67,73};
int low=0,mid,high=7,x;
printf("Input a x:");
scanf("%d",&x);
while(low<=high)
{mid=(low+high)/2;
if(x>a[mid]) low=mid+1;
else if(x
else break;
}
if(low<=high) printf("Search Successful! The index is:%d\n",mid);
else printf("Can't search!\n");
}
參考答案:Search Successful! The index is:5
參考分析:本題為典型的折半查找,要點(diǎn)有三:1.循環(huán)條件為low<=high;2.查找處理是一個(gè)三分支;3.總是把中點(diǎn)的前點(diǎn)作為后點(diǎn)或把中點(diǎn)的后點(diǎn)作為前點(diǎn)。
**6.91 下面程序的運(yùn)行結(jié)果是 。
main()
{int a[9]= {0,6,12,18,42,46,52,67,73};
int x=52;i,n=9,m;
i=n/2+1;m=n/2;
while(m!=0)
{if(x<a[i])< p="">
i=i-m/2-1;
else if(x>a[i])
i=i+m/2+1;
else break;
m=m/2;
}
if (m) printf("The index is:%d",i);
else printf("Can't search.");
}
參考答案:The index is:6
參考分析:這是折半查找的變形題目,本算法僅計(jì)算數(shù)組中間元素的下標(biāo)。計(jì)算中點(diǎn)下標(biāo)時(shí)巧妙地利用了數(shù)據(jù)元素個(gè)數(shù)的“折半”。
6.92 下面程序用“順序查找法”查找數(shù)組a中是否存在某一關(guān)鍵字。請(qǐng)分析程序填空。
main()
{int a[8]={25,57,48,37,12,92,86,33};
int i,x;
scanf("%d",&x);
for(i=0;i<8;i++)
if(x==a[i])
{printf("Found! The index is:%d\n",i);【1】;}
if(【2】)
printf("Can't found!");
}
參考答案:【1】break 【2】i>=8
**6.93 下面程序用“快速順序查找法”查找數(shù)組a中是否存在某一關(guān)鍵字。請(qǐng)分析程序填空。
main()
{int a[9]={11,23,41,27,42,64,82,59};
int i=0,x;
scanf("%d",&x);
【1】;
while(a[i]!=x) i++;
if(【2】) printf("Found! The index is:%d\n",i);
else printf("Can't found!\n");
}
參考答案:【1】a[8]=x 【2】i<8
參考分析:如果數(shù)組中不存在需要查找的數(shù)據(jù),循環(huán)條件設(shè)置為a[i]!=x無疑會(huì)使得對(duì)數(shù)組的訪問產(chǎn)生右越界。將欲查找的數(shù)據(jù)放到數(shù)組的最后位置可以防止查找過程發(fā)生右越界。
***6.94 下面程序用插入法對(duì)數(shù)組a進(jìn)行降序排序。請(qǐng)分析程序填空。
main()
{int a[5]={4,7,8,2,5};
int i,j,m;
for(i=1;i<5;i++)
{m=a[i];
j=【1】;
while(j>=0&&m>a[j])
{【2】;
j--;
}
【3】=m;
}
for(i=0;i<5;i++)
printf("%3d",a[i]);
printf("\n");
}
參考答案:【1】i-1 【2】a[j+1]=a[j] 【3】a[j+1]
參考分析:插入排序是一種很重要的排序方法。它的排序思想及相應(yīng)的技巧需要好好掌握。
6.95 下面程序用“兩路合并法”把兩個(gè)已按升序排列的數(shù)組合并成一個(gè)升序數(shù)組。請(qǐng)分析程序填空。
main()
{int a[3]={5,9,19};
int b[5]={12,24,26,37,48};
int c[10],i=0,j=0,k=0;
while(i<3&&j<5)
if(【1】)
{c[k]=b[j];k++;j++;}
else
{c[k]=a[i];k++;i++;}
while(【2】)
{c[k]=a[i];i++;k++;}
while(【3】)
{c[k]=b[j];k++;j++;}
for(i=0;i<k;i++)< p="">
printf("%3d",c[i]);
}
參考答案:【1】a[i]>b[j] 【2】i<3 【3】j<5
6.96 下面程序的運(yùn)行結(jié)果是 。
main()
{int a[6][6],i,j;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for(i=1;i<6;i++)
{for(j=1;j<6;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
參考答案:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
6.97 若輸入32458,則下面程序的運(yùn)行結(jié)果是 。
main()
{int i=0,base,n,j,old,num[20];
printf("Enter data that will be converted:");
scanf("%d",&n);
old=n;
printf("Enter base:");
scanf("%d",&base);
do
{i++;
num[i]=n%base;
n=n/base;
}while(n!=0);
printf("The data %d has been converted into the %d-base data:\n",old,base);
for(j=i;j>=1;j--)
printf("%5d",num[j]);
}
參考答案:
Enter data that will be converted:3245
Enter base:8
The data 3245 has been converted into the 8-base data:
6 2 5 5
6.98 若輸入7 4 8 9 1 5,則下面程序的運(yùn)行結(jié)果是 。
main()
{int a[6],i,j,k,m;
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=5;i>=0;i--)
{k=a[5];
for(j=4;j>=0;j--)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<6;m++)
printf("%3d",a[m]);
printf("\n");
}
}
參考答案:
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
6.99 下面程序的運(yùn)行結(jié)果是 。
main()
{int a[10]={1,2,3,4,5,6,7,8,9,10}, k,i;
float ave,s=0;
for(k=i=0;i<10;i++)
{if(a[i]%2==0) continue;
s+=a[i];
k++;
}
if(k!=0)
{ave=s/k;
printf("The number is:%d, The average is:%f\n",k,ave);
}
}
參考答案:The number is:5, The average is:5.000000
6.100 若有以下輸入,則下面程序的運(yùn)行結(jié)果是 。
3 1 2 3 2 2 2 1 1 3 0
main()
{int a[4],x,i;
for(i=1;i<=3;i++) a[i]=0;
scanf("%d",&x);
while(x>0) {a[x]+=1;scanf("%d",&x);}
for(i=1;i<=3;i++) printf("a[%2d]=%4d\n",i,a[i]);
}
參考答案:
a[ 1]= 3
a[ 2]= 4
a[ 3]= 3
6.101 若有以下輸入,則下面程序的運(yùn)行結(jié)果是 。
5
9 7 5 3 1
5
main()
{int a[10],x,i,n;
printf("Enter n(n<10):");
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",a+i);
printf("Enter x:");scanf("%d",&x);
a[0]=x;i=n;
while(x>a[i]) {a[i+1]=a[i];i--;}
a[i+1]=x;
n++;
for(i=1;i<=n;i++) printf("%3d",a[i]);
printf("\n");
}
參考答案: 9 7 5 5 3 1
6.102 下面程序的運(yùn)行結(jié)果是 。
#define SIZE 30
main()
{float a[SIZE],b[SIZE/5],sum;
int i,k;
for(k=2,i=0;i<size;i++)< p="">
{a[i]=k;k+=2;}
sum=0;
for(k=0,i=0;i<size;i++)< p="">
{sum+=a[i];
if((i+1)%5==0)
{b[k]=sum/5;
sum=0;
k++;
}
}
printf("The result is:\n");
for(i=0;i<size p="" printf(?%5.2f?,b[i]);
printf("\n");
}
參考答案:The result is :
6.00 16.00 26.00 36.00 46.00 56.00
6.103 下面程序的功能是求出矩陣x的上三角元素之積。其中矩陣x的行、列數(shù)和元素值均由鍵盤輸入。請(qǐng)分析程序填空。
#define M 10
main()
{int x[M][M];
int n,i,j;
long s=1;
printf("Enter a integer(<=10):\n");
scanf("%d",&n);
printf("Enter %d data on each line for the array x\n",n);
for(【1】)
for(j=0;j<n;j++)< p="">
scanf("%d",&x[i][j]);
for(i=0;i<n;i++)< p="">
for(【2】)
【3】;
printf("%ld\n",s);
}
參考答案:【1】i=0;i
6.104 若有以下輸入,則下面程序的運(yùn)行結(jié)果是 。
4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
#define M 10
main()
{int x[M][M];
int n,i,j;
long s=1;
printf("Enter a integer(<10):\n");
scanf("%d",&n);
printf("Enter %d data on each line for the array x\n",n);
for(i=0;i<n;i++)< p="">
for(j=0;j<n;j++)< p="">
scanf("%d",&x[i][j]);
for(i=0;i<n;i++)< p="">
for(j=i;j<n;j++)< p="">
s=s*x[i][j];
printf("The result =%ld\n",s);
}
參考答案:The result=27648
6.105 字符串"ab\n\\012\\\""的長(zhǎng)度是 。
參考答案:9
6.106 下面程序段的運(yùn)行結(jié)果是 。
char ch[]="600";
int a,s=0;
for(a=0;ch[a]>='0'&&ch[a]<='9';a++)
s=10*s+ch[a]-'0';
printf("%d",s);
參考答案:600
6.107 下面程序段將輸出computer,請(qǐng)?zhí)羁铡?/p>
char c[]="It's a computer";
for(i=0;【1】;i++)
{【2】;printf(%c",c[j]);}
參考答案:【1】i<8 【2】j=i+7
6.108 下面程序段的運(yùn)行結(jié)果是 。
char x[]="the teacher";
i=0;
while(x[++i]!='\0')
if(x[i-1]=='t') printf("%c",x[i]);
參考答案:he
6.109 下面程序的功能是在一個(gè)字符數(shù)組中查找一個(gè)指定的字符,若數(shù)組中含有該字符則輸出該字符在數(shù)組中第一次出現(xiàn)的位置(下標(biāo)值);否則輸出-1。請(qǐng)分析程序填空。
#include
#include
main()
{char c='a',t[50];
int n,k,j;
gets(t);
n=【1】;
for(k=0,j=-1;k<n;k++)< p="">
if(【2】) {j=k;break;}
printf("%d",j);
}
參考答案:【1】strlen(t) 【2】t[k]==c
6.110 下面程序的功能是在三個(gè)字符串中找出最小的。請(qǐng)分析程序填空。
#include
#include
main()
{char s[20],str[3][20];
int i;
for(i=0;i<3;i++) gets(str[i]);
strcpy(s,【1】);
if(strcmp(str[2],s)<0) strcpy(s,str[2]);
printf("%s\n",【2】);
}
參考答案:【1】strcmp(str[0],str[1])<0?str[0]:str[1] 【2】s
6.111 下面程序的功能是從鍵盤輸入一個(gè)大寫英文字母,要求按字母的順序打印出相鄰的字母,指定的字母在中間。若指定的字母為'Z',則打印YZA;若為A則打印ZAB。請(qǐng)分析程序填空。
#include
main()
{char a[3],c;
int i;
c=getchar();
a[1]=c;
if(c=='Z') {a[2]='A';【1】;}
else if(c=='A'){a[0]='Z';【2】;}
else {a[0]=c-1;a[2]=c+1;}
for(i=0;i<3;i++) putchar(a[i]);
}
參考答案:【1】a[0]=c-1 【2】a[2]=c+1
6.112 下面程序的功能是將字符數(shù)組a[6]={'a','b','c','d','e','f'}變?yōu)閧'f','a','b','c','d','e'}。請(qǐng)分析程序填空。
#include
main()
{char t,a[6]={'a','b','c','d','e','f'};
int i;
【1】;
for(i=5;i>0;i--)
【2】;
a[0]=t;
for(i=0;i<=5;i++) printf("%c",a[i]);
}
參考答案:【1】t=a[5] 【2】a[i]=a[i-1]
6.113 下面程序的功能是將字符串a(chǎn)中下標(biāo)值為偶數(shù)的元素由小到大排序,其他元素不變。請(qǐng)分析程序填空。
#include
main()
{char a[]="labchmfye",t;
int i,j;
for(i=0;i<7;i+=2)
for(j=i+2;j<9;【1】)
if(【2】)
{t=a[i];a[i]=a[j];a[j]=t;}
puts(a);
}
參考答案:【1】j+=2 【2】a[i]>a[j]
6.114 下面程序的功能是在任意的字符串a(chǎn)中將與字符c相等的所有元素下標(biāo)值分別存放在整型數(shù)組b中。請(qǐng)分析程序填空。
#include
main()
{char a[80];
int i,b[80],k=0;
gets(a);
for(i=0;a[i]!='\0';i++)
if(【1】){b[k]=i;【2】;}
for(i=0;i<k;i++) p="" printf(?%3d?,b[i]);
}
參考答案:【1】a[i]=='c' 【2】k++
6.115 有十個(gè)字符串。下面程序的功能是在每個(gè)字符串中,找出最大字符按一一對(duì)應(yīng)的順序放入一維數(shù)組中,即第i個(gè)字符串中的最大字符放在a[i]中,輸出每個(gè)字符串中的最大字符及其下標(biāo)。
#include
main()
{char s[10][20],a[10];
int i,j;
for (i=0;i<10;i++) gets(s[i]);
for(i=0;i<10;i++)
{【1】;
for(j=1;s[i][j]!='\0';j++)
if(a[i]<s[i][j]) p="" 【2】;
}
for(i=0;i<10;i++) printf("%d %c\n",i,a[i]);
}
參考答案:【1】a[i]=s[i][0] 【2】a[i]=s[i][j]
6.116 下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i;
char a[]="Time",b[]="Tom";
for(i=0;a[i]!='\0'&&b[i]!='\0';i++)
if(a[i]==b[i])
if(a[i]>='a'&&a[i]<='z') printf("%c",a[i]-32);
else printf("%c",a[i]+32);
else printf("*");
}
參考答案:t*M
6.117下面程序的運(yùn)行結(jié)果是 。
#include
main()
{char a[2][6]={"Sun","Moon"};
int i,j,len[2];
for(i=0;i<2;i++)
{for(j=0;j<6;j++)
if(a[i][j]=='\0')
{len[i]=j;break;}
printf("%6s:%d\n",a[i],len[i]);
}
}
參考答案: Sun:3
Moon:4
6.118下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i,r;
char s1="bus",s2="book";
for(i=r=0;s1[i]!='\0'&&s2[i]!='\0';i++)
if(s1[i]==s2[i]) i++;
else {r=s1[i]-s2[i];break;}
printf("%d",r);
}
參考答案:4
*6.119下面程序的運(yùn)行結(jié)果是 。
#include
#define LEN 4
main()
{int j,c;
char n[2][LEN+1]={"8980","9198"};
for(j=LEN-1;j>=0;j--)
{c=n[0][j]+n[1][j]-2*'0';
n[0][j]=c%10+'0';
}
for(j=0;j<=1;j++) puts(n[j]);
}
參考答案:7078
9198
*6.120下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i=5;
char c[6]="abcd";
do{c[i]=c[i-1];} while(--i>0);
puts(c);
}
參考答案:aabcd
*6.121 當(dāng)運(yùn)行以下程序時(shí),從鍵盤輸入AabD,則運(yùn)行結(jié)果是 。
#include
main()
{char s[80];
int i;
gets(s);
while(s[i]!='\0')
{if(s[i]
s[i]='z'+'a'-s[i];
i++;
}
puts(s);
}
參考答案:AzyD
參考分析:本題是將串中小寫字母逆序轉(zhuǎn)換。
*6.122下面程序的運(yùn)行結(jié)果是 。
#include
main()
{char s[]="ABCCDA",c;
int k;
for(k=1;(c=s[k])!='\0';k++)
{switch(c)
{case 'A':putchar('%');continue;
case 'B':++k;break;
default:putchar('*');
case 'C':putchar('&');continue;
}
putchar('#');
}
}
參考答案:#&*&%
6.123下面程序的運(yùn)行結(jié)果是 。
#include
main()
{int i=0;
char a[]="abm",b[]=aqid",c[10];
while(a[i]!='\0'&&b[i]!='\0')
{if(a[i]>=b[i]) c[i]=a[i]-32;
else c[i]=b[i]-32;
i++;
}
c[i]='\0';
puts(c);
}
參考答案:AQM
*6.124 當(dāng)運(yùn)行以下程序時(shí),從鍵盤輸入:
BOOK
CUT
GAME
PAGE
則下面程序的運(yùn)行結(jié)果是 。
#include
#include
main()
{int i;
char str[10],temp[10]="Control";
for(i=0;i<4;i++)
{gets(str);
if(strcmp(temp,str)<0) strcpy(temp,str);
}
puts(temp);
}
參考答案:PAGE
參考分析:本題是查找輸入的最大字符串(含初始串)。
6.125 當(dāng)運(yùn)行以下程序時(shí),從鍵盤輸入:
apple
orange
則下面程序的運(yùn)行結(jié)果是 。
#include
#include
main()
{char a[2][80],t;
int i,j,m=0,n=0,l,max;
for(i=0;i<=1;i++) gets(a[i]);
t=a[0][0];
for(i=0;i<=1;i++)
{l=strlen(a[i]);
for(j=0;j<=l;j++)
if(a[i][j]>t) {max=a[i][j];m=i;n=j;}
}
printf("%c %d %d\n",max,m,n);
}
參考答案:e 1 5
參考分析:本題是查找最后一個(gè)大于首字符的字符及其位置。
6.3 編程題
6.126 從鍵盤輸入若干個(gè)整數(shù),其值在0至4范圍內(nèi),用-1作為輸入結(jié)束的標(biāo)志。統(tǒng)計(jì)每個(gè)整數(shù)的個(gè)數(shù)。
參考程序:
void main()
{int i,s[5],x
printf("Input some numbers(between 0 to 4):");
scanf("%d",&x);
while(x!=-1)
{if (x>=0&&x<=4) s[x]++;}
for(i=0;i<=4;i++)
printf("%d: %d\n",i,s[i]);
}
6.127 若有說明:int a[2][3]={{1,2,3},{4,5,6}};現(xiàn)要將a的行和列的元素互換后存到另一個(gè)二維數(shù)組b中。請(qǐng)編寫程序并輸出a和b數(shù)組中的元素。
參考程序:
main()
{int a[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j;
printf("Array a:\n");
for(i=0;i<2;i++)
{for(j=0;j<3;j++)
{b[j][i]=a[i][j];
printf("%3d",a[i][j]);
}
printf("\n");
}
printf("Array b:");
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf("%3d",b[i][j]);
printf("\n");
}
}
6.128 定義一個(gè)含有30個(gè)整型元素的數(shù)組,按順序分別賦予從2開始的偶數(shù);然后按順序每五個(gè)數(shù)求出一個(gè)平均值,放在另一個(gè)數(shù)組中并輸出。試編程。
參考程序:
#define SIZE 30
main()
{float b[SIZE/5],sum;
int a[SIZE],i,k;
for(k=2,i=0;i<size;i++,k+=2)< p="">
a[i]=k;
sum=0;
for(k=0,i=0;i<size;i++)< p="">
{sum=sum+a[i];
if((i+1)%5==0)
{b[k++]=sum/5;
sum=0;
}
}
printf("The result is:\n");
for(i=0;i<size p="" 5;i++)="" ?,b[i]);
}
6.129 通過賦初值按行順序?yàn)橐粋€(gè)2×3的二維數(shù)組賦予2、4、6、...等偶數(shù),然后按列的順序輸出該數(shù)組。試編程。
參考程序:
main()
{int i,j,a[2][3]={{2,4,6},{8,10,12}};
printf("\nThe result is:\n");
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf("%4d",a[j][i]);
printf("\n");
}
}
6.130 通過循環(huán)按行順序?yàn)橐粋€(gè)5×5的二維數(shù)組a賦1到25的自然數(shù),然后輸出該數(shù)組的左下半三角。試編程。
參考程序:
main()
{int a[5][5],i,j,n=1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=n++;
printf("The result is:\n");
for(i=0;i<5;i++)
{for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
6.131 試編程打印用戶指定的n階順時(shí)針螺旋方陣(n<10)。
參考程序:
main()
{int a[10][10],i,j,k=0,m,n;
printf("Enter n(n<10):\n");
scanf("%d",&n);
if(n%2==0)
m=n/2;
else
m=n/2+1;
for(i=0;i<m;i++)< p="">
{for(j=i;j<n-i;j++)< p="">
{k++;a[i][j]=k;}
for(j=i+1;j<n-i;j++)< p="">
{k++;a[j][n-i-1]=k;}
for(j=n-i-2;j>=i;j--)
{k++;a[n-i-1][j]=k;}
for(j=n-i-2;j>=i+1;j--)
{k++;a[j][i]=k;}
}
for(i=0;i<n;i++)< p="">
{for(j=0;j<n;j++)< p="">
printf("%5d",a[i][j]);
printf("\n");
}
}
6.132 數(shù)組a包括10個(gè)整數(shù),把a(bǔ)中所有的后項(xiàng)除以前項(xiàng)之商取整后存入數(shù)組b,并按每行3個(gè)元素的格式輸出數(shù)組b。試編程。
參考程序:
#define N 10
main()
{int a[N],b[N],i;
printf("Enter %d data:",N);
for(i=0;i<n;i++)< p="">
scanf("%d",&a[i]);
for(i=1;i<n;i++)< p="">
b[i]=a[i]/a[i-1];
for(i=1;i<n;i++)< p="">
{printf("%3d",b[i]);
if(i%3==0)
printf("\n");
}
}
6.133 從鍵盤輸入一個(gè)整數(shù),,用折半查找法找出該數(shù)在10個(gè)有序整型數(shù)組a中的位置。若該數(shù)不在a中,則打印出相應(yīng)信息。試編程。
參考程序:
main()
{int a[10]={1,3,5,7,9,11,13,15,17,19},top,bot,mid,m;
printf("Enter a integer:");
scanf("%d",&m);
top=0;bot=9; /*字符型bot=strlen(a)-1*/
while(top<=bot)
{mid=(top+bot)/2;
if(a[mid]==m) break;
else if(a[mid]>m) top=mid+1;
else bot=mid-1;
}
if(top<=bot) printf("Found! position is %d.\n",mid);
else printf("Not found %d.\n",m);
}
6.134 從鍵盤輸入兩個(gè)字符串a(chǎn)和b,要求不用庫函數(shù)strcat把串b的前五個(gè)字符連接到串a(chǎn)中;如果b的長(zhǎng)度小于5,則把b的所有元素都連接到a中。試編程。
參考程序:
#include
main()
{char a[80],b[80];
int i=0,j;
printf("Input two strings:\n");
gets(a);gets(b);
while(a[i]) i++;
for(j=0;j<5&&b[j];j++)
a[i++]=b[j];
a[i]='\0';
puts(a);
}
6.135 從鍵盤輸入一個(gè)字符串a(chǎn),并在串中的最大元素后邊插入另外輸入的字符串b。試編程。
參考程序:
#include
main()
{char a[80],b[]="ab",max;
int i=1,j;
printf("Input a string:\n");
gets(a);
puts(a);
max=a[0];
while(a[i])
{if(a[i]>max)
{max=a[i];j=i;}
i++;
}
for(i=strlen(a)+strlen(b)-1;i>j;i--)
a[i]=a[i-strlen(b)];
j=0;i++;
while(b[j])
{a[i]=b[j];
i++;j++;
}
puts(a);
}
延伸閱讀
- 2022年湖北專升本電路模擬題(四)
- 2022年湖北專升本電路模擬題(三)
- 2022年湖北專升本電路模擬題(二)
- 2022年湖北專升本電路模擬題(一)
- 2022年湖北專升本高等數(shù)學(xué)模擬題(三)
- 2022年湖北專升本高等數(shù)學(xué)模擬題(二)
專升本微信公眾號(hào)
掃碼添加
專升本備考資料免費(fèi)領(lǐng)取
去領(lǐng)取