C语言代码练习笔记

第3章 选择语句和循环语句

程序设计题

1、编写程序,输入年份和月份,判断是否闰年,什么季节以及该月有多少天

#include<stdio.h>
/*输入年份和月份,判断该年是不是闰年,并根据月份判断是什么季节和这个月有多少天*/ 
int main(){
	int y,m,leap,season,days;
	printf("年份,月份");
	scanf("%d,%d",&y,&m);
	if((y%4==0&&y%100!=0) ||(y%400==0))
	leap==1;
	else
	leap=0;
	if(m>=3&&m<=5)
	season=1;
	else if(m>=6&&m<=8)
	season=2;
	else if(m>=9&&m<=12)
	season=3;
	else season=4;
	switch(m){
		case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=31;break;
		case 4:case 6:case 9:case 11:days=30;break;
		case 2:if(leap=1) days=29;else days=28;
	} 
	printf("%d年%S闰年\n",y,(leap==1?"是":"不是"));
	printf("该季节是:");
	switch(season){
		case 1:printf("春季");break;
		case 2:printf("夏季");break;
		case 3:printf("秋季");break;a
		case 4:printf("冬季");break;
	} 
	printf("当月天数:%d\n",days);
	return 0;
}

2、编写程序,根据用户输入的三角形的三边长判定是何种三角形,对于有效三角形,求出面积

#include<stdio.h>
#include<math.h>
int main(){
	float a,b,c;
	float s,area;
	printf("a,b,c=");
	scanf("%f,%f,%f",&a,&b,&c);
	if(a+b>c&&a+c>b&&b+c>a){
		s=(a+b+c)/2;
		area=sqrt(s*(s-a)*(s-b)*(s-c));
		printf("三角形的面积为area=%f\n",area); 
		if(a==b&&b==c){
			printf("等边三角形\n"); 
		}
		if(a==b||b==c||a==c)printf("等腰三角形\n");
		else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))printf("直角三角形\n"); 
	}else{
		printf("不能组成三角形\n");
	}
	return 0;
}

3、编写一个程序将十进制数n转化为二进制数,要求从低位到高位输出二进制数的各位

#include<stdio.h>
#include<math.h>
int main(){
	int n,i=0;
	printf("n=");
	scanf("%d",&n);
	printf("对应的二进制数为:\n");
	while(n){
		printf("%d",n%2);
		n=n/2;
	}
	return 0;
}

4、编写一个层序,输入若干个整数,以-1标记输入结束,输出其中的最大数和最小数

#include<stdio.h>
#include<math.h>
int main(){
	int n,min,max,first=1;
	printf("输入数序\n");
	while(1){
		scanf("%d",&n);
		if(n==-1)break;
		if(first){
			first=0;
			min=max=n;
		}else{
			if(max<n)max=n;
			else if(n<min)min=n;
		}
	}
	if(!first)printf("max=%d,min=%d\n",max,min);
	else printf("没有输入任何有效数\n"); 
	return 0;
}

5、编写一个程序,输出菱形图案,第一行为一个字母A,第二行为三个字母B,依此类推
①方法1:

#include<stdio.h>
#include<math.h>
int main(){
	char c;
	int i,j,k,n;
	printf("输入n:\n");
	scanf("%d",&n);
	 c='A';
	 for(k=1;k<=n;k++){
	 	for(i=1;i<=n-k;i++)printf(" ");
	 	for(j=1;j<=k*2-1;j++)printf("%c",c);
	 	c++;
	 	printf("\n");
	 }
	 for(k=1;k<n;k++){
	 	for(i=0;i<k;i++)printf(" ");
	 	for(j=2*(n-k);j>0;j--)printf("%c",c);
	 	c++;
	 	printf("\n");
	 }
	return 0;
}

②方法2:

#include<stdio.h>
#include<math.h>
int main(){
	char c;
	int i,j,k,n;
	printf("输入n:\n");
	scanf("%d",&n);
	 c='A';
	 for(k=1-n;k<=n-1;k++){
	 	i=n-abs(k);
	 	for(j=1;j<=n-i+1;j++)
	 	printf(" ");
	 	for(j=1;j<=2*i-1;j++)
	 	printf("%c",c);
	 	printf("\n");
	 	c++;
	 } 
	return 0;
}

6、编写一个程序,对输入的正整数n,输出{0,1,…,n-
1}的所有子集,例如输入3时,输出如下:
{},{0},{1},{0,1},{2},{0,2},{1,2},{0,1,2}

#include<stdio.h>
#include<math.h>
int main(){
	char c;
	int i,j,k,n,m;
	printf("输入n:\n");
	scanf("%d",&n);
	m=pow(2,n);
	m=m-1;
	for(i=0;i<m;i++){
		printf("{");
		j=i;
		k=0;
		while(j){
			if(j%2==1)printf("%d",k);
			k++;
			j=j/2;
		}
		printf("}");
	}
	return 0;
}

7、编写一个程序,利用公式在这里插入图片描述求出e的近似值,n由用户输入

#include<stdio.h>
#include<math.h>
int main(){
	int n,i,j,k,s,temp=1;
	float e=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		k=i;
		temp=temp*k;
		e+=1.0/temp;
	}
	printf("%f",e);
	return 0;
}

8、有甲、乙、丙三人对一块矿石进行判断,每人判断两次,,甲认为这块矿石不是铁也不是铜;乙认为这块矿石不是铁,是锡;并认为这块矿石不是锡,是铁;老工人两次判断都对,普通队员两次判断一对一错,实习生两次判断都错。则矿石是什么矿?甲乙丙身份分别是什么?

#include<stdio.h>
//铁0铜1锡2 
int main(){
	int a,a1,a2,b,b1,b2,c,c1,c2;
	int x;
	for(x=0;x<3;x++){
		a1=(x!=0);
		a2=(x!=1);
		a=a1&&a2;
		b1=(x!=0);
		b2=(x==2);
		b=b1&&b2;
		c1=(x!=2);
		c2=(x==0);
		c=c1&&c2;
		if((a+b+c==1)&&a1+b1+c1+a2+b2+c2==3){
			switch(x){
				case 0:printf("矿石是铁矿\n");break;
				case 1:printf("矿石是铜矿\n");break;
				case 2:printf("矿石是锡矿\n");break;
			}
			if(a1==a2&&a1==1)printf("甲是老工人\n");
			else if((a1==0&&a2==1)||(a2==0&&a1==1))printf("甲是普通工人\n");
			else if(a1==a2&&a1==0)printf("甲是实习生\n");
			if(b1==b2&&b1==1)printf("乙是老工人\n");
			else if((b1==0&&b2==1)||(b2==0&&b1==1))printf("乙是普通工人\n");
			else if(b1==b2&&b1==0)printf("乙是实习生\n");
			if(c1==c2&&c1==1)printf("丙是老工人\n");
			else if((c1==0&&c2==1)||(c2==0&&c1==1))printf("丙是普通工人\n");
			else if(c1==c2&&c1==0)printf("丙是实习生\n");
		} 
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值