第 1 题(单选题)
题目名称:
C程序常见的错误分类不包含:( )
题目内容:
A .编译错误
B .链接错误
C .栈溢出
D .运行时错误
栈溢出是运行时错误的一种,因此C程序为将栈溢出单独列出,栈溢出包含在运行时错误中。
第 2 题(单选题)
题目名称:
关于VS调试快捷键说法错误的是:( )
题目内容:
A .F5-是开始执行,不调试
B .F10-是逐过程调试,遇到函数不进入函数
C .F11-是逐语句调试,可以观察调试的每个细节
D .F9是设置断点和取消断点
A:错误,F5是开始调试,在遇到短点的位置可以停下来,Ctrl+F5是开始执行,不调试
B:正确,F10遇到函数时不会进入到函数体中,F11会
C:F11遇到函数时,会进入函数中
D:F9会在光标所在行下短点,如果有短点会取消短点
第 3 题(单选题)
题目名称:
语言中哪一种形式声明了一个指向char类型变量的指针p,p的值不可修改,但p指向的变量值可修改?( )
题目内容:
A .const char *p
B .char const *p
C .char*const p
D .const char *const p
A:错误,const修饰*p,表示p指向的内容不能修改
B:错误,同上
C:正确,const修饰p本身,表示p的指向不能修改,p指向的空间中内容可以修改
D:错误,第一个const表示p指向的内容不能修改,第二个const表示p不能指向其他变量
第 4 题(单选题)
题目名称:
以下关于指针的说法,正确的是( )
题目内容:
A .int *const p与int const *p等价
B .const int *p与int *const p等价
C .const int *p与int const *p等价
D .int *p[10]
与int (*p)[10]等价
A:错误,int* const p中,const修饰指针变量p本身,表示p的指向不能改变,
int const *p中,const修饰p指针解引用之后的结果,表示p指向的内容不能改变
因此,不等价
B:错误,同上
C:正确,const都修饰p指针解引用之后的结果,表示p指向的内容不能改变
D:错误,
int *p[10]
定义了一个指针数组,数组中10个元素,每个元素都是int*类型的指针int (*p)[10]定义了一个数组指针,该指针只能指向存储10个整形元素的数组
第 5 题(单选题)
题目名称:
关于Debug和Release的区别说法错误的是:( )
题目内容:
A .Debug被称为调试版本,程序调试找bug的版本
B .Release被称为发布版本,测试人员测试的就是Release版本
C .Debug版本包含调试信息,不做优化。
D .Release版本也可以调试,只是往往会优化,程序大小和运行速度上效果最优
A:正确,Debug为调试版本,一般在开发完成后发布工程前,调试代码都是在Debug模式下进行的
B:正确,Release版本最终是要发送给用户的,发给用户的版本必须要没有问题,测试人员就是最后一个把关的
C:正确,Debug版本是调试版本,编译器编译时会增加一些调试信息,编译器基本不会对其进行优化
D:错误,Release版本是不能调试的,一般都是在Debug版本下调试的,Release版本一般编译器会进行大量的优化,删除无用的代码,指令的次序调整等,让其速度更快
第 6 题(简答题)
题目名称:
程序死循环解释
题目内容:
VS开发环境调试下面的代码,画图解释下面代码的问题
#include <stdio.h>
int main()
{
int i = 0;
int arr[] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<=12; i++)
{
arr[i] = 0;
printf("hello bit\n");
}
return 0;
}
代码有两个问题:1. 数组访问越界 2. 死循环
栈内存:
for循环中,i的内容是从0,一直增加到12,而数组只有10个空间,因此会越界
每次访问arr数组i号位置时,都会将该位置内容设置为0,当访问到arr[12]时,也会将该位置内容设置为0,而位置a[12]恰好为i的位置,即a[12]恰巧将i设置为0,因此造成死循环。
第 7 题(编程题)
题目名称:
strlen实现
题目内容:
模拟实现库函数strlen
#include <assert.h>
int my_strlen(char* str)
{
assert(str);
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "abcdefg";
int len = my_strlen(arr);
printf("%d\n", len);
return 0;
}
第 8 题(编程题)
题目名称:
strcpy实现
题目内容:
模拟实现库函数strcpy
#include <assert.h>
char* my_strcpy(char* dest, const char* src)
{
assert(src != NULL);
assert(dest != NULL);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = "xxxxxxxxxxxxxx";
char arr2[] = "hello world";
printf("%s\n", my_strcpy(arr1, arr2));
return 0;
}
第 9 题(编程题)
题目名称:
调整奇数偶数顺序
题目内容:
调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
void move_arr(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)
{
//从左向右,找到一个偶数后停止
while ((left < right) && (arr[left] % 2 == 1))
{
left++;
}
//从左向右,找到一个偶数后停止
while ((left < right) && (arr[right] % 2 == 0))
{
right--;
}
//交换奇偶数
if (left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
//移动
move_arr(arr, sz);
//输出
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}