字。 struct s1 { int i: 8; int j: 4; int a: 3; double b; }; struct s2 { int i: 8; int j: 4; double b; int a:3; }; printf("sizeof(s1)= %d\n", sizeof(s1)); printf("sizeof(s2)= %d\n", sizeof(s2)); result: 16, 24 第一个struct s1 { int i: 8; int j: 4; int a: 3; double b; }; 理论上是这样的,首先是i在相对0的位置,占8位一个字节,然后,j就在相对一个字节 的位置,由于一个位置的字节数是4位的倍数,因此不用对齐,就放在那里了,然后是 a,要在3位的倍数关系的位置上,因此要移一位,在15位的位置上放下,目前总共是18 位,折算过来是2字节2位的样子,由于double是8 字节的,因此要在相对0要是8个字节 的位置上放下,因此从18位开始到8个字节之间的位置被忽略,直接放在8字节的位置 了,因此,总共是16字节。 第二个最后会对照是不是结构体内最大数据的倍数,不是的话,会补成是最大数据的倍 数 1)读文件file1.txt的内容(例如): 12 34 56 输出到file2.txt: 56 34 12 (逆序) 2)输出和为一个给定整数的所有组合 例如n=5 5=1+4;5=2+3(相加的数不能重复) 则输出 1,4;2,3。 望高手赐教!! 第一题,注意可增长数组的应用. #include #include int main(void) { int MAX = 10; int *a = (int *)malloc(MAX * sizeof(int)); int *b; FILE *fp1; FILE *fp2; fp1 = fopen("a.txt","r"); if(fp1 == NULL) {printf("error1"); exit(-1); } fp2 = fopen("b.txt","w"); if(fp2 == NULL) {printf("error2"); exit(-1); } int i = 0; int j = 0; while(fscanf(fp1,"%d",&a[i]) != EOF) { i++; j++; if(i >= MAX) { MAX = 2 * MAX; b = (int*)realloc(a,MAX * sizeof(int)); if(b == NULL) { printf(“error3″); exit(-1); } a = b; } } for(;–j >= 0;) fprintf(fp2,”%d\n”,a[j]); fclose(fp1); fclose(fp2); return 0; } 第二题. #include int main(void) { unsigned long int i,j,k; printf(“please input the number\n”); scanf(“%d”,&i); if( i % 2 == 0) j = i / 2; else j = i / 2 + 1; printf(“The result is \n”); for(k = 0; k < j; k++) printf(“%d = %d + %d\n”,i,k,i – k); return 0; } #include void main() { unsigned long int a,i=1; scanf(“%d”,&a); if(a%2==0) { for(i=1;iprintf(“%d”,a,a-i); } else for(i=1;i<=a/2;i++) printf(” %d, %d”,i,a-i); } 兄弟,这样的题目若是做不出来实在是有些不应该, 给你一个递规反向输出字符串的例 子,可谓是反序的经典例程. void inverse(char *p) { if( *p = = ‘\0‘ ) return; inverse( p+1 ); printf( “%c”, *p ); } int main(int argc, char *argv[]) { inverse(“abc\0″); return 0; } 借签了楼上的“递规反向输出” #include void test(FILE *fread, FILE *fwrite) { char buf[1024] = {0}; if (!fgets(buf, sizeof(buf), fread)) return; test( fread, fwrite ); fputs(buf, fwrite); } int main(int argc, char *argv[]) { FILE *fr = NULL; FILE *fw = NULL; fr = fopen(“data”, “rb”); fw = fopen(“dataout”, “wb”); test(fr, fw); fclose(fr); fclose(fw); return 0; }
|