4、对于下面程序,( )是正确的判断。 #include int main() { int x,y; scanf("%d%d",&x,&y); if (x>y) x=y;y=x; else x ;y ; printf("%d,%d",x,y); return 0; } a、有语法错误,不能通过编译 b、若输入3和4,则输出4和5 c、若输入4和3,则输出3和4 d、若输入4和3,则输出4和5
5、对于下面程序段,( )是正确的判断。 int x=0,y=0,z=0; if (x=y z) printf("***"); else printf("###"); a、有语法错误,不能通过编译 b、输出:*** c、可以编译,但不能通过连接,所以不能运行 d、输出:###
6、若int i=10;执行下面程序段后,变量i的值是( )。 switch (i) { case 9: i =1 ; case 10: i =1 ; case 11: i =1 ; default: i =1 ; } a、10 b、11 c、12 d、13
7、若int i=1;执行下面程序段后,变量i的值是( )。 switch (i) { case '1': i =1 ; case '2': i =1 ; case '3': i =1 ; default : i =1 ; } a、2 b、3 c、4 d、5
8、若有定义:float w; int a,b;则合法的switch语句是( )。 a、switch (w) { case 1.0:printf("*\n"); case 2.0:printf("**\n"); } b、switch (a); { case 1:printf("*\n"); case 2:printf("**\n"); } c、switch (b) { case 1:printf("*\n"); default:printf("\n"); case 1 2:printf("**\n"); } d、switch (a b); { case 1:printf("*\n"); case 2:printf("**\n"); default:printf("\n"); }
3、与y=(x>0 ? 1: x<0 ? -1:0);的功能相同的if语句是( )。 a、y=0; if (x>=0) if (x>0) y=1; else y=-1; b、if (x) if (x>0) y=1; else if (x<0) y=-1; else y=0; c、y=-1; if (x) if (x>0) y=1; else if (x==0) y=0; else y=-1; d、if (x>0) y=1; else if (x<0) y=-1; else y=0;
4、下面程序段表示以下( )式子。 if(a a、 b、 c、 d、
5、下面程序执行后的输出结果是( )。 #include int 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 ; case 3: a ; b ; } printf("a=%d,b=%d",a,b); return 0; } a、a=1,b=0 b、a=2,b=1 c、a=1,b=1 d、a=2,b=2
8、有以下程序段: int n=0,p; do { scanf("%d",&p); n ; } while (p!=12345 && n<3); 此处do—while循环的结束条件是( )。 a、p的值不等于12345并且n的值小于3 b、p的值等于12345并且n的值大于等于3 c、p的值不等于12345或者n的值小于3 d、p的值等于12345或者n的值大于等于3
17、下面程序执行后的输出结果是( )。 #include int main() { int a=0,i; for(i=1;i<5;i ) switch(i) { case 0: case 3:a =2; case 1: case 2:a =3; default:a =5; } printf("%d",a); return 0; } a、31 b、13 c、10 d、20
18、若变量已正确定义,不能完成求5!的程序段是( )。 a、for(i=1,p=1;i<=5;i ) p*=i; b、for(i=1;i<=5;i ){ p=1; p*=i;} c、i=1;p=1;while(i<=5){p*=i; i ;} d、i=1;p=1;do{p*=i; i ;}while(i<=5);
19、下面程序段中,( )与其他三个程序段的作用不同。 a、k=1;s=0; while (1) { s =k ; k=k 1; if (k>100) break ; } printf("%d",s); b、k=1;s=0; repeat : s =k ; if ( k<=100) goto repeat; printf("%d",s); c、int k,s=0; for (k=1;k<=100;s = k); printf("%d",s); d、k=1;s=0; do s =k; while ( k<=100); printf("%d",s);
20、以下不是死循环的程序段是( )。 a、int i=100; while (1) { i=i0 1 ; if (i>100) break ; } b、for ( ; ; ) ; c、int k=0; do { k ; } while (k>=0); d、int s=36; while (s) ; --s ;
21、以下是死循环的程序段是( )。 a、for (i=1;;) { if (i %2==0) continue ; if (i %3==0) break ; } b、for (i=1;;) if ( i<10) continue ; c、i=32767; do { if (i<0) break ; } while ( i) ; d、i=1 ; while (i--);
22、do-while允许从外部转到循环体内。
23、do-while循环中,根据情况可以省略while。
24、for循环中三个表达式可以任意省略,while、do-while的表达式也是如此。
25、continue语句只能用于三个循环语句中。
26、for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来。
27、写出下面程序执行后的运行结果。 #include int main() { int i,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",i,k); return 0; } #include int main() { int i,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",i,k); return 0; }#include int main() { int i,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",i,k); return 0; }#include int main() { int i,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",i,k); return
28、下面程序运行时从键盘上输入:420↙,写出程序的运行结果。 #include int main() { char c; while ((c=getchar())!='\n') switch(c-'0') { case 0: case 1:putchar(c 2); case 2:putchar(c 3);break; case 3:putchar(c 4); default:putchar(c 1);break; } return 0; }
29、写出下面程序执行后的运行结果。 #include int main() { int k=1,n=263 ; do { k*=n ; n/=10 ; } while (n) ; printf("%d",k); return 0; }
30、写出下面程序执行后的运行结果。 #include int main() { int i=5 ; do { switch (i) { case 4: i-- ; break ; case 6: i-- ; continue ; } i-- ; i-- ; printf("%d",i); } while (i>0); return 0; }
31、写出下面程序执行后的运行结果。 #include int 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("%d,",x); } return 0; }
32、写出下面程序执行后的运行结果。 #include int main() { int i; for(i=0; i<5; i ) switch(i%2) { case 0: printf("1"); break; case 1: printf("0"); break; } return 0; }
33、下面程序按公式 求和并输出结果。请填空使程序完整、正确。 #include int main(){ int k ; double s=0; for (k=1 ; k<=100 ; k ) s =k ; for (k=1 ; k<=50 ; k ) s =______; for (k=1 ; k<=10 ; k ) s =1.0/k; printf("sum=%f",s); return 0; }
3、下面程序段运行时从键盘上输入:2473↙,其输出结果是( )。 #include int main() { 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"); return 0; } a、668977 b、668966 c、66778777 d、6688766
4、下面程序段中while循环的循环次数是( )。 int i=0; while (i<10) { if (i<1) continue; if (i==5) break; i ; } a、1 b、10 c、6 d、死循环,不能确定次数
5、下面程序执行后的输出结果是( )。 #include int main() { int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i ; s =i; }; printf("%d",s); return 0; } #include int main() { int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i ; s =i; }; printf("%d",s); return 0; }#include int main() { int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i ; s =i; }; printf("%d",s); return 0; }#include int main() { int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i ; s =i; }; printf("%d",s); return 0; } a、10 b、13 c、21 d、死循环
6、下面程序执行后的输出结果是( )。 #include int main() { int k=0,m=0,i,j; for (i=0; i<2; i ) { for (j=0; j<3; j ) k ; k-=j ; } m = i j ; printf("k=%d,m=%d",k,m); return 0; } a、k=0,m=3 b、k=0,m=5 c、k=1,m=3 d、k=1,m=5
第16讲 编程实现枚举算法
课后测验:编程实现枚举算法
1、下面程序的功能是计算两个整数的( )。 #include int main() { int m,n,w; scanf("%d,%d",&m,&n); while (n) { w=m; m=n; n=w%n; } printf("%d",m); return 0; } a、最大公约数 b、最小公倍数 c、m和n值交换 d、m和n的乘积
2、下面程序的功能是计算s=1 12 123 1234 12345 …… 123456789,下划线处应填写( )。 #include int main() { int t=0,s=0,i; for( i=1; i<=9; i ) { t=____________; s=s t; } printf("s=%d",s); return 0; } a、10*t i b、t i c、10*i t d、s*10 i
3、一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13 53 33),下面程序的功能是找出所有的这种数,下划线处应填写()。 #include int main() { int n, a, b, c; /*n、a、b和c分别为三位数及其个位、十位和百位*/ scanf("%d",&n); for(c=1;c<=9;c ) for (b=0;b<=9;b ) for( 1 ;a ) { n= 2 ; if(a*a*a b*b*b c*c*c== 3 ) printf("%d\n",n); } return 0; } a、【1】 a=0;a<9 【2】 c*100 b*10 a 【3】 n b、【1】 a=1;a<9 【2】 c*100 b*10 a 【3】 n c、【1】 a=0;a<9 【2】 a*100 b*10 c 【3】 n d、【1】 a=b 1;a<9 【2】 c*100 b*10 a 【3】 n
4、下面程序段的功能是计算1000!的末尾有多少个零。请填空使程序完整、正确。 提示:只要偶数乘5就会产生0,因为1000!中有一半是偶数,所以求1000!的末尾 有多少个零,其方法就是统计1000!中有多少5的因子。例如10有1个5的因子, 25有2个5的因子,100有2个5的因子等。 #include int main() { int i,k,m; for (k=0,i=5; i<=1000; i =5) { m = i ; while (_______________) { k ; m=m/5 ; } } return 0; } #include int main() { int i,k,m; for (k=0,i=5; i<=1000; i =5) { m = i ; while (【1 】) { k ; m=m/5 ; } } return 0; }
5、写出下面程序执行后的运行结果。 #include int main() { int i=0,a=0; while(i<40) { for(;;) { if((i)==0) break; else i--; } i =11; a =i; } printf("%d",a); return 0; }
5、以下函数定义正确的是( )。 a、double f(int x,int y) { z=x y ; return z ; } b、double f(int x,y) { double z=x y ; return z ; } c、double f(x,y) { int x, y ; double z ; z=x y; return z ; } d、double f(int x,int y) { double z ; z = x y ; return z ; }
8、下面程序执行后的输出结果是( )。 #include int f(int n) { if (n==1) return 1; return f(n-1) 1;} int main() { int i,j=0; for(i=1;i<3;i ) j =f(i); printf("%d",j); return 0; } a、1 b、2 c、3 d、4
9、设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值, 下列表达式不正确的是( )。 a、int m = max(22,max(59,70)); b、int m = max(max(22,59),70); c、int m = max(22,59,70); d、int m = max(59,max(22,70));
10、对于以下递归函数f,调用f(4)的返回值是__________。 int f(int n) { if (n) return f(n-1) n; else return n; } a、无穷递归 b、4 c、10 d、14
12、下面程序执行后的输出结果是( )。 #include int f() { static int i=0; int s=1; s =i; i ; return s; } int main() { int i,a=0; for(i=0;i<5;i ) a =f(); printf("%d",a); return 0; } a、20 b、24 c、25 d、15
13、下面程序执行后的输出结果是( )。 #include int a=2; int f(int n) { static int a=3; int t=0; if(n%2) { static int a=4; t =a ; } else { static int a=5; t = a ; } return t a ; } int main() { int s=a, i; for(i=0; i<3; i ) s =f(i); printf("%d", s); return 0; } a、24 b、26 c、28 d、29
12、写出下面程序执行后的运行结果。 #include int main() { int a[4][3]={{1,2,3},{-2,0,2},{1,0,1},{-1,2,-3} }; int b[3][2]={{-1,3},{-2,2},{2,1}}; int c[4][2],i,j,k,s; for(i=0;i<4;i ) { for(k=0;k<2;k ) { s=0; for (j=0;j<3;j ) s =a[i][j]*b[j][k]; c[i][k]=s; printf("m",s); } printf("\n"); } return 0; }
13、下面程序的功能是将十进制整数n转换成base进制。请填空使程序完整、正确。 #include int main() { int i=0,base,n,j,num[20] ; scanf("%d",&n); scanf("%d",&base); do { i ; num[i]=______________; n=n/base; } while (n!=0); for (j=i ;j>=1 ;j--) printf("%d",num[j]); return 0; }
14、下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数。请填空使程序完整、正确。 #include int main() { int a[10],max,min,i,j,k; for (i=0; i<10; i ) scanf("%d",&a[i]); max=min=a[0], j=k=0; for (i=0; i<10; i ) { if (a[i]max) { max=a[i]; k=i;} } a[j]=max , a[k]=min; for (i=0; i<10; i ) printf("%d",a[i]); return 0; }
15、下面程序的功能是向数组输入数据,逆序置换后输出。逆序置换是指数组的首元素和末元素置换,第二个元素和倒数第二个元素置换,………。请填空使程序完整、正确。 #include #define n 8 int main() { int i,j,t,a[n]; for(i=0;i 16、写出下面程序执行后的运行结果。 #include int 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("-",a[i][j]); printf("\n"); } return 0; }
7、写出下面程序执行后的运行结果。 #include float f(float a,float b) { static float x; float y; x=(y=a>b ? a:b)>x ? y : x; return x; } int main() { float a[5]={2.5,-1.5,7.5,4.5,6.5}; int i; for(i=0;i<4;i ) printf("%.1f ",f(a[i],a[i 1])); return 0; }
第30讲 构建大数和高精度类型
课后测验:构建大数和高精度类型
1、程序填空,使下面程序实现输出n!(n<=10000)的最低三位。 #include int main() { int n,m=1; scanf("%d",&n); for (int i=1;i<=n;i ){ m=m*i; m=__________; } printf("d",m); return 0; }
2、程序填空,使下面程序实现输出n!(n<=10000)的十进制位数。 #include #include int main () { int i, n; double sum; sum = 0.0; scanf("%d", &n); for (i = 2; i <= n; i ) { sum =_________; } printf ("%d\n", (int)ceil(sum)); return 0; }
3、下面的程序实现计算整数n的_______。 #include int main() { int n,j,i,t,p; int fact[10000]; while(scanf("%d",&n)!=eof){ t=p=0; fact[0]=1; for(j=1;j<=n;j ){ for(i=0;i<=t;i ){ fact[i]=fact[i]*j p; p=fact[i]/100000; fact[i]%=100000; } if(p){ t ; fact[t]=p; p=0; } } printf("%d",fact[t]); for(i=t-1;i>=0;i--) printf("d",fact[i]); printf("\n"); } return 0; }
16、下面程序运行时从键盘上输入:aabd↙,写出程序的运行结果。 #include int main() { char s[80]; int i=0; gets(s); while (s[i]!='\0') { if (s[i]<='z' && s[i]>='a') s[i]='z' 'a'-s[i] ; i ; } puts(s); return 0; }
17、写出下面程序执行后的运行结果。 #include int main() { int i=0; char c,s[]="sabc"; while(c=s[i]) { switch(c) { case 'a': i ; break; case 'b': i; default : putchar(c);i ; } putchar('*'); } return 0; }
18、写出下面程序执行后的运行结果。 #include int main() { int i,c; char s[2][5]={"1980","9876"}; for (i=3; i>=0 ; i--) { c=s[0][i] s[1][i]-2*'0'; s[0][i] = c % 10 ; } for (i=0; i<=1 ; i ) puts(s[i]); return 0; }
19、写出下面程序执行后的运行结果。 #include #include int main() { char ch[]="abc",x[3][4]; int i; for(i=0;i<3;i ) strcpy(x[i],ch); for(i=0;i<3;i ) printf("%s",&x[i][i]); return 0; }
20、写出下面程序执行后的运行结果。 #include #include void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i 21、输入hello↙,写出下面程序的运行结果。 #include #include int main() { char s[80],t[200]; int i,sl ; gets(s); sl = strlen(s); for(i=0 ;i 22、运行下面程序输入abcbcbded↙和bc↙,写出程序的输出结果。 #include int main() { char substr[80],str[80]; int i,j,k,num=0; gets(str); gets(substr); for(i = 0; str[i]; i ) for(j=i,k=0;substr[k]==str[j];k ,j ) if (substr[k 1]=='\0') { num ; break; } printf("num=%d", num); return 0; }
23、运行程序输入adebdwe↙和d↙,写出输出结果。 #include #include int main() { char c , t[50]; int len,j,k; gets(t); c=getchar(); len = strlen(t); for (k=0; k 24、运行程序输入hello↙和world↙,写出输出结果。 #include int main() { char a[100], b[100]; int i=0,j=0 ; gets(a); gets(b); while (a[i]!='\0') i ; while (b[j]!='\0') { a[i]=b[j] ; i ; j ; } a[i]='\0'; printf("%s",a); return 0; }
11、写出下面程序执行后的运行结果。 #include void sort(int a[],int s, int n) { int i,j,t; for(i=s;i 12、写出下面程序执行后的运行结果。 #include void reverse(int a[],int n) { int i,t; for(i=0;i 13、运行下面程序,输入10└┘9└┘8└┘7└┘6└┘5└┘4└┘3└┘2└┘1↙写出下面程序执行后的运行结果。 #include void sort(int a[],int low,int high) { if(low=t) h--; if(h>l){ temp=a[l]; a[l]=a[h]; a[h]=temp; } } sort(a,low,l-1); sort(a,l 1,high); } } int main() { int a[10]; for (int i=0;i<10;i ) scanf("%d",&a[i]); sort(a,3,8); for (int i=0;i<10;i ) printf("%d ",a[i]); return 0; }
14、写出程序的运行结果。 #include int main() { int c[10],i=0,j=0,k=0 ; int a[3]={5,9,10} ; int b[5]={12,24,26,37,48} ; while (i<3 && j<5) if (a[i]>b[j]) { c[k]=b[j] ; k ; j ; } else { c[k]=a[i] ; k ; i ; } while (i<3) { c[k]=a[i] ; i ; k ; } while (j<5) { c[k]=b[j] ; j ; k ; } for (i=0; i 15、读程序写出运行结果。 #include int main() { int a[10]={191,3,6,4,11,7,25,13,89,10} ; int i,j,k ; for (i=1; i<10; i ) { k = a[i] ; j = i-1; while (j>=0 && k>a[j] ) { a[j 1]=a[j] ; j--; } a[j 1]= k ; } for (i=0; i<10; i ) printf("%d ",a[i]); return 0; }