《程序设计基础2021》题目集2 题解二

这篇博客介绍了七个C语言编程题目,涉及三角形面积计算、棋盘打印、数字转换、统计报表、图形绘制、浮点数操作、字符编码以及输入输出控制。每个题目都提供了简洁的代码示例,适合初学者巩固基础知识。同时,博主分享了在处理中文字符和图形输出时遇到的问题与解决方案。
摘要由CSDN通过智能技术生成

目录

引言

7-1 三角形面积 (10 分)

7-2 黑白三子棋局 (10 分) 

7-3 十进制转八进制 (5 分)

7-4 统计报表(1) (10 分)

7-5 输出漏斗图形 (10 分)

7-6 交换两实数的整数部分 (10 分) 

7-7 爱音乐 (5 分)

7-8 输入输出控制 (10 分) 

tips:

7-9 你好,又是你。 (15 分)

篇尾 


引言

题目简单,就简化代码(ノ๑`ȏ´๑)ノ︵ 

7-1 三角形面积 (10 分)

#include<stdio.h>
int main(){
	double b=0,h=0;
	scanf("%lf %lf",&b,&h);
	printf("%.2lf",(0.5)*b*h);
	return 0;
} 

7-2 黑白三子棋局 (10 分) 

#include<stdio.h>
int main(){
	printf("┏━┯━┯━┓\n┃○│  │○┃\n┠─┼─┼─┨\n┃  │○│●┃\n┠─┼─┼─┨\n┃●│●│  ┃\n┗━┷━┷━┛\n");	
	return 0;
}

可能编译器输出结果不尽人意,按照提示要求修改一下就好了

7-3 十进制转八进制 (5 分)

#include<stdio.h>
int main(){
	unsigned int n=0;
	scanf("%u",&n);
	printf("%o",n);
 	return 0;
}

关于%o、%x、%e、%g等格式符的作用,请看格式输入输出中格式符的含义

7-4 统计报表(1) (10 分)

#include<stdio.h>
int main(){
	int i=0,n_1=0,n_2=0,n_3=0,n_4=0,sum=0;
	printf("┌───┬───┐\n│ 季度 │ 销量 │\n");
	scanf("%d",&n_1);
	printf("├───┼───┤\n");
	printf("│一季度│%6d│\n",n_1);
	scanf("%d",&n_2);
	printf("├───┼───┤\n");
	printf("│二季度│%6d│\n",n_2);
	scanf("%d",&n_3);
	printf("├───┼───┤\n");
	printf("│三季度│%6d│\n",n_3);
	scanf("%d",&n_4);
	printf("├───┼───┤\n");
	printf("│四季度│%6d│\n",n_4);
	sum=n_1+n_2+n_3+n_4;
	printf("├───┼───┤\n│ 全年 │%6d│\n└───┴───┘",sum);
 	return 0;
}

这道题我本来只想用一个 for 循环解决的,但是测试时发现我不会中文字符的递增 (ー_ー)!!

为此,我查了一下 中文是字符型变量吗 ,百度给出的结果,中文是只能是常量,只能当字符串使用,所以不能通过简单的 i++ ,来实现中文数字的递增,当然有办法可以实现,只是放到这题里大材小用了

7-5 输出漏斗图形 (10 分)

#include<stdio.h>
int main(){
	printf("*********\n *******\n  *****\n   ***\n    *\n   ***\n  *****\n *******\n*********\n");
 	return 0;
}

注意空格 ,最喜欢打印图形的题,这个太简单了

7-6 交换两实数的整数部分 (10 分) 

#include<stdio.h>
int main(){
	double a=0,b=0,c=0,d=0;
 	scanf("%lf %lf",&a,&b);
 	c=(int)b+a-(int)a;
	d=(int)a+b-(int)b;
	printf("%.2lf,%.2lf",c,d);
	return 0;
}

这里可以只用定义三个变量

7-7 爱音乐 (5 分)

#include<stdio.h>
int main(){
	char ch[3]={73,3,14};
	printf("%s",ch);
	return 0;
}

嘿嘿,记住了, •̀.̫•́✧)╭☞     ♥ 的 ASCII 码为 3

并且在 Windows 10 操作系统中,需要将运行窗口中的字体设置为点阵字体、将字号设置为 8x16,才能正常显示。

7-8 输入输出控制 (10 分) 

#include<stdio.h>
int main(){
	char a=0;
	unsigned short b=0;
	int c=0,m=0,n=0;
	float d=0;
	double e=0;
	m=scanf("%c%*c%hu%*c%d%*c%f%*c%lf",&a,&b,&c,&d,&e); 
	printf("%d\n",m); 
	m=printf("%c,%hu,%d,%.3f,%.3lf\n",a,b,c,d,e);
    printf("%d\n",m-1);
    printf("%d\n",sizeof(a)+sizeof(b)+sizeof(c)+sizeof(d)+sizeof(e));
	return 0;
}

tips:

 %*c 可以直接跳过一个字符

 n=scanf() 可以表示输出成功读取到n个数

 m=printf() 可以表示输出的内容占用m个字符位置

7-9 你好,又是你。 (15 分)

#include<stdio.h>
int main(){
	long n=0;
	scanf("%ld",&n);
	printf("%.1lf%%",(5000.0/n)*100.0); 
	return 0;
}

又是一个看着麻烦,实际上非常简单的题,就是一个除法(⍥(⍥(⍥(⍥(⍥;;)

篇尾 

打印图形,对循环的掌握程度要求比较高,但是,相比与其他代码,写出来更有成就感,比如可以控制大小的爱心之类的,

下面附一个可以控制大小的圣诞树图形的代码

#include<stdio.h>
int main(){
    int i=0,j=0,k=0,n=0;
    scanf("%d",&n);

    for(i=1;i<=n;i++){ 
	//树节i	
    	for(j=1;j<=i+1;j++){ 
    	// 每节层数 j
			for(k=1;k<=n-j+1;k++){
			printf(" ");
			}
			for(k=1;k<=2*j-1;k++){//每层*数目
			printf("*");
			}
		printf("\n");//每层换行 
		}
	}
	for(j=0;j<n;j++){
		for(i=0;i<=n;i++){
			if(i==n)printf("*\n");
			else printf(" ");
		}
	}
	return 0;
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋或翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。 棋子:黑白棋棋子每颗由黑白两色组成,一面白,一面黑,共64个(包括棋盘中央的4个)。棋子呈圆饼形。    棋盘:黑白棋棋盘由64格的正方格组成,游戏进行时棋子要下在格内。棋盘可分为“角”、“边”以及黑白棋“中腹”。现今的棋盘多以8x8较为普遍。 棋钟:正式的比赛中可以使用棋钟对选手的时间进行限制。非正式的对局中一般不使用棋钟。 黑白棋的棋盘是一个有8*8方格的棋盘。下棋时将棋下在空格中间,而不是像围棋一样下在交叉点上。开始时在棋盘正中有两白两黑四个棋子交叉放置,黑棋总是先下子。    下子的方法把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向内有一个自己的棋子,则被夹在中间的全部翻转会成为自己的棋子。 并且,只有在可以翻转棋子的地方才可以下子。  如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。双方都没有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。将对手棋子吃光的一方获胜。     每个“翻转棋”游戏开始时,棋盘上已经交叉放好了四颗棋子。其中两颗是黑棋,另两颗是白棋。黑棋总是先走。    当您的棋子在某一直线方向包围了对手的棋子时,就可以翻转这些棋子的颜色,使它们成为您方的颜色。例如,如果您执黑棋,并且看到在一排白棋的某一端是一颗黑棋,那么当您将一颗黑棋放在这一排的另一端时,所有的白棋都将翻转并变为黑棋!   所有的直线方向均有效:水平、垂直和斜线方向。    走棋的唯一规则是只能走包围并翻转对手的棋子。每一回合都必须至少翻转一颗对手的棋子。    按规则不能再走棋时,这一回合弃权。计算机会自动将控制权交给对方。 得分 “翻转棋”的计分方法非常简单。游戏过程中随时都显示黑棋数与白棋数。结束时棋数最多的一方就是赢家。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值