2010级C语言(A卷答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
天津工业大学2010~2011学年第 2 学期
高级语言程序设计(C语言) 试卷(A卷答案)一、单项选择题:(每题 1 分,共40 分)
一、单项选择题:(每题 1 分,共40 分)
(说明:请将正确答案按照题干上【】内的序号涂写“标准答题卡”)
1.以下各标识符中,能作为变量名使用的是【1】。
A) A#C B) my_x C) main D) ab*
2.下列叙述中错误的是【2】。
A) 一个C语言程序必须有main()函数
B) C语言规定函数内的每个语句以分号结束
C) C语言程序书写格式规定,一行内只能写一个语句
D) main()函数可以放在程序开头,也可以放在程序末尾
3.设有变量定义语句char ch; 下列赋值表达式中,正确的是【3】。
A) ch='a' B) ch="a" C) ch='97' D) ch="97"
4.执行下列程序段后,输出结果为【4】。
int x=023;
printf("%d", x--);
A)18 B) 19 C) 23 D) 24
5.表达式10!=9的值为【5】。
A) 1 B) 0 C) True D) False
6.设有变量定义语句int x=5,y; 则表达式y=2.75+x/2的值是【6】。
A) 4 B) 5 C) 4.75 D) 5.25
7.下列选项中,所有变量均已正确说明且有初始值,则错误的C语句是【7】。
A) m++; B) m=a==b; C) a=b=c+2; D) a=b+c=2;
8.设int i=0,j=2,k=3;则表达式(i+k)&k|j+i的值是【8】。
A) 0 B) 1 C) 2 D) 3
9.假设所有变量均为整型,执行表达式x=(y=4,z=16,k=32)后x的值是【9】。
A) 4 B)16 C) 32 D) 52
10.有输入语句scanf("a=%d,b=%d,c=%d",&a,&b,&c);为了使a的值为1,b的值为3,c的值为2,从键盘输入数据的正确形式是【10】。
说明:备选项中的“✞”表示空格,“●”表示回车。
A) 132●B) 1,3,2●
C) a=1✞b=3✞c=2●D) a=1,b=3,c=2●
11.设int a=10; 则执行语句a+=a-=a*a; 后,变量a的值是【11】。
A) 99 B)100 C) 110 D) -180 12.若int x=12,y=10;则表达式x>12?x++:++y的值是【12】。
A) 10 B) 11 C) 12 D) 13 13.语句while(!E);中的表达式!E等价于【13】。
A) E!=1 B) E!=0 C)E==1 D) E==0 14.执行下列程序段后,输出结果是【14】。
int a=10;
switch(a)
{ case 9: a+=1;
case 10: a+=1;
case 11: a+=1;
case 12: a+=1;
}
printf("a=%d ";a);
A) a=11 B) a=12 C) a=13 D) a=14 15.下列程序的运行结果是【15】。
main()
{ int x=0,y=1,z=0;
if(x=z=y) x=3;
printf("%d,%d",x,z);
}
A) 3,0 B)0,0 C) 0,1 D)3,1 16.执行下列程序段,语句a=a+1的执行次数是【16】。
int x=5,a=1;
do { a=a+1; }while (x!=0);
A) 0 B) 4 C) 5 D) 无限次17.执行下列程序段后,输出结果是【17】。
int x=5;
if(x--<5)
printf("%d",x);
else
printf("%d",x++);
A) 3 B) 4 C) 5 D) 6
18.设a为三位正整数,下列表达式中能够求出a的十位数字的是【18】。
A) a/100 B) a%100 C) a%10/10 D) a/10%10
19.设有定义语句char a[80],b[80]; 且字符串a和b均已有值,则要判断字符串a和b 是否相等应当使用的条件语句是【19】。
A) if(a=b){…} B) if(strcat(a,b)==0) {…}
C) if(a==b) {…} D) if(strcmp(a,b)==0) {…}
20.执行语句printf("%d",strlen("abc\n\t"));后,输出结果是【20】。
A) 5 B) 6 C) 7 D) 8
21.下列程序段的输出结果是【21】。
int i,a[10];
for(i=9;i>=0;i--)
a[i]=10-i;
printf("%d,%d ",a[5],a[8]);
A) 4,1 B) 5,2 C) 5,8 D) 6,9
22.以下数组定义中,正确的是【22】。
A) int a[ ][4]; B) int n=10,a[n];
C) int N=3;
int a[N][N+1];D) #define N 3
int a[N][N+1];
23.若有数组定义int m[ ][2]={1,3,5,7,9};则以下叙述正确的是【23】。
A) 该定义存在语法错误
B) 该定义等价于int m[2][2]={1,3,5,7,9};
C) 该定义等价于int m[3][2]={1,3,5,7,9};
D) 该定义等价于int m[5][2]={1,3,5,7,9}
24.下列程序段的输出结果是【24】。
char str1[ 10]= "abcde",str2[ 10]= "xyz";
strcpy(str1,str2);
printf("%s",str1);
说明:备选项中的“ ”表示空格。
A) xyz B) xyz e C) abcde D) xyzde
25.下列程序段中,有语法错误的是【25】。
A) char *str; str="abc"; B) char str[3]={ 'a','b','c'};
C) char str1[5]; str1="abc"; D) char str1[ ]="abc",*str2="12345";
26.设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是【26】。
A) p2=k; B) p1=p2; C) k=*p1+*p2; D) k=*p1 * (*p2); 27.能为指针变量p正确赋值的是【27】。
A) int a,*p=a; B) int a,*p=&a;
C) int a,*p; *p=a; D) int a,*p; *p=&a;
28.下列程序段的输出结果是【28】。
int aa[3][3]={0,1,2,3,4,5,6,7,8};
int *p=&aa[0][1];
p++;
printf("%d",*p);
A)1 B) 2 C)3 D) 6
29.若有定义int a[9],*p=a; 则p+5表示【29】。
A) 数组元素a[5]的地址B) 数组元素a[5]的值
C) 数组元素a[6]的地址D) 数组元素a[0]的值加上5
30.若定义函数float *f(int x),则函数的返回值是【30】。
A) 一个int型数据B) 一个指向int变量的指针
C) 一个float型数据D) 一个指向float型变量的指针
31.凡是函数中未指定存储类型的局部变量,默认的存储类型是【31】。
A) 自动auto B) 静态static C) 外部extern D) 寄存器register 32.设有如下函数定义,则函数类型(即函数的返回值类型)【32】。
f1(float x)
{ ……}
A) 无法确定B) 是void型
C) 是int型D) 是float型
33.下列函数调用语句中,实参的个数是【33】。
func((exp1,exp2),(exp3,exp4,exp5));
A) 1 B) 2 C)4D)不确定34.下列程序的输出结果是【34】。
int m=13;
int fun2(int x, int y) { int m=3;
return(x*y-m);} main()
{ int a=7, b=5;
printf("%d", fun2(a,b)/m); }
A) 10 B)7 C)2 D)1
35.设有如下定义语句,则下面叙述中错误的是【35】。
struct stu
{ int a;
float b; } s;
A) s是用户定义的结构体类型B) a和b都是结构体成员名
C) struct是结构体类型的关键字D) struct stu是用户定义的结构体类型
36.程序运行结果是【36】。
enum team { my,your=4,his};
printf("%d,%d,%d",my,your,his);
A) 0,1,2 B) 1,2,3 C) 0,4,5 D) 1,4,5
37.设有如下定义语句,对结构变量data的成员a的错误引用是【37】。
struct s
{ int a;
float b;
}data,*p;
p=&data;
A) data.a B) (*p).a C) data->a D) p-> a 38.已知定义语句如下:
struct
{ int i;
double x;
}a[2][3]={ 1,3.45, 2,7.98, 3,1.93,4,4.73, 5,6.78,6,8.79};
则对初值中数据7.98的正确引用方式是【38】。
A) a[0][0].x B) a[0][1].x C) a[0][2].x D) a[1][1].x
39.若调用fputc函数向文件中成功写入字符,则该函数的返回值是【39】。
A) 输出的字符B) 0 C) 1 D) EOF 40.若执行fopen函数时发生错误,则该函数的返回值是【40】。
A) 地址值B) NULL C) 1 D) EOF
1.下列程序段的输出结果是【1】。
答案:3.00
float x;
x=1+1%3*5/2;
printf("%.2f",x);
2.下列程序的输出结果是【2】。
答案:2
main()
{ int a=2,b=-1,c=2;
if(a<b)
if(b<c) c=0;
else c++;
printf("%d ",c);
}
3.下列程序的输出结果是【3】。
答案:4
#include <stdio.h>
main()
{ int r,m=28,n=16;
r=m%n;
while(r!=0)
{
m=n; n=r; r=m%n;
}
printf("%d ",n);
}
4.下列程序段的输出结果是【4】。
答案:18 int a[]={2, 4, 6, 8, 10};
int y=0, i;
for (i=0; i<3; i++)
y+=a[i+1];
printf("%d",y);
5.下列程序的输出结果是【5】。
答案:1 5 1 main()
{ int a[4][4];
int i,k;
for(i=0;i<4;i++)
for( k=0;k<=i;k++)
if(k==0 || i==k)
a[i][k]=1;
else
a[i][k]=i*2+k;
printf("%2d%2d%2d\n",a[0][0],a[2][1],a[3][3]);
}
6.下列程序段的输出结果是【6】。
答案:Q12 12 2 char s[]={"Q12"},*p;
for(p=s;p<s+3;p++)
printf("%s ",p);
7.下列程序的输出结果是【7】。
答案:x=15 y=8 void fun2(int *a,int b)
{ *a=*a+10;b=b+100; }
main()
{ int x=5,y=8;
fun2(&x,y);
printf("x=%d y=%d\n",x,y);
}
8.下列程序的输出结果是【8】。
答案:5
#include <stdio.h>
int fib(int n)
{ int f;
if((n==0)||(n==1)) f=1;
else f=fib(n-1)+fib(n-2);
return f;
}
main( )
{ int m=4;
printf("%d",fib(m));
}
9.下列程序的输出结果是【9】。
答案:5 6 7 #include <stdio.h>
int f(int a)
{ int b=0;
static int c=1;
b++;c++;
return(a+b+c);
}
main()
{ int a=2,i;
for(i=0;i<3;i++)
printf("%2d",f(a));
}
10.下列程序的输出结果是【10】。
答案:6.5 #define M 2.5
#define F(x) M*x*x
main()
{ int a=1,b=2;
printf("%4.1f",F(a+b));
}
1. 下列程序的功能是根据公式n
s +++++
++++++= 321132112111,计算s 的值,要求计算到第n 项为止,n 的值由键盘输入,输出结果保留2位小数。
请改正程序中
的错误。
#include "stdio.h" void main() { int n,i,m=0;
int s=0; /*s:存放累加和。
本行有错【1】*/ 答案: float s=0.0; scanf("%d",&n);
for(i=1; i<=n; i++)
{ m=m+i; s=1/m; /* 本行有错【2】*/ 答案:s=s+1.0/m;
}
printf("%2d",s); /* 本行有错【3】*/ 答案:printf("%.2f",s);
}
2. 若一个字符串正读和反读都一样,则称为回文,如level 、madam 等。
下列程序的功
能是判断输入的字符串是否为回文。
请改正程序中的错误。
#include <stdio.h> #include <string.h> void main( ) { char s[80]; int k,n,f; 答案:scanf("%s",s); 或gets(s);
scanf("%c",&s);
/*输入字符串s 。
本行有错【4】*/
f=1;
/*约定: f 为1时,字符串是回文;f 为0时,字符串不是回文*/ n=strlen(s); for(k=0;k<n/2;k++) if( s[k]!=s[n-k] ) /* 本行有错【5】*/
答案: s[k]!=s[n-k-1]
{ f=0; continue; } /* 本行有错【6】*/ 答案: break
if(f==1)
printf("字符串是回文\n");
else
printf("字符串不是回文\n");
}
1.下列程序的功能是输入一行字符,以回车结束。
分别统计出数字字符、空格和其他字符的个数。
请填空完善程序。
#include<stdio.h>
void main()
{ int a,b,c; /* a:数字字符的个数; b:空格的个数; c:其他字符的个数*/ char x;
a=b=c=0;
while ((x=getchar()) 【1】) 答案:!='\n'
{ if ( 【2】) 答案:x>='1' && x<='9'
a++;
else if ( 【3】) 答案:x==' '
b++;
else
c++;
}
printf("%d %d %d\n",a,b,c);
}
2.下列程序中,函数amin( )的功能是求一个一维整型数组中的最小值。
在main( )函数中定义了数组a,共10个元素,并调用amin( )函数求数组a中所有元素的最小值。
请填空完善程序。
#include <stdio.h>
int amin(int b[],int n)
{ int min,k;
min=b[0]
for(k=1;k<n;k++)
if ( 【4】)min=b[k];答案:b[k]<min
【5】; 答案:return min;
}
void main()
{
int a[10]={1,2,3,4,5,99,7,8,9,10},m;
m= 【6】; 答案:amin(a,10);
printf("最小值=%d\n",m);
}
输出,然后统计右上三角所有元素的和(图中斜体字表示的元
素)。
请填空完善程序。
#include <stdio.h>
void main()
{
int a[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
int i,j,s; /* s: 存放所有右上三角元素的和*/
/*按图所示分行输出数组所有元素*/
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%3d",a[i][j]);
【7】; /*输出换行*/ 答案:printf("\n");
}
/*统计右上三角所有元素的和*/
【8】;答案:s=0 for(i=0;i<5;i++)
for( 【9】;j<5;j++) 答案:j=i
s=s+a[i][j];
printf("上三角元素之和=%d\n",s);
}。