C语言习题3.docx
- 文档编号:28930647
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:31
- 大小:26.17KB
C语言习题3.docx
《C语言习题3.docx》由会员分享,可在线阅读,更多相关《C语言习题3.docx(31页珍藏版)》请在冰豆网上搜索。
C语言习题3
3.6 数组
一、单选题
1.若有定义:
inta[10];,则数组a元素的正确引用是。
A.a[10]B.[3.5]C.a(5)D.a[10-10]
[解答]:
答案选D。
a[10-10]就是a[0],A越界,b中下标是小数,不合法,c格式错误。
2.若有以下语句,则正确的描述是。
charx[]="12345";
chary[]={'1','2','3','4','5'};
A.x数组和y数组的长度相同B.x数组长度大于y数组长度
C.x数组长度小于y数组长度D.x数组等价于y数组
[解答]:
答案选B。
3.以下能正确定义数组并正确赋初值的选项是。
A.intN=5,a[N][N];B.intb[1][2]={{1},{2}};
C.intc[2][]={{1,2},{3,4}};D.intd[3][2]={{1,2},{3,4}};
[解答]:
答案选D。
4.以下程序的输出结果是。
charch[5]={'a','b','\0','c','\0'};
printf("%s",ch);
A.aB.bC.abD.abc
[解答]:
答案选C。
字符串总是以'\0'作为串的结束符。
有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。
5.判断字符串s1是否大于字符串s2,应当使用。
A.if(s1>s2)B.if(strcmp(s1,s2))C.if(strcmp(s2,s1)>0)D.if(strcmp(s1,s2)>0)
[解答]:
答案选D。
二、看程序,写运行结果
1.#include
#include
voidmain()
{
chararr[2][4];
strcpy(arr[0],"you");
strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr);
}
[解答]:
you&me
2.#include
#include
voidmain()
{
chara[10]={'a','b','c','d','\0','f','g','h','\0'};
inti,j;
i=sizeof(a);
j=strlen(a);
printf("%d,%d\n",i,j);
}
[解答]:
10,4
3.当运行以下程序时,从键盘上输入:
AhaMA[空格]Aha<回车>,则输出结果是:
#include
voidmain()
{
chars[80],c='a';
inti=0;
scanf("%s",s);
while(s[i]!
='\0')
{
if(s[i]==c)s[i]=s[i]-32;
elseif(s[i]==c-32)s[i]=s[i]+32;
i++;
}
puts(s);
}
[解答]:
ahAMa
4.当执行以下程序时,如果输入ABC,则输出结果是:
#include
#include
voidmain()
{
charss[10]="1,2,3,4,5";
gets(ss);
strcat(ss,"6789");
printf("%s\n",ss);
}
[解答]:
ABC6789
5.#include
voidmain()
{
inti,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{
n[i]=n[i-1]*2+1;
printf("%d",n[i]);
}
}
[解答]:
13715
6.#include
voidmain()
{
inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j
s+=a[i][j];
printf("%d\n",s);
}
[解答]:
14
7、#include
voidmain()
{
charch[7]={"12ac56"};
inti,s=0;
for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=10*s+ch[i]-'0';
printf("%d\n",s);
}
[解答]:
1
8.#include
voidmain()
{
charstr[][10]={"Mon","Tue","Wed","Thu","Fri","sat","Sun"};
intn=0,i;
for(i=0;i<7;i++)
if(str[i][0]=='T')n++;
printf("%d\n",n);
}
[解答]:
2
9.#include
voidmain()
{
inta[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i++)
s+=a[i][i]+a[i][3-i-1];
printf(“%d\n”,s);
}
[解答]:
30
10.#include
voidmain()
{
intnum[10]={1,0,0,0,0,0,0,0,0,0};
inti,j;
for(j=0;j<10;++j)
for(i=0;i num[j]=num[j]+num[i]; for(j=0;j<10;j++) printf("%d",num[j]); } [解答]: 11248163264128256 三、程序填空 1.以下的程序是求矩阵a,b的和,结果存入矩阵c中,并按矩阵形式输出。 #include voidmain() { inta[3][4]={{3,-2,7,5},{1,0,4,-3},{6,8,0,2}}; intb[3][4]={{-2,0,1,4},{5,-1,7,6},{6,8,0,2}}; inti,j,c[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) c[i][j]=; for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%3d",c[i][j]); ; } } [解答]: a[i][j]+b[i][j],putchar(‘\n’)。 2.以下程序的功能是: 从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。 请填空。 voidmain() { floatx[1000],sum=0.0,ave,a; intn=0,i; printf("Entermark: \n");scanf("%f",&a); while(a>=0.0&&n<1000) { sum+ (1); x[n]= (2); n++; scanf("%f",&a); } ave=(3); printf("Output: \n"); printf("ave=%f\n",ave); for(I=0;I if(4)printf(“%f\n”,x[I]); } [解答]: (1)=a (2)a(3)sum/n(4)x[i] 3.下面程序的功能是: 将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。 请填空。 #include #include voidmain() { chara[]="clanguage",t; inti,j,k; k=strlen(a); for(i=0;i<=k-2;i+=2) for(j=i+2;j<=k; (1)) if( (2)) { t=a[i];a[i]=a[j];a[j]=t; } printf("%s\n",a); } } [解答]: (1)j+=2 (2)a[i]>a[j] 3.7 函数及编译预处理 一、单选题 1.以下函数 fun(floatx) { printf("%f\n",x*x); } 的类型是。 A.与参数x的类型相同B.voidC.intD.无法确定 [解答]: 答案选C。 本题的考点是函数的定义。 缺省类型时默认int型。 2.有以下函数调用语句: func((exp1,exp2),(exp3,exp4,exp5)); 其中含有的实参个数和是。 A.1B.2C.4D.5 [解答]: 答案选B。 3.以下叙述中正确的是。 A.C语言程序总是从第一个定义的函数开始执行 B.在C语言程序中,要调用的函数必须在main()函数中定义 C.C语言程序总是从main()函数开始执行 D.C语言程序中的main()函数必须放在程序的开始部分 [解答]: 答案选C。 4.若已定义的函数有返回值,则以下关于该函数调用的叙述中,错误的是。 A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参 C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参 [解答]: 答案选D。 5.以下叙述不正确的是。 A.局部变量说明为static的存储类别,其生存期将得到延长 B.全局变量说明为static的存储类别,其作用域被扩大 C.任何存储类别的变量在未赋初值时,其值都是不确定的 D.形参可以使用的存储类别说明符与局部变量完全相同 [解答]: 答案选A。 6.在一个源文件中定义的外部变量的作用域为。 A.本文件的全部范围B.本程序的全部范围 C.本函数的全部范围D.从定义该变量的位置开始至本文件结束 [解答]: 答案选D。 7.C语言中形参的默认存储类别是。 A.自动(auto)B.静态(static)C.寄存器(register)D.外部(extern) [解答]: 答案选A。 8.C语言中函数返回值的类型由决定。 A.return语句中表达式类型B.调用函数的主调函数类型 C.调用函数时的临时类型D.定义函数时所指定的函数类型 [解答]: 答案选D。 9.以下叙述中不正确的是。 A.在C语言中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B.在C函数中,最好使用全局变量 C.在C语言中,形式参数只是局限于所在函数 D.在C语言中,函数名的存储类别为外部 [解答]: 答案选B。 模块化设计的原则松耦合,高内聚,也就是说函数之间应该尽可能的独立,不要共享太多的全局变量,所以B是错误的。 10.在C语言中。 A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义和调用均可以嵌套 C.函数的定义和调用均不可以嵌套 D.函数的定义不可以嵌套,但函数的调用可以嵌套 [解答]: 答案选D。 二、看程序,写运行结果 1.#include intsub(intx) { inty=0; staticintz=0; y+=x++,z++; printf("%d,%d,%d,",x,y,z); returny; } voidmain() { inti; for(i=0;i<3;i++) printf("%d\n",sub(i)); } [解答]: 1,0,1,0 2,1,2,1 3,2,3,2 2.#include intx=1,y=2; voidsub(inty) { x++; y++; } voidmain() { intx=2; sub(x); printf("x+y=%d",x+y); } [解答]: x+y=4。 3.#include voidgenerate(charx,chary)/*输出x-y-x的系列字符*/ { if(x==y)putchar(y); else { putchar(x); generate(x+1,y); putchar(x); } } voidmain() { chari,j; for(i='1';i<'6';i++) { for(j=1;j<60-i;j++) putchar(''); generate('1',i); putchar('\n'); } } [解答]: 1 121 12321 1234321 123454321 4.#include #defineSQR(x)x*x voidmain() { inta,k=3; a=++SQR(k+1); printf("%d\n",a); } [解答]: 9。 解释见选择题中宏替换。 三、程序填空 1.寻找并输出2000以内的亲密数对。 亲密数对的定义为: 若正整数a所有因子(不包括a)和为b,b的所有因子(不包括b)和为a,且a! =b ,则称a和b为亲密数对。 程序如下: #include intfactorsum(intx) { inti,y=0; for(i=1; (1);i++) if(x%i==0)y+=i; returny; } voidmain() { inti,j; for(i=2;i<=2000;i++) { j=factorsum(i); if( (2)) printf("%d,%d\n",i,j); } } 程序运行结果为: 220,284 1184,1210 [解答]: (1)i (2)i==factorsum(j)&&i 2.输入一个大于5的奇数,验证歌德巴赫猜想: 任何大于5的奇数都可以表示为3个素数之和(但不唯一),输出被验证之数的各种可能的和式。 程序如下: #include intprime(intx) { inty=1,i=2; while(i { if( (1))y=0; i++; } returny; } voidmain() { intm,i,j; printf("请输入一个大于5的奇数: "); scanf("%d",&m); if( (2)) { for(i=2;i<=m;i++) if(prime(i)) for(j=i;j<=m-i-j;j++) if((3)) printf("%d=%d+%d+%d\n",m,i,j,m-i-j); } elseprintf("输入错误! "); } [解答]: (1)x%i==0 (2)m>5&&m%2! =0(3)prime(j)&&prime(m-i-j) 3.8 指针 一、单选题 1.以下程序的运行结果是: () sub(intx,inty,int*z) { *z=y-x; } voidmain() { inta,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(“%4d,%4d,%4d\n”,a,b,c); } A.5,2,3B.-5,-12,-7C.-5,-12,-17D.5,-2,-7 [解答]: 答案选B。 2.有四组对指针变量进行操作的语句,以下判断正确的选项是() (1)int*p,int*q;q=p;inta,*p,*q;p=q=&a; (2)inta,*p,*q;q=&a;p=*q;inta=20,*p;*p=a; (3)inta=b=0;*p;p=&a;b=*p;inta=20,*p,*q=&a;*p=*q; (4)inta=20,*p,*q=&a;p=a;intp,*q;q=&p; A.正确: (1)不正确: (2)(3)(4) B.正确: (1)(4)不正确: (2)(3) C.正确: (3)不正确: (1) (2)(4) D.以上结论都不正确 [解答]: 答案选D。 3.下面函数的功能是() sss(s,t) char*s,*t; {while((*s)&&(*t)&&(*t++==*s++)); return(*s-*t); } A.求字符串的长度B.比较两个字符串的大小 C.将字符串s复制到字符串t中D.将字符串s接续到字符串t中 [解答]: 答案选B。 4.变量的指针,其含义是指该变量的() A.值B.地址C.名D.一个标志 [解答]: 答案选B。 5.下列程序的运行结果是() #include inta[3][3]={1,2,3,4,5,6,7,8,9}; int*pa[3]={a[0],a[1],a[2]}; int*p=a[0]; voidmain(){ printf("%d,%d,%d\n",a[1][2],*a[1],*(*(a+1)+1)); printf("%d,%d,%d\n",*pa[2],p[2],*(p+2)); } A.3,1,1B.7,7,9 6,4,51,1,1 C.6,4,5D.6,4,5 7,7,97,3,3 [解答]: 答案选D。 6.若有说明: int*p,m=5,n;以下正确的程序段是() A.p=&n;scanf(“%d”,&p);B.p=&n;scanf(“%d”,*p); C.scanf(“%d”,n);D.p=&n;*p=m; [解答]: 答案选D。 本题的考点是scanf函数中使用变量和指针的区别。 A.p=&n;scanf(“%d”,&p);应该改写成scanf(“%d”,p); B.p=&n;scanf(“%d”,*p);应该改写成scanf(“%d”,p); C.scanf(“%d”,n);应该改写成scanf(“%d”,&n)。 7.下面程序段的运行结果中包含几个”*”() char*s=”\ta\018bc”; for(;*s! =’\0’;s++)printf(“*”); A.9B.5C.6D.7 [解答]: 答案选C。 8.在说明语句: int*f();中,标识符f代表的是() A.一个用于指向整型数据的指针变量 B.一个用于指向一维数组的行指针 C.一个用于指向函数的指针变量 D.一个返回值为指针型的函数名 [解答]: 答案选D。 9.下面说明不正确的是() A.chara[10]=”china”;B.chara[10],*p=a;p=”china”; C.char*a;a=”china”;D.chara[10],*p;p=a=”china”; [解答]: 答案选D。 10.设有以下语句,则不是对a数组元素的正确引用,其中0≤i<10。 () inta[10]={3,1,2,3,4,5,6,7,8,9},*p=a,**pp; pp=&p; A.a[pp-a]B.*(&a[i]) C.p[i]D.(*pp)[i] [解答]: 答案选A。 pp和a的类型不一致,不能进行指针运算,pp为指针的指针,a为数组的静态指针。 二、看程序,写运行结果 1.当运行以下程序时,从键盘输入Happy! #include #include voidmain() {intstre(char[]); charstr[10],*p=str; gets(p); printf(“%d\n”,stre(p)); } intstre(charstr[]) { intnum=0; while(*(str+num)! =’\0’)num++; return(num); } [解答]: 6。 2.下面程序的运行结果是________ #include voidmain() { staticchara[]=”Language”,b[]=”programe”; char*p1,*p2;intk; p1=a;p2=b; for(k=0;k<=7;k++) if(*(p1+k)==*(p2+k))printf(“%c”,*(p1+k)); } [解答]: gae。 3.下面程序的运行结果是________ #include #include voidmain() { char*s1=”AbDeG”; char*s2=”AbdEg”; s1+=2;s2+=2; printf(“%d\n”,strcmp(s1,s2)); } [解答]: -1。 三、程序填空 1.下面程序的功能是从输入的十个字符串中找出最长的那个串 #include #include #defineN10 voidmain() { charstr[N][81],*sp; inti; for(i=0;i sp=__________; for(i=1;i printf(“sp=%d,%s\n”,strlen(sp),sp); } [解答]: Str[0],sp=str[i]。 2.下面程序的功能是将字符串b复制到字符串a #include s(char*s,char*t) { inti=0; while(___________)_________________; } voidmain() { chara[20],b[10]; scanf(“%s”,b); s(____________); puts(a); } [解答]: (s[i]=t[i])! =’\0’,i++,a,b。 3.下面程序的功能是比较两个字符串是否相等,若相等则返回1,否则返回0 f(chars[],chart[]) { inti=0; while(__________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)