------------------------C语言试题1START-------------------
一、选择题
1、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是()。
A、float型
B、int型
C、long型
D、double型
参考答案:B
2、一个指向整数的数组指针可以定义为()。
A、int (*ptr)[]
B、int *ptr[]
C、int *(ptr[])
D、int ptr[]
参考答案:A
3、若有定义:int a[3][4]={{1, 2}, {0}, {1, 2, 3}};则a[1][1]的值为()。
A、3
B、{1, 2}
C、1
D、0
参考答案:D
4、下面这段代码输出的i的值是()。
int i=3;
while(i--)
printf(“%d\n”, i);
A、3 2 1 0
B、2 1 0
C、1 0
D、2 1
参考答案:B
5、以下程序的打印结果是()。
int main(void)
{
int i = 0;
while(i < NUM)
printf("%d", i++);
printf("\n");
return 0;
}
A、01234567
B、012345
C、123456
D、01
参考答案:A
6、已知声明: int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p=1;则不能表示数组a中的元素的表达式是()。
A、*p
B、a[10]
C、*a
D、3[p]
参考答案:B
7、以下定义语句中正确的是()。
A、char a='A' b='B';
B、float a=b=a;
C、int a=10,*b=&a;
D、float *a,b=&a;
参考答案:C
8、设有如下的程序段: char str[ ]=“Hello”; char ptr; ptr=str; 执行上面的程序段后,(ptr+5)的值为()。
A、'o'
B、'\0'
C、不确定的值
D、'o'的地址
参考答案:B
9、若有int *p1, *p2,k; 不正确的语句是()。
A、p1=&k
B、p2=p1
C、*p1=k+12
D、k=p1+p2
参考答案:C
10、在循环语句的循环体中执行break语句,其作用是()。
A、跳出该循环体,提前结束循环
B、继续执行break语句之后的循环体各语句
C、结束本次循环,进行下次循环
D、终止程序运行
参考答案:A
11、为表示、“a和b都大于0”,应使用的C语言表达式是()。
A、(a>0)&&(b>0)
B、a&&b
C、(a>0)||(b>0)
D、(a>0)&(b>0)
参考答案:A
12.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )
A.函数的实参和其对应的形参共占同一存储单元
B.形参只是形式上的存在,不占用具体存储单元
C.同名的实参和形参占同一存储单元
D.函数的形参和实参分别占用不同的存储单元
参考答案:D
13、有以下程序:
int func(char *s)
{
char *t=s;
while(*t++){;}
t--;
return(t-s);
}
int main(void)
{
char *s = "abcdefghijk";
int n = func(s);
printf("%d\n", n);
}
程序的执行结果是( )
A.字符串s的长度
B.比较两个串的大小
C.将串s复制到串t
D.求字符串s所占字节数
参考答案:B
14、设有如下程序段,下面描述中正确的是 ( )。
int k=10; while(k=0) k=k-1;
A 循环执行一次
B循环是无限循环
C循环体语句一次也不执行
D循环体语句执行一次
参考答案:C
15、以下函数调用语句中含有( )个实参。 func((e1,e2),(e3,e4,e5));
A 2 B 3 C 5 D 语法错误
参考答案:A
16、以下程序的输出结果为( )。
#define ADD(x) x*x
main( )
{
int a=4,b=6,c=7,d=ADD(a+b)*c;
printf("d=%d",d);
}
A d=70 B d=80 C d=140 D d=700
参考答案:D
17、若有以下定义,则p+5表示_______.
int a[10],*p=a;
A元素a[5]的地址 B元素a[5]的值
C元素a[6]的地址 D元素a[6]的值
参考答案:A
18、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )
A.函数的实参和其对应的形参共占同一存储单元
B.形参只是形式上的存在,不占用具体存储单元
C.同名的实参和形参占同一存储单元
D.函数的形参和实参分别占用不同的存储单元
参考答案:D
19、以下叙述中错误的是( )
A.函数的形参存放在数据段中
B.函数可以返回地址值
C.可以给指针变量强制赋一个浮点数作为地址值
D.可以给指针变量赋NULL
参考答案:A
20、有以下程序
#include<stdio.h>
void fun(char * (*p) )
{
++p;
printf("%s\n",*p);
}
int main(void)
{
char *a[ ]={"Morning","Afternoon","Evening","Night"};
fun(a);
}
程序的运行结果是( )
A.Afternoon
B.fternoon
C.Morning
D.orning
参考答案:A
二、填空题
1、以下代码试图就出a、b、c的最小值:
#include<stido.h>
int main(void)
{
int a,b,c,t1,t2;
scanf("%d%d%d",&a,&b,&c);
t1=a<b? A a:b;
t2=c<t1? B c:t1;
printf("%d\n",t2);
}
2、已有定义如下:
struct node
{
int data;
struct node *next;
}*p;
以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间,请填写所需空间的大小 struct node *p = (struct node *)malloc( sizeof(struct node) );
3、表达式(int)((double)5/2+2.5)的值是: 5 4、
int main(void)
{
char *cptr,c;
void *vptr,v;
c=10;
v=0;
}
上述程序有何错误:
不能定义void型普通变量 [每空2分]
5、用变量m给出下面的定义
1 一个整型数 int m; 2 一个指向整型数的指针 int *m; 3 一个指向指针的指针,它指向的指针是指向一个整型数 int *p= 10; int *m = p; 4一个有10个整型数的数组 int m[10]; 5一个有10个指针的数组,该指针是指向一个整型数的 int *m[10]; m = 10; 6一个指向有10个整型数数组的指针 int (*p)[10]; 7 一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int *m(int m){ return m;} 8 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int *m[10];m=m(x);m(intn){return n;}
三、简答题
1、指出下面代码的不妥之处:
void get_memory(T_S8 *p, T_S16 nNum)
{
p = (T_S8 *)malloc(sizeof(T_S8) * nNum);
}
void Test(void)
{
T_S8 *str = NULL;
get_memory(str, 100);
strcpy(str, "hello");
}
答 :T_S8,T_S16未宏定义 值传递不能改变str的值,所以实参str的值仍然为NULL,不能执行strcpy(str,“hello”) , 会发生段错误。
2、以下程序的运行结果如何?原因?
char *get_memory(void)
{
char p[] = "hello world";
return p;
}
int main(void)
{
char *str = NULL;
str = get_memory();
printf("%s", str);
}
答:编译出错。 结果不确定,函数调用结束,数组p的空间被释放,不用再次引用
3、以下test函数的运行结果如何?原因?
void test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf("%s", str);
}
}
答:输出 world 。 指针所指空间被free后不能再次被引用
四、编程
1、写一个程序,计算1到100的累加和。
int i=1,sum=0;
for(i=1;i<=100;i++)
{
sum += i;
}
printf(“%d\n”,sum);
2、写一个函数,将作为实参出进去的字符串反转。
void reserverString(char str[])
{
char tmp;
int i, j;
for (i = 0, j = strlen(str) - 1; i < j; i++, j--)
{
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
------------------------C语言试题1END-----------------------
------------------------C语言试题2START--------------------
一、选择题
1、在函数中未指定存储类别的局部变量,其隐含的存储类别是()。
A、静态(static
B、外部(extern
C、自动(auto)
D、寄存器(register)
参考答案:C
2、以下各C语句中正确的是()。
A、char st[4][5]={ "ABCDE" };
B、char *s = "ABCDE"; s[2] = 'Z';
C、char s[5] = {'A', 'B', 'C', 'D', 'E'};
D、char *S; scanf("%S", S);
参考答案:C
3、若有定义:int a[3][4]={{1, 2}, {0}, {1, 2, 3}};则a[1][1]的值为()。
A、3
B、{1, 2}
C、1
D、0
参考答案:D
4、在Linux下的32位C程序中,请计算sizeof的值()。 char str[] = “Hello”; char *p = str; 请计算:sizeof§ = ( )
A、1
B、4
C、5
D、6
参考答案:B
5、
int main(void)
{
float x = 0.1;
if(x == 0.1)
printf("Equal");
else
printf("Not Equal");
return 0;
}
则运行的结果是()。
A、Equal
B、Not Equal
C、运行错误
D、输出依赖于编译器
参考答案:B
6、下面程序段的运行的结果是()。
char *s="abcde";
s+=2;printf("%d", s);
A、cde
B、字符'c'
C、字符'c'的地址
D、无确定的输出结果
参考答案:A
7、不能把字符串“Hello!”赋给数组b的语句是()。
A、char b[10]={'H','e','l','l','o','!'};
B、char b[10];b="Hello!";
C、char b[10];strcpy(b,"Hello!");
D、char b[10]="Hello!";
参考答案:B
8、若a为二维数组,则a[1][3]等价于()。
A、*((a+1)+3)
B、*(a[1]+3)
C、(*(a+1)+3)
D、&a[1]+3
参考答案:B
9、break语句的正确用法是()。
A、无论在任何情况下,都中断程序的执行,退出到系统下一层。
B、在多重循环中,只能退出最靠近的那一层循环语句。
C、跳出多重循环。
D、只能修改控制变量。
参考答案:B
10、有以下程序
#include<stdio.h>
int main(void)
{
int y=9;
for( ; y>0; y--)
{
if(y%3 == 0)
printf("%d",--y);
}
}
程序的运行结果是( )
A.741
B.963
C.852
D.875421
参考答案:C
11、已知字符‘A’的ASCⅡ代码值是65,字符变量c1的值是‘A’,c2的值是‘D’。 则执行语句printf(“%d,%d”,c1,c2-2);后,输出结果是( )
A.A,B
B.A,68
C.65,66
D.65,68
参考答案:C
12、有以下程序
void fun(char * (*p) )
{
++p;
printf("%s\n",*p);
}
int main(void)
{
char *a[ ]={"Morning","Afternoon","Evening","Night"};
fun(a);
}
程序的运行结果是( )
A.Afternoon
B.fternoon
C.Morning
D.orning
参考答案:A
13、有以下程序
main()
{ int a=1, b=3, c=5;
int *p1=&a, *p2=&b, *p=&c;
*p =*p1*(*p2);
printf("%d\n",c);
}执行后的输出结果是
A 1 B 2 C 3 D 4
参考答案:C
14、在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是( )
A p向高地址移了一个字节 B p向高地址移了一个存储单元
C p向高地址移了两个字节 D p与a+1等价
参考答案:A
15、若有以下定义,则对a数组元素的正确引用是_________. int a[5],*p=a;
A.*&a[5] B.a+2 C.*(p+5) D.*(a+2)
参考答案:D
16、设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是( )
A for(p=a;a<(p+10);a++);
B for(p=a;p<(a+10);p++);
C for(p=a,a=a+10;p<a;p++);
D for(p=a;a<p+10; ++a);
参考答案:B
17、在C语言程序中,以下说法正确的是( )。
A函数的定义可以嵌套,但函数的调用不可以嵌套
B函数的定义不可以嵌套,但函数的调用可以嵌套
C函数的定义和函数的调用都不可以嵌套
D函数的定义和函数的调用都可以嵌套
参考答案:B
18、下面程序的输出结果()。
#include <stdio.h>
struct A{
int i;
char j;
char *ptr;
long Array[100];
char b[2];
char *c;
};
int main()
{
printf("%d\n", sizeof(A));
return 0;
}
A、415
B、416
C、420
D、421
参考答案:C
19、如下C程序输出的是()。
#include <stdio.h>
int mul(int a, int b, int c)
{
return a*b*c;
}
int main(void)
{
int (*function_pointer)(int, int, int);
function_pointer = mul;
printf("The product of three numbers is: %d",
function_pointer(2, 3, 4));
return 0;
}
A、不确定
B、编译出错
C、无输出
D、The product of three numbers is: 24
参考答案:D
20、设有如下枚举类型定义:
enum language { Basic=3, Assembly, Ada=100, COBOL, Fortran}; 枚举变量Fortran的值为()。
A、4
B、7
C、102
D、不确定
参考答案:C
二、填空题
1、用变量m给出下面的定义
一个整型数 int m;
一个指向整型数的指针 int *m;
一个指向指针的指针,它指向的指针是指向一个整型数 int *p = 10;int *m = p;
一个有10个整型数的数组 int m[10];
一个有10个指针的数组,该指针是指向一个整型数的 int *m[10]; m = 10;
一个指向有10个整型数数组的指针 int (*p)[10];
一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int *m(int m){ return m;}
一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int *m[10];m=m(x);m(int n){return n;}
2、以下程序的输出结果是 54321
#include <stdio.h>
int main(void)
{
int n=12345, d;
while(n!=0)
{
d=n%10;
printf("%d",d);
n/=10;
}
}
3、给定结构
struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};
sizeof(A) = 8。
4、若有以下定义,则p+5表示_元素a[5]的地址.
int a[10],*p=a;
5、写出以下两段程序的执行结果。如果程序无法编译,请指出出错部分并写明原因;如果程序陷入死循环,请回答“死循环”。 如果执行结果出现内存错误,请指出出错部分并写明原因。
int main(void)
{
char s[ ]="man";
int i;
for(i=0; s[i]; i++)
{
printf("\n%c%c%c%c",s[i], *(s+i), *(i+s), i[s]);
}
}
(1) mmmm (2)aaaa (3)nnnn
三、简答题
1、以下程序的运行结果如何?原因?
void get_memory(char **p, int num)
{
*p = (char *)malloc(num);
}
int main(void)
{
char *str = NULL;
get_memory(&str, 100);
strcpy(str, "hello");
printf("%s", str);
}
答:输出 hello 。
2、关键字static的作用是什么?
【参考答案】关键字static有三个明显的作用: 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
3、头文件中的 ifndef/define/endif 干什么用?
【参考答案】防止该头文件被重复引用。
四、编程
1、定义一个整形变量a,并将a的第5位清0,第7位置1,其他位不变。
int a;
a = a & (~(0x01 << 5));
a = a | (0x01 << 7);
2、写一个函数,交换传进去的两个参数的值。
void swap(int *p1,int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
------------------------C语言试题2END--------------------
|