C语言100题考试必备

二、数学运算。共15题。在这部分试题中。每道试题呈现一道算术式,或是表述数字关系的一段文字。要求你迅速、准确地计算出答案。你可以在草稿纸上运算。遇到难题,可以跳过暂时不做,待你有时间再返回解决它。

第 36 题 某企业业务员的工资是根据利润提成的,利润低于或等于10万元时,可以提成15%,利润低于或等于15万元时,高于10万元部分按10%提成,高于15万元部分按7%提成,当利润为20万元时应该发给业务员多少工资?( )

A.2.5万元

B.2.35万元

C.2万元

D.3.15万元


正确答案:B
该业务员的工资应为10×15%+5×10%+5×7%=2.35万元,故选B。


阅读以下函数说明和C语言函数,将应填入(n)处的语句写在对应栏内。

【函数2.1说明】

有1、2、3、4四个数字,输出由这些数字组成的互不相同且无重、复数字的三位数。

【函数2.1】

main()

{

int i,j,k;

printf("\n");

for((1)) /*以下为三重循环*/

for(j=1; j<5;j++)

for (k=1;k<5;k++)

{

if ((2)) /*确保i, j, k 三位互不相同*/

printf("%d,%d,%d\n",i,j,k);

}

}

【函数2.2说明】

计算并输出100之内的素数,每行输出10个,超过10个则换行。

【函数2.2】

include <stdio.h>

include "math.h"

define N 101

main()

{

int i,j,line,a[N];

for(i=2;i<N;i++)(3);

for(i=2;i<sqrt(N);i++)

for(j=i+1;j<N;j++)

{

if(a[i]!=0&&a[j]!=0)

if(a[j]%a[i]==0)

(4);

}

printfC\n");

for(i=2,line=0;i<N;i++)

{

if(a[i]!=0)

{

prinff("%5d",a[i]);

(5);

}

if(line==10)

{

prinff("\n");

line=0;

}

}

}


正确答案:(1)i=1;i5;i++ (2)i!=k&&i!=j&&j!=k (3)a[i]=I (4)a[j]=0 (5)line++
(1)i=1;i5;i++ (2)i!=k&&i!=j&&j!=k (3)a[i]=I (4)a[j]=0 (5)line++ 解析:本题考查用C语言程序对组合数和素数的求解。
在函数2.1中,要求输出由1、2、3、4这些数字组成的互不相同且无重复数字的三位数。程序中是用三重循环来实现的。
第(1)空是三重循环中第一重循环的循环条件,三位数的最高位可以取题目给出的任意一个数,那么应该和其他循环的条件一样,结合程序中变量的应用情况,不难知道这重循环是用变量i,因此,此空答案为i=1;i5;i++。
第(2)空是条件判断语句的条件,此条件判断语句的作用注释中已经给出,是用来确保i,j,k三位互不相同的,即所组成的三位数中无重复数字。因此,此空答案为i!=k&&i!=j&&j!=k。
在函数2.2中,题目要求计算并输出100之内的素数,且每行只能输出10个数,从试题一中我们应该很清楚素数的定义了,最小的素数是2。下面我们来分析程序。
第(3)空是第一个循环下面的执行语句,此循环是从2开始一直到100,结合程序不难发现程序中用了一个数组来存放要参加运算的100个数,但是并没有对数组进行赋初值操作,那么此空的作用应该就是对数组进行赋初值,因此,此空答案为a[i]=i。
第(4)空是在循环中的两个条件判断语句下面,从条件判断语句if(a[j]%a[i]==0)不难推断出此循环是用来求当前最小素数的倍数的,此空是对当前最小素数倍数的处理,结合后面的程序可以知道,如果是素数的倍数,那么在数组中的值要被变为0,因此,此空答案为a[j]=0。
第(5)空是在循环输出语句下面,从条件判断语句if(line==10)及下面的操作可以推断出变量line是用来记录一行中输出素数的个数的,在此空的上面一行程序是输出一个素数,那么接下来应该是将变量line加1,因此,此空答案为line++。


