第8次C练习
来源:互联网 发布:电子相册制作软件 知乎 编辑:程序博客网 时间:2024/06/05 09:56
C语言考试题(V2.0)
PS:机器运行环境32位系统。
一、 填空题:
1、 执行一下程序,while循环执行次数()(1分)。
int k = 0; while (!(k = 1)) { k++}
0
2、 有定义:char p[] = {‘a’, ‘b’, ‘c’}, *q = p; 在下面找出一个不能计算出char型数据所占字节数的表达式是()(1分)。
sizeof(p) sizeof(char) sizeof(*q) sizeof(p[0])
sizeof(p)
3、 若定义:int a[9], *p = a; 不能表示a[1]地址表达式的是()(1分)。
p + 1 a + 1 a++ ++p
a++
4、 (2分)改错:从指定的字符串中删除指定的字符,同一字母的大小写按不同的字符处理。
void func(char p[], char c){ int i , j; for (i=0; p[i]=='\0'; i++) { if (c != p[i]) { p[j++] = p[i]; } } }
void func(char p[], char c)
{
int i , j;
for (i=0, j = 0; p[i]; i++)
if (c != p[i])
p[j++] = p[i];
p[j] = 0;
}
5、 (4分)在一个32位的计算机中,计算下面的值。
void main(void){ struct { char c; int a; char b; }B;char *s1 = “0123456789”;char s2[] = “0123456789”;char s3[100] = “0123456789”;int s4[100];char q1[] = “abc”;char q2[] = “a\n”;char *q3 = “a\n”;int len1 = sizeof(s1); int len2 = sizeof(s2);int len3 = sizeof(s3);int len4 = sizeof(s4);int len5 = sizeof(q1);int len6 = sizeof(q2);int len7 = sizeof(q3);int len8= sizeof(B);}
4, 11, 100, 400, 4, 3, 4, 12,
6、 (2分)
int func(x){ int countx = 0; while(x){ countx ++; x = x&(x-1); } return countx;} 假定x = 9999。写出下面程序的运算结果().
8, 实际上求9999中1的个数
7、(4分)
int a[5] = {1, 3, 5, 7, 9};int *p1 = a + 1;int *p2 = (int *)(&a + 2);printf("%d.\n", *(p1+1));printf("%d.\n", *p1++);printf("%d.\n", ++(*p1));printf("%d.\n", *(p2-8));
5, 3, 6, 6
8、(3分)(1)、func(char *a){} 解释:传递的是__的地址。
(2)、func(char a[]){} 解释:传递的是__的地址。
(3)、func(char a[8]){} 解释:传递的是__的地址。
字符串首地址
9、(3分)分别写出int,float,指针类型的变量a 与“零”的比较语句。
if(a == 0)
if(a < 1e-6 && a > -1e-6)
if(a == NULL)
10、(2分)下面代码输出什么,为什么?
void func(void) { unsigned int a = 6; char b = -20; if (a + b > 6) { printf(“> 6.\n”); }else{ printf(“< 6.\n”); }}
大于6.
11、(2分)int a = -9; 那么按位取反和按逻辑取反是多少。
8 , 0
12、(2分)请说出const与#define 相比,有何优点?
13、(2分)简述数组与指针的区别?
14、(2分)What will be printed as the result of the operation below:
main(){ char *ptr = ” Cisco Systems”; *ptr++; printf(“%s\n”,ptr); ptr++; printf(“%s\n”,ptr); } 写出输出结果:_____
Cisco Systems
isco Systems
15、(2分)101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。
16、(2分)完成字符串拷贝可以使用strcpy 及 memcpy 函数,请问这些函数有什么区别,你喜欢使用哪个,为什么?
17、(5分)请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质:
#include <stdio.h>#include <stdlib.h>int main(void){ char a[30]; char *b = (char *)malloc(20 * sizeof(char)); printf("%d\n", sizeof(a)); printf("%d\n", sizeof(b)); printf("%d\n", sizeof(a[3])); printf("%d\n", sizeof(b+3)); printf("%d\n", sizeof(*(b+4))); return 0 ;}
30, 4, 1, 4, 1
求变量的类型所占的空间,
18、(2分)字符指针、浮点数指针、以及函数指针这三种类型的变量哪个占用的内存最大?为什么?
19、(1分)
int a[3];
a[0]=0;
a[1]=1;
a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=?
2
20、(4分)int array[10],不能对数组执行array++语句,原因是()。该数组的数组名array代表的含义是(),&array代表的含义是(),数组名不能作为左值的原因:()。
21、(2分)下面程序段的运行结果是 。
char *s=”abcde” ;
s+=2 ; printf(“%d”,s);
输出为字符串中b字符的地址,未知值
22、(1分)一个栈的入栈序列是abcde,则栈的不可能输出序列是:__。
A. edcba B. decba C. dceab D. abcde
C
23、(20分)根据下面给出的声明和数据,对每个表达式进行求值并写出他的值。在每个表达式进行求值是使用原来给出的值(也就是说,某个表达式的结果不影响后面的表达式)。假定ints数组在内存中的起始位置是0x40000100,整型值和指针的长度都是4字节。
int ints[20]={10, 20, 30, 40, 50, 60, 70, 80, 90, 100,110, 120, 130, 140, 150, 160, 170, 180, 190, 200};(Other declarations)int *ip=ints+3;表达式 值 表达式 值ints 0x40000100 ip 0x4000010Cints[4] 50 ip[4] 80ints+4 0x40000110 ip+4 0x4000011C*ints+4 14 *ip+4 44*(ints+4) 50 *(ip+4) 80ints[-2] 未知 ip[-2] 20&ints 0x40000100 &ip 未知&ints[4] 0x40000110 &ip[4] 0x4000011C&ints+4 0x40000240 &ip+4 未知&ints[-2] 0x400000F8 &ip[-2] 0x40000104
24、(1分)int a[3][2] = {(1,2),(3,4),(5,6)};
int *p = a[0];
printf(“%d\n”,p[0]);
return 0;
输出结果:__
1
25、(2分)下题中调用GetMemory()能否使str获得期望的内存,为什么?
Void GetMemory(char *p, int num)
{
p = (char )malloc(sizeof(char) num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str, 100);
strcpy(str, “hello”);
printf(“%s\n”,str);
}
不能,没有保存申请的堆内存首地址
26、(3分)已知有以下定义:
char str1[] = “abcd”;
char str2[] = “abcd”;
const char str3[] = “abcd”;
const char str4[] = “abcd”;
const char *str5 = “abcd”;
const char *str6 = “abcd;
char *str7 = “abcd”;
char *str8 = “abcd”;
判断下列表达式是否相等?
str1 == str2 ?
str3 == str4 ?
str5 == str6 ?
否否是
27、(2分)以下两段程序输出分别是什么,为什么?
#include <stdio.h>char *returnStr(){ char p[]="hello world!"; return p;}int main(){ char *str=NULL; str=returnStr(); printf("%s\n", str);return 0;}
随机值,str指向的空间已经被释放
28、(2分)这段程序运行的结果是()
int main(){ const int N = 10; const int M = 2; int *a = new int[N]; for (int i=0; i<N; i++) { a[i] = (0==i%2) ? (i+2):(i+0); } int (*b)[N/M] = (int(*)[N/M])a; for (int i=0; i<M; ++i) for (int j=0; j<N/M; ++j) printf("%d", b[i][j]); return 0;
21436587109
二、编程(20分)
1、(2分)按要求完成一个程序:
int main(void)
{
char a = 0;
/*自定义你的函数名,要求:
1、调用函数完成后,a的值变为1;
2、a的改变不能通过返回值
*/
printf(“a = %d.\n”, a);
return 0;
}
void set_1(char *a){ *a = 1;}
2、(4分)请完成以下题目。
a)请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数。
int get_1_num(char val){ char flag = 1, num = 0; while(falg){ if(flag & val) num++; flag <<= 1; } return num;}
b) 请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。
int get_addr(char *start, char *end, char ch){ int addr = 0; for(addr = 0; start + addr <= end; addr++) if(start[addr] == ch) return addr; return -1;}
3、(14分)两张图片题,字太多懒得打…
int func2(int n){ int i, num = 0, num1 = 2, num2 = 1; if(n == 0) reutrn 0; else if(n == 1) num = num2; else if(n == 2) num = num1; else if(n > 2) for(i = 2; i < n; i++){ num = 2 * num1 + num2; num2 = num1; num1 = num; } return num % 32767;}
- 第8次C练习
- 第8次C练习二
- 第1次C练习
- 第2次C练习
- 第3次c练习
- 第4次c练习
- 第5次c练习
- 第3次C练习
- 第6次C练习
- 第7次C练习
- 第9次C练习
- 第7次c语言练习(部分)
- C语言第四次作业练习
- C语言第五次作业练习
- C语言第六次作业练习
- C语言第七次作业练习
- C语言第八次作业练习
- C语言第九次作业练习
- 淘宝笔试题:一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL
- adb进程被占用
- springMVC 实现的增删查(没有数据库,用session代替)
- oracle表的分区本地索引以及全局索引
- openGl oom的解决方法
- 第8次C练习
- Fiddler抓取手机HTTP/HTTPS请求(3)
- Java NIO 随笔
- mysql group by获取第一组数据
- AltCoin
- linux解压、解压缩文件
- 使用li标签布局
- Android酷炫实用的开源框架(UI框架)
- linux下通过V4L2驱动USB摄像头