1、 C语言程序的基本单位是
- A 程序行
- B 语句
- C 函数
- D 字符
答案:C
##### 试题解析
概念
2、在宏定义 #define PI 3、14159中,用宏名PI代替一个
- A 单精度数
- B 双精度数
- C 常量
- D 字符串
答案:D
3、设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是
- A 00011011
- B 00010100
- C 00011100
- D 00011000
答案:A
解析:<<的优先级高于^ 所以b先<<2 ,再与进行^运算
0000 0110
<<2
0001 1000
0000 0011 ^
0001 1011
4、执行下列程序段后,变量a,b,c的值分别是
int x=10,y=9;
int a,b,c;
a=(--x==y++)?--x:++y;
b=x++;
c=y;
- A a=9,b=9,c=9
- B a=9,b=10,c=9
- C a=1,b=11,c=10
- D a=8,b=8,c=10
答案:D
5、 int main(int argc, char *argv[])
{
int i, n = 0;
for (i=1; i
12、有两个字符数组a、b,则以下正确的输入语句是
- A gets(a,b)
- B scanf(“%s%s”,a,b)
- C scanf(“%s%s”,&a,&b)
- D gets(“a”),gets(“b”)
答案:B
13、以下对二维数组a的正确说明是 ( )
- A int a[ ][3]={ 0 }
- B int a[3][ ]={ {1},{2},{3} }
- C int a[1][3]={ 1,2,3,4 }
- D int a[2][3]={ {1,2},{3,4},{5,6} }
答案:A
14、若有以下函数调用语句: fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是
A 3
B 4
C 5
D 6
答案:A
15、若有以下定义: char a; int b; float c; double d; 则表达式a*b+d-c值的类型为
A float
B int
C char
D double
16、设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为
A 4
B 16
C 32
D 52
答案:C
逗号表达式
17、下面程序的输出是
int w=3;
fun(int k) {
if(k==0) return w;
return(fun(k-1)*k);
}
main() {
int w=10;
printf("%d",fun(5)*w);
}
A 360
B 3600
C 1080
D 1200
答案:B
f4*5 f3*4 f2*3 f1*2 f0*1 5*4*3*2*1*3*10
18、下列说法中正确的是
A 在switch语句中一定要使用break语句
B 在switch语句中不一定要使用break语句
C break语句是switch语句的一部分
D break只能用于switch语句中
答案:B
19、在C语言中,不正确的char类型的常数是
A 32768
B 0
C 037
D 0xAF
答案:A
20、假定在32位机中,定义char a[20];char *p = a;那么sizeof(a),sizeof(p)输出的值是
A 20,1
B 80,4
C 20, 4
D 40, 2
答案:C
21、关键字static的作用是什么?
(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
22、已定义一个变量num ,其值为5,简单编程函数实现下列位操作:
1)第二位清零;
2)第二位置1;
int setbit(int num,int n){
return num | (1<<(n-1));
}
int clearbit(int num ,int n){
return num & ~(1 << (n-1));
}
23、用变量a给出下面的定义
a) 一个整型数(An integer)
b) 一个指向整型数的指针(A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
d) 一个有10个整型数的数组(An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
24、给定一个整型变量a,写两个函数,第一个设置a的bit 3位,第二个清除a 的bit 3,在以上两个操作中,要保持其它位不变
#include
void set_bit(int *p, int n){
*p |= 1<<3;
}
void clean_bit(int *p, int n){
*p &= ~(1<<3);
}
int main(void){
int a = 3;
int *p = &a;
printf("a = %d \n", a);
set_bit(p, 3);
printf("a = %d \n", a);
clean_bit(p, 3);
printf("a = %d \n", a);
return 0;
}
25、题目:利用递归方法分别求1!,2!,3!,4!,5!。
程序分析:递归公式:fn=fn_1*4!
答案1:
#include
int recur(int n)
{
if(n == 0 || n == 1)
return 1;
else
return n * recur(n-1);
}
int main(int argc, const char *argv[])
{
printf("5!=%d\n",recur(5));
printf("4!=%d\n",recur(4));
printf("3!=%d\n",recur(3));
printf("2!=%d\n",recur(2));
printf("1!=%d\n",recur(1));
return 0;
}
答案2:
#include "stdio.h"
int fact(int j);
int main()
{
int i;
for(i=0;i<5;i++){
printf("\40:%d!=%d\n",i+1,fact(i+1));
}
return 0;
}
int fact(int j){
int sum;
if(j==0){
sum=1;
}else{
sum=j*fact(j-1);
}
return sum;
}
26、给定一个字符串“I love china”,编写程序完成以单词为单位的逆序,如“china love i”,并要求不允许使用第三方变量保存数据,但可以使用辅助指针变量等。
#include
#define N 32
int swap(char *head, char *tail);
int main()
{
char buff[N] = "I love China";
char *head = buff,
*tail = buff;
/*先将尾指针定位到字符串尾部*/
while('\0'!= *tail)
tail ++;
/*调用swap函数将整个字符串倒置*/
swap(buff,tail - 1);
/*主函数开始扫描遍历整个倒置后的字符串*/
while('\0' != *head)
{
/*查找单词头*/
while(32 == *head)
head ++;
/*找到头后将尾定位到头,开始找单词尾*/
tail = head;
while(32 != *tail && '\0' != *tail)
tail ++;
/*前两步找到头之后将单词倒置(因为循环结束后tail指向‘\0’,所以tail -1)*/
swap(head,tail - 1);
/*单词倒置后将头指向尾,为下次找单词做准备*/
head = tail;
}
puts(buff);
return 0;
}
/*swap函数,完成指定字符串倒置*/
int swap(char *head, char *tail)
{
while(head < tail)
{
/*异或法进行交换数据*/
*head ^= *tail;
*tail ^= *head;
*head++ ^= *tail--;
}
}