C语言题库(含答案)
- 格式:doc
- 大小:171.00 KB
- 文档页数:35
渥瑞达北美 IT 培训
一、 简答题。 ( 共14题 ,共0分,每题0分 )
1. int i=10, j=10, k=3; k*=i+j; k最后的值是?
答:k = 60
ok
2. 写出程序结果:
void Func(char str[100])
{
printf("%d\n", sizeof(str));
}
答:4或者8(如果操作系统为32位则为4,64位则为8)
是地址吗
3. 写出sizeof(struct name2)的结果
struct name2{
char str;
int num;
short x;
}
不会!看结构
答:此题考察结构对齐的知识,结果为12
4. 写出sizeof(struct name1) 的结果
struct name1{
char str;
short x;
int num;
}
不会!
答:同样考察的是结构对齐的知识,结果为8
5. A.c 和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?这两个static变量会保存到哪里(栈还是堆或者其他的)?
答:没有问题,static变量只在当前文件中有效,也就是说static变量的作用域属于所在的文件域。 渥瑞达北美 IT 培训
static变量保存在全局/静态区
6. (void *)ptr 和 (*(void**))ptr的结果是否相同?
答:相同。首先第一个(void *)ptr将ptr转换为空指针类型(一级指针),(*(void**))ptr相当于先将ptr转换为空类型指针(二级指针)。二级指针是指向指针的指针,在前面加上*(解指针),也就是空类型指针了(一级指针)。
7. #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?
答: i = 5 * 5+5 = 30;看书上的结构理解下意思
8. 下面的声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * const a ;
答:第一个定义常量a,第二个也是定义常量a,第三个定义常量指针a,第四个定义指针常量a,第五个定义指向常量的指针常量(相当于const引用)。
9. 关键字const是什么含意?
答:1.const修饰基本类型,比如int类型为常量。
2.const修饰指针分为两种情况:指针常量或者常量指针。
3.const修饰类的成员函数,则在此函数中无法修改类中数据成员的值。
4.const修饰返回值意味着返回值不可被改变
5.const修饰函数参数,意味着函数参数不能被有意或者无意修改。
10. do……while和while……do有什么区别?
答:do…while先执行循环再判断条件,while…do先进行判断再执行循环。
11.语句for(;1;)有什么问题?它是什么意思?
他的意思是循环条件永远为真,不停地进行循环操作,除非循环体中有强制退出循环的语句才能终止循环,其实功能就相当于while(1)
渥瑞达北美 IT 培训
答:无限循环
12.如何引用一个已经定义过的全局变量?
答:题目说的有点不太清楚,如果是引用其它文件中定义的全局变量用extern,如果是在本文件中引用的话用作用域运算符:: 是在c++中的
13.switch()结构中条件表达式的类型可以是什么类型?
答:整型,字符型,常量,枚举类型
14..h头文件中的ifndef/define/endif的作用?
答:预编译命令,一般是用来防止头文件多重包含 结构?
二、 问答题。 ( 共63题 ,共0分,每题0分 )
1.关键字static的作用是什么?
第一:隐藏。static全局变量只在本文件中可访问,其它文件无法访问。
第二:持久保存变量的内容。static变量一经初始化便到程序运行结束后才
会被释放。
第三:默认初始化为0.static变量会被编译器默认初始化为0
2.int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=a[2]
这段程序执行完之后数组中元素的值分别是什么?q-p=2
答:0, 1, 2 渥瑞达北美 IT 培训
3.根据a的值,完成b的初始化,并将b的值返回
int func(float a)
{
int b;
switch(a)
{
case 1: 30;
break;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
此程序段有什么错误,如果有请指出
答:1.switch只能用整型或者字符型或者枚举类型,float类型不正确。
2.case后面没有加break
4. 写出程序运行结果
int sum(int a)
{
auto int c=0;
static int b=3;
c+=1;
b+=2;
return(a+b+c);
}
void main()
{
int I; 渥瑞达北美 IT 培训
int a=2;
for(I=0;I<5;I++)
{
printf("%d,", sum(a));
}
}
答:8,10,12,14,16
5. 写出输出结果
void g(int**);
int main()
{
int line[10],i;
int *p=line;
for (i=0;i<10;i++)
{
*p=i;
g(&p);
}
for(i=0;i<10;i++)
printf("%d\n",line[i]);
return 0;
}
void g(int**p)
{
(**p)++;
(*p)++;
}
答:1 2 3 4 5 6 7 8 9 10
渥瑞达北美 IT 培训
6. 写出输出结果
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);//解释 解释1
printf("%d,%d",*(a+1),*(ptr-1));
}
答:2, 5
7.写出下面的结果
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc";
char *str8 = "abc";
printf (“%d”,str1 == str2 );//数组名就是
printf (“%d”, str3 == str4);
printf (“%d”, str5 == str6 );
printf (“%d”, str7 == str8 );
答:0 0 1 1
8. 以下3个有什么区别
char * const p;
char const * p;
const char *p;