C语言基础题总结(操作符和指针)(含解析)

📅 2026/7/22 23:12:03
C语言基础题总结(操作符和指针)(含解析)
目录一操作符类型1前置和后置的运用2,操作符的优先级和结合性3,求两个整数的二进制中的不同位的个数4.打印整数二进制的奇数位和偶数位5,单身狗16求0~100000之间的水仙花数7,整型提升的运用8,在杨氏矩阵中查找元素9猜凶手10.杨辉三角11,单身狗212在屏幕上用*打印菱形二指针类型1字符串逆序2左旋字符串1)平移法(2)利用strcpy和strncat库函数(3)逆序法3,调整数组使得奇数全部位于偶数前面。4写一个函数判断字符串是否为另一个字符串旋转后的结果5判断函数指针3补充内容1求n的k次方2比较字符串一操作符类型1前置和后置的运用分析a: a先在将a进行赋值 a:先赋值再将a的值加1第一步c6,a6;注意第二步不是逗号表达式只有在等号的后面加上才是逗号表达式,bc是一个整体第二步c7,b7,c8,a7,a8第三步bbac78823,a9综上a9,b23,c8答案B2,操作符的优先级和结合性分析只有优先级和结合性不能确定唯一路径在不同的编译器中的结果不同。在VS中的结果为44412在gcc中的结果为2349答案D3,求两个整数的二进制中的不同位的个数4.打印整数二进制的奇数位和偶数位分析奇数开始时向右移动30位得到从左到右的第一个奇数位奇偶按照从右到左顺序规定最低1位也不用移动和1进行就能打印该位。偶数同理。5,单身狗16求0~100000之间的水仙花数水仙花数一个n位数各位上的数字的n次方之和等于该数例如如:1531^35^33^3int main() { int i 0; for (i 0; i 100000; i) { int w i; int m i; int n 1; while (w / 10 ! 0) { w / 10; n; } int j 0; int count 0; for (j 1; j n; j) { int a1 m % 10; int a2 m / 10; m a2; int k (int)pow(a1, n); count count k; } if (count i) { printf(%d , i); } } return 0; }7,整型提升的运用分析首先全局/静态整形变量的初始化为0局部整形变量的初始化值为任意值。故i的值为0i--变为-1i的类型为有符号的整型sizeof的返回值为unsigned int 为无符号类型。有符号整型和无符号整型进行比较时有符号整型需要转化为无符号的整型。即整形提升-1的二进制为1111111111111(32个1)去掉符号为一个非常大的数。故大于sizeof(i)。答案D8,在杨氏矩阵中查找元素杨氏矩阵矩阵中的每一行元素从左到右依次递增每一列元素从上到小依次递增。9猜凶手首先字符加数字是在ASCII码值上加在返回对应字符。a1b,b1c。以此类推通过分别假设a,b,c,d为凶手判断四句话当有三句话为真时则假设成立。10.杨辉三角11,单身狗2分析要在数组中找到两个单独的元素可以先整体异或(相同元素的异或值为00异或n为n)找到两个单独元素的异或值这个异或值二进制中的1表示该位上两个元素的二进制值不一样。通过该位在数组中分离两个不同的单独元素分离后的元素进行异或得到单独元素。12在屏幕上用*打印菱形实现分析将整体分为两部分上半和下半一个*数目递增一个*数目递减。每一行先打印空格在打印*13模拟实现strcpy(字符串拷贝 循环到“\0”时中止的原因赋值表达式的值为所要赋的值“\0的ASCII码值为0故表达式的值为0循环终止。while (*p1 *c2){;}可以简化为while(*p1*c2);二指针类型1字符串逆序分析gets函数为读取整行字符串的库函数,从键盘上读取一行字符串放到arr中直到遇到换行符\n或EOF,使用while循环后可利用换行符\n读取多行字符串。语法原型 char* gets(char* str)2左旋字符串实现一个函数可以左旋字符串中的k个元素。例如abcd 左旋2-cdab 左旋3-dabc 左旋4-abcd分析对于一个字符串左旋的次数为字符串个数时会和未旋转时一样。表明左旋具有周期性。当旋转多次时可以通过次数/周期(长度)实际次数。以实际次数进行旋转。1)平移法(2)利用strcpy和strncat库函数strcpy(str1,str2),将str2中的内容拷贝到str1当中。strncat(str1,str2,k)将str2中的前k个字符拼接到str1当中strcat(str1,str2)将str2中的全部字符拼接到str1当中(3)逆序法分析对abcdef左旋2个字符串变成cedfab先对ab进行逆序bacdef在对cdef进行逆序:bafedc最后对整体逆序:cdefab。3,调整数组使得奇数全部位于偶数前面。4写一个函数判断字符串是否为另一个字符串旋转后的结果分析srtcmp是比较两个字符串的函数头文件为#include string.h2分析strstr函数头文件string.h语法strstr(str1,str2)在str1中找str2,找到返回str1中的str2以及str1之后的字符找不到返回NULL5判断函数指针分析通过题目知道总体是一个函数指针这个函数指针有一个int形参并且返回值是int类型的。排除DB,是一个函数指针排除接着看函数内部是一个函数指针有两个int形参。故总共有三个int形参排除CA,内部是一个题目要求的函数指针外部int(*X)(int)也满足要求。3补充内容1求n的k次方头文件#include math.hpow(n,k)2比较字符串头文件#include string.hstrcmp(str1,str2)当str1str2时返回正数当str1str2时返回负数,当str1str2时返回0字符串比较规则比较对应位的ASCII码值当一方大于另一方时就不用比较后面的部分了。例如abcefabcdfabcabag abcde