部分练习
例一、分数求和
1/1 - 1/2 + 1/3 - 1/4 … + 1/99 - 1/100
分析,首先可以先求出 1/1 ---- 1/100 的和,不关注符号:
定义一个 i ,用以表示分母的变化
int i = 1;
float sum = 0.0; //分数和值为小数,不可能大于 1
//sum 表示和,则sum 值变化表示为:
sum += 1.0 / i;
则增加上符号之后可以表示为:
int main()
{
float sum = 0.0; //记录和
int flag = 1; //用以表示符号变化
int i = 1;
for (i = 1; i <= 100; ++i) {
sum += flag * 1.0 / i;
flag = -flag; //i 为偶数时符号为负,为奇数符号为正
}
printf("%lf\n", sum);
return 0;
}
运行结果:
注意点:
(1)“ / ” 除操作时,倘若两边都是整数则运算结果也为整数:
此时 1/2 商 0 余 1,因此除的结果为 0;
(2)“ / ” 除操作有一方值为小数时,结果为小数:
(lf 表示浮点数打印)
例二、求十个整数的最大值
首先需要确保存在十个可以进行比较的数字,可以使用数组来进行随即输入:
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]); //记录数字的个数
int i = 0;
for (i ; i < sz; ++i) {
scanf("%d", &arr[i]); //首先输入十个需要进行比较的数
}
//进行比较
int max = arr[0]; //以第一个元素为基准来进行比较
int j = 1;
for (j; j < sz; ++j) {
if (arr[j] > max)
max = arr[j];
}
printf("max = %d\n", max);
return 0;
}
测试部分:
例三、打印乘法口诀表
分析:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
…
以此类推,第一行有一个等式,第二行两个,第三行三个,,,,第九行九个
int main()
{
int i = 1; //记录行
for (i; i <= 9; ++i) {
int j = 1; //记录列
for (j; j <= i; ++j)
printf("%d * %d = %d ", i, j, i*j);
printf("\n");
}
return 0;
}
运行结果:
可以看到打印出来的表并没有完全对齐,这是因为打印方式的问题,稍作修改即可:
例四、整形有序数组中实现二分查找
分析:
初始状态:
第二次查找:
第三次查找:
第四次查找:
代码表示:
int Bin_find(int arr[], int sz, int n)
{
int low = 0;
int high = sz - 1; //记录端点位置
int mid = 0;
while (low <= high) {
mid = (low + high) / 2;
if (arr[mid] > n)
high = mid - 1;
if (arr[mid] < n)
low = mid + 1;
if (arr[mid] == n)
return mid;
}
return 0;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int sz = sizeof(arr) / sizeof(arr[0]);
int n;
scanf("%d", &n); //要查找的数是 n
int ret = Bin_find(arr, sz, n);
if (ret != 0)
printf("找到了!下标为 %d\n", ret);
if (ret == 0)
printf("找不到!\n");
return 0;
}
测试:
Tips:
博客内容为原创,有任何问题欢迎留言~