目录
(1)添加逗号__牛客网 (nowcoder.com)
(2).删除公共字符_牛客题霸_牛客网 (nowcoder.com)
一.选择题
(1)无符号整形与整形的取值范围与源码补码与反码
这道题可以先用无符号整形的范围unsighed int 整形的范围0~255 (0~2^8-1)来做
过程如下
能整除说明等于0循环结束
当然也可以源码补码反码的知识来做
(2)以下哪个选项一定可以将flag的第二个bit置0
这道题有些粗心大一了没看到~符号 看好题目~为取反符号 2取反后为11111101 所以一定能置0
(3)结构体的内存对齐
我们知道在结构体的内存存储中有着结构体的内存存储规则
1. 结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处2. 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。对⻬数 = 编译器默认的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值。3. 结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的整数倍。4. 如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构 体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。
看文字感觉是难以理解的其实我们在思考的时候只需要注意对齐数和是它的整数倍就行了和最后对齐注意一下就可以了
好了如上图它们的默认对齐数 已经说明一个为4一个为8的
当为4的时候我们
然后是默认对齐数为8的情况
所以是16 16 16 24
(4)一样的源码与补码的计算方法
(5)宏的知识点
二.编程题
(1)添加逗号__牛客网 (nowcoder.com)
做错反思数据没有全过
1.当时想的是每3个每的分
新的思路
1.建立一个新的字符串数组将每一个数字放入,每当放入3个的时候放入一个逗号()
2不是第三个就放数字(注意字符数字)
2.最后进行打印(从后往前打印)
代码如下
#include <stdio.h>
#include <string.h>
int main()
{
int n=0;
char arr[13]={0};
scanf("%d",&n);
int count=0;
int k=0;
while(n)
{
if((count%3==0)&&count!=0)
{
arr[k++]=',';
count=0;
}
else {
arr[k++]='0'+n%10;
n/=10;
count++;
}
}
for(int i=strlen(arr)-1;i>=0;i--)
{
printf("%c",arr[i]);
}
return 0;
}
(2).删除公共字符_牛客题霸_牛客网 (nowcoder.com)
当时没有多少时间了
现在的思路就是遍历字符串没有相等就进行打印
改进思路flag是否是必要的
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool IsSame(char a,char b)
{
return a==b;
}
int main()
{
char str1[100]={0};
char str2[100]={0};
gets(str1);
gets(str2);
for(int i=0;i<strlen(str1);i++)
{
int flag=1;
for(int j=0;j<strlen(str2);j++)
{
if(IsSame(str1[i], str2[j]))
{
flag=0;
break;
}
}
if(flag)
{
printf("%c",str1[i]);
}
}
return 0;
}