CH11_1
// (a)and(g)are right;
// 注意对于(h),由于i并非指针变量,因此不可对其做间接寻址操作;
CH11_2
// 结论:只有(e)(f)(i)是合法的;
// 注意两点:
// 1.赋值运算符两边的变量类型是否相同?
// 比如:(d),p为指向int的指针,而&p为指向 指向int的指针 的指针;
// 2.区分左值和右值?
// 比如:&p为右值,仅仅代表一个地址值,一个指针,为右值,不可放在赋值号左边;
CH11_3
void avg_sum(double a[], int n, double *avg, double *sum)
{
int i;
*sum = 0.0;
for (i = 0; i < n; i++)
*sum += a[i];
*avg = *sum / n;
}
CH11_4
void swap(int* p, int* q)
{
int t;
t = *p;
*p = *q;
*q = t;
}
CH11_5
void split_time(long total_sec, int* hr, int* min, int* sec)
{
*hr = total_sec / 3600;
*min = total_sec % 3600 / 60;
*sec = total_sec % 3600 % 60;
}
CH11_6
void find_two_largest(int a[], int n, int* largest, int* second_largest)
{
if (a[0] > a[1]) {
*largest = a[0];
*second_largest = a[1];
}
else {
*largest = a[1];
*second_largest = a[0];
}
for (int i = 2; i < n; i++)
if (a[i] > * largest) {
*second_largest = *largest;
*largest = a[i];
}
else if (a[i] > * second_largest)
*second_largest = a[i];
}
CH11_7
void split_date(int day_of_year, int year, int* month, int* day)
{
int i;
int m[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
m[1]++;
}
for (i = 0; i < month - 1; i++) {
day_of_year -= m[i];
if (day_of_year <= 0) {
break;
}
}
*month = i + 1;
*day = day_of_year + m[i];
}
CH11_8
int* find_largest(int a[], int n)
{
int *max = &a[0];
for (int i = 1; i < n; i++) {
if (*max < a[i]) {
*max = a[i];
}
}
return max;
}