1、C语言中,运算对象必须是整型数的运算符是 A 。
A、% B、/ C、%和/ D、*
模数和被模数都必须为整数
2、若有关系x≥y≥z,应使用 A C语言表达式。
A、(x>=y)&&(y>=z) B、(x>=y)AND(y>=z) C、(x>=y>=z) D、(x>=y)&(y>=z)
3、下面程序的输出是 C main( ) { int x=10,y=3; printf(“%d\n”,y=x/y);
}
A、0 B、1 C、3 D、不确定的值
整型计算10/3=3
4、若float x ;x = 10/4; x的值是 B 。
A、2.5 B、 2.0 C、 3 D、 2
整数计算10/4=2,float是浮点型
5、设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是 A 。
A、00011011 B、00010100 C、00011100 D、00011000
b<<2的优先级比 ^ 要高,所以先算左移
b<<2:110--> 0001 1000
0000 0011 --> 00011011
^相同为0,不同为1
6、在位运算中,某操作数 右移3位,其结果相当于 D
A、操作数乘以6 B、操作数除以6 C、操作数乘以8 D、操作数除以8
左移乘2,右移乘2
7、if(!x){语句块;},如果能运行语句块,则!x条件等价于 A 。
A、x==0 B、x==1 C、x != 0 D、x != 1
if(1),所以 !x==1,x==0
8、有一下程序,请问其输出结果是___B___
#include <stdio.h>
main ( )
{
char s[]="abc";
int i = 0;
while(s[i])
{
printf("%d",s[i]%10);
++i;
}
} 程序运行后的输出结果是
A)abc B)789 C)7890 D)979899
a=97 b=98 c=99,用10取余数,得到789
9、执行下列程序段后,变量a,b,c的值分别是 D 。
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
--x=9,y++=9;x=9 y=10
--x=8,x++=8,y=10
10、整型变量x和y的值相等,且为非0值,则以下选项中,结果为0的表达式是 D 。
A、x || y B、x | y C、x & y D、x ^ y
异或:相同为0,不同为1
11、对两个数组a和b进行如下初始化
char a[]=“ABCDEF”; char b[]={ ‘A’,’B’,’C’,’D’,’E’,’F’};
则以下叙述正确的是 D 。
A、a和b数组完全相同 B、a和b长度相同
C、a和b中都存放字符串 D、a数组比b数组长度长
char a[]=“ABCDEF”的末尾还藏了一个 '\0'
12、以下程序的执行结果为 C 。
#inlcude <stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{pirntf("%d",NUM);}
A、5 B、6 C、8 D、9
NUM (M+1)*M/2
(2+1+1)*2+1/2=4*2+0=8
13、以下程序中a b最后一次打印的结果正确的是____B____.
void func(int a){
static int b = 0;
printf(“b=%d\n”, b);
a=b+++++a;
return;
}
main(){
int a=10;
func(a);
func(a);
func(a);
printf(“a=%d\n”, a);
}
A、a=10 b=3 B.a=10 b=2 C.a=16 b=2 D.a=16 b=3
func(a);调用了3次
a不变 a=10,b++执行了三次 b=0,b=1,b=2
14、以下对二维数组a的正确说明是 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} };
B 列不能缺省
C 超出了一个组里只有3个
D 不能越过前面的空元素直接初始化后面的元素
15、下面函数fun的功能是 D 。
int fun(char s[],char t[])
{
int i=0;
while(s[i]==t[i])
if(s[i]==’\0’)
return 0;
else
i++;
return s[i]-t[i];
}
s:hello t:welloe
A、测字符串s和t的长度 B、将字符串s拷贝到t
C、将字符串t拷贝到s D、比较字符串s和t的大小
s[i]-t[i]相减比大小
16、请分别写出int类型和float类型及char类型与0比较的式子
int a=10; if(0 == a)
char b=10; if(0==b) if(‘\0’==b)
float f ; if(f>=-1e-6 && f<=1e-6)
17、请描述Linux操作系统用户空间的内存分为哪几个区段
栈区、堆区、.bss、.data、.rodata、常量区、代码区
18、请写出static关键字的作用
static修饰的局部变量:不可以被除本函数外的程序调用,初始化值为0,只初始化一次
static修饰的全局变量:不可以被除本文件以外的文件访问调用,初始化值为0
static修饰的函数:不可以被除本文件以外的文件访问调用
19、写出下列程序的输出结果____ county ________ (5分)
int main(void)
{
char s1[40]="county",s2[20]="side";
int i=0,j=0;
while(s1[i]!='\0') i++;
while(s2[j]== '\0') s1[++i] = s2[j++]; //永远不执行
s1[i]=0;
printf("%s",s1);
return 0;
}
i计数s1的长度不包括\0
i++后置加加,s1[6]=0;没有改变字符串的值
20、char a = 178,int b = a; unsigned char c = a; int d = c;
请问b=__-78____, c=__178_____, d=__178___?
a=178 源码反码补码都是178
将char类型的补码赋值给int类型的补码,并转为源码算出值
补:1111....10110010
反:1111....10110001
源:1000....01001110 -->-178
178正数赋值给无符号的char可以直接赋值
178正数赋值给int类型,直接赋值
21、编写strcpy函数(不调用C的字符串库函数,编写函数 strpy).
已知strcpy函数的原型是 int strcpy (char strDest[], const char strSrc[]);
strDest是目的字符串,strSrc是源串。根据原型改写strcpy函数
int i;
for(i=0;strSrc[i]!='\0';i++){
strDest[i]=strSrc[i];
}
strDest[i]='\0';
printf("%s\n",strDest);
22、已知字符串a、b及空数组c:
Char a[] = “acbdfg”
Char b[] = “13276”
Char c[50];
编写程序,要求c中存储的结果为”12367abcdfg”,并输出
strcpy(c, a);
strcat(c, b);
将c做排序
23、给定一个字符串“I love china”,编写程序完成以单词为单位的逆序,如“china love i”,并要求不允许使用第三方变量保存数据,但可以使用辅助指针变量等。
I love china ---》 anihc evol I à china love i
#include <stdio.h>
#include <string.h>
char str1[13]="Im love china";
void rever(char str[],int start,int end){
int i=start; //字符串或单词的开始
int j=end; //字符串或单词的结束
int temp;
for( ;i<j;i++,j--){ //i++ j--意为前后两头向中间靠
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
printf("%s\n",str);
}
int main(int argc, const char *argv[])
{
int i;
int start=0;
int end=0;
rever(str1,0,strlen(str1)-1); //先将整个数组翻转,再找出单词,将每个单词翻转
for(i=0;str1[i]!='\0';i++){
if(' '==str1[i]){ //以空格分隔判断单词的开头结尾
end=i-1; //结尾是空格的前一个
rever(str1,start,end);
start=i+1; //开头是空格的后一个
}
}
rever(str1,start,strlen(str1)-1); //最后结尾的单词没有末尾空格,单独再调一次
return 0;
}