C基础补习测试题
一、选择题(每题2分,共 50 分)
A、% B、/ C、%和/ D、*
A、(x>=y)&&(y>=z) B、(x>=y)AND(y>=z) C、(x>=y>=z) D、(x>=y)&(y>=z)
}
A、0 B、1 C、3 D、不确定的值
A、2.5 B、 2.0 C、 3 D、 2
A、00011011 B、00010100 C、00011100 D、00011000
A、x==0 B、x==1 C、x != 0 D、x != 1
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
A、x || y B、x | y C、x & y D、x ^ y
char a[]=“ABCDEF”; char b[]={ ‘A’,’B’,’C’,’D’,’E’,’F’};
则以下叙述正确的是 D 。
A、a和b数组完全相同 B、a和b长度相同
C、a和b中都存放字符串 D、a数组比b数组长度长
A、p B、*p C、x D、*&x
A、s+1 B、 s++ C、&s[0]+1 D、 &s[1]
#inlcude
#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
#define M(x,y,z) x*y+z
main()
{ int a=1,b=2, c=3;
printf("%d\n", M(a+b,b+c, c+a)); } A、19 B、17 C、15 D、12
A、a[2][0] B、a[2][1] C、a[2][2] D、a[2][3]
A、116 B、118 C、144 D、122
A、p+=2, *p++ B、p+=2, *++p C、p+=2, (*p)++ D、a+=2, *a
A、字符’c’ B、字符’b’ C、字符’a’ D、字符’d’
A、k=*ptr1+*ptr2; B、ptr2=k;
C、ptr1=ptr2; D、k=*ptr1*(*ptr2);
A、a[i++] B、a[i]++ C、a[i] D、a[++i]
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} };
void main()
{ int a=5,*p1,**p2;
p1=&a,p2=&p1;
(*p1)++;
printf("%d\n",**p2);
}
A、5 B、4 C、6 D、不确定
A、b=*&a; B、b=*a; C、b=a; D、b=*p;
{
int i, n = 0;
for (i=1; i printf(“%d\n”, n); } ./aout 12 345 678 输出结果为____C_____。 A、123 B、136 C、678 D、58 二、程序题(每题5分,共50分) 1.已知两个升序数组a、b及空数组c: Int a[] = {1,3,5,7,9,11,13,15,17,19}; Int b[] = {2,4,6,8,10,12,14,16,18,20}; Int c[20]; 编写程序将两个数组完成归并,并存入数组c中; #include int main() { int b[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; int c[20]; // 归并两个数组 // 处理剩余元素 while (j < size_b) { // 打印归并后的数组 c return 0; 2. 编写strcat函数(不调用C的字符串库函数,编写函数 strcat). 已知strcat函数的原型是 char *strcat(char *strDest, const char *strSrc); strDest是目的字符串,strSrc是源串。 #include char *my_strcat(char *strDest, const char *strSrc) { // 将指针移动到目的字符串的末尾 // 复制源字符串到目的字符串末尾 // 在目的字符串末尾添加 null 字符 return strDest; int main() { // 调用自定义的 strcat 函数 // 打印结果 return 0; 3.一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问? 无论你问哪一个,他们都会指向通向诚实国的路。因此,你应该选择相反的路,即他们所指的另一条路,这样就能到达说谎国。 4. 从键盘输入一个十个元素的数组,通过选择排序进行降序排列并输出结果 #include int main() { // 输入十个元素的数组 // 选择排序逻辑 // 在未排序部分找到最大元素的索引 // 交换找到的最大元素与未排序部分的第一个元素 // 输出降序排列后的数组 return 0; 5. 给定一个字符串“I love china”,编写程序完成以单词为单位的逆序,如“china love i”,并要求不允许使用第三方变量保存数据,但可以使用辅助指针变量等。 #include int main() { // 逆序整个字符串 // 逆序每个单词 // 逆序单词 // 输出结果 return 0;
int a[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int size_a = sizeof(a) / sizeof(a[0]);
int size_b = sizeof(b) / sizeof(b[0]);
int i = 0, j = 0, k = 0;
while (i < size_a && j < size_b) {
if (a[i] <= b[j]) {
c[k++] = a[i++];
} else {
c[k++] = b[j++];
}
}
while (i < size_a) {
c[k++] = a[i++];
}
c[k++] = b[j++];
}
printf("Merged Array (c): ");
for (int x = 0; x < size_a + size_b; x++) {
printf("%d ", c[x]);
}
}
char *p = strDest;
while (*p != '\0') {
p++;
}
while (*strSrc != '\0') {
*p = *strSrc;
p++;
strSrc++;
}
*p = '\0';
}
char strDest[20] = "Hello, ";
const char strSrc[] = "world!";
my_strcat(strDest, strSrc);
printf("Concatenated String: %s\n", strDest);
}
int arr[10];
int i, j, maxIndex, temp;
printf("Enter 10 elements of the array:\n");
for (i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
for (i = 0; i < 10 - 1; i++) {
maxIndex = i;
for (j = i + 1; j < 10; j++) {
if (arr[j] > arr[maxIndex]) {
maxIndex = j;
}
}
temp = arr[i];
arr[i] = arr[maxIndex];
arr[maxIndex] = temp;
}
printf("Sorted array in descending order:\n");
for (i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
}
#include
char str[] = "I love china";
int len = strlen(str);
char *start = str;
char *end = str + len - 1;
while (start < end) {
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
start = str;
while (*start) {
// 找到单词的开始和结束位置
while (*start && *start == ' ') {
start++;
}
char *wordStart = start;
while (*start && *start != ' ') {
start++;
}
char *wordEnd = start - 1;
while (wordStart < wordEnd) {
char temp = *wordStart;
*wordStart = *wordEnd;
*wordEnd = temp;
wordStart++;
wordEnd--;
}
}
printf("Reversed String: %s\n", str);
}