目录
题目6:看代码说结果
分析:
答案:255
题目7:猜名次
分析:
题目8:猜凶手
分析:
代码:
题目9:打印杨辉三角
思路:
代码:
题目10:关于指针的选择题
答案:
题目11:关于字符指针的选择题
答案:
题目12:指针数组和数组指针的选择题
答案:
题目13:数组指针判断的选择题
编辑
答案:
题目14:函数指针的题目1
答案:
题目15:函数指针的题目2
答案:
题目16:函数指针的题目3
答案
题目17:指针选择题
答案:
题目18:关于数组名的选择题
答案:
题目19:指针数组的选择题
答案:
题目20:看代码得结果
答案:
题目6:看代码说结果
#include<stdio.h>
#include<string.h>
int main()
{char a[1000] = { 0 };int i = 0;for (i = 0; i < 1000; i++) {a[i] = -1 - i;}printf("%d",strlen(a));return 0;
}
分析:
有符号的char类型是-128到127,i = 127的时候此时char没有溢出;i = 128的时候此时char溢出,-129需要进行截断,
此时-129的原码是:1000 0000 0000 0000 0000 0000 1000 0001
此时-129的补码是:1111 1111 1111 1111 1111 1111 0111 1111
只截取后8位:0111 1111十进制127;
我们惊奇地发现,当负数溢出之后,会循环到正数,也就是说无论给a[i]多大的值,只能被映射到相应的范围内,1000次循环之后,char数组中前255(-128-127一共255个数)是被初始化了的,其余的都是0,也就是第256个元素是\0,使用strlen判断长度得出结果是255;
答案:255
题目7:猜名次
根据5位运动员的表述,编程得到最后的比赛结果:
A说:B第二,我第三;
B说:我第二,E第四;
C说:我第一,D第二;
D说:C最后,我第三;
E说:我第四,A第一;
比赛结束后,每位选手只说对了一半,请编程确定比赛名次。
分析:
可以使用穷举法,每个人说的条件使用逻辑或关联,再和其他人的条件进行逻辑与关联,最后打印之前需要过滤一遍,若a*b*c*d*e == 120,再进行输出。
这个题目虽然出的不好,但是需要学会一种将实际问题转换成代码的这种思想。
题目8:猜凶手
杀人凶手是四人之一:
A:不是我;
B:是C;
C:是D;
D:C在胡说;
已知三人说了真话,一人说了假话;利用编程判断谁是凶手。
分析:
应用题转换成代码的能力非常重要,我们可以将四个人说的话当作条件,进行判断;在四个人中进行循环,如果这四个条件有三个是成立的那么就可以输出杀手。
代码:
#include<stdio.h>
int main()
{int killer = -1;for (killer = 'a'; killer <= 'd'; killer++) {if (((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd')) == 3) {printf("%c",killer);}}
}
题目9:打印杨辉三角
1
1 1
1 2 1
1 3 3 1
.....
思路:
观察到第一列和行列坐标相同的时候都是1,其余部分遵循arr[i][j] = arr[i-1][j-1] + arr[i-1][j];的逻辑。
①首先写出一个直角三角形的循环框架。
②第一列即arr[i][0]进行初始化为1,行列坐标相同也需要初始化为1;
③其余部分按照arr[i][j] = arr[i-1][j-1] + arr[i-1][j]的逻辑进行赋值。
代码:
#include<stdio.h>
void printYanghui(int arr[10][10],int sz)
{int i = 0;for (i = 0; i < sz; i++) {int j = 0;for (j = 0; j <= i; j++) {// 先初始化if (j == 0) {arr[i][j] = 1;}else if(i == j){ arr[i][j] = 1;}else {arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];}}}for (int i = 0; i < sz; i++){for (int j = 0; j < i; j++){printf("%d ", arr[i][j]);}printf("\n");}
}
int main()
{int arr[10][10] = { 0 };printYanghui(arr,10);return 0;
}
题目10:关于指针的选择题
答案:
A
free函数只能释放空间,并不会将指针变量内容置空。
题目11:关于字符指针的选择题
答案:
C
hello bit是一个字符串常量,存放在常量区中,p存放的是h的地址。
题目12:指针数组和数组指针的选择题
答案:
C
数组指针是一个指向数组的指针,指针数组是一个数组,数组内的元素是指针。
题目13:数组指针判断的选择题
答案:
C
arr先和[]结合就是数组,arr先和*结合就是指针;
A:是指针数组,数组元素类型是int**。
B:是指针数组,数组元素是int*。
C:是数组指针,指针指向的是char*[10]。
D:是指针数组,数组元素是char*。
题目14:函数指针的题目1
答案:
C
fun先和*结合就是指针。
题目15:函数指针的题目2
答案:
A
先看(*F)是一个指针,再看形参正确,去除掉这些部分就是返回值了:int(*)(int),这是一个函数指针有一个int形参,返回int类型,所以A正确。
题目16:函数指针的题目3
答案
B
A的参数是int,返回值是int不合要求;
C直接排除,不是指针;
D参数返回值均为int*,不合要求。
题目17:指针选择题
答案:
D
A:arr数组第一个元素地址给p,正确
B:数组指针指向arr,正确
C:同A,正确
D:p的类型是int*,&arr类型是int(*)[10],类型不匹配。
题目18:关于数组名的选择题
答案:
A
A:arr是数组首元素的地址,&arr是整个数组的地址,错误
B:正确
C:&arr是表示整个数组,正确
D:正确
题目19:指针数组的选择题
答案:
C
A:int类型的数组,错误
B:数组指针,指向int[10]
C:正确
D:a[10]是一个数组,数组的每一个元素是int (*)(int),即函数指针。
题目20:看代码得结果
答案:
不相等
相等
①str1和str2是数组,使用==比较的是各自首元素的地址,由于这是数组,所以在栈内是单独开辟空间的,所以地址一定不等。
②str3和str4是指针,使用==比较的是地址,字符串是存在静态区的,所以这两个指针指向同一个静态区,所以相等。