1.第一题是一个输入判断,其中使用到了ASCLL码,和地址有关的东西
#include#include struct A{ long a; int b; }; int main(){ struct A num ={0x6e694c756f796978}; char ch='0'; for(int i=0;ch;i++){ ch=*((char *)&num+i); printf("%c",ch); } printf("n"); return 0; }
我进行了一个修改,用来判断会不会反向(类似今年的题。。。)结果没有,那就说明是正常的正序输入 ,输入的是字符的ASClL码
2.改写程序,在不改变const的情况下使用更多的方法改变b
#includeint main(){ const int b=10; return 0; }
#includeint main() { const int a = 10; int *p =(int *) &a; (*p)++; printf("%dn", a); return 0; }
指针本身是常量的话是不可以被修改的,指针指向的内容是常量也是不可以被修改的。
那么我可以给其地址的地址进行改变,这里要注意把a的地址赋给指针时要进行类型转化,不然会报错。
即可能会说初始化丢失了指针目标类型的限定
3.
struct node { *(int*)((char*)a+2*sizeof(structn))=100; }; struct n{ char a; int b; }; intmain(intargc,char*argv[]){ struct node a[2]={{1,2,3},{4,5,6}}; *(int *)((char *)a+2*sizeof(struct n))=100; return 0; }
程序拥有两个结构体变量, struct node a[2] = {{1,2,3},{4,5,6}};这一句是定义了一个结构体数组,在下一句中生成了48个字节的空间,然后对三十二位以后的a进行修改,使其改变,所以
a中的最后一位发生改变,即变成了{{1,2,3},{4,5,100}}
4.j解释函数调用的问题
#include#define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main(int argc, char* argv[]) { printf("%sn", h(f(1,2))); printf("%sn", g(f(1,2))); return 0; }
这个程序重要的是开始定义的三个宏,即
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
在这里通过分析可以得到,第一个是将后期遇到的类似于f(a,b)这样形式的存在都改成为ab的形式,第二个是说定义一个g(A)这样的存在,只要遇到便将其中数据放出,最后定义了g(a),h(a)两个函数。也是可以得到,在第一个输出时,外部不是g(a)所以将里面的输出,同时因为##的存在,所以将其中所有的符号删除,只输出12,第二个printf里面为第一个相同的情况,但外部为g(x)所以会进行一个修改,按照格式输出所以得到f(1,2)
5.
. lala 和 nini 是好朋友。有一天 lala 获得了 n 个质量不同的蛋糕,lala 想和 nini 一起分 享,让两个人都吃到相同质量的蛋糕。但是有强迫症的 lala 不想破坏每块蛋糕的完整 性,请编写程序判断这 n 个蛋糕是否符合 lala 的要求。 这个题可以先对其进行排序,时期从小到大排序,然后只需要对其中的元素进行部分的求和,在使用函数的情况下,可以对其进行多轮的求和,在其中出现总质量一半的情况时便可以退出循环。进行输出,当然也可以设定一个变量,在判断成立的时候进行累加,这样就可以根据变量的大小判断是否出现我所需要的情况。 6. 编写函数实现以下功能: 输入: 一行字符串 输出:逆序输出字符串中的单词,不保留开头与结尾的空格,相邻单词间仅保留一个 空格 样例( ❐ 代表空格): 输入 ❐❐❐❐ Hello ❐❐ everyone, ❐ we ❐ are ❐ xiyouLinuxer ❐ 输出 xiyouLinuxer ❐ are ❐ we ❐ everyone, ❐ Hello#include#include void reserveworld(char* str,int s,int e) { while (s < e) { char c = str[s]; str[s] = str[e]; str[e] = c; s++; e--; } } void reserve(char *str,int n) { int t = 0; for (int i = 0; i <= n; i++) { if (str[i] == ' ' || str[i] == '') { reserveworld(str, t, i - 1); t = i + 1; } } } int main() { char str[100] = ""; gets(str); reserveworld(str, 0, strlen(str)-1); reserve(str, strlen(str)); printf("%s", str); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)