《高级语言程序设计》复习题1.docx
《《高级语言程序设计》复习题1.docx》由会员分享,可在线阅读,更多相关《《高级语言程序设计》复习题1.docx(16页珍藏版)》请在冰豆网上搜索。
![《高级语言程序设计》复习题1.docx](https://file1.bdocx.com/fileroot1/2023-2/21/3796c198-4744-4d4b-a494-692b1c1576f9/3796c198-4744-4d4b-a494-692b1c1576f91.gif)
《高级语言程序设计》复习题1
一、单项选择题
(1)以下选项中,能用作用户标识符的是:
(C)
A)voidB)8_8C)_0_D)unsigned
(2)若有定义语句:
intx=10;,则表达式x-=x+x的值为(B)
A)-20B)-10C)0D)10
(3)设有定义:
inta=1,b=2,c=3;,以下语句中执行效果与其他三个不同的是(C)
A)if(a>b)c=a,a=b,b=c;B)if(a>b){c=a,a=b,b=c;}
C)if(a>b)c=a;a=b;b=c;D)if(a>b){c=a;a=b;b=c;}
(4)以下选项中,能用作数据常量的是(D)
A)o115B)0118C)1.5e1.5D)115L
(5)有以下语句
int a1,a2; char c1,c2;
scanf("%d%c%d%c",&a1,&c1,&a2,&c2);
若通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,则正确的输入格式是(以下代表空格,¿代表回车)(A)
A)12a34b¿B)12a34b¿C)12,a,34,b¿D)12a34b¿
(6)若有定义:
intx[10],*pt=x;,则对数组元素的正确引用是(B)
A)*&x[10]B)*(x+3)C)*(pt+10)D)pt+3
(7)若文本文件filea.txt中原内容为:
hello,则运行以下程序后,filea.txt中的内容为(C)
main()
{FILE *f;
f=fopen("filea.txt","w+");
fprintf(f,"abc");
fclose(f);
}
A)helloabcB)abcloC)abcD)abchello
(8)以下程序的运行结果是(B)
intfun(inta,intb)
{if(b==0)returna;
elsereturn(fun(--a,--b));
}
main()
{printf("%d\n",fun(4,2));}
A)1B)2C)3D)4
(9)可在C程序中用作用户标识符的一组标识符是(A)。
A)and_2007B)Datey-m-dC)HiDr.TomD)caseBigl
(10)设有定义:
intk=0;,下列选项的4个表达式中与其他3个表达式的值不同的是(A)
A)k++B)k+=1C)++kD)k+1
(11)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。
下列不能将变量ch中的大写字母转换为对应小写字母的语句是(D)
A)ch=(ch-'A')%26+'a'B)ch=ch+32C)ch=ch-'A'+'a'D)ch=('A'+ch)%26-'a'
(12)有以下程序
intfun()
{staticintx=1;
x+=1;returnx;
}
main()
{inti,s=1;
for(i=1;i<=5;i++)s+=fun();
printf("%d\n",s);
}
程序运行后的输出结果是(B)
A)11B)21C)6D)120
(13)若有定义intx,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?
(x++):
(y++)中的条件表达式(x-y)等价的是(D)
A)(x-y<0)B)(x-y==0)C)(x-y>0)D)(x-y<0||x-y>0)
(14)以下程序运行后的输出结果是(C)
main()
{charstr[]="012xy\08s34f4w2";
inti,cnt=0;
for(i=0;str[i]!
=0;i++)
if(str[i]>='0'&&&&str[i]<='9')cnt++;
printf("%d\n",cnt);
}
A)8B)0C)3D)7
(15)以下程序运行后的输出结果是(A)
voidswap(char*x,char*y)
{char*t;
t=x;x=y;y=t;
printf("%s,%s\n",x,y);
}
main()
{char*s1="abc",*s2="123";
swap(s1,s2);
}
A)1bc,a23B)abc,123C)321,cbaD)123,abc
(16)设有如下函数定义
intfun(intk)
{if(k<1)return0;
elseif(k==1)return1;
elsereturnfun(k-1)+1;
}
若执行调用语句:
n=fun(5);,则n的值为(B)
A)0B)1C)3D)5
(17)以下程序运行后的输出结果是(D)
#include
typedefstruct{charname[9];charsex;intscore[2];}STU;
STUf(STUa)
{STUb={"Zhao",'m',85,90};
inti;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)a.score[i]=b.score[i];
returna;
}
main()
{STUc={"Qian",'f',95,92},d;
d=f(c);
printf("%s,%c,%d,%d,",d.name,d.sex,d.score[0],d.score[1]);
printf("%s,%c,%d,%d\n",c.name,c.sex,c.score[0],c.score[1]);
}
A)Zhao,m,85,90,Zhao,m,85,90B)Qian,f,95,92,Zhao,m,85,90
C)Qian,f,95,92,Qian,f,95,92D)Zhao,m,85,90,Qian,f,95,92
(18)设有定义:
structcomplex
{intreal,unreal;}data1={1,8},data2;
则以下赋值语句中错误的是(A)
A)data2=(2,6);B)data2.real=data1.unreal;C)data2.real=data1.real;D)data2=data1;
(19)以下程序运行后的输出结果是(A)
main()
{intc=0,k;
for(k=1;k<3;k++)
switch(k)
{default:
c+=k;
case2:
c++;break;
case4:
c+=2;break;
}
printf("%d\n",c);
}
A)3B)5C)7D)9
(20)以下程序运行后的输出结果是(B)
#include
main()
{intm=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf("%d,%d,%d\n",m,n,*p,*q);
}
A)1,2,1,2B)1,2,2,1C)2,1,2,1D)2,1,1,2
(21)以下程序运行后的输出结果是(D)
voidmain()
{inti=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf(“%d%d%d”,i,j,k);
}
A)123B)234C)223D)233
(22)若文本文件filea.txt中原内容为:
hello,则运行以下程序后,filea.txt中的内容为(A)
main()
{FILE *f;
f=fopen("filea.txt","a+");
fprintf(f,"abc");
fclose(f);
}
A)helloabcB)abcloC)abcD)abchello
(23)若文本文件filea.txt中原内容为:
hello,则运行以下程序后,filea.txt中的内容为(B)
main()
{FILE *f;
f=fopen("filea.txt","r+");
fprintf(f,"abc");
fclose(f);
}
A)helloabcB)abcloC)abcD)abchello
二、程序阅读题
1.以下程序的功能是求出最小的3位“水仙花数”。
3位“水仙花数”是指一个3位数,它的每个位上的数字的立方之和等于它本身。
例如,33+73+03=370,因此370是一个3位的水仙花数。
请将程序填充完整。
voidmain()
{inti,n1,n2,n3;
for(i=100;i<1000;i++)/*
(1)*/
{
n1=i/100;/*
(2)*/
n2=i/10%10;/*(3)*/
n3=i%10;/*(4)*/
if((n1*n1*n1+n2*n2*n2+n3*n3*n3)==i)printf(“%disexistent!
”,i);/*(5)*/
}
if((n1*n1*n1+n2*n2*n2+n3*n3*n3)!
=i)printf("%d\n",i);/*(6)*/
elseprintf("Non-existent\n");
}
2.以下函数的功能是判断形式参数year所代表的年份是否为闰年,若是返回1,若不是返回0。
请将程序填充完整。
intisLeap(intyear)/*
(1)*/
{intleap;
if(year%4==0||year%100!
=0)leap=1;/*
(2)*/
elseif(year%400==0)leap=1;/*(3)*/
elseleap=0;
if(leap==1)printf(“%disLeap!
”,year);elseprintf(“%disnotLeap!
”,year);/*(4)*/
}
3.职员记录由工号(num)、基本工资(basePay)、津贴(subsidy)及总收入(income)构成,总收入等于基本工资与津贴的和。
以下程序中,在main函数中定义了N个职员的记录并赋值,但没有给总收入赋值。
首先要求在main函数中计算每个职员的总收入,然后在sort函数中按总收入从大到小排序,最后输出N个职员的记录。
#defineN3
typedefstruct
{charnum[10];
floatbasePay,subsidy;
floatincome;
}WK;
voidsort(WK*p)
{inti,j;
WKt;
for(i=0;i++)/*
(1)*/
for(j=i+1;j++)/*
(2)*/
{if()/*(3)*/
{/*(4)*/
/*(5)*/
/*(6)*/
}
}
}
voidmain()
{worker[N]={{"T1301",793.5,365.0},{"T1302",561.5,267.5},/*(7)*/
{"T1303",687.0,158.5}};
inti;
for(i=0;i{worker[i].income=;}/*(8)*/
sort(worker);
for(i=0;i/*(9)*/printf("%s,%f,%f,%f\n",,worker[i].basePay,worker[i].subsidy,);
}
4.阅读以下程序,写出程序的运行结果。
#defineN5
intfun(int*s,inta,intn)
{intj;
*s=a;j=n;
while(a!
=s[j])j--;
returnj;
}
main()
{ints[N+1];intk;
for(k=1;k<=N;k++)s[k]=k+1;
printf("%d\n",fun(s,4,N));
}
5.阅读以下程序,写出程序的运行结果。
voidmain()
{char*p="A8DY2dg3X";
inti,cnt,n;
i=0;cnt=0;n=0;
while(p[i]!
='\0')
{if(p[i]>='0'&&p[i]<='9')
{cnt++;n=n*10+p[i]-48;}
i++;
}
printf("cnt=%d\n",cnt);
printf("n=%d\n",n);
}
(1)
(2)
6.阅读以下程序,写出程序的运行结果。
voidmain()
{char*str="dfasfsadD",ch,i=0;
while((ch=str[i])!
='\0')
{if(i%2!
=0&&(ch>='a'&&ch<='z'))ch=ch-'a'+'A';
i++;
putchar(ch);
}
printf("\n");
}
7.以下函数的功能是按以下递归公式求函数值:
fun(n)=10(n=1)
fun(n)=fun(n-1)+2(n>1)
例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。
其中有三处错误,请找出并划线,再将正确代码填在相应行右侧的横线上。
intfun(n)
{intc;
if(n=1)c=10;
c=fun(n-1)+2;
returnc;
}
8.以下函数的功能是求出两个非零正整数的最大公约数,并作为函数值返回。
例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输出的最大公约数为27。
其中有三处错误,请找出并划线,再将正确代码填在相应行右侧的横线上。
voidfun(inta,intb)
{intr,t;
if(a
{t=a;
b=a;
b=t;
}
r=a%b;
while(r!
=0)
{a=b;
b=r;
r=a%b;
}
returna;
}
9.以下函数的功能是将s所指字符串中的字母转换为按字母序列的后继字母(但Z转换A,z转换为a),其他字符不变。
中有三处错误,请找出并划线,再将正确代码填在相应行右侧的横线上。
voidfun(char*s)
{while(*s!
='\0')
{if((*s>='A'&&*s<='Z')&&(*s>='a'&&*s<='z'))
{if(*s=='Z')*s='A';
elseif(*s=='z')*s='a';
*s+=1;
}
(*s)++;
}
}
三、程序编写题
注意:
要求写出完整的C语言代码,程序流程图可不画。
若没有写代码,只画出流程图,最多可得5分。
1.从键盘上输入一元二次方程ax2+bx+c=0的系数a、b、c,编程求该方程的根。
2.编写程序,判断两个字符串是否互为逆序串。
两个字符串互为逆序串是指,任意一个字符串按从尾部到首部的顺序读,与另一个字符串恰好相同。
例如,字符串string与字符串gnirts互为逆序串。
参考答案
一、单项选择题
(1)C
(2)B(3)C(4)D(5)A(6)B(7)C(8)B(9)A
(10)A(11)D(12)B(13)D(14)C(15)D(16)D(17)D
(18)A(19)A(20)B(21)D(22)A(23)B
二、程序阅读题
1.
(1)ii<=999
(2)n1=i/100;(3)n2=i/10%10;(4)n3=i%10;(5)break;
(6)i<=999
2.
(1)int
(2)year%4==0&&year%100!
=0(3)year%4==0&&year%100==0
(4)returnleap;
3.
(1)i(2)jincome<(p+j)->income(4)t=*(p+i);(5)*(p+i)=*(p+j);
(6)*(p+j)=t;(7)WK(8)worker[i].basePay+worker[i].subsidy;
(9)worker[i].numworker[i].income
4.3
5.
(1)cnt=3
(2)n=823
6.dFaSfSaDD
7.
intfun(n)intfun(intn)
{intc;
if(n=1)c=10;if(n==1)
c=fun(n-1)+2;elsec=fun(n-1)+2;
returnc;
}
8.
voidfun(inta,intb)int
{intr,t;
if(a
{t=a;
a=b;
b=a;b=t;
}
r=a%b;
while(r!
=0)
{a=b;
b=r;
r=a%b;
}
returna;returnb;
}
9.
voidfun(char*s)
{while(*s!
='\0')
{if((*s>='A'&&*s<='Z')&&(*s>='a'&&*s<='z'))(*s>='A'&&*s<='Z')||(*s>='a'&&*s<='z')
{if(*s=='Z')*s='A';
elseif(*s=='z')*s='a';
*s+=1;else*s+=1
}
(*s)++;s++
}
}
三、程序编写题题
1.
参考C代码如下:
#include"stdio.h"
#include"math.h"
intmain()
{
inta,b,c,delta;
floatx,x1,x2;
printf("Inputa,b,c:
");
scanf("%d%d%d",&a,&b,&c);
if(a==0)printf("Erro!
\n");
else
{
delta=b*b-4*a*c;
if(delta<0)printf("Norealroot!
\n");
if(delta==0)
{
x=(float)(-b)/(2*a);
printf("x=%f\n",x);
}
if(delta>0)
{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
printf("x1=%fx2=%f\n",x1,x2);
}
}
return0;
}
参考流程图如下: