一、选择题(35*2’)注意程序运行在32位系统下
1. 语句printf(″s\\\″)的输出结果为( B )
A s\\\ B s\ C s\\ D s
2.若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是 (B)
A、(exp==0) B、(exp!=0) C、(exp==1) D、(exp!=1)
3. float a = 3.2;(int)a;printf("a = %d, \\n", a);打印什么,运行后a的类型是(D)
A. 3.000000, int
B. 3, int
C. 3.0 float
D. 既不是3,也不是3.000000, float
4.有以下代码:
void func()
{
int a;
a++;
printf("a = %d\\n", a);
}
那么变量a储存在( A )
A. 栈
B. 堆
C. 正文段
D. 未初始化数据段
5. 在C语言中, char型数据在内存中的存储形式是( D )
A、补码 B、 反码 C、 原码 D、ASCII码
6. 假如指针p已经指向某个整型变量x,则(*p)++相当于( )B
A、p++ B、x++ C、*(p++) D、&x++
7. 为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与( C )组成配对关系。
A. 缩排位置相同的if B. 在其之前未配对的if
C. 在其之前未配对的最近的if D.同一行上的if
8. 设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i 个元素的地址为( B )。
A.P+i*2 B. P+(i-1)*2 C. P+(i-1) D. P+i
9.有函数
void func()
{
//staic int c=0;
c++;
printf("%d\\n", c);
}
那么连续调用两次,打印的结果是?( B )
A. 1, 1
B. 1, 2
C. 123495,123496(因为c没初始化,内部的值随机,第二次会比第一次加1)
D. 123495, 123495(因为c没初始化,内部的值随机,并且,值不会增加)
10.如果有以下代码:
char string[] = "love me please";
char *p = string;
char *q = p + 4;
*q++ = '\\0';
printf("\\"%s\\"", p);
printf("\\"%s\\"", q);分别打印:( B )
A. "love me please" ""
B. "love" "me please"
C. "love me please" "me please"
D. 因为常量字符串不能修改,会发生段错误
11.free(p);
哪个是错误的( D )
A. p的值必须是malloc的返回值
B. 一个指针不能被连续free两次
C. free了p以后p是野指针,应该置为NULL
D. free了以后p的值会自动置为NULL,所以*p = 9会段错误
12.下列描述中不正确的是( C )。
A. 字符型数组中可能存放字符串。
B. 可以对字符型数组进行整体输入、输出。
C. 可以对整型数组进行整体输入、输出。
D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
13.不能把字符串:Hello!赋给数组b的语句是( 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!”;
14. 对于循环队列,下列叙述中正确的 D
A)队头指针是固定不变的
B)队头指针一定不大于队尾指针
C)队头指针一定小于队尾指针
D)队头指针可以大于队尾指针,也可以小于队尾指针
15. 有以下程序
#include main() { int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf(“%d,%d,%d\\n”,m,n,*p,*q); } 程序运行后的输出结果为 B A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2 16. 若有定义语句:int a[4][10],*p,*q[4];且0<=i<4,则错误的赋值是: A A)p=a B)q[i]=a[i] C)p=a[i] D)p=&a[2][1] 17. 下面函数的功能是 A fun(char *a,char*b) { while((*b=*a)!=’\0’) { a++;b++; } } A将a所指字符串赋给b所指空间 B使指针b指向a所指字符串 C将a所指字符串和b所指字符串进行比较 D检查a和b所指字符串中是否有’\0’ 18. 设有以下函数: void fun(int n,char *s){……} 则下面对函数指针的定义和赋值均正确的是 A A void (*pf)( );pf=fun; B void *pf();pf=fun; C void *pf();*pf=fun; D void (*pf)(int,char);pf=&fun; 19. #include main ( ) { int n=2,k=0; while(k++&&n++>2); printf(“%d %d\\n”,k,n); } 程序运行后的输出结果是( )D A、0 2 B、1 3 C、 5 7 D、1 2 20. 有如下代码: struct test { char *name; int age; }; int main() { char myname[] = "hello, world"; struct test a1, a2; a1.name = myname; a1.age = 13; a2 = a1; a1.name[0] = 'm'; printf("%s\\n", a2.name); } 输出的结果为:( A ) A. mello, world B. hello, world C. 编译无法通过 D. 会段错误 21正确的标识符是 ( D ) A ?a B a=2 C a.3 D a_3 22. 以下c语言函数声明中,不正确的是 ( C ) A void fun (int x, int y); B fun (int x, int y); C int fun (int x,y); D char *fun (char *s); 23. 设有说明double(*p1)[N];其中标识符p1是( C )。 A. N个指向double型变量的指针。 B. 指向N个double型变量的函数指针。 C. 一个指向由N个double型元素组成的一维数组的指针。 D.具有N个指针元素的一维指针数组,每个元素都只能指向double型量。 24. 以下程序的输出结果是( C )。 #define f(x) x*x main() {int a=6,b=2,c; c=f(a)/f(b); printf(“%d\\n”,c); } A. 9 B. 6 C. 36 D. 18 25. 设有如下定义: int x=10,y=3,z; 则语句printf(“%d\\n”,z=(x%y,x/y)); 的输出结果是( D )。 A. 1 B. 0 C. 4 D. 3 26. 定义如下变量和数组:int i;int x[3][3]={1,2,3,4,5,6,7,8,9}; 则语句for(i=0;i<3;i++) printf(“%d ”,x[i][2-i]); 的输出结果是( C )。 A. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9 27. 以下对二维数组a进行正确初始化的是( B ) A. int a[2][3]={{1,2},{3,4},{5,6}}; B. int a[ ][3]={1,2,3,4,5,6}; C. int a[2][ ]={1,2,3,4,5,6}; D. int a[2][ ]={{1,2},{3,4}}; 28. 下列程序的输出结果是( C )。 int a[5]={2,4,6,8,10},*P,* *k; p=a; k=&p; printf(“%d”,*(p++)); printf(“%d\\n”,* *k); A. 4 4 B. 2 2 C. 2 4 D. 4 6 29. 如果char *string = "1234";如何将string中的字符串转化为整形赋值给int a,那么应该选择(C) A a = (int)string B a = *string C a = atoi(string); D a =string; 30.int a[10] = {3 , 2, 1}; int *p = a + 4; 那么printf("%d, %d\\n", a[2], *p);会打印?(C ) A. 2, 0 B 段错误 C 1, 0 D 1, 1 31. 如果:unsigned int a = 77;a>>1;unsigned int b = a&((0x1<<4) - 1);那么a和b的值分别为?( C ) A 39 13 B 77 45 C 77 13 D 38 5 32.程序中定义以下宏 #define S(a,b) a*b 若定义int area; 且令area=S(3+1,3+4),则变量area的值为( A ) A 10 B 12 C 21 D 28 33.下列程序的输出结果是( D )。 char p1[]=“abcd”,*p2=“ABCD”,str[50]=“xyz”; strcpy(str+2,strcat(p1+2,p2+1)); printf(“%s”,str); A. xyabcAB B. abcABz C. ABabcz D. xycdBCD 34. 阅读以下程序 #include main ( ) { int case ; float printF; printf(“请输入2个数:”); scanf(“%d %f”,&case,&printF); printf(“%d %f\\n”,case,printF); } 该程序在编译时产生错误,其出错原因是 A A) 定义语句出错,case是关键字,不能用作用户自定义标识符 B) 定义语句出错,printF不能用作用户自定义标识符 C) 定义语句无错,scanf不能作为输入函数使用 D) 定义语句无错,printf不能输出case的值 35.#include main( ) { char s[ ]={“012xy”}; int i,n=0; for(i=0;s[i]!=’\0’;i++) if(s[i]>=’a’&&s[i]<=’z’) n++; printf(“%d\\n”,n); } 程序运行后的输出结果是 B A)0 B)2 C)3 D)5 二、编程题(30 ’) 1.编制一个完整的程序:从键盘输入10个整型数组元素,调用自定义函数void sort( int array[ ] , int n )对其进行由大到小排序,最后将排序结果输出到显示器终端,要求自定义函数sort( )中用冒泡法实现排序。 #include int main() { int arr [10],i; void sort(int arry[],int n); for(i=0;i<10;i++) cin>>arr[i]; sort(arr,10); for(i=0;i<10;i++) cout< void sort(int array[ ],int n) { int i,j,k; for (i=0;i { k=array[j]; array[j]=array[j+1]; array[j+1]=k; } } 2.编程,求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如:153 = 13 + 53+ 33 #include int main() { int a,b,c; for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=1;c<=9;c++) if(100*a+10*b+c == a*a*a+b*b*b+c*c*c) printf("%d \\n",100*a+10*b+c); } 3. 从键盘输入一组非 0 整数,以输入 0 标志结束,求这组整数的平均值,并统计其中正数和负数的个数。 解:将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。 #include #include int main( ){ int stem[256],sum=0,pnum=0,nnum=0,i=0; cout<<"input:"< while(stem[i]!=0){ sum+=stem[i];//求和 if(stem[i]>0) pnum++;//正数数量 else nnum++;//负数数量 i++; cin>>stem[i]; } if(!i) cout<<"the numbers of 0:"< cout<<"aver="<<(double)sum/(pnum+nnum)< return 0; } 下载本文