?2022年湖北專升本C語言程序設計模擬題(2)
摘要:本文是2022年湖北專升本C語言程序設計模擬題(2),有打算報考湖北2022年專升本需要考核C語言程序設計的考生可以收藏下來參考一下。下面是具體內容。
第四章 邏輯運算和判斷選取控制
4.1 選擇題
4.1邏輯運算符兩則運算對象的數據類型 。
A)只能是0或1 B)只能是0或非0正數
C)只能是整型或字符型數據 D)可以是任何類型的數據
參考答案:D
參考分析:c語言中沒有專用的邏輯量,任何數值類型的數據都可以作為邏輯數據使用,判斷時0為假,非零為真,計算時真置1,假置0。
4.2以下關于運算符優(yōu)先順序的描述中正確的是
A)關系運算符<算術運算符<賦值運算符<邏輯運算符
B)邏輯運算符<關系運算符<算術運算符<賦值運算符
C)賦值運算符<邏輯運算符<關系運算符<算術運算符
D)算術運算符<關系運算符<賦值運算符<邏輯運算符
參考答案:C
4.3 下列運算符中優(yōu)先級最高的是 。
A)< B)+ C)&& D)!=
參考答案:B
4.4能正確表示“當x的取值在[1,10]和[200,210]范圍內為真”的C語言表達式為 。
A) (x>=1)&&(x
B) (x>=1)&&(x
C) (x>=1)||(x
D) (x>=1)||(x
參考答案:B
參考分析:C語言中實際上與運算和或運算優(yōu)先級相等,由于C采用短路算法,所以不會影響B(tài)的結果,即不需要改成((x>=1)&&(x
4.5 表示圖中坐標軸上陰影部分正確的表達式是 。
| | |
a b c
A)(x
C)(x
參考答案:C
4.6判斷char型變量ch是否為大寫字母的正確表達式為 。
A)'A'<=ch
C) (ch>='A')&&(ch<='Z') D)('A'
參考答案:C
4.7 有int x=3,y=4,z=5;則下面表達式中值為0的是 。
A)'x'&&'y' B)x<=y C)x||y+z&&y-z D)!((x
參考答案:D
4.8 已知x=43,ch='A',y=0;則表達式(x>=y&&ch<'B'&&!y)的值是 。
A)0 B)語法錯誤 C)1 D)"假"
參考答案:C
4.9若希望當A的值為奇數時,表達式的值為“真”,A的值為偶數時,表達式的值為“假”。則以下不能滿足要求的表達式是 。
A)A%2= =1 B)!(A%2= =0) C)!(A%2) D)A%2
參考答案:C
4.10設有: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
參考分析:本題為標準的短路算法,由于第一個表達式m=a>b為真,故第二個表達式n=c>d被短路不再計算。因此,n值仍然保持原來的值2不變。
4.11判斷char型變量ch是否為小寫字母的正確表達式為 。
A)'a'<=ch
C) (ch>='a')||(ch
參考答案:D
4.12 以下程序的運行結果是 。
#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
參考分析:計算時,非零為真。
4.13 執(zhí)行以下語句后a的值為 ,b的值為 。
int a,b,c;
a=b=c=1;
++a||++b&&++c;
A)0 B)1 C)2 D)錯誤
參考答案:C B
參考分析:c語言在計算表達式時采用短路算法。
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ōu)先級最低的是 ,優(yōu)先級最高的是 。
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)有語法錯誤不能通過編譯 B)可以通過編譯,但不能通過連接
C)輸出: D)輸出:$$$
參考答案:C
參考分析:注意條件表達式不是a= =b+c。
4.20 以下程序的運行結果是 。
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進行關系比較,然后進行增量運算,m值為6,因比較結果為假,執(zhí)行else,輸出為6,m為7。
4.21 當a=1,b=3,c=5,d=4時,執(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有函數關系如下,能正確表示該關系的程序段是 。
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 以下程序的輸出結果是 。
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和上面的語句為順序關系,因此不會影響到a的值。
4.24 以下程序的輸出結果是 。
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中產生二義性,C語言規(guī)定:else子句總是與 配對。
A)縮排位置相同的if B)其之前最近的沒有else配對的if
C)其之后最近的if D)同一行上的if
參考答案:B
參考分析:本題表述不嚴謹。
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 請閱讀以下程序:
#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);
}
若運行時輸入2.0,則上面程序的輸出結果是 。
A)0.000000 B)0.500000 C)1.000000 D)0.250000
參考答案:B
4.28 若有條件表達式(exp)?a++:b--,則以下表達式中能完全等價于表達式(exp)的是 。
A)exp==0 B)exp!=0 C)exp==1 D)exp!=1
參考答案:B
參考分析:在C語言中,當一個表達式不等于0時,可以將不等于部分省略,其效果完全一樣。
4.29 若運行時給變量輸入12,則以下程序的運行結果是 。
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 以下程序的運行結果是 。
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進行--操作,x為9,然后與y進行等于比較,即9==9,然后y++為10。由于比較結果為真,故計算--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;則表達式w
A)4 B)3 C)2 D)1
參考答案:D
4.34 執(zhí)行以下程序后的輸出結果是 。
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;表達式f=a>b>c的值是( )。
參考答案:0
參考分析:計算過程如下,a>b計算為真,然后計算 真(1)>c,結果為假
4.36 若int a=5,b=4,c=2;表達式a>b!=c的值是( )。
參考答案:1
4.37 以下程序的運行結果是( )。
#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個)
4.38 在C語言中,表示邏輯“真”值用( )。
參考答案:非0的數值。
4.39 設y為int型變量,請寫出描述“y是奇數”的表達式( )。
參考答案:y%2==1 y%2!=0 y%2 (y-1)%2==0 !(y%2==0)
4.40 c語言提供的三種邏輯運算符是( )、( )和( )。
參考答案:&& || !
4.41 設x,y,z均為int型變量,請寫出描述“x或y中有一個小于z”的表達式( )。
參考答案:x
4.42設x,y,z均為int型變量,請寫出描述“x,y,z中有兩個為負數”的表達式( )。
參考答案: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,表達式A>B&&C>A||AB的值是( )。
參考答案:0
參考分析:在本表達式的計算過程中A
4.44 若int a=6,b=4,c=2;表達式!(a-b)+c-1&&b+c/2的值是( )。
參考答案:1
4.45 若a=2,b=4,則表達式!(x=a)||(y=b)&&0的值是( )。
參考答案:0
4.46 若a=1,b=4,c=3,則表達式!(a
參考答案:0
4.47 若a=6,b=4,c=3,則表達式a&&b+c||b-c的值是( )。
參考答案:1
4.48 若a=5,b=2,c=1,則表達式a-b
參考答案:0
4.49 若a=3,b=4,c=5,則表達式a||b+c&&b的值是( )。
參考答案:1
4.50 條件“2
參考答案:x>2&&x<3||x<-10
4.51 當m=2,n=1,a=1,b=2,c=3時,執(zhí)行完d=(m=a!=b)&&(n=b>c)后,n的值為( ),m的值為( )。
參考答案:0 1
4.52 以下程序的運行結果是 。
main()
{int x,y,z;
x=1;y=2;z=3;
x=y--<=x||x+y!=z;
printf("%d,%d",x,y);
}
參考答案:1,1
參考分析:這是兩個表達式的或運算,第一個表達式y(tǒng)--<=x相當于2<=1為假,y變量增為1,第二表達式x+y!=z相當于1+1!=3為真,故x的值為1。
4.53 以下程序的運行結果是 。
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 以下程序的運行結果是 。
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為真,后面的或和與運算均被短路。
4.55 有int x,y,z;且x=3,y=-4,z=5,則表達式(x&&y)==(x||z)的值為( )。
參考答案:1
4.56 有int x,y,z;且x=3,y=-4,z=5,則表達式!(x>y)+y!=z)||(x+y)&&(y-z)的值為( )。
參考答案:1
4.57有int x,y,z;且x=3,y=-4,z=5,則表達式x++-y+(++z)的值為( )。
參考答案:13
4.58 有int a=3,b=4,c=5;則表達式a||b+c&&b==c的值為( )。
參考答案:1
4.59 有int a=3,b=4,c=5,x,y;則表達式!(x=a)&&(y=b)&&0的值為( )。
參考答案:0
4.60 有int a=3,b=4,c=5;則表達式!(a+b)+c-1&&b+c/2的值為( )。
參考答案:1
4.61 若運行時輸入:16,則以下程序的運行結果是 。
#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 若運行時輸入:2,則以下程序的運行結果是 。
#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 若運行時輸入:4.4,則以下程序的運行結果是 。
#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 以下程序的運行結果是 。
main()
{if (2*2==5<2*2==4)
printf("T");
else
printf("F");
}
參考答案:F
4.65 請閱讀以下程序,若運行時輸入:1605時,程序的運行結果是 。
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 以下程序實現:輸入園的半徑r和運算標志m,按照運算標志進行指定計算,請?zhí)羁铡?/p>
標志 運算
a 面積
c 周長
b 二者均計算
#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 若運行時輸入:5999,則以下程序的運行結果是 。
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 以下程序實現輸出x,y,z三個數中的最大者。請分析程序填空。
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 以下程序將輸入的三個整數按從大到小順序輸出,請分析程序填空。
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 以下程序對輸入的兩個整數,按從大到小順序輸出,請分析程序填空。
main()
{int x,y,z;
scanf("%d,%d",&x,&y);
if(【1】)
{z=x;【2】}
printf("%d,%d",x,y);
}
參考答案:【1】x
4.71 以下程序對輸入的一個小寫字母進行循環(huán)后移5個位置后輸出。如'a'變成'f','w'變成'b'。請分析程序填空。
#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 輸入一個字符,如果它是大寫字母,則把它變成小寫字母,如果它是一個小寫字母,則把它變成大寫字母,其它字符不變。請分析程序填空。
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 以下程序的運行結果是 。
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以下程序的運行結果是 。
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 以下程序的運行結果是 。
#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以下程序的運行結果是 。
#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 請閱讀以下程序,為使輸出時t值為4,輸入量a和b應滿足的條件是 。
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 請閱讀下面的程序,為使輸出s=1,t=5的結果,輸入量a和b應滿足的條件是 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 下面程序根據以下函數關系,對輸入的每個x值,計算出y值。請分析程序填空。
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下面程序根據以下函數關系,對輸入的每個x值,計算出y值。請分析程序填空。
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 以下程序的功能是計算一元二次方程ax2+bx+c=0的根,請分析程序填空。
#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 以下程序根據輸入的三角形的三邊判斷是否能組成三角形,若可以則輸出它的面積和三角形的類型。請分析程序填空。
#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 某郵局對郵寄包裹有如下規(guī)定:若包裹的長寬高任一尺寸超過1米或重量超過30千克,不予郵寄;對可以郵寄的包裹每件收取手續(xù)費0.2元,在加上根據下表按重量wei計算的郵資。請分析程序填空。
重量(千克)收費標準
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 某服裝店經營套服,也單件出售。若買的不少于50套每套80元;不足50套的每套90元;只買上衣每件60元;只買褲子每條45元。以下程序的功能是讀入所買上衣c和褲子t的件數,計算應付款m。請分析程序填空。
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 以下程序的功能是判斷輸入的年份是否是閏年。請分析程序填空。
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 以下程序段針對輸入的截止日期(年:yend,月:mend,日:dend)和出生日期(yman,mman,dman),計算出實際年齡。請分析程序填空。
設有: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 有四個數a,b,c,d,要求從大到小的順序輸出。請分析程序填空。
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 以下程序的運行結果是 。
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,則表達式a>b?a:b+1的值是 。
參考答案:3
4.90 若a=1,b=2,c=3,d=4,則表達式a>b?a:c>d?c:d的值是 。
參考答案:4
*4.91 設有變量定義:int a=10,c=9;則表達式(--a!=c++)?--a:++c的值是 。
參考答案:11
4.92 若有說明語句:int x=1,y=0;則表達式x>(y+x)?10:12.5>y++?'a':'A'的值是 。
參考答案:'a'
*4.93 若有說明語句:int a=1,b=0;則表達式++a*--a==b?12%5:'x'的值是 。
參考答案:'x'
4.94 若有x=1,y=2,z=3,則表達式(x
參考答案:0
**4.95 若有說明語句:int x=1,y=0;則表達式x-->(y+x)?5:25>y++?'1':'2'的值是 。
參考答案:5
參考分析:增量運算在條件運算的第一個表達式中時,關系運算符兩側各為一個處理單元。x--中的值是1,然后增為0,故y+x為0+0,因此整個表達式計算結果為真。
4.96 以下程序的運行結果是 。
#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以下程序的運行結果是 。
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 以下程序的運行結果是 。
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 若運行時輸入:-2,則以下程序的輸出結果是 。
main()
{int a,b;
scanf("%d",&a);
b=(a>=0)?a:-a;
printf("b=%d",b);
}
參考答案:b=2
4.100 若運行時輸入:100,下面程序的運行結果是 。
main()
{int a;
scanf("%d",&a);
printf("%s",(a%2!=0)?"no":"yes");
}
參考答案:yes
4.101 如果運行時輸入字符'Q',則以下程序的運行結果是 。
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 當運行時輸入:1992,則以下程序的運行結果是 。
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 以下程序是計算x,y,z三個數中最小的。請分析程序填空。
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 設有變量定義:int a=5,c=4;則(--a==++c)?--a:c++的值是【1】,此時c的存儲單元的值為【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 設有int x=1,y=0;則以下表達式的值為 。
x-->(y+x)?10:12.5>y++?'A':'Z'
參考答案:10
參考分析:在本題中x-->(y+x)的實際比較運算是1>0+0為真。
*4.107 設有int x=0,y=1;則以下表達式的值為 。
x++*x--!='y'?8-4:y
參考答案:4
參考分析:此處x++*x—實際計算為0*0。
4.108 若運行時輸入:3 5/,則以下程序的運行結果是 。
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 根據以下嵌套的if語句所給條件,填寫switch語句,使它完成相同的功能。
(假設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 設有如下程序段,若grade的值為'C',則輸出結果是 。
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 以下程序段的運行結果是 。
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 根據以下函數關系,對輸入的每個x值,計算出相應的y值。請分析程序填空。
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 以下程序的運行結果是 。
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 下面程序的運行結果是 。
#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 假設獎金稅率如下(a代表獎金,r代表稅率)
a<500 r=0%
500≤a<1000 r=5%
1000≤a<2000 r=8%
2000≤a<3000 r=10%
3000≤a r=15%
以下程序對輸入的一個獎金數,求稅率和應交稅款以及實得獎金數(扣除獎金稅后)。請分析程序填空。
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 某個自動加油站有'a','b','c'三種汽油,單價分別為1.50,1.35,1.18(元/千克),也提供了“自己加”和“協(xié)助加”兩個服務等級。這樣用戶可以得到5%或10%的優(yōu)惠。本程序針對用戶輸入加油量a,汽油品種b和服務類型c('f'--自動,'m'--自己,'e'--協(xié)助),輸出應付款m。請分析程序填空。
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 以下程序計算某年某月有幾天。其中判別閏年的條件是:能被4整除但不能被100整除的年是閏年,能被400整除的年也是閏年。請分析程序填空。
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 以下程序用以計算y年m1月d1日與同年的m2月d2日之間的天數(m2>=m1),并打印計算結果。若m1=m2且d1=d2則算一天。請分析程序填空。
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 編制程序,要求輸入整數a和b,若a2+b2大于100,則輸出a2+b2百位以上的數字,否則輸出兩數之和。
參考程序:
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 試編程判斷輸入的正整數是否既是5又是7的整數倍,若是輸出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 請編程序,根據以下函數關系,對輸入的每個x值,計算出相應的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 輸入一個整數,判斷它能否被3,5,7整除,并輸出以下信息之一:
(1)能同時被3,5,7整除
(2)能被其中兩數整除(要指出哪兩個)。
(3)能被其中一個數整除(要指出哪一個)。
(4)不能被任何一個整除。
參考程序:
main()
{int m;
printf("Input a number:");
scanf("%d",&m);
if(m%3==0&&m%5==0&&m%7==0)
printf("能同時被3,5,7整除");
else if((m%3==0&&m%5==0)||(m%3==0&&m%7==0)||(m%5==0&&m%7==0))
{printf("能被其中兩數整除");
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("能被其中一個數整除");
if(m%3==0) printf("(3)");
else if(m%5==0) printf("(5)");
else printf("(7)");
}
else printf("不能被任何一個整除");
}
4.123 將以下程序段改用非嵌套的if語句實現。
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編程實現:
-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語句實現。
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 請將以下語句改寫成為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編程實現以下功能:讀入兩個運算數(data1和data2)及一個運算符(op),計算表達式data1 op data2的值,其中op可為+,-,*,/(用switch語句實現)。
參考程序:
#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 編一程序,對于給定的一個百分制成績,輸出相應的五分值成績。設90分以上為'A',80-89分為'B',70-79分為'C',60-69分為'D',60分以下為'E'(用switch語句實現)。
參考程序:
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 設有程序段
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設有以下程序段
int x=0,s=0;
while(!x!=0) s+=++x;
printf("%d",s);
則 。
A)運行程序段后輸出0 B)運行程序段后輸出1
C)循環(huán)的控制表達式不正確 D)程序段執(zhí)行無限次
參考答案:B
5.3語句while(!E);中的!E等價于 。
A)E= =0 B)E!=1 C)E!=0 D)E= =1
參考答案:A
5.4下面程序段的運行結果是 。
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 下面程序段的運行結果是 。
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下面程序段的運行結果是 。
int n=0;
while(n++<=2);
printf("%d",n);
A)2 B)3 C)4 D)語法錯誤
參考答案:C
5.7 設有程序段
t=0;
while(printf("*"))
{t++;
if(t<3) break;
}
下面描述正確的是 。
A)其中循環(huán)控制表達式與0等價 B)其中循環(huán)控制表達式與'0'等價
C)其中循環(huán)控制表達式是不合法的 D)以上說法都不對
參考答案:B
參考分析:printf的返回值為數值1,恒真,故與B等價。
5.8 下面程序的功能是將從鍵盤輸入的一對數,由小到大排序輸出。當輸入一對相等數時結束循環(huán),請選擇填空。
#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)計出大寫字母的個數m和小寫字母的個數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下面程序的功能是將小寫字母變成對應大寫字母后的第二個字母,其中y變成A,z變成B。請選擇填空。
#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下面程序的功能是在輸入一批正整數中求出最大者,輸入0結束循環(huán),請選擇填空 。
#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 下面程序的運行結果是 。
#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若運行以下程序時,從鍵盤輸入2473(表示回車),則下面程序的運行結果是 。
#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)控制條件嚴格。
C)do-while允許從外部轉入到循環(huán)體內。
D)do-while的循環(huán)體不能是復合語句。
參考答案:A
5.15 以下能正確計算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)有語法錯誤
參考答案:C
5.17 以下描述中正確的是 。
A)由于do-while循環(huán)中循環(huán)體語句只能是一條可執(zhí)行語句,所以循環(huán)體內不能使用復合語句。
B)do-while循環(huán)由do開始,用while結束,在while(表達式)后面不能寫分號。
C)在do-while循環(huán)體中,一定要有能使while后面表達式的值變?yōu)榱?"假")的操作。
D)do-while循環(huán)中,根據情況可以省略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下面程序的功能是計算正整數2345的各位數字平方和。
#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 下面程序是從鍵盤輸入學號,然后輸出學號中百位數是3的學號,輸入0時結束循環(huán)。請選擇填空。
#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 等比數列的第一項a=1,公比q=2,下面程序的功能是求滿足前n項和小于100的最大n,請選擇填空。
#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表示為兩個加數的和,使兩個加數分別能被13和11整除。請選擇填空。
#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 下面程序的運行結果是 。
#include
main()
{int y=10;
do {y--;}while(--y);
printf("%d\n",y--);
}
A)-1 B)1 C)8 D)0
參考答案:D
5.24若運行以下程序時,從鍵盤輸入Adescriptor(表示回車),則下面程序的運行結果是 。
#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 下面程序的運行結果是 。
#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下面有關for循環(huán)的正確描述是 。
A)for循環(huán)只能用于循環(huán)次數已經確定的情況
B)for循環(huán)是先執(zhí)行循環(huán)體語句,后判斷表達式
C)在for循環(huán)中,不能用break語句跳出循環(huán)體
D)for循環(huán)的循環(huán)體可以包括多條語句,但必須用花括號括起來
參考答案:D
5.27對for(表達式1; ;表達式3)可理解為 。
A) for (表達式1;0;表達式3) B) for (表達式1;1;表達式3)
C) for (表達式1;null;表達式3) D)缺少一個表達式
參考答案:B
5.28 若i為整型變量,則以下循環(huán)執(zhí)行次數是 。
for (i=2;i==0;)printf("%d",i--);
A)無限次 B)0次 C)1次 D)2次
參考答案:B
5.29 以下for循環(huán)的執(zhí)行次數是 。
for(x=0,y=0;(y=123)&&(x<4);x++);
A)是無限循環(huán) B)循環(huán)次數不定 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下面程序段的運行結果是 。
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下面程序段的運行結果是 。
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個零件一組則多出2個零件;若分成7個零件一組,則多3個零件;若分成9個零件一組,則多出5個零件。下面程序是求這堆零件總數,請選擇填空。
#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 下面程序的功能是計算1至50中是7的倍數的數值之和,請選擇填空。
#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 下面程序的功能是計算1至10之間的奇數之和和偶數之和。請選擇填空。
#include
main()
{int a,b,c,i;
a=c=0;
for(i=0;i<=10;i+=2)
{a+=i;
【1】;
c+=b;
}
printf("偶數之和=%d\n",a);
printf("奇數之和=%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
參考分析:奇數累加和根據題目的要求多計算了11,需要從累加和中去除,但退出循環(huán)后b變量的值也是11,故【2】中的D也正確。
5.38 下面程序的運行結果是 。
#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 下面程序的運行結果是 。
#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 下面程序段的功能是計算1000!的末尾含有多少個零。請選擇填空。(提示:只要計算出1000!中含有因子5的個數即可)
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分別表示一個三位數),請選擇填空。
#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不需要作為百位數,因此可以為0。若更進一步考慮到z為兩個數的末尾,2倍的z不可能為0,故z也不可能為0,所以B也應當正確。
**5.42 下面程序是對輸出一個正整數等差數列的前十項,此數列前四項之和及積分別是26和880,請選擇填空。
#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 下面程序的運行結果是 。
#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語句的作用是結束整個循環(huán)的執(zhí)行。
B)只能在循環(huán)體內和switch語句體內使用break語句。
C)在循環(huán)體內使用break語句或continue語句的作用相同。
D)從多層循環(huán)嵌套中退出時,只能使用goto語句。
參考答案:B
5.45 下面程序段 。
for(t=1;t<=100;t++)
{scanf("%d",&x);
if(x<0)continue;
printf("%3d",t);
}
A)當x
C)printf函數永遠也不執(zhí)行 D)最多允許輸出100個非負整數
參考答案:D
5.46下面程序段 。
x=3;
do{y=x--;
if(!y) {printf("*"); continue;}
printf("#");
}while(1<=x<=2);
A)將輸出## B)將輸出###*
C)是死循環(huán) 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語句中不能出現continue語句。
C)只能用continue語句來中止本次循環(huán)。
D)在循環(huán)中break語句不能獨立出現。
參考答案:C
5.49 與下面程序段等價的是 。
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 下面程序的功能是將從鍵盤輸入的偶數寫成兩個素數之和。請選擇填空。
#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下面程序的運行結果是 。
#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 若運行以下程序時,從鍵盤輸入3.6 2.4,則下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
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)計數字字符的個數,當輸入換行符時結束循環(huán)。請分析程序填空。
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求π的近似值,直到最后一項的值小于10-6為止,請分析程序填空。
#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個西瓜,第一天賣一半多兩個,以后每天賣剩下的一半多兩個,問幾天以后能賣完?請分析程序填空。
#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 下面程序的功能是用“輾轉相除法”求兩個正整數的最大公約數。請分析程序填空。
#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í)行以下程序時輸入right?,則下面程序的運行結果是 。
#include
main()
{char c;
while((c=getchar())!='?') putchar(++c);
}
參考答案:sjhiu
5.62下面程序的運行結果是 。
#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
參考分析:本題是計算21+22+...+27之和。
5.63當運行以下程序,用戶輸入China# 程序的運行結果是 。
#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í)行次數是 。
a=10;b=0;
do{b+=2;a-=2+b;}while(a>=0);
參考答案:3次
5.66下面程序段的運行結果是 。
x=2;
do{printf("*");x--;}while(!x==0);
參考答案:**
5.67下面程序段的運行結果是 。
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"的數,且一行只打印五個數。請分析程序填空。
#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)計正整數的各位數字中零的個數,并求各位數字中的最大者。請分析程序填空。
#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 等差數列的第一項a=2,公差d=3,下面程序的功能是在前n項和中,輸出能被4整除的所有數的和。請分析程序填空。
#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的個、十、百位上的數字之和。請分析程序填空。
#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
參考分析:本題各位數的分離,沒有什么新意,一個十進制大數的人為“高位溢出”這種技巧,值得學習和模仿。
5.72 當運行以下程序時,從鍵盤輸入1 2 3 4 5 -1,則下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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 當從鍵盤輸入-1 0,則以下程序的運行結果是 。
#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下面程序段是找出整數的所有因子,請分析程序填空。
scanf("%d",&x);
for (i=1; ; i++)
if (x%i==0) printf("%3d",i);
參考答案:i<=x
5.77 雞兔同籠,頭30,腳90,下面程序段計算雞兔各有多少只。請分析程序填空。
for(x=1;x<=30;x++ )
{y=30-x;
if(【1】) printf("%d,%d",x,y);
}
參考答案:2*x+4*y==90
5.78 下面程序段的運行結果是 。
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("*");表達式i=0執(zhí)行【1】次,表達式i++執(zhí)行【2】次。
參考答案:【1】1 【2】3
5.80 下面程序的功能是計算1-3+5-7+...-99+101的值,請分析程序填空。
#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。設a=0,b=1.2為積分上下限,積分區(qū)間分隔數n=100,請分析程序填空。
#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 以下程序的功能是根據公式e=1+1/1!+1/2!+...1/n!求e的近似值,精度要求為10-6。請分析程序填空。
#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 下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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)變量的值,導致循環(huán)只能循環(huán)2次。
5.85下面程序的運行結果是 。
#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 下面程序的功能是求出用數字0至9可以組成多少個不重復的三位偶數。請分析程序填空。
#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之間每位數的乘積大于每位數的和的數,請分析程序填空。
#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以內的所有完全數。說明:一個數如果恰好等于它的因子之和(除自身外),則稱該數為完全數。例如: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 下面程序的功能是完成用一元人民幣兌換一分、兩分、五分零幣的所有兌換方案。請分析程序填空。
#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 下面程序的功能是從三個紅球、五個白球、六個黑球中任意取出八個球,且其中必須有白球,輸出所有可能的方案。請分析程序填空。
#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,則下面程序的運行結果是 。
#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
參考分析:這是一種計算兩個整型數最大公約數的一種算法。
5.92 下面程序的運行結果是 。
#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 下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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 下面程序段的運行結果是 。
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之間不同的三個數構成一個三位數,下面程序將統(tǒ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 下面程序的功能是計算100至1000之間有多少個數其各位數字之和是5。請分析程序填空。
#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個整數中,找出第一個能被7整除的數。若找到,打印此數后退出循環(huán);若未找到,打印“not exist”。請分析程序填空。
#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以內個位數為6且能被3整除的所有數。請分析程序填空。
#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 下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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 每個蘋果0.8元,第一天買2個蘋果,第二天開始買前一天的2倍,直至購買的蘋果個數達到不超過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之間的全部同構數。同構數是這樣一組數:它出現在平方數的右邊。例如,5是25右邊的數,25是625右邊的數,5和25就是同構數。
參考程序:
main()
{int i;
for(i=1;i<100;i++)
if(i*i%10==i||i*i%100==i) printf("%3d",i);
}
5.107 編寫程序,求一個整數任意次方的最后三位數。即求xy值的最后三位數,要求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名學生的五門成績,分別統(tǒng)計出每個學生的平均成績。
參考程序:
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);
}
}
第六章 數組
6.1 選擇題
6.1在c語言中,引用數組元素時,其數組下標的數據類型是 。
A)整型常量 B)整型表達式
C)整型常量或整型表達式 D)任何類型的表達式
參考答案:C
參考分析:嚴格的說法應當是常量表達式。
6.2以下對一維數組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];則對數組元素的正確引用是 。
A)a[10] B)a[3,5] C)a(5) D)a[10-10]
參考答案:D
6.4 在C語言中,一維數組的定義方式為:類型說明符 數組名 。
A)[常量表達式] B)[整型表達式]
C)[整型表達式]或[整型常量] D)[整型常量]
參考答案:A
6.5 以下能對一維數組a進行正確初始化的語句是 。
A)int a[10]=(0,0,0); B)int a[10]={};
C)int a[]={0}; D)int a[10]={10*1};
參考答案:CD
參考分析:本題題目設計有問題,D也是正確的。
6.6 以下對二維數組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];則對a數組元素的正確引用是 。
A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)
參考答案:C
參考分析:在實際應用中a[2][4]這種應用方式實質上訪問的是a[3][0],這是越界訪問。
6.8 若有說明:int a[3][4];則對a數組元素的非法引用是 。
A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]
參考答案:D
參考分析:a[0][4]實質上訪問的是a[1][0],嚴格意義上并不非法。
6.9 以下能對二維數組a進行正確初始化的語句是 。
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以下不能對二維數組a進行正確初始化的說明是 。
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)數組中各元素都可以得到初值,但其值不一定為0
D)數組中每個元素均可得到初值0
參考答案:D
6.12若有說明:int a[][4]={0,0};則下面不正確的敘述是 。
A)數組a的每個元素都可得到初值0
B)二維數組a的第一維大小為1
C)因為二維數組a中第二維大小的值除初值個數的商為0,故數組a的行數為1
D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
參考答案:D
6.13 若有說明:static int a[3][4];則數組中各元素 。
A)可在程序的運行階段得到初值0
B)可在程序的編譯階段得到初值0
C)不能得到確定的初值
D)可在程序的編譯或運行階段得到初值0
參考答案:B
6.14 以下各組選項中,均能正確定義二維實型數組a的選項是 。
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 下面程序有錯誤的行是 (行前數字表示行號)。
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行有錯誤 B)第6行有錯誤
C)第7行有錯誤 D)沒有錯誤
參考答案:習題集中答案為A,實質上應當選擇D
6.16下面程序有錯誤的行是 (行前數字表示行號)。
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)沒有錯誤 B)第3行有錯誤
C)第5行有錯誤 D)第7行有錯誤
參考答案:C
6.17下面程序有錯誤的行是 (行前數字表示行號)。
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下面程序有錯誤的行是 (行前數字表示行號)。
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)沒有錯誤 B)3 C)5 D)6
參考答案:D
6.19 若二維數組a有m列,則計算任一元素a[i][j]在數組中位置的公式為(假設a[0][0]位于數組的第一個位置上) 。
A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1
參考答案:D
6.20 對說明語句int a[10]={6,7,8,9,10};的正確理解是 。
A)將5個初值依次a[1]至a[5]
B)將5個初值依次a[0]至a[4]
C)將5個初值依次a[5]至a[9]
D)將5個初值依次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數組第一維的大小是 。
A)2 B)3 C)4 D)無法確定
參考答案:B
6.23 若二維數組a有m列,則在a[i][j]前的元素個數為 。
A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1
參考答案:B
6.24 定義如下變量和數組:int k,a[3][3]={1,2,3,4,5,6,7,8,9};則下面語句的輸出結果是 。
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)對數組a進行插入排序(升序)
B)對數組a進行插入排序(降序)
C)對數組a進行選擇排序(升序)
D)對數組a進行選擇排序(降序)
參考答案: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 下面程序的運行結果是 。
#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 下面程序的運行結果是 。
#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下面是對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下面程序段的運行結果是 。
char c[5]={'a','b','\0','c','\0'};
printf("%s",c);
A)'a''b' B)ab C)ab c D)ab▄(▄表示空格)
參考答案:B
*6.31對兩個數組a和b進行如下初始化
char a[]="ABCDEF";
char b[]={'A','B','C','D','E','F'};
則以下敘述正確的是 。
A)a與b數組完全相同 B)a與b數組長度相同
C)a和b中都存放字符串 D)a數組比b數組長度長
參考答案:D
6.32有兩個字符數組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有字符數組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 下面程序段的運行結果是 。
char a[7]="abcdef",b[4]="ABC";
strcpy(a,b);
printf("%c",a[4]);
A)■ B)\0 C)e D)ef
參考答案:C
6.35有下面程序段,上機運行,將 。
char a[3],b[]="China";
a=b;
printf("%s",a);
A)輸出China B)輸出Chi C)輸出Ch D)編譯出錯
參考答案:D
*6.36下面程序段的運行結果是 。
char c[]="\t\v\\\0will\n";
printf("%d",strlen(c));
A)3 B)6 C)9 D)14
參考答案:A
6.37 判斷字符串a和b是否相等,應當使用 。
A)if(a==b) B)if(a=b) C)if(strcmp(a,b)) D)if(strcmp(a,b)==0)
參考答案:D
6.38判斷字符串s1是否大于字符串s2,應當使用 。
A) if (s1>s2) B) if (strcmp(s1,s2)
C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)
參考答案:D
6.39下面程序段輸出兩個字符串中對應相等的字符。請分析程序填空。
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)兩個字符串包含的字符個數相同時,才能比較字符串
B)字符個數多的字符串比字符個數少的字符串大
C)字符串"STOP"與"STOP■"相等
D)字符串"That"小于字符串"The"
參考答案:D
6.41 下面對C語言字符數組的描述中錯誤的是 。
A)字符數組可以存放字符串
B)字符數組的字符串可以整體輸入、輸出
C)可以在賦值語句中通過賦值運算符對字符數組整體賦值
D)不可以用關系運算符對字符數組中的字符串進行比較
參考答案:C
***6.42 有已排好序的字符串a,下面的程序是將字符串s中的每個字符按升序的規(guī)律插入到a中。請選擇填空。
#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
參考分析:向有序數據中插入數據關鍵在于兩點,一是查找插入位置——查找插入位置注意兩個問題,插入的數據與有序數組中數據的大小關系和注意防止向右越界。再一個是有序數組元素后移時自后向前。
***6.43下面程序的功能是將已按升序排好序的兩個字符串a和b中的字符,按升序歸并到字符串c中。請分析程序填空。
#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
參考分析:歸并排序的要點是將兩個數組a和b的下標逐次后移,存放的是那個數組的元素,就移動那個數組的下標,而目標數組c則每次循環(huán)都要移動,當a,b數組其中一個到達結束標志后,再將沒到達結束標志的數組中剩余的數據全部寫到目的數組中。
***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
參考分析:刪除指定字符的程序要點在于采用雙下標,一個下標對數組從頭到尾進行逐個掃描,另外一個下標則只有當寫入不刪除字符時才向后移動。其關鍵思想就是:s[j++]=s[j]。
*6.45 下面程序的功能是從鍵盤輸入一行字符,統(tǒ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
參考分析:判斷是不是一個單詞的要點就是當前字符不是空格而前一個字符是空格。
6.46 下面程序的運行結果是 。
#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 當運行以下程序時,從鍵盤輸入:aa bbcc dd則下面程序的運行結果是 。
#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 當運行以下程序時,從鍵盤輸入abcdef,則下面程序的運行結果是 。
#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 當運行以下程序時,從鍵盤輸入:AhaMA Aha,則下面程序的運行結果是 。
#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 下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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語言中,二維數組的定義方式為:類型說明符 數組名[【1】][【2】];
參考答案:【1】【2】常量表達式
6.54 在c語言中,二維數組在內存中的存放順序是【 】。
參考答案:按行主順序存放
6.55 若有定義:double x[3][5];則x數組中行下標的下限為【1】,列下標的上限為【2】。
參考答案:【1】0 【2】4
6.56 若二維數組a有m列,則計算任一元素a[i][j]在數組中位置的公式為【 】。(假設a[0][0]位于數組的第一個位置上)
參考答案: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 若有以下輸入(數之間有空格),則下面程序的運行結果是 。
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
參考分析:本程序是刪除用戶所輸入的所有奇數。
6.59 下面程序以每行4個數的形式輸出a數組,請分析程序填空。
#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 下面程序將二維數組a的行和列元素互換后存到另一個二維數組b中。請分析程序填空。
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 下面程序的運行結果是 。
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 下面程序可求出矩陣兩條對角線上的元素之和。請分析程序填空。
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 下面程序的運行結果是 。
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的主對角線上的元素之和。請分析程序填空。
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 以下程序可求出所有的水仙花數。(水仙花數是三位正數,其各位數字的立方和等于該正數,如: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下面程序的功能是生成并打印某數列的前20項,該數列第1,2項分別為0和1,以后每個奇數編號的項是前兩項之和,偶數編號的項是前兩項差的絕對值。生成的20個數存在一維數組x中,并按每行4項的形式輸出。
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 若有以下輸入,則下面程序的運行結果是 。
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 下面程序的運行結果是 。
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 設數組a包括10個整型元素,下面程序的功能是求出a中各相鄰兩個元素的和,并將這些和存在數組b中,按每行3個元素的形式輸出。請分析程序填空。
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 下面程序是將十進制數轉換成不超過十六進制的n進制。請分析程序填空。
#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個整數,找出最大數和最小數所在的位置,并把二者對調,然后輸出調整后的5個數。
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 下面程序的運行結果是 。
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 下面程序的運行結果是 。
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 下面程序的功能是給一維數組a任意輸入6個整數,假設為7 4 8 9 1 5,然后建立一個具有以下內容的方陣并打印。請分析程序填空。
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
參考分析:采用二維數組可以采用a[i][j]=a[i-1][(j-1+M)%M]的方式為0行以后的行進行賦值。
**6.75 下面程序的功能是輸出以下n*n階(最大為9階)方陣。請分析程序填空。(以下例子是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 當從鍵盤輸入18并回車后,下面程序的執(zhí)行結果是 。
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 下面程序的功能是將二維數組a中每個元素向右一列,最后一列換到最左一列,移后的數組存到另一二維數組b中,并按矩陣形式輸出a和b。請分析程序填空。
例如: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)計年齡在16-31歲之間的學生人數。請分析程序填空。
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 下面程序的功能是檢查一個二維數組是否對稱(即對所有i和j都有a[i][j]=a[j][i])。請分析程序填空。
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 下面程序中的數組a包括10個整數元素,從a中第二個元素起,分別將后項減前項之差存入數組b,并按每行3個元素輸出數組b。請分析程序填空。
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 下面程序的運行結果是 。
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下面程序的運行結果是 。
#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是否為素數
k=j%i++;
if (k)
printf(“%3d”,num[x++];
else //j不是素數首尾數據互換,尾指針前移
{num[x]=num[y];
num[y--]=j;
}
}
for (i=0;i<x;i--)< p="">
printf(“%5d”,num[i]);
}
參考答案: 3 13 5 11 7
參考分析:該程序對數組設置了頭尾兩個下標,對數組自前向后檢查各元素是否為素數,如果是則輸出該元素,頭下標后移,繼續(xù)檢查下一個元素;如果不是,則將數組后面的元素與正檢查的數組元素互換,尾下標前移,繼續(xù)檢查,直到頭下標大于尾下標。
6.83 設數組中的元素均為正整數,以下程序是求a中偶數的個數和偶數的平均值。請分析程序填空。
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的和,結果存入矩陣c中,并按矩陣形式輸出。請分析程序填空。
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的乘積,結果存入矩陣c中并按矩陣形式輸出。請分析程序填空。
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的值。請分析程序填空。
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 以下程序的功能是求數組num中小于零的數據之和。請分析程序填空。
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數組中大于0的所有數據之和。
6.89 下面程序的運行結果是 。
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
參考分析:在二維數組中查找最小值及它的下標。
***6.90 若輸入52,則下面程序的運行結果是 。
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
參考分析:本題為典型的折半查找,要點有三:1.循環(huán)條件為low<=high;2.查找處理是一個三分支;3.總是把中點的前點作為后點或把中點的后點作為前點。
**6.91 下面程序的運行結果是 。
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
參考分析:這是折半查找的變形題目,本算法僅計算數組中間元素的下標。計算中點下標時巧妙地利用了數據元素個數的“折半”。
6.92 下面程序用“順序查找法”查找數組a中是否存在某一關鍵字。請分析程序填空。
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 下面程序用“快速順序查找法”查找數組a中是否存在某一關鍵字。請分析程序填空。
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
參考分析:如果數組中不存在需要查找的數據,循環(huán)條件設置為a[i]!=x無疑會使得對數組的訪問產生右越界。將欲查找的數據放到數組的最后位置可以防止查找過程發(fā)生右越界。
***6.94 下面程序用插入法對數組a進行降序排序。請分析程序填空。
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]
參考分析:插入排序是一種很重要的排序方法。它的排序思想及相應的技巧需要好好掌握。
6.95 下面程序用“兩路合并法”把兩個已按升序排列的數組合并成一個升序數組。請分析程序填空。
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 下面程序的運行結果是 。
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,則下面程序的運行結果是 。
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,則下面程序的運行結果是 。
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 下面程序的運行結果是 。
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 若有以下輸入,則下面程序的運行結果是 。
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 若有以下輸入,則下面程序的運行結果是 。
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 下面程序的運行結果是 。
#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的行、列數和元素值均由鍵盤輸入。請分析程序填空。
#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 若有以下輸入,則下面程序的運行結果是 。
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\\\""的長度是 。
參考答案:9
6.106 下面程序段的運行結果是 。
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,請?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 下面程序段的運行結果是 。
char x[]="the teacher";
i=0;
while(x[++i]!='\0')
if(x[i-1]=='t') printf("%c",x[i]);
參考答案:he
6.109 下面程序的功能是在一個字符數組中查找一個指定的字符,若數組中含有該字符則輸出該字符在數組中第一次出現的位置(下標值);否則輸出-1。請分析程序填空。
#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 下面程序的功能是在三個字符串中找出最小的。請分析程序填空。
#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 下面程序的功能是從鍵盤輸入一個大寫英文字母,要求按字母的順序打印出相鄰的字母,指定的字母在中間。若指定的字母為'Z',則打印YZA;若為A則打印ZAB。請分析程序填空。
#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 下面程序的功能是將字符數組a[6]={'a','b','c','d','e','f'}變?yōu)閧'f','a','b','c','d','e'}。請分析程序填空。
#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中下標值為偶數的元素由小到大排序,其他元素不變。請分析程序填空。
#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中將與字符c相等的所有元素下標值分別存放在整型數組b中。請分析程序填空。
#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 有十個字符串。下面程序的功能是在每個字符串中,找出最大字符按一一對應的順序放入一維數組中,即第i個字符串中的最大字符放在a[i]中,輸出每個字符串中的最大字符及其下標。
#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 下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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下面程序的運行結果是 。
#include
main()
{int i=5;
char c[6]="abcd";
do{c[i]=c[i-1];} while(--i>0);
puts(c);
}
參考答案:aabcd
*6.121 當運行以下程序時,從鍵盤輸入AabD,則運行結果是 。
#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
參考分析:本題是將串中小寫字母逆序轉換。
*6.122下面程序的運行結果是 。
#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下面程序的運行結果是 。
#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 當運行以下程序時,從鍵盤輸入:
BOOK
CUT
GAME
PAGE
則下面程序的運行結果是 。
#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 當運行以下程序時,從鍵盤輸入:
apple
orange
則下面程序的運行結果是 。
#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
參考分析:本題是查找最后一個大于首字符的字符及其位置。
6.3 編程題
6.126 從鍵盤輸入若干個整數,其值在0至4范圍內,用-1作為輸入結束的標志。統(tǒng)計每個整數的個數。
參考程序:
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}};現要將a的行和列的元素互換后存到另一個二維數組b中。請編寫程序并輸出a和b數組中的元素。
參考程序:
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 定義一個含有30個整型元素的數組,按順序分別賦予從2開始的偶數;然后按順序每五個數求出一個平均值,放在另一個數組中并輸出。試編程。
參考程序:
#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 通過賦初值按行順序為一個2×3的二維數組賦予2、4、6、...等偶數,然后按列的順序輸出該數組。試編程。
參考程序:
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)按行順序為一個5×5的二維數組a賦1到25的自然數,然后輸出該數組的左下半三角。試編程。
參考程序:
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階順時針螺旋方陣(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 數組a包括10個整數,把a中所有的后項除以前項之商取整后存入數組b,并按每行3個元素的格式輸出數組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 從鍵盤輸入一個整數,,用折半查找法找出該數在10個有序整型數組a中的位置。若該數不在a中,則打印出相應信息。試編程。
參考程序:
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 從鍵盤輸入兩個字符串a和b,要求不用庫函數strcat把串b的前五個字符連接到串a中;如果b的長度小于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 從鍵盤輸入一個字符串a,并在串中的最大元素后邊插入另外輸入的字符串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年湖北專升本高等數學模擬題(三)
- 2022年湖北專升本高等數學模擬題(二)
專升本微信公眾號
掃碼添加
專升本備考資料免費領取
去領取