一.程序阅读题1.若运行时输入100↙,写出以下程序的运行结果。
main ( ){ int a ;scanf(“%d”,&a);printf(“%s”,(a%2!=0)?”No”:”Yes”);}答案: Yes2.写出以下程序的运行结果。
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 1: pritnf(“*”) ; break ;case 2: printf(“#”) ; break ;default : printf(“#”) ; break ;}default : p rintf(“&”);}printf(“\n”);}答案: *&3.写出下面程序运行的结果。
main ( ){ int i,b,k=0 ;for (i=1; i<=5 ; i++) {b=i%2;while (b--==0) k++ ;}printf(“%d,%d”,k,b);}答案:2 04.写出下面程序运行的结果。
main ( ){ int k=1,n=263 ;do { k*= n%10 ; n/=10 ; } while (n) ;printf(“%d\n”,k);}答案:365.写出下面程序运行的结果。
{ 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数组部分:1.写出下面程序的运行结果。
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”);}}2.写出下面程序的运行结果。
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);}答案:AQM3.当运行下面程序时,从键盘上输入AabD↙,则写出下面程序的运行结果。
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);}答案:AzyD二.程序判断题1.下面程序将输入的大写字母改写成小写字母输出,其他字符不变;请判断下面程序的正误,如果错误请改正过来。
main ( ){ char c;c = getchar ( ) ;c = (c>=’A’ | | c<=’Z’) ? c-32 : c+32 ;printf(“%c”,c);}答案: c = (c>=’A’ | | c<=’Z’) ? c-32 : c+32 ; 改为:c = (c>='A'&& c<='Z') ? c+32 : c ;2.下面程序输入两个运算数x,y和一个运算符号op,然后输出该运算结果的值,例如输入3+5↙得到结果8;请判断下面程序的正误,如果错误请改正过来。
main ( ){float x,y,r;char op ;scanf(“%f%c%f”,&x,&op,&y);switch (op) {case ‘+’ : r=x+y ;case ‘-’ : r=x-y ;case ‘*’ : r=x*y ;case ‘/’ : r=x/y ;}printf(“%f”,r);}答案: 每个Case 分之后面加Break;三.程序填空题1、以下程序输出x,y,z三个数中的最小值,请填(2)空使程序完整。
main ( ){ int x=4,y=5,z=8 ;int u,v;u = x<y ? 【1 】;v = u<z ? 【2 】;printf (“%d”,v);}答案: 【1】x:y 【2】u:z2、下述程序用“碾转相除法”计算两个整数m和n的最大公约数。
该方法的基本思想是计算m和n相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。
否则,将除数作填(3)空使程序完整。
main ( ){ int m,n,w;scanf(“%d,%d”,&m,&n);while (n) {w=【1 】;m=【2 】;n=【3 】;}printf(“%d”,m);}答案:【1】w=m%n; 【2】m=n; 【3】n=w;3、下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请填(3)空使程序完整。
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(“%dd”,n);}}答案:【1】m=n; 【2】m!=0 【3】m=m/10;4、下面程序按公式(课本169页习题6.5)求和并输出结果,请填(3)空使程序完整。
main ( ){【1 】;int k ;for (k=1 ; k<=100 ; k++)s+=k ;for (k=1 ; k<=50 ; k++)s+=k*k ;for (k=1 ; k<=10 ; k++)s+=【2 】;printf(“sum=【3 】”,s);}答案:【1】float s=0; 【2】1/k 【3】%f数组部分:一、程序判断:1.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。
main ( ){ int a[3]={3*0} ;int i;for (i=0; i<4; i++) scanf(“%d”,&a[i]);for (i=0; i<4; i++) printf(“%d”,a[i]);}答案: for (i=0; i<3; i++) (只有3个数组元素,下标0~2)2.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。
main ( ){ int a[3]={1,2,3} , i;scanf(“%d%d%d”,&a);for (i=0; i<3; i++) printf(“%d”,a[i]);}答案:scanf("%d%d%d",&a[0],&a[1],&a[2]);3.下面程序的功能是:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如,当s中的字符串为:“ABCDE”时则t中的字符串应为:“EDCBAABCDE”;判断下面程序的正误,如果错误请改正过来。
main ( ){ char s[80],t[200]; int i,sl ;gets(s); sl = strlen(s);for (i=0; i<sl; i++) t[i] = s[sl-i]; 改为:t[i] = s[sl-i-1];for (i=0; i<sl; i++) t[sl+i] = s[i];t[s1+i]='\0'; 加上语句:t[s1+i]='\0';puts(t);}答案:见右边修改语句4.下面程序的功能是:将n各无序整数从小到大排序;判断下面程序的正误,如果错误请改正过来。
main ( ){ int a[100], i, j, p, t, n=20 ;for (j = 0; j<n ; j++) scanf(“%d”, &a[j]), 改为:;for (j = 0;j<n-1 ; j++){ p = j;for ( i=j+1; i<n-1 ; i++ ) n-1 改为:nif (a[p]>a[i]) t=i; t 改为:pif (p!=j){ t = a[j]; a[j] = a[p]; a[p]=t; }}for ( j = 0; j<n ; j++ ) printf(“%d ”, &a[j]);}答案:见右边修改语句aaas lkaaas ,子字符串为as ,则应输出2main ( ) { char substr[80],str[80]; int i,j,k,num=0; gets(substr); gets(str); 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); } 答案: 程序修改如右框所示。
二、程序填空题1.下面程序可求出矩阵a 的主对角线上的元素之和,请填(2)空使程序完整。
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=sum+【2 】;printf(“sum=%d”,sum);}答案: 【1】i= =j 【2】a[i][j]2.下面程序将十进制整数base 转换成n 进制,请填(3)空使程序完整。
main ( ) { int i,base,n,j,num[20] ; scanf(“%d”,&n); scanf(“%d”,base) ; do { i++; num[i]=【1 】; n =【2 】; } while (n!=0); for (【3 】) ; printf(“%d”,num[j]) ; }答案: 此程序有点小错误,红色文字为改正错误,蓝色文字为填空答案.3.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数,请填(3)空使程序完整。