C语言测试
- 选择题下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确的答案填在答题卷相应的位置。(每题2分,共30分)
(1) 有以下程序 |
#include <sthio.h> |
main() |
{ |
int A=0,B=0,C=0; |
C=(A-=A-5); |
(A=B,B+=4); |
printf(“%d, %d, %d\n”,A,B,C); |
} 程序运行后输出的结果是 |
A) 4,4,4 B) 0,4,5 C) 4,4,5 D)0,0,0 |
2.以下程序的输出结果是( ) |
#include <stdio.h> |
int main() |
{ |
char str[] = "ABCD", *p = str; |
printf("%d\n",*(p+4)); |
return 0; |
} |
A. 68 B.0 C.字符'D'的地址 D.不确定的值 |
(3) 有以下程序 |
#include <stdio.h> |
main() |
{ |
int s = 0,n; |
for (n=0; n<3; n++) |
{ |
switch(s) |
{ |
case 0: |
case 1: s+=1; |
case 2: s+=2;break; |
case 3: s+=3; |
default: s+=4; |
} |
printf("%d\n",s); |
} |
} 程序运行后的结果是 |
A) 3,10,10 B) 1,2,4 C) 1,3,6 D) 3,10,14 |
(4) 有以下程序(a,b,c的ascii码值分别为97,98,99) |
#include <stdio.h> |
main ( ) |
{ |
char *s={"abc"}; |
do |
{ |
printf("%d",*s%10); |
++s; |
} while (*s); |
} 程序运行后的输入结果是 |
A)789 B)979899 C)abc D)7890 |
(5) 有以下程序 |
#include <stdio.h> |
main() |
{ |
int i,j,m=1; |
for(i=1;i<3;i++) |
{ |
for(j=3;j>0;j--) |
{ |
if(i+j > 3) |
continue; |
m *= i*j; |
} |
} |
printf(“m=%d\n”,m); |
} |
程序运行后的输出结果是 |
A) m=5 B) m=4 C) m=6 D) m=2 |
(6) 下列语句组中,正确的是 |
A) char *s;s=”Olympic”; B) char s[7]; s=”Olympic”; |
C) char *s;*s={“Olympic”}; D) char s[7]; s={”Olympic”}; |
(7) 设有定义double a[10], *s=a;,以下能够代表数组元素a[3]的是 |
A)(*s)[3] B)*(s+3) |
C) *s[3] D)*s+3 |
(8) 若有以下定义和语句 |
char s1[10]=”abcd!”,*s2=”\n123\\”; |
printf (”%d %d\n”, strlen(s1), strlen(s2) ); |
则输出结果是 |
A) 5 5 B) 10 5 C) 10 7 D) 5 |
(9) 有以下程序 |
#include <stdio.h> |
int f(int m) |
{ |
static int n = 0; |
n += m; |
return n; |
} |
main ( ) |
{ |
int n=0; |
printf(“%d,”, f(++n)); |
printf(“%d\n”, f(n++)); |
} 程序运行后的输出结果是 |
A)1,2 B)1,1 C)2,3 D)3,3 |
(10) 有以下程序 |
void fun(char *w, int m) |
{ |
char s,*p1, *p2; |
p1 = w; |
p2 = w+m-1; |
while (p1<p2) |
{ |
s=*p1; |
*p1=*p2; |
*p2=s; |
p1++; |
p2--; |
} |
} |
main( ) |
{ |
Char a[]="123456"; |
fun( a, strlen(a) ); |
puts(a); |
} 程序运行后的输出结果是 |
A)654321 B)116611 C)161616 D)123456 |
(11) 有以下程序 |
void swap(int a, int b) |
{ |
int t = a; |
a = b; |
b = t; |
} |
int main() |
{ |
int m = 3, n = 4; |
swap(m++, ++n); |
printf("%d,%d\n", m, n); |
} |
程序运行后的输出结果是 |
A)5,4 B)4,5 C)3,4 D)4,3 |
(12) .有以下程序 |
main() |
{ |
char *s[]={"one","two","three"},*p; |
p=s[1]; |
printf("%c,%s\n",*(p+1),s[0]); |
} |
执行后输出结果是( ) |
A.'w',"two" B.'t' "two" |
C.'w',"one" D.'t' "three" |
(13).下面程序段运行结果是( ) |
char a[]=”language”,*p; p=a; |
while(*p!=’u’) {printf(“%c”,*p-32);p++;} |
A. LANGUAGE B. language |
C. LANG D. language |
(14)、下面程序运行结果( ) |
#include<stdio.h> |
void main() |
{ |
int a=28,b; |
char s[10],*p; |
p=s; |
do{ |
b=a%16; |
if(b<10) *p=b+48; |
else *p=b+55; |
p++; |
a=a/5; |
}while(a>0); |
*p=’\0’; |
puts(s); |
} |
A.10 B. C2 C.\0 D.C51 |
(15)、以下程序执行后的输出结果是()。
char *a[3]={“hello”,”world”,”china”};
A) hello,china B) ello,china C) world,hina D) orld,hina
二。 填空题,请将每空正确的答案写在答卷的相应位置。((1)—(8)题,每题2分,第(9)题6分,共22分)
(1).unsigned char a = 257; char b=a; printf(“%d”,b); 输出结果为: _____________1_______________________________ |
(2). .表达式(int)((double)5/2+2.5)的值是 _________5_____________________________________ |
(3) 请写出浮点型变量a与10比较是否相等的表达式: 。 |
a>=10-0.000001&&a<=10+0.000001
_________________________________________
(4) 以下程序段的输出结果是 _rgb____ |
main() |
{ |
char *ch[4]={“red”,”green”,”blue”}; |
int i=0; |
while (ch[i]) |
{ |
putchar (ch[i][0]); |
i++; |
} |
} |
(5) 有以下程序 |
void fun(char *str) |
{ |
char temp; |
int n,i; |
n = strlen (str); |
temp = str[n-1]; |
for (i=n-1; i>0; i--) |
str[i] = str[i-1]; |
str[0] = temp; |
} |
main() |
{ |
char s[50]; |
scanf(“%s”,s); |
fun(s); |
printf(“%s\n”,s); |
} 程序运行后输入:abcdef<回车>,则输出结果是 |
fabcde
——————————
(6).int a=1,b=2,c=a>=1||++b, |
printf("%d",b);输出结果为______2____________ |
(7).下面程序的运行结果是___10________ |
#define ADD(x) x+x |
void main() |
{ |
int m=1,n=2,k=3; |
int sum=ADD(m+n)*k; |
printf("sum=%d", sum); |
} |
(8).以下程序的运行结果是___1__________ |
main() |
{ |
int k=4,a=3,b=2,c=1; |
printf(“\n%d\n”,k<a?k:c<b?c:a); |
} |
(9).某32位系统下, C程序,请计算sizeof 的值. |
char *p = str ; |
char array[10] = {‘h’,’e’,’l’,’l’,’\0’,’o’}; |
请计算 |
sizeof (str ) = ___15______ |
sizeof ( p ) = _____4_____ |
sizeof ( array ) = __10___________ |
strlen(array) = _____4____________ |
void Foo ( char str[100]){ |
请计算 |
sizeof( str ) = __4________________ |
} |
简答题。((1)—(3)题,每题5分,第(7)题7分,共22分)
(1) 写一个宏MIN,这个宏输入两个参数并返回较小的一个
#define MIN(x,y) ((x)<(y)?(x):(y)) |
(2) 请问运行Test 函数会有什么样的结果,为什么会有这样的结果? |
char *GetMemory(void) |
{ |
char p[] = "hello world"; |
return p; |
} |
void Test(void) |
{ |
char *str = NULL; |
str = GetMemory(); |
printf(str); |
}
|
(3)写出sizeof 和strlen 的区别 sizeof和strlen有如下区别: (1)sizeof是一个操作符,strlen是库函数; (2)sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为’\0’的字符串做参数; (3)编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度; (4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。 |
(4)用变量a给出下面的定义 |
a) 一个指向整型数的指针 |
b) 一个指向指针的的指针,它指向的指针是指向一个整型数 |
c) 一个有10个整型数的数组 |
d) 一个有10个指针的数组,该指针是指向一个整型数的 |
e) 一个指针,该指针指向一个有10个整型数的数组 a)int * pa; b)int ** pa c)int pa[10] d)int * pa[10] e) int(*pa)[10] 四、 编程题(共3题,共26分) |
1.自定义函数编写char *strcpy(char *str,const char *dest)(8分) |
2、输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符有多少个?(8分) |
3.打印杨辉三角(10分) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 |