您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 程序阅读及填空(答案)
一.程序阅读题1.若运行时输入100↙,写出以下程序的运行结果。main(){inta;scanf(“%d”,&a);printf(“%s”,(a%2!=0)?”No”:”Yes”);}答案:Yes2.写出以下程序的运行结果。main(){inta=2,b=7,c=5;switch(a0){case1:switch(b0){case1:printf(“@”);break;case2:printf(“!”);break;}case0:switch(c==5){case1:pritnf(“*”);break;case2:printf(“#”);break;default:printf(“#”);break;}default:printf(“&”);}printf(“\n”);}答案:*&3.写出下面程序运行的结果。main(){inti,b,k=0;for(i=1;i=5;i++){b=i%2;while(b--==0)k++;}printf(“%d,%d”,k,b);}答案:204.写出下面程序运行的结果。main(){intk=1,n=263;do{k*=n%10;n/=10;}while(n);printf(“%d\n”,k);}答案:365.写出下面程序运行的结果。main(){inta=10,y=0;do{a+=2;y+=a;if(y50)break;}while(a=14);printf(“a=%dy=%d\n”,a,y);}答案:a=16y=60数组部分:1.写出下面程序的运行结果。main(){inta[6][6],i,j;for(i=1;i6;i++)for(j=1;j6;j++)a[i][j]=(i/j)*(j/i);for(i=1;i6;i++){for(j=1;j6;j++)printf(“%2d”,a[i][j]);printf(“\n”);}}2.写出下面程序的运行结果。main(){inti=0;chara[]=”abm”,b[]=”aqid”,c[10];while(a[i]!=’\0’&&b[i]!=’\0’){if(a[i]=b[i])c[i]=a[i]-32;elsec[i]=b[i]-32;i++;}c[i]=’\0’;puts(c);}答案:AQM3.当运行下面程序时,从键盘上输入AabD↙,则写出下面程序的运行结果。main(){chars[80];inti=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(){charc;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(){floatx,y,r;charop;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(){intx=4,y=5,z=8;intu,v;u=xy?【1】;v=uz?【2】;printf(“%d”,v);}答案:【1】x:y【2】u:z2、下述程序用“碾转相除法”计算两个整数m和n的最大公约数。该方法的基本思想是计算m和n相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。否则,将除数作为新的被除数,余数作为新的除数,继续计算m和n相除的余数,判断是否为0,等等,请填(3)空使程序完整。main(){intm,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(){intn,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(ks)printf(“%dd”,n);}}答案:【1】m=n;【2】m!=0【3】m=m/10;4、下面程序按公式(课本169页习题6.5)求和并输出结果,请填(3)空使程序完整。main(){【1】;intk;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】floats=0;【2】1/k【3】%f数组部分:一、程序判断:1.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。main(){inta[3]={3*0};inti;for(i=0;i4;i++)scanf(“%d”,&a[i]);for(i=0;i4;i++)printf(“%d”,a[i]);}答案:for(i=0;i3;i++)(只有3个数组元素,下标0~2)2.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。main(){inta[3]={1,2,3},i;scanf(“%d%d%d”,&a);for(i=0;i3;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(){chars[80],t[200];inti,sl;gets(s);sl=strlen(s);for(i=0;isl;i++)t[i]=s[sl-i];改为:t[i]=s[sl-i-1];for(i=0;isl;i++)t[sl+i]=s[i];t[s1+i]='\0';加上语句:t[s1+i]='\0';puts(t);}答案:见右边修改语句4.下面程序的功能是:将n各无序整数从小到大排序;判断下面程序的正误,如果错误请改正过来。main(){inta[100],i,j,p,t,n=20;for(j=0;jn;j++)scanf(“%d”,&a[j]),改为:;for(j=0;jn-1;j++){p=j;for(i=j+1;in-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;jn;j++)printf(“%d”,&a[j]);}答案:见右边修改语句5.下面程序的功能是:统计子字符串substr在字符串str中出现的次数。例如,若字符串为aaaslkaaas,子字符串为as,则应输出2;判断下面程序的正误,如果错误请改正过来。main(){charsubstr[80],str[80];inti,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(){inta[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;for(i=0;i3;i++)for(j=0;j3;j++)if(【1】)sum=sum+【2】;printf(“sum=%d”,sum);}答案:【1】i==j【2】a[i][j]2.下面程序将十进制整数base转换成n进制,请填(3)空使程序完整。main(){inti,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)空使程序完整。main(){inta[10],max,min,i,j,k;for(i=0;i10;i++)main(){inti=0,base,n,j,num[20];scanf(%d,&n);scanf(%d,&base);do{i++;num[i]=base%n;base=base/n;}while(base!=0);for(j=i;j=1;j--)printf(%d,num[j]);}main(){charsubstr[80],str[80];/*substr放需要统计的子字符串*/inti,j,k,num=0;gets(substr);gets(str);for(i=0;i=strlen(str)-strlen(substr);i++)for(j=i,k=0;substr[k]==str[j];k++,j++)if(substr[k+1]=='\0'){num++;break;}printf(num=%d,num);}scanf(“%d”,&a[i]);max=min=a[0];for(i=0;i10;i++){if(a[i]min){min=a[i];【1】;}if(a[i]max){max=a[i];【2】;}}/*循环完后,最小的数组元素下标放在变量j中,最大的放在变量k中*/【3】;/*借助中间变量max,将最大最小两数组元素交换*/for(i=0;i10;i++)printf(“%d”,a[i]);}答案:【1】j=i【2】k=i【3】max=a[j];a[j]=a[k];a[k]=max;4.下面程序用“插入法”对数组a进行由小到大的排序,请填(3)空使程序完整。经典算法提示:简单插入排序算法的基本思想使将数组处理n-1次,第k次处理是将第k个元素插入到目前的位置。第k次的元素是这样插入的:在第k次处理时,前面的元素a[0],a[1],…,a[k-1]必定已排成了升序,将a[k]与a[k-1],a[k-2],…a[0]逐个比较(由后向前),若有a[j]a[k],则a[k]插入到a[j]之后,否则a[k]维持原位不变。main(){inta[10]={191,3,6,4,11,7,25,13,89,10};inti,j,k;for(i=1;i10;i++){k=a[i];j=【1】;while(j=0&&ka[j]){/*ka[j]改为:ka[j]*/【2】;j--;}【3】=k;}for(i=0;i10;i++)printf(“%d”,a[i]);}答案:【1】i-1【2】a[j+1]=a[j]【3】a[j+1]5.下面程序用“两路合并法”把两个已
本文标题:程序阅读及填空(答案)
链接地址:https://www.777doc.com/doc-7026124 .html