C语言作业难题

计算 1 + 1/(2 * 3) + 1/(3 * 4) + ...+ 1/(n * (n + 1)) = ?直到最后一相值小于0.00001为至。

参考代码:

#include <stdio.h>
int main()
{
// 定义一个变量用来存储累加结果
double sum = 1;// 将第一个运算数直接赋值给sum,后期程序无需在处理
double n = 2; // 分母运算数
double k;
do
{
k = 1/(n * (n + 1));
sum += k;
n++;
}
while(k >= 0.00001);
printf("1 + 1/(2 * 3) + 1/(3 * 4) + ...+ 1/(n * (n + 1))=%lf\n",sum);
return 0;
}

计算1+1/2 - 1/3 + 1/4 - 1/5 ...+1/n= ? n通过键盘输入 。

参考代码:

#include <stdio.h>
int main()
{
// 定义一个变量,用来保存累加结果
double sum = 1;
// 定义一个变量存放n
int n;
// 定义一个符号位
int f = 1;
printf("请输入一个整数:\n");
scanf("%d",&n);
// 累加计算
for(int i = 2; i <= n;i++)
{
// 累加运算
sum += 1.0 / i * f;
// 改变符号位
f = -f;
}
printf("1+1/2 - 1/3 + 1/4 - 1/5 ...+1/n= %lf\n",sum);
return 0;
}

我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三 值 钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

分析:

参考代码:

#include <stdio.h>
// 定义鸡的价格
#define ROOSTER_PRICE 5
#define HEN_PRICE 3
#define CHICKEN_PRICE 1.0/3
int main()
{
// 定义三个变量,用来存放公鸡,母鸡,小鸡的只数
int rooster,hen,chicken;
// 计算100元买公鸡的只数
for(rooster = 0;rooster <= 100/ROOSTER_PRICE;rooster++)
{
// 计算100元买母鸡的只数,这里会受到公鸡的影响
for(hen = 0;hen <= 100/HEN_PRICE;hen++)
{
// 计算小鸡的只数,小鸡只数 = 100 - 公鸡数 - 母鸡数
chicken = 100 - rooster - hen;
// 检测百元买百鸡成立条件
if(rooster * ROOSTER_PRICE + hen * HEN_PRICE + chicken * CHICKEN_PRICE == 100)
{
printf("公鸡=%d只,母鸡=%d只,小鸡=%d只\n",rooster,hen,chicken);
}
}
}
return 0;
 

判断一个数是不是回文数。(回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整 数。 如:12321

分析:

参考代码:

#include <stdio.h>
int main()
{
// 定义两个变量,接收键盘录入的原始数据和反转后的数据
int num,renum = 0;
printf("请输入一个整数\n");
scanf("%d",&num);
// 因为num经过计算后,会变成0,所以需要临时存储原始数据
int num_t = num;
// 使用while循环实现数据的反转
while(num > 0)
{
// 从原始数据拆分每一个数字
int n = num % 10;// 拆取个位数字
num /= 10;// 缩小数字
// 组装反转后的数据
renum = renum * 10 + n;
}
// 校验原始数据和反转数据
if(num_t == renum)
{
printf("%d是回文数字\n",num_t);
}
else
{
printf("%d不是回文数字\n",num_t);
}
return 0;
}
 

从键盘录入一组数列,判断是否是回文,举例:12321,abba,121,1aba1

#include <stdio.h>
int main()
{
// 创建一个数组,接收键盘录入的数列
char arr[5] = {'0'};
int flag = 1;// 默认是回文字符串
int len = sizeof(arr)/sizeof(char);// 计算数组大小
printf("请输入字符[包含数字+字母]\n");
// 因为我们是向数组添加数据,所以需要使用for
for(int i = 0; i< len;i++)
{
scanf("%c",&arr[i]);
getchar();
}
// 打印测试输入的数列
printf("%s\n",arr);
// 判断是否是回文
for(int i = 0,j = len -1;i < len/2; i++,j--)
{
if(arr[i] != arr[j])
{
flag = 0;
break;
}
}
if(flag)
{
printf("%s是回文数列\n",arr);
}
else
{
printf("%s不是回文数列\n",arr);
}
return 0;
}

二维整型数组,求所有元素平均值,求每行最大值,求每列最小值。

#include <stdio.h>
/* 定义一个函数,实现求值 */
void cal(int arr[][10],int row,int col)
{
int sum = 0;// 用于存储所有元素的总和
int max_row;// 用于存储每行的最大值
int min_col;// 用于存储没列的最小值
double avg; // 用于存储所有元素的平均值
// 计算所有元素的和
for(int i = 0; i < row; i++)
for(int j = 0; j < col; j++)
sum += arr[i][j];
// 计算平均值
avg = (double) sum / (row * col);
// 输出结果:
printf("平均值:%.2f\n",avg);
// 计算每行的最大值
printf("每行最大值:\n");
for(int i = 0; i < row; i++)
{
max_row = arr[i][0];// 给最大值赋初始值
for(int j = 0; j < col; j++)
if(arr[i][j] > max_row)
max_row = arr[i][j];
printf("第%d行的最大值为:%d\n",i+1,max_row);
}
// 计算每列的最小值
printf("每列最小值:\n");
for(int j = 0; j < col; j++)
{
min_col = arr[0][j];// 给列最小值赋初始值
for(int i = 0; i < row; i++)
if(arr[i][j] < min_col)
min_col = arr[i][j];
printf("第%d列的最小值为:%d\n",j+1,min_col);
}
}
int main()
{
int arr[3][10] = {
{12,13,56,67,66,55,32,12,23,34},
{22,56,67,87,77,66,55,45,43,21},
{1,2,3,4,5,6,7,8,9,0}
};
int row = sizeof(arr)/sizeof(arr[0]);
int col = sizeof(arr[0])/sizeof(int);
cal(arr,row,col);
return 0;
}

编写一个函数,通过输入一个数字字符,返回该数字

#include <stdio.h>
int charToNumber(char c)
{
// 定义一个变量,用来存放转换后的数字,如果转换失败,就显示-1
int number = -1;
if(c >= '0' && c <= '9')
{number = c;
number -= '0';
}
return number;
}
int main()
{
char c;
printf("请输入一个0~9的字符:\n");
scanf("%c",&c);
getchar();
printf("返回的数字是:%d\n",charToNumber(c));
return 0;
}

设计函数,实现strcmp 的功能;

#include <stdio.h>
/*
自定义strcmp函数
const 数据类型 常量名; // 使用const修饰的变量是常量,表示一旦赋值,就不能改变,主要是访问变量被恶意篡

*/
int my_strcmp(const char arr1[],const char arr2[])
{
// 定义一个变量,初始值为0
int i = 0;
// 判断数组中是否存在字符,如果不存在就跳出循环
while(arr1[i] && arr2[i])
{
if(arr1[i] != arr2[i])
{
return arr1[i] - arr2[i];// 此时会产生两个结果,一个正数(1),一个是负数(-1)
}
i++;
}
return arr1[i] - arr2[i];// 此时会产生1个结果,0
}
int main()
{
const char str1[] = "Hello,MaJie";
const char str2[] = "Hello,MaYingLong";
int result = my_strcmp(str1,str2);
if(result < 0)
{
printf("'%s' 小于 '%s'\n",str1,str2);
}
else if(result > 0)
{
printf("'%s' 大于 '%s'\n",str1,str2);
}
else
{
printf("'%s' 和 '%s' 相同\n",str1,str2);
}
return 0;
}
 

  • 34
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值