标题党一下,本篇文章主要汇总了一些代码题,让大家写一些代码练习一下吧!
变种水仙花_牛客题霸_牛客网 (nowcoder.com)
#include<stdio.h>
int main()
{for (int i = 10000; i <= 99999; i++) {int sum = 0;for (int j = 10; j <= 10000; j*=10) {sum += (i / j) * (i % j);}if (sum == i) {printf("%d ", i);}}return 0;
}
序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)
#include<stdio.h>
int main() {int n;scanf("%d", &n);int arr[50] = { 0 };for (int i = 0; i < n; i++) {scanf("%d", &arr[i]);}int del;scanf("%d", &del);int j = 0;int i = 0;for (; i < n; i++) {if (arr[i] != del) {arr[j] = arr[i];j++;}}for (int k = 0; k < j; k++) {printf("%d ", arr[k]);}return 0;
}
使用联合体判断大小端
使用联合体的知识,写一个函数判断当前机器是大端还是小端,如果是小端返回1,如果是大端返回0。
int check_sys()
{
union
{
int i;
char c;
}un;
un.i = 1;
return un.c;//返回1是⼩端,返回0是⼤端
}
1929. 数组串联 - 力扣(LeetCode)
int* getConcatenation(int* nums, int numsSize, int* returnSize)
//nums:当前数组 numsSize:当前数组的长度 returnSize返回数组的长度
{int*ans=(int*)malloc(sizeof(int)*numsSize*2);//为其开辟2倍的空间for(int i=0;i<numsSize;i++){ans[i] =nums[i];ans[i + numsSize] = nums[i];}*returnSize=2*numsSize;return ans;
}
写一个程序拷贝函数
# define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void CopyText()
{FILE* fr = fopen("data.txt", "r");if (fr == NULL){perror("fopen read Error");return;}FILE* fw = fopen("data_copy.txt", "w");if (fw == NULL){perror("fopen write Error");return;}//开始一边读,一边写int ch = 0;while ((ch = fgetc(fr)) != EOF){fputc(ch, fw);}fclose(fr);fclose(fw);fr = NULL;fw = NULL;
}
int main()
{return 0;
}
使用malloc函数模拟开辟一个二维数组
使用malloc函数模拟开辟一个3*5的整型二维数组,开辟好后,使用二维数组的下标访问形式,访问空间。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{int** arr = (int**)malloc(sizeof(int*) * 3);for (int i = 0; i < 3:i++){arr[i] = (int*)malloc(5 * sizeof(int));}for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){arr[i][j] = 1;}}for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){printf("%d", arr[i][j]);}}printf("\n");for (int i = 0; i < 3; i++){free(arr[i]);//如何生成,就如何释放arr[i]=NULL;}free(arr);arr=NULL;printf("\n");return 0;
}
offset宏
写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明
这个函数的头文件是include<stddef.h>
再来看看这个函数的参数:
宏定义的这句是什么意思呢,0强转为(struct A*) 类型,当前结构体的首地址是0号地址(NULL)。拿到m的地址之后又做了强制类型转换,再强转为size_t(通常用于表示对象的大小或内存中的偏移量),这个size_t是整型。转换为整型4。
# define _CRT_DEFINE_NO_WARNINGS
#define My_offsetoff(s,m) ((size_t)&(((s*)0)->m))
#include<stdio.h>
#include<stddef.h>
struct A
{char c;int count;
};
int main()
{int ret=My_offsetoff(struct A,c);//int ret = offsetof(struct A, m);printf("%d", ret);return 0;
}
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
n&这些数,可以分别拿到奇数位和偶数位。 此时按位或这两位就行了。
把n传入,定义一个这样的公式就可以解决问题。
# define _CRT_SECURE_NO_WARNINGS
#define SwapBit(n) ((((n)&0x55555555)<< 1)|((n)&0xaaaaaaaa)>>1)))
#include<stdio.h>
int main()
{printf("%d\n", SwapBit(11));return 0;
}