1.C语言中,运算对象必须是整型数的运算符是(A)
A % B / C %和/ D *
求余运算符要求两个操作数必须为整型或者整型兼容的数据类型(char型, short型, 枚举,char型,对应的ASCII码编号与整型相兼容)
/ 运算前后为什么类型,结果就为什么类型,两整数相除,结果只保留整数部分。
2.在使用逻辑与(&&)和逻辑或(||)时要注意表达式截断问题。
(1) 表达式1 && 表达式2 //如果表达式1为假则后面的表达式2截断不会被计算。
(2) 表达式1 || 表达式2 // 如果表达式1为真时则后面的表达式2截断不会被计算。
3.移动:(1)左移时低位补0.
(2)右移时: 无符号数,最高位补0; 有符号数,最高位补符号位。
4.float *pf = &f, f;(错误) 应该要定义在前使用在后。
5.d = y++; y++ 是一个临时变量, y++未加, y 已加。
6.int a[5][4], *p = a[0]; 则 (p + 24 + 3) 等于( D)
A a[2][0] B a[2][1] C a[2][2] D a[2][3]
//P 向后偏移11个元素。
7.int a[5][4], (*p)[4] = a; ,数组a的首地址为100, *(p+2)+3 等于(C)
A 116 B 118 C 144 D 122
//P为数组的指针 p+2 指向第二行首元素, *(p+2)指向第二行首元素,此时地址加32
*(p +2)+3指向第二行第三列元素。 地址再加12, 则共加了44. 答案为144
8.int a[] = {1, 3, 5, 7, 9}, *p = a; 则值为5的表达式是()
A P+=2; *P++; B P+=2; *++P; C P+=2; (*P)++; D a+=2; *a;
//A选项地址加2后, *p++, p++还为加只是p加了,因此A正确。
9.设变量定义为 int x, *p = &x; 则&*p 相当于()
A P B *P C x D *&x
//int *p; p = &x; *p = x; &x 就相当与p
10.表达式 !x 等价于 (x == 0)
//要使表达式x取非为真, 则x 必为假, 非0即为真0即是假。
给定一个字符串"i love china", 编写程序完成以单词为单位的逆序,如"china love i", 并要求不允许使用第三方变量保存数据,
但可以使用辅助指针变量等。
分析:可以先将字符串整体先逆序过来(整体逆序时将begin++, 将end-- 当begin <= end 时满足条件),然后再将其中的每个单词再逆序过来。整体逆序时只需要在其中定义一个中间变量交换一下
在将单个单词逆序时,要考虑一开始是否为空格,定义两个指针变量, begin , end .用end 找到单个单词结束的位置当end找到时
要将end减一下从而找到单词末尾的有效字符。
#include <string.h>
void StrSwap(char *begin, char *end)
{
//printf("ni\n"); //测试语句可以不要
while(begin <= end)
{
char c = *begin;
*begin = *end;
*end = c;
++begin;
--end;
}
// printf("hao\n"); //测试语句可以不要
}
void WordSwap(char *pstr)
{
char *begin = NULL;
char *end = NULL;
StrSwap(pstr, &pstr[strlen(pstr) - 1]);
begin = pstr;
while(*begin) //此处不可以用pstr否则死循环
{
// begin = pstr;//此句要在大循环外面否则回来后又会赋前面的地址,会导致程序崩溃。
while(*begin == ' ' && *begin !='\0')
{
++begin;
}
end = begin;
while(*end != ' ' && *end != '\0')
{
++end;
}
--end;
StrSwap(begin, end);
begin = end + 1;
}
}
int main(void)
{
char s[50] = "i love china";
printf("%s\n", s);
WordSwap(s);
printf("%s\n",s);
return 0;
}
将字符串转换为数值
int Atoi(const char *p)
{
int ret = 0;
while(*p)
{
ret = ret *10 + (*p - '0');
++p;
}
return ret;
}
int main(void)
{
int ret = 0;
char a[] = "123456";
ret = Atoi(a);
printf("%d\n", ret);
}
找行列最大,并打印出行号列号
void findTheMax(int (*a)[4], int n)
{
int i, j, max_x[10], max_y[10];
for(i = 0; i < n; ++i) //找行最大
{
max_x[i] = a[i][0];
for(j = 0;j < 4; ++j)
{
if(max_x[i] < a[i][j])
{
max_x[i] = a[i][j];
}
}
// printf("%d \n", max_x[i]);
}
for(j = 0; j < 4; ++j) //找列最大
{
max_y[j] = a[0][j];
for(i = 0; i < n; ++i)
{
if(max_y[j] < a[i][j])
{
max_y[j] = a[i][j];
}
}
// printf("%d\n", max_y[j]);
}
for(i = 0; i < n; ++i) //找行列相等的
{
for(j = 0; j < 4; ++j )
{
if(max_x[i] == max_y[j])
{
printf("a[%d][%d] = %d \n", i, j, max_x[i]);
}
}
}
}
int main(void)
{
int a[3][4] = {{123, 94, -10, 218},
{3, 9, 100, -83},
{45, 166, 44, -99}};
findTheMax(a, sizeof(a) / sizeof(a[0]));
return 0;
}