以下程序的输出结果是( )。 Option Base 1 Private Sub Command1_Click() Dim a(10),p(3) as Integer k=5 For I-1 to 10 a(i)=I Next I For j=1 to3 p(i)=a(I*j) Next j For I=l to 3 k=k+ p (I)*2 Next I Print k End Sub

A.33

B.28

C.35

D.37


正确答案:A
解析:此题中共定义了两个数组:a(0,p(0,共用到了3次For循环。第1个For语句对数组a(i)赋值,a(1)…a(10)=1...10:第2个For语句,对p(1):1,p(2):4,p(3):9;第3个For语句,计算k的值,3次循环分别得到:5,15, 33。答案为A。


下面程序的运行结果是______。

main()

{ int i=0,j=10,k=2,s=0;

{i+=k;

if(i>j)

{printf("%d\n",s);

break;}

s+=i;}}


正确答案:


运行下列程序时,若输入数据为“321”,则输出结果是( )。 main() {int num,i,j,k,s; scanf("%d",&num); if(num>99) s=3; else if(num>9) s=2; else s=1; i=num/100; j=(num-i*100)/10; k=(num-i*100-j*10); switch(s) {case 3:printf("%d%d%d\n",k,j,i); break; case 2:printf("%d%d\n",k,j); case 1:printf("%d\n",k); } }

A.123

B.1,2,3

C.321

D.3,2,1


正确答案:A
解析:本题考查if-else语句和switch语句。scan函数通过键盘读入nUm的值。因为num=321>99,所以s=3,i=3,i=2k=1。因为s=3,所以执行case 3,输出k,j,i的值,然后通过breed结束程序。


C语言100例及分析教案【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 2.程序源代码:#include stdio.h#include conio.hmain() int i,j,k; printf(n); for(i=1;i5;i+) /*以下为三重循环*/ for(j=1;j5;j+) for (k=1;k5;k+) if (i!k&i!j&j!k) /*确保i、j、k三位互不相同*/ printf(%d,%d,%dn,i,j,k); getch();【程序2】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。2.程序源代码:#include stdio.h#include conio.hmain() long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf(%ld,&i); bonus1100000*0. 1; bonus2bonus1+100000*0.75; bonus4bonus2+200000*0.5; bonus6bonus4+200000*0.3; bonus10bonus6+400000*0.15; if(i100000) bonusi*0.1; else if(i200000) bonusbonus1+(i-100000)*0.075; else if(i400000) bonusbonus2+(i-200000)*0.05; else if(i600000) bonusbonus4+(i-400000)*0.03; else if(i1000000) bonusbonus6+(i-600000)*0.015; else bonusbonus10+(i-1000000)*0.01; printf(bonus%d,bonus); getch(); 【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:2.程序源代码:#include math.h#include stdio.h#include conio.hmain() long int i,x,y,z; for (i=1;i2) /*如果是闰年且月份大于2,总天数应该加一天*/ sum+; printf(It is the %dth day.,sum); getch(); 【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。2.程序源代码:#include stdio.h#include conio.hmain() int x,y,z,t; scanf(%d%d%d,&x,&y,&z); if (xy) tx;xy;yt; /*交换x,y的值*/ if(xz) tz;zx;xt; /*交换x,z的值*/ if(yz) ty;yz;zt; /*交换z,y的值*/ printf(small to big: %d %d %dn,x,y,z); getch(); 【程序6】题目:用*号输出字母C的图案。1.程序分析:可先用*号在纸上写出字母C,再分行输出。2.程序源代码:#include stdio.h#include conio.hmain() printf(Hello C-world!n); printf( *n); printf( *n); printf( * n); printf( *n); getch(); 【程序7】题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!1.程序分析:字符共有256个。不同字符,图形不一样。2.程序源代码:#include stdio.h#include conio.hmain() char a176,b219; printf(%c%c%c%c%cn,b,a,a,a,b); printf(%c%c%c%c%cn,a,b,a,b,a); printf(%c%c%c%c%cn,a,a,b,a,a); printf(%c%c%c%c%cn,a,b,a,b,a); printf(%c%c%c%c%cn,b,a,a,a,b); getch(); 【程序8】题目:输出9*9口诀。1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2.程序源代码:#include stdio.h#include conio.hmain() int i,j,result; printf(n); for (i1;i10;i+) for(j1;j10;j+) resulti*j; printf(%d*%d%-3d,i,j,result); /*-3d表示左对齐,占3位*/ printf(n); /*每一行后换行*/ getch();【程序9】题目:要求输出国际象棋棋盘。1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。2.程序源代码:#include stdio.h#include conio.hmain() int i,j; for(i=0;i8;i+) for(j=0;j8;j+) if(i+j)%2=0) printf(%c%c,219,219); else printf( ); printf(n); getch(); 【程序10】题目:打印楼梯,同时在楼梯上方打印两个笑脸。 1.程序分析:用i控制行,j来控制列,、j根据i的变化来控制输出黑方格的个数。2.程序源代码:#include stdio.h#include conio.hmain() int i,j; printf(11n); /*输出两个笑脸*/ for(i=1;i11;i+) for(j1;ji;j+) printf(%c%c,219,219); printf(n); getch(); 【程序11】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.2.程序源代码:#include、 stdio.h#include conio.hmain() long f1,f2; int i; f1f21; for(i1;i20;i+) printf(%12ld %12ld,f1,f2); if(i%2=0) printf(n); /*控制输出,每行四个*/ f1f1+f2; /*前两个月加起来赋值给第三个月*/ f2f1+f2; /*前两个月加起来赋值给第三个月*/ getch();【程序12】题目:判断101-200之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 2.程序源代码:

某企业发奖金是根据利润提成的。利润低于或等于10万元时可提成10%;低于或等于20万元时,高于10万元的按7.5%提成;高于20万元时,高于20万元的部分按5%提成。当利润为40万元时,应发放奖金多少万元?( )

A.2

B.2.75

C.3

D.4.5


正确答案:B


下列程序的功能是:输入10个整数,逆序后输出。请在程序空白处填入适当语句使程序完成指定的功能。

Private Sub Command2_Click()

Dim i, j, k,temp, arr(11) As lnteger

Dim result As String

For k=1 To 10

arr(k) =Val (InputBox( "请输入第" & k & "个数:","数据输入窗口"))

Next k

i=1

j = 10

Do

temp=arr(i)

arr(i)=arr(j)

arr(j)=temp

i=i+1

j=【12】

Loop While【13】

result =""

For k=1 To 10

result=result & arr(k) & Chr(13)

NeXt k

MsgBox result

End Sub


正确答案:

【12】
【答案】:j-1
【知识点】:VBA程序中循环结构的循环变量的设计
【解析】:此程序的功能是实现10个整数的逆序,变量i从第1个数向后移动需要不断加1,变量j从第10个数向前移动需要不断减1,故此空应填j-1。

【13】
【答案】:i>j
【知识点】:VBA程序中的循环结构
【解析】:此程序是用循环结构实现的,循环结束的条件是变量i和j从两边移到中间两个变量进行数据交换后,下次不再进行数据交换,此时变量i的值大于j的值,故此空应填i>j。


23 有如下程序段,该程序段循环的次数是______。 Dim i As Integer Dim j As Integer Dim k As Integer k=0 For i = 0 To 10 Step 3 For j = 1 To 5 If j > 3 Then k = k + 4: Exit For k=k+1 Print k Next j If i > 8 Then Exit For Next i

A.9

B.10

C.11

D.12


正确答案:D


下列程序的功能是:输入l0个整数。‘Private sub Command2_Click Dim i,j,k,temp,arr(11)As Integer Dimresult As String For k=1T0 10 arr(k)=Val(InputBox( “请输入第”&k&”个数:”,”数据输入窗口”)) Next k i=1 J=10 Do Temp=arr(i) arr(i)=arr(j) arr(j)=tempi=i+1 j=__________LoopWhileresule=””For k=1 To 10 result=result&arr(k)&Chr(13)Nextk MsgBoxresult End Sub 横线处应填写的内容是( )。

A.J-i i<j

B.j+1 i<j

C.j+1 i>j

D.J-1 i>j


正确答案:A
本题中第一个循环是将输入的数放进数组中,在第二个循环中进行逆序交换,a(1)是和a(10)进行交换,所以当i=i+1时,j=j-1,当i=5,j=5时,会停止循环,所以条件必须为i<j。


阅读以下函数说明和C语言函数,将应填入(n)处的字句填写在对应栏内。

[函数2.1说明]

函数fun1 (int m, int k, int xx [])的功能是:将大于整数m且紧靠m的k个素数存入数组xx中传回。例如:若输入17,5,则应输出:19,23,29,31,37。

[函数2.1]

fun1 (int m, int k, int xx [] )

{

inti, j, s=0;

for ( i=m+1; k>0; i++ )

{for (j=2; j<i; j++ )

if ( i %j=0 )

(1)

if( i==j )

{

(2)

k--; }

}

}

[函数2.2说明]

函数void fun 2 ()的功能是:打印出杨辉三角形(要求打印出10行)。

[函数2.2]

void fun2 ( )

{

int i, j;

int a[10][10];

printf ("\n" );

for (i=0; i<10; i++

{a [i] [0]=1;

(3))

for (i=2; i<l0; i++ )

for (j=1; j<i; j++)

(4)

for (i=0; i<10; i++ )

{for (j=0; j<=i; j++ )

(5)

printf ( "\n" );

}

}


正确答案:(1)break; (2) xx [s++]=i; (3)a[i][i] =1; (4) a[i][j]=a[i-1] [j-1)+a[i-1][j]; (5) printf ("%5d"a[i] [j]);
(1)break; (2) xx [s++]=i; (3)a[i][i] =1; (4) a[i][j]=a[i-1] [j-1)+a[i-1][j]; (5) printf ("%5d",a[i] [j]);

更多 “C语言100题考试必备” 相关考题
考题 某企业发奖金是根据利润提成的,利润低于或等于l0万元时可提成l0%;低于或等于20万时,高于l0万元的部分按7.5%提成;高于20万元时,高于20万元的部分按5%提成。当利润为40万元时,应发放奖金(  )。 A. 2万元 B. 2.75万元 C. 3万元 D. 4.5万元 答案:B解析:.10*10%+10*7.5%+20*5%=2.75

考题 有如下程序#include "stdio.h"main(){ int j,i,k=0; for(j=20;j<=30;j++) { if(!(k%10))printf("\n"); for(i=2;i<j;i++)if(!(j%i))break; if(i>=j-1) { printf("%d",j); k++;} }}程序的运行结果是A.2329 B.2923C.3292 D.9232正确答案:A在本题中,程序首先定义了三个整型变量,并将变量k赋值为0,然后开始循环,循环开始时,变量j的值为20,结束时,变量j的值为30,每循环一次,变量j自加1,即循环10。当j=20,k=0时,“!(k%10)”为真,输出换行,即循环开始时,输出从新的一行开始,执行第二重循环,此时的i=2,“!(j%i)”为真,运行break语句,即跳出本层循环(从这里我们可以看出,j如果可以被i整除,则跳出本层循环),然后判断i是否不小于j-1,如果是,则输出此时j的值,否则k自加1。从程序执行的过程来看,这个题目确实非常复杂,循环的次数太多,但经过上面一次循环过程的分析,我们可以发现,其实这个程序的作用是找出20~30之间除1和本身外,不能被其他小于本身的数据整除的数,并从小到大输出这样的数。这样就能很容易地得到答案是2329。

考题 阅读FORTRAN程序: READC*,*)I,J,K DO 10 N=l,2 I=I+J+K J=I+K+J K=I+J+K 10 CONTINUE WRITE(*,20)I,J,K 20 FORMAT(2X,315) END 键盘输入1,0,0则程序运行后的输出结果是: A. 4 7 13 B.2 3 4 C. 1 1 2 D. 6 9 15 答案:A解析:解当N=1时,I=l+0+0==l,J=l+0+0=l,K=l+l+0=2; 当N=2时,I=l+l+2=4,J=4+2+l=7,K=4+7+2=13。 答案:A

考题 某企业发奖金是根据利润提成的。利润低于或等于10万元时可提成10%;低于或等于20万元时,高于10万元的部分按7.5%提成;高于20万元时,高于20万元的部分按5%提成。当利润为40万元时,应发放奖金多少万元?(  )。A.2 B.2.75 C.3 D.4.5 答案:B解析:此题中设置的提成有三个级别:(1)≤10提成10%;10<(2)≤20提成7.5%;(3)>20提成5%。当利润为40万时,在第一个级别时可提1万;第2个级别可提0.75万;第三个级别可提1万,故总额为2.75万。

考题 下列程序的输出结果是【】。 include void main() { int i(1),j(2),k(3),a(10); if(!i下列程序的输出结果是【 】。include<iostream.h>void main(){int i(1),j(2),k(3),a(10);if(!i)a--;else if(j)if(k)a=5;elsea=6;a++;cout<<a<<endl;if(i<j)if(i!=3)if(!k)a=1;else if(k)a=5;6+=2;cout<<a<<endl;正确答案:6767

考题 以下选项中循环结构合法的是( )。A.while (int i<7) { i+ + System.out.println("i is" + i): }B.int j:3; while (j) { System.out.println("j is"+j); }C.int j=O; for (int k=0; j + k!=10; j + +, k+ +) { System.out.println("j is"+j +,"k is"+ k): }D.int i=0: do{ {System.out.println("j is"+ j+ +); if (j==3){continue loop;} }while(j<10);正确答案:C

考题 某企业业务员的工资是根据利润提成的,利润低于或等于10万元时,可提成15%,利润低于或等于15万元时,高于10万元部分按10%提成,高于15万元部分按7%提成,当利润为20万元时应发给业务员( )工资。A.2.5 2万元B.2.35万元C.2万元D.3.15万元正确答案:B该业务员的工资应为10×15%+5×10%+5×7%=2.35万元,故选B。

考题 某企业发奖金是根据利润提成的,利润低于或等于10万元时可提成10%;低于或等于20万时,高于10万元的部分按7.5%提成;高于20万元时,高于20万元的部分按5%提成。当利润为40万元时,应发放奖金多少万元? A.2 B.2.75 C.3 D.4.5 答案:B解析:由题意,提成为10×10%+10×7.5%+20×5%=2.75万元。

考题 有以下程序(函数fun只对下标为偶数的元素进行操作)#include<stdio.h>void fun(int*a,int n){int i,j,k,t;for(i=0;i<n-1;i+=2){k=i;for(j=i;j<n;j+=2)if(a[j]>a[k])k=j;t=a[i];a[i]=a[k];a[k]=t;}}main( ){int aa[10]=[1,2,3,4,5,6,7],a;fun(aa,7);for(i=0i<7;i++)printf(”%d,”,aa[i]);printf(”\n”);}程序运行后的输出结果是( )。A.7,2,5,4,3,6,1,B.1,6,3,4,5,2,7,C.7,6,5,4,3,2,1,D.1,7,3,5,6,2,1,正确答案:A解析:对下标为偶数的元素进行降序排序,下标为奇数元素保持不变

考题 :某企业发奖金是根据利润提成的,利润低于或等于1O万元时可提成10%;低予或等于20万元时,高于10万元的部分按7.5%提成;高于20万元时,高于20万元的部分按50/c提成。当利润为40万元时,应发奖金多少万元?( )A.2.75B.2C.3D.4.5正确答案:A