程序阅读课程训练.docx
《程序阅读课程训练.docx》由会员分享,可在线阅读,更多相关《程序阅读课程训练.docx(17页珍藏版)》请在冰点文库上搜索。
![程序阅读课程训练.docx](https://file1.bingdoc.com/fileroot1/2023-6/8/b8018511-4367-4ae6-b623-19e6b257bdab/b8018511-4367-4ae6-b623-19e6b257bdab1.gif)
程序阅读课程训练
程序阅读课程训练
要求:
⑴写出每个题程序的功能
⑵给程序每一行标上注释
⑶选择必要的测试数据
⑷写出程序的运行结果,并分析程序的正确性
⑸程序存在的问题,或修改程序的意见
第三章阅读程序练习
1.选择题
⑴以下说法正确的是()。
A.输入项可以为一个实型常量,如scanf("%f",3.5)
B.只有格式控制没有输入项也能进行正确输入,如scanf("%d")
C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f",&f)
D.当输入数据时,必须指明变量的地址,如scanf("%f",&f)
⑵若x和y均定义为int型,z定义为double型,以下scanf()函数调用语句不合法的是()。
A.scanf("%d%lx,%le",&x,&y,&z); B.scanf("%2d*%d%lf",&x,&y,&z);
C.scanf("%x%*d%o",&x,&y); D.scanf("%x%o%6.2f",&x,&y,&z);
⑶字母a的ASCII码为97,则下列语句的运行结果为()。
chara='a';a--;printf("%d,%c\n",a+'2'-'0',a+'3'-'0');
A.b,cB.a--运算不合法,故有语法错
C.98,cD.格式描述和输出项不匹配,输出无定值
⑷有如下程序,输入数据12345678↙后,x的值是(①),y的值是(②)。
#include
main()
{intx;floaty;
scanf("%3d%f",&x,&y);
}
①A.12345B.123C.45D.345
②A.45.000000B.45678.000000C.678.000000 D.123.000
⑸若k1,k2,k3,k4均为int型变量,为了将整数10赋给k1和k3,将整数20赋给k2和k4,则对应以下scanf()函数调用语句的正确输入方式是()。
scanf("%d%d",&k1,&k2);
scanf("%d,%d",&k3,&k4);
A.1020
B.1020
C.10,20
D.1020
1020
1020
10,20
10,20
⑹if后面的逻辑表达式之值()。
A.只能是0或1B.只能是正整数或负整数
C.只能是整型或字符型数据D.可以是任何类型的数据
⑺下列程序的输出结果是()。
main()
{inti=1,j=2,k=3;
if(i++==1&&(++j==3‖k++==3))printf("%d%d%d\n",i,j,k);
}
A.123B.234C.223D.233
⑻以下不正确的if语句是()。
A.if(x>y);B.if(x=y)&&(x!
=0)x+=y;
C.if(x!
=y)scanf("%d",&x);D.if(xelsescanf("%d",&y);
⑼执行下列程序,输入为1的运行结果是(①),输入为3的运行结果是(②)。
#include
main()
{intk;
scanf("%d",&k);
switch(k)
{case1:
printf("%d",k++);break;
case2:
printf("%d",k++);
case3:
printf("%d",k++);break;
case4:
printf("%d",k++);
default:
printf("Full!
\n");
}
}
①A.1B.2C.2345D.1234
②A.3B.4C.34D.45
⑽以下程序的运行结果是()。
#include
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=2
⑾下列叙述中正确的是()。
A)break语句只能用于switch语句
B)在switch语句中必须使用default
C)break语句必须与switch语句中的case配对使用
D)在switch语句中,不一定使用break语句
⑿设变量x和y均已正确定义并赋值。
下列if语句中,在编译时将出错是()
A)if(x++);B)if(x>y&&y!
=0);
C)if(x>0)x--D)if(y<0){;}
elsey++;elsex++;
⒀语句while(!
e);中的条件!
e等价于()
A.e==0B.e!
=1C.e!
=0D.~e
⒁下面有关for循环的正确描述是()。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判定表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环体语句中,可以包含多条语句,但要用花括号括起来
⒂C语言中()。
A.不能使用do-while语句构成的循环
B.do-while语句构成的循环必须用break语句才能退出
C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环
D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环
⒃C语言中while和do-while循环的主要区别是()。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
⒄以下程序段()。
intx=-1;
do
{x=x*x;}while(!
x);
A.是死循环 B.循环执行二次
C.循环执行一次 D.有语法错误
⒅下列语句段中不是死循环的是()。
A.i=100;
while
(1)
{i=i%100+1;if(i==20)break;}
B.for(i=1;;i++)sum=sum+1;
C.k=0;
do{++k;}while(k<=0);
D.s=3379;
while(s++%2+3%2)s++;
⒆与以下程序段等价的是()。
while(a)
{if(b)continue;
c;}
A.while(a)B.while(c)
{if(!
b)c;}{if(!
b)break;c;}
C.while(c)D.while(a)
{if(b)c;}{if(b)break;c;}
⒇以下程序的输出结果是()。
#include
main()
{inti;
for(i=4;i<=10;i++)
{if(i%3==0)continue;
printf("%d",i);}
}
A.45B.457810C.69D.678910
2.阅读下列程序,给出程序的执行结果
⑴main()⑵main()
{floatf=3.5;{charc;
printf("%f,%g",f,f);scanf("%3c",&c);
}printf("c=%c\n",c);}
⑶main()⑷main()
{inta=3,b=4,c=5,t=99;{ints=1,t=1,a=5,b=2;
if(b0)s++;
{t=a;a=c;c=t;}if(a>b)t+=s;
if(a{t=b,b=a,a=t;}elset=2*s;
printf("%d%d%d\n",a,b,c);}printf("s=%d,t=%d\n",s,t);}
⑸main()⑹main()
{inti,j,k;{intk=2;
for(i=1;i<=6;i++)switch(k)
{for(j=1;j<=20-3*i;j++){case1:
printf("%d",k++);
printf("");case2:
printf("%d",k++);
for(k=1;k<=i;k++)case3:
printf("%d",k++);
printf("%3d",k);case4:
printf("%d",k++);
for(k=i-1;k>0;k--)break;
printf("%3d",k);default:
printf("Full!
\n");
printf("\n");}
}printf("\n");
}}
⑺main()⑻main()
{inti=1,s=3;{inti,j;
do{s+=i++;for(i=4;i>=1;i--)
if(s%7==0)continue;{printf("*");
else++i;for(j=1;j<=4-i;j++)
}while(s<15);printf("*");
printf("%d\n",i);printf("\n");}
}}
⑼main()⑽main()
{inti,j,k;{ints=0,k;
for(i=1;i<=4;i++)for(k=7;k>=0;k--)
{for(j=1;j<=20-3*i;j++)printf("");{switch(k)
for(k=1;k<=2*i-1;k++){case1:
printf("%3s",’*’);case4:
printf("\n");}case7:
s++;break;
for(i=3;i>0;i--)case2:
{for(j=1;j<=20-3*i;j++)printf("");case3:
:
for(k=1;k<=2*i-1;k++)case6:
break;
printf("%3s","*");case0:
printf("\n");case5:
s+=2;break;}
}}
}printf("s=%d\n",s);}
第四章阅读程序练习
1.选择题:
(1)有如下说明
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是
A)*p+9B)*(p+8)
C)*p+=9D)p+8
(2)若有以下调用语句,则不正确的fun函数的首部是
main()
{…
inta[50],n;
…
fun(n,&a[9]);
…
}
A)voidfun(intm,intx[])
B)voidfun(ints,inth[41])
C)voidfun(intp,int*s)
D)voidfun(intn,inta)
(3)执行下面的程序段后,变量k中的值为
intk=3,s[2];
s[0]=k;k=s[1]*10;
A)不定值B)33C)30D)10
(4)以下函数返回a所指数组中最大值所在的下标值
fun(int*a,intn)
{inti,j=0,p;
p=j;
for(i=j;iif(a[i]>a[p])_________;
return(p);
}
在下划线处应填入的内容是
A)i=pB)a[p]=a[i]
C)p=jD)p=i
(5)下列程序的运行结果是
voidfun(int*a,int*b)
{int*k;
k=a;a=b;b=k;
}
main()
{inta=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
A)63B)36C)编译出错D)00
(6)有以下语句,则对a数组元素的引用不正确的是(0≤i≤9)
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
A)a[p-a]B)*(&a[i])
C)p[i]D)*(*(a+i))
(7)定义如下变量和数组:
intk;
inta[3][3]={9,8,7,6,5,4,3,2,1};
则下面语句的输出结果是
for(k=0;k<3;k++)printf("%d",a[k][k]);
A)753B)951
C)963D)741
(8)有两个字符数组a、b,则以下正确的输入语句是_______.
A)gets(a,b);B)scanf("%s%s",a,b);
C)scanf("%s%s",&a,&b);D)gets("a"),gets("b");
(9)下面程序段的运行结果是_________.
chara[7]="abcdef";
charb[4]="ABC";
strcpy(a,b);
printf("%c",a[5]);
A)空格B)\0C)eD)f
(10)判断字符串s1是否大于字符串s2,应当使用_______.
A)if(s1>s2)B)if(strcmp(s1,s2))
C)if(strcmp(s2,s1)>0)D)if(strcmp(s1,s2)>0)
2.填空题
(1)该程序运行的结果是_________。
#include
#include
#defineM100
voidfun(intm,int*a,int*n)
{inti,j=0;
for(i=1;i<=m;i++)
if(i%7==0||i%11==0)
a[j++]=i;
*n=j;
}
main()
{intaa[M],n,k;
clrscr();
fun(10,aa,&n);
for(k=0;kif((k+1)%20==0)printf("\n");
elseprintf("%4d",aa[k]);
printf("\n");
}
(2)下面程序以每行4个数据的形式输出a数组,请填空。
#defineN20
main()
{inta[N],i;
for(i=0;ifor(i=0;i{if(_____________)_____________
printf("%3d",a[i]);
}
printf("\n");
}
(3)下面程序可求出矩阵a的主对角线上的元素之和,请填空。
main()
{inta[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(_____)sum=sum+_______;
printf("sum=%d\n",sum);
}
(4)当从键盘输入18并回车后,下面程序的运行结果是________.
main()
{intx,y,i,a[8],j,u,v;
scanf("%d",&x);
y=x;i=0;
do
{u=y/2;
a[i]=y%2;
i++;y=u;
}while(y>=1);
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
}
(5)下面程序的运行结果是________.
#include
main()
{chars[]="ABCCDA";
intk;charc;
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)阅读下列程序为当运行函数时数输入asdafaaz67,则输出为
#include
#include
#include
intfun(char*str)
{inti,j=0;
for(i=0;str[i]!
=′\0′;i++)
if(str[i]!
=′′)str[j++]=str[i];
str[j]=′\0′;
}
main()
{charstr[81];
intn;
clrscr();
printf("Inputastring:
");
gets(str);
puts(str);
fun(str);
printf("%s\n",str);
}
(7)下面函数的功能是将一个字符串的内容颠倒过来,请填空。
voidfun(charstr[])
{inti,j,__________;
for(i=0,j=_________;i{k=str[i];
str[i]=str[j];
str[j]=k;
}
}
3.读程序写结果
(1)下列程序执行后的输出结果是
voidfunc(int*a,intb[])
{b[0]=*a+6;
}
main()
{inta,b[5];
a=0;b[0]=3;
func(&a,b);
printf("%d\n",b[0]);
}
(2)下列程序执行后的输出结果是
main()
{inta[3][3],*p,i;
p=&a[0][0];
for(i=1;i<9;i++)p[i]=i+1;
printf("%d\n",a[1][2]);
}
(3)以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序,程序运行后的输出结果是
voidsort(inta[],intn)
{inti,j,t;
for(i=0;ifor(j=i+1;jif(a[i]{t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++)
printf("%d,",aa[i]);
printf("\n");
}
(4)下面程序的运行结果是________.
#include
main()
{charstr[]="SSSWLIA",c;
intk;
for(k=2;(c=str[k])!
='\0';k++)
{switch(c)
{case'I':
++k;break;
case'L':
continue;
default:
putchar(c);continue;
}
putchar('*');
}
}
(5)以下程序运行后的输出结果是
voidss(char*s,chart)
{while(*s)
{if(*s==t)*s=t-'a'+'A';
s++;
}
}
main()
{charstr1[100]="abcddfefdbd",c='d';
ss(str1,c);printf("%s\n",str1);
}