#include<stdio.h>
第五题:
int main()
{
int arr[] = { 1,2,(3,4),5 };
printf("%d\n", sizeof(arr));
return 0;
}//打印结果:16
第六题:
int main()
{
char str[] = "hello bit";
printf("%d %d\n", sizeof(str), strlen(str));
//sizeof是C语言中的一个单目运算符,用来计算数据类型所占空间的大小,单位为字节;
//而strlen是一个函数,用来计算字符串长度。
//总结摘要:sizeof就是一个计算数据类型所占空间大小的单目运算符,在计算字符串的空间大小时,包含了结束符\0的位置;
//而strlen是一个计算字符串长度的函数,使用时需要引用头文件#include<string.h>,不包含\0,即计算\0之前的字符串长度。
return 0;
}//打印结果:10 9
第九题:
作业标题
【一维数组】交换数组
作业内容
将数组A中的内容和数组B中的内容进行交换。(数组一样大)
错误写法;
void Swap(int A, int B)
{
int tmp[] = { 0 };
tmp = A;
A = B;
B= tmp;//错误原因:表达式必须为可修改的左值。
//而数组名是首元素地址,地址为编号,不能被修改。
}
int main()
{
int A[] = { 1,2,3,4,5 };
int B[] = { 6,7,8,9,10 };
Swap(A, B);
return 0;
}
由此可知,要将数组交换,就只有将其内容对应一一交换。
正确写法①:
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%-2d ", arr[i]);
}
printf("\n");
}
int main()
{
int A[] = { 1,2,3,4,5 };
int B[] = { 6,7,8,9,10 };
int i = 0;
int sz = sizeof(A) / sizeof(A[0]);
for (i = 0; i < sz; i++)
{
int tmp = A[i];
A[i] = B[i];
B[i] = tmp;
}
print(A, sz);
print(B, sz);
return 0;
}
正确写法②:
int main()
{
int A[] = { 1,2,3,4,5 };
int B[] = { 6,7,8,9,10 };
int i = 0;
int sz = sizeof(A) / sizeof(A[0]);
for (i = 0; i < sz; i++)
{
int tmp = A[i];
A[i] = B[i];
B[i] = tmp;
}
for (i = 0; i < sz; i++)
{
printf("%-2d ", A[i]);
}
printf("\n");
for (i = 0; i < sz; i++)
{
printf("%-2d ", B[i]);
}
return 0;
}
正确写法③:
//打印函数
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%-2d ", arr[i]);
}
printf("\n");
}
//交换函数
void Swap(int arr1[],int arr2[],int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
int tmp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = tmp;
}
}
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 6,7,8,9,10 };
int i = 0;
int sz = sizeof(arr1) / sizeof(arr1[0]);
Swap(arr1, arr2, sz);
print(arr1, sz);
print(arr2, sz);
return 0;
}
第十题:
作业标题
使用函数实现数组操作
作业内容
创建一个整形数组,完成对数组的操作
实现函数init() 初始化数组为全0
实现print() 打印数组的每个元素
实现reverse() 函数完成数组元素的逆置。
要求:自己设计以上函数的参数,返回值。
//实现print() 打印数组的每个元素
void print(int arr[],int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
//实现函数init() 初始化数组为全0
void init(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = 0;
}
}
//实现reverse() 函数完成数组元素的逆置。
void reverse(int arr[], int sz)
{
int l = 0;
int r = sz - 1;
while (l < r)
{
int tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
l++;
r--;
}
}
int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr, sz);
reverse(arr, sz);
print(arr, sz);
init(arr, sz);
print(arr, sz);
return 0;
}//如果使用递归会更复杂,除非题目要求,所以我们这里直接考虑用循环。