目录
6. 小武每天吃现有桃子的一半多加一个吃桃子,到第n天的时候剩下1个桃子。输入吃桃子的天数,求原来一共有多少个桃子
1. 判断某月份是什么季节
#include <stdio.h>
int main() // 主函数的类型 ,所有程序的入口,有且只有一个
{
int a;
printf("请输入一个月份数字:");
scanf("%d",&a); // 输入,取地址符 %d=数字,%c=字符
switch((int)a%12){ // swith:开关 ,实现多分支选择结构
case 0:
case 1: //case:事例
case 2:
printf("冬季");
break;
case 3:
case 4:
case 5:
printf("春季");
break;
case 6:
case 7:
case 8:
printf("夏季");
break;
default:
printf("秋季");
break;
}
return 0;
}
运行结果:
2. 通过三条边求三角形面积
注意:
- 可以输入浮点数,面积保留小数点后两位。
#include<stdio.h> //头文件
#include<math.h>
int main()
{
float a,b,c,d,xin;
printf("请分别输入三角形的三条边:\n");
scanf("%f %f %f",&a,&b,&c);
d=(a+b+c)/2;
xin=sqrt(d*(d-a)*(d-b)*(d-c)); //使用 sqrt求平方根
printf("三角形的面积为:%.2f\n",xin);
return 0;
}
运行结果:
3. 给出坐标,求三角形的周长
3.1 通过数组求解
#include<stdio.h>
#include<math.h>
int main()
{
double a[3][2]; //定义一个二维数组 a[][]
int i,j;
double sum=0;
printf("请依次输入坐标:\n");
for(i=0;i<3;i++){ // a[0][0]~a[2][1] 一共 7个数组
for(j=0;j<2;j++){
scanf("%lf",&a[i][j]);
}
}
for(i=0;i<3;i++){
if(i<2){
sum+=sqrt(pow(a[i][0]-a[i+1][0],2)+pow(a[i][1]-a[i+1][1],2));
//求两点之间的距离
// sum+=sqrt(((a[i][0]-a[i+1][0])*(a[i][0]-a[i+1][0]))+((a[i][1]-a[i+1][1])*(a[i][1]-a[i+1][1])));
}
else{
sum+=sqrt(pow(a[i][0]-a[0][0],2)+pow(a[i][1]-a[0][1],2));
//求起始点与初始点的距离
// sum+=sqrt(((a[i][0]-a[i+1][0])*(a[i][0]-a[i+1][0]))+((a[i][1]-a[i+1][1])*(a[i][1]-a[i+1][1])));
}
}
printf("三角形的周长为:%.2lf",sum); // %lf: double类型格式化输入输出的格式符号
return 0;
}
运行结果:
3.1 通过函数求解
#include<stdio.h>
#include<math.h>
double xin(double x1,double y1,double x2,double y2){ //定义一个 xin函数
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); //求两点的直线距离
}
int main()
{
double a,b,c,d,e,f;
printf("请依次输入坐标:\n");
scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f);
// %lf: double类型格式化输入输出的格式符号
double x,y,z,sum=0;
x=xin(a,b,c,d);
y=xin(a,b,e,f);
z=xin(c,d,e,f); //调用 xin函数
sum=x+y+z;
printf("三角形的周长为:%.2lf",sum);
return 0;
}
运行结果:
4. 输出区间中闰年个数,并在下一行输出所有闰年年份数字
4.1 通过for循环求解
#include <stdio.h>
int main(){
int xin=0;
int i,j;
printf("请分别输入两个年份:\n");
scanf("%d",&i);
scanf("%d",&j);
for(i;i<=j;i++){
if((i%4==0&&i%100!=0)||(i%400==0)){ //闰年判断条件 &&:与 ||:或
xin++;
printf("%d\t",i);
}
}
printf("\n闰年有: %d个",xin);
return 0;
}
运行结果:
4.2 通过函数求解
int xin(int y){ //定义xin函数
return((y%4==0&&y%100!=0)||(y%400==0)); // &&:与 ||:或
}
int main()
{
int i,j;
int sum=0;
printf("请分别输入两个年份:\n");
scanf("%d",&i);
scanf("%d",&j);
for (i;i <= j; i++){
if (xin(i) == 1){ //调用xin函数
sum++;
printf("%10d",i);
}
}
printf("\n闰年有: %d个",sum);
return 0;
}
运行结果:
5. 求一个正整数的阶乘 (不使用for和while结构)
#include <stdio.h> //包含标准库的信息
int xin(int x) //定义 xin函数
{
int i;
if(x<0) //不能求0以下的阶乘
printf("n<0,data errot!");
else if(x == 0||x==1) // x=0或1时,x! = 1
i=1;
else i=xin(x-1)*x; // x>1时,x! = x*(x-1)*(x-2)*...*2*1 相当于循环
return (i);
}
int main(void) //每个程序都从 main函数的起点开始执行
{
int xin(int x); //函数声明
int x,y;
printf("请输入一个正整数:\t");
scanf("%d",&x); //输入要求阶乘的数
y = xin(x);
printf("%d! = %d\n",x,y);
return 0;
}
或
#include<stdio.h>
int xin(int x){
if(x==1){
return 1;
}
return x*xin(x-1); //定义 xin函数中多次调用 xin函数
}
int main()
{
int y;
printf("请输入一个正整数:\t");
scanf("%d",&y);
printf("%d! = %d",y,xin(y));
return 0;
}
运行结果:
6. 小武每天吃现有桃子的一半多加一个吃桃子,到第n天的时候剩下1个桃子。输入吃桃子的天数,求原来一共有多少个桃子
6.1 通过for循环求解
#include<stdio.h>
int main()
{
int a,b,n;
a=1;
printf("一共吃了多少天\n");
scanf("%d",&n);
for(b=1;b<n;b++){
a=(a+1)*2;
}
printf("原来一共有%d个桃子",a);
return 0;
}
运行结果:
6.2 通过函数求解
#include<stdio.h>
int n;
int xin(int a){
if(a==n) //当 a等于 n时结束
return 1;
return(xin(a+1)+1)*2; // (a+1)*2循环
}
int main()
{
printf("一共吃了多少天\n");
scanf("%d",&n);
printf("原来一共有%d个桃子",xin(1)); // 给a赋值为 1
return 0;
}
运行结果:
7. 输入几个数,求其中的质数
7.1 通过for循环求解
#include<stdio.h>
#include <math.h>
int main()
{
int r=0;
int i,j,n,num,xin[1000];
printf("请输入要判断的数个数: \n");
scanf("%d",&n);
printf("请输入大于1的正整数:\n");
for(i=0;i<n;i++)
scanf("%d",&xin[i]); //依次输入数据进数组
printf("\n");
printf("其中的质数有:",xin[i]);
for(i=0;i<n;i++){
for(j=2;j<sqrt(xin[i]);j++) // sqrt:开方,平方根
{
if(xin[i]%j==0)
break;
}
if(xin[i]==1)
continue;
if(j>sqrt(xin[i])) //判断素数 sqrt:开方,平方根
{
r++;
printf("%d ",xin[i]);
}
}
printf("\n质数个数为:%d\n",r);
return 0;
}
运行结果:
7.2 通过函数求解
#include<stdio.h>
#include<string.h> //使用自定义的函数时运用
int chose(int s){
int i = 2;
do { //运用 do...while结构
if (s % i == 0 && s != i || s == 1) //判断素数 &&:与 ||:或
return 0;
i++;
} while (i < s);
return 1;
}
int main()
{
int a[1000],b,c,i,j;
printf("请输入要判断的数个数: ");
scanf("%d",&j);
printf("请输入大于1的正整数:\n");
for ( i = 0; i < j; i++)
scanf_s("%d", &a[i]);
printf("\n其中的质数有:");
for ( i = 0; i < j; i++)
{
c = chose(a[i]);
if (c == 1)
printf("%d ", a[i]);
}
return 0;
}
运行结果:
8. 家庭收支记账
注意:
- 原有金额10000元
8.1 通过 switch-case 求解
#include<stdio.h> // switch结构
#include<string.h>
int main()
{
int a=0,b=1,c=0;
char aaa[1000]; //每次收支说明
char bbb[3000]=""; //要显示的所有明细 注意初始化
double ccc=0; //每次收支金额
double ddd=10000; //总金额
char eee='0'; //用户选择是否退出的操作
char fff[1000]=""; //每次收支明细的临时数组 注意初始化
memset(aaa,0,sizeof(aaa));
do{
printf("------家庭收支软件--------\n");
printf(" 1.收支明细\n 2.登记收入\n 3.登记支出\n 4.退出\n");
printf(" 请选择(1-4):");
scanf("%d",&a);
switch(a){
case 1: //收支明细
printf("---------当前收支明细记录--------\n");
printf("收支\t\t收支金额\t总金额\t\t说明\n");
printf("%s",bbb);
if(c=0){
printf("没有收支明细\n");
}
break;
case 2: //登记收入
printf("本次收入金额:\n");
scanf("%lf",&ccc);
printf("本次收入说明:\n");
scanf("%s",&aaa);
ddd+=ccc;
c=1; //有一笔明细记录
sprintf(fff,"收入\t\t%.2f\t\t%.2f\t\t%s\n",ccc,ddd,aaa);
strcat(bbb,fff);
break;
case 3: //登记支出
printf("本次支出金额:\n");
scanf("%lf",&ccc);
if(ccc>ddd){
printf("余额不足\n");
}
else{
printf("本次支出说明:\n");
scanf("%s",&aaa);
ddd-=ccc;
c=1;
sprintf(fff,"支出\t\t%.2f\t\t%.2f\t\t%s\n",ccc,ddd,aaa);
strcat(bbb,fff);
}
break;
case 4:
do{
printf("确认是否退出(y/n):\n");
scanf("%s",&eee);
if(eee=='y'||eee=='n'){
break; //跳出此do-while循环
}
else{
printf("输入错误!\n");
}
}while(1); //循环执行退出询问
if(eee=='y'){
b=0; //结束最外层do-while循环
}
break;
}
}while(b);
getchar(); //过滤 enter
printf("\n---------------------------------\n");
return 0;
}
运行结果:
8.2 通过自定义函数求解
#include<stdio.h>
#include<string.h>
void XIN(int xin,int i); //定义 XIN函数
static double total=10000; //总金额
struct Count{
char *name; //每一次收支的名称:收入or支出
double money; //每一次收支的金额
char sz[100]; //每一次收支的信息
double all; //每一次收支后的总金额
}count[100];
int main()
{
int d=0;
char c='0';
int i=0; //统计记录个数
printf("---------家庭收支软件--------\n");
printf("\t 1.收支明细\n\t 2.登记收入\n\t 3.登记支出\n\t 4.退出\n");
while(1)
{
printf("请选择(1-4):\n");
scanf("%d",&d);
getchar(); //接收回车enter
if(d==4){
printf(" 是否确认退出(y/n):\n");
scanf("%c",&c); //输入的是字符串
getchar(); //接收回车enter,一定要记得接收回车符
if(c=='y'){
break; //退出while循环
}
else if(c=='n'){
continue;
}
else{
printf("输入错误\n");
}
}
else
{
XIN(d,i);
if(d==2||d==3){
i++;
}
}
}
fflush(stdin); //刷新
getchar();
return 0;
}
void XIN(int xin,int i)
{
int k;
if(xin==1){ //收支明细
printf("---------当前收支明细记录--------\n");
printf(" 收支\t\t收支金额\t\t总金额\t\t说明\n");
if(i==0){
printf(" 无\t\t0.00\t\t\t%.2f\t无\n",total);
printf("当前没有收支明细...\n");
}
else{
for(k=0;k<i;k++){
printf("%s\t\t%.2f\t\t\t%.2f\t%s\n",count[k].name,count[k].money,count[k].all,count[k].sz);
}
}
printf("\n---------------------------------\n");
}
else if(xin==2){ //登记收入
count[i].name="收入";
printf("本次收入金额:");
scanf("%lf",&count[i].money);
printf("本次收入说明:");
scanf("%s",count[i].sz);
total+=count[i].money;
count[i].all=total;
}
else if(xin==3){ //登记支出
count[i].name="支出";
printf("本次支出金额:");
double temp=0; //临时存储支出金额
scanf("%lf",&temp);
getchar(); //过滤enter
if(temp>total)
{
printf("当前余额不足,不能支出\n");
}else{
count[i].money=temp;
printf("本次支出说明:");
scanf("%s",count[i].sz);
total-=count[i].money;
count[i].all=total;
}
}
printf("\n");
}
运行结果:
各位看官,如果这篇博客对你有帮助的话,麻烦点个免费的赞