C语言·常见作业题(二)

目录

1. 判断某月份是什么季节

2. 通过三条边求三角形面积 

3. 给出坐标,求三角形的周长

3.1 通过数组求解

3.1 通过函数求解

4. 输出区间中闰年个数,并在下一行输出所有闰年年份数字

4.1 通过for循环求解

4.2 通过函数求解 

5. 求一个正整数的阶乘                  (不使用for和while结构)

6. 小武每天吃现有桃子的一半多加一个吃桃子,到第n天的时候剩下1个桃子。输入吃桃子的天数,求原来一共有多少个桃子

6.1 通过for循环求解

6.2 通过函数求解

7. 输入几个数,求其中的质数

7.1 通过for循环求解

7.2 通过函数求解

8. 家庭收支记账

8.1 通过 switch-case 求解

8.2 通过自定义函数求解


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");
}

运行结果:

各位看官,如果这篇博客对你有帮助的话,麻烦点个免费的赞

相关推荐

  1. c语言常见错误

    2023-12-11 16:00:02       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-11 16:00:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-11 16:00:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-11 16:00:02       82 阅读
  4. Python语言-面向对象

    2023-12-11 16:00:02       91 阅读

热门阅读

  1. 深度学习为什么要进行训练

    2023-12-11 16:00:02       52 阅读
  2. PHP中对象数组化

    2023-12-11 16:00:02       56 阅读
  3. vue项目列表跳转详情返回列表页保留搜索条件

    2023-12-11 16:00:02       63 阅读
  4. 了解linux计划任务

    2023-12-11 16:00:02       58 阅读
  5. c++基础 循环遍历 新手学习

    2023-12-11 16:00:02       54 阅读
  6. 一篇文章读懂Jenkins的发展历程

    2023-12-11 16:00:02       62 阅读
  7. 使用Boost.Outcome模块进行容器相关的测试程序编程

    2023-12-11 16:00:02       47 阅读
  8. React基础知识入门

    2023-12-11 16:00:02       66 阅读