文档介绍:96.
struct name1{
char str;
short x;
int num;
}
struct name2{
char str;
int num;
short x;
}
sizeof(struct namel)=?
sizeof (struct name2)=?
8、12
(例如):
12
34
56
输出到file2. txt:
56
34
12
(逆序)
2)输出和为一个给定整数的所有组合
例如n二5
5=1+4; 5=2+3 (相加的数不能重复)
则输出
1, 4; 2, 3o
注意可增长数组的应用.
#include <stdio. h>
#include <stdlib. h>
int main(void)
{
int MAX = 10;
int *a = (int *)malloc(MAX * sizeof (int)); int *b;
FILE *fpl;
FILE *fp2;
fpl = fopen("a. txt”,"r”);
if(fpl == NULL)
{printf ("errorl");
exit (-1);
}
fp2 = fopen (z/b. txt”, "w”);
if(fp2 == NULL)
{printf("error2”);
exit(-1);
}
int i = 0;
int j = 0;
while (fscanf (fpl, &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(fpl);
fclose(fp2);
return 0:
}
一个递规反向输出字符串的例子,经典例程.
void inverse(char *p)
if ( *p = = ' \0')
return;
inverse( p+1 );
printf( "%c”, *p );
}
int main(int argc, char *argv[])
(
inverse("abc\O");
return 0;
}
用递归算法判断数组a[N]是否为一个递增数组。
递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否 则返回false结束:
bool fun( int a[], int n )
{
if( n= =1 )
return true;
if( n= =2 )
return a[nT] >= a[n-2];
return fun( a, n~l) && ( a[nT] >= a[n-2]);
}
什么是可重入性?
可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据 错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除 非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可 重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数 要么使用本地变量,要么在使用全局变量时保护自己的数据。
可重入函数:
不为连续的调用持有静态数据。
不返回指向静态数据的指针;所有数据都由函数的调用者提供。
使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。
如果必须访问全局变量,记住利用互斥信号量来保护全局变量。
绝不调用任何不可重入函数。
给出下列程序的结果:
char strl[] = "abc”;
char str2[] = "abc”;
const char str3[] = "abc”;
const char str4[]二 〃abc〃;
const char *str5 = 〃abc〃;
const char *str6 = 〃abc〃;
char *str7 = 〃abc〃;
char *str8 = 〃abc〃;
cout < < ( strl == str2 ) < < endl; cout < < ( str3 == str4 ) < < endl;
cout < < ( str5 == str6 ) < < endl; cout < < ( str7 == str8 ) <