首页 > 编程语言 >结对编程(c语言)

结对编程(c语言)

时间:2024-04-17 09:00:45浏览次数:32  
标签:结对 myprintf 语言 num2 编程 result 033 TRUE num1

作业要求:

  1. 小学老师要每周给同学出300道四则运算练习题。
    选择c语言进行实现
    –两个运算符,100 以内的数字,不需要写答案。
    –需要检查答案是否正确,并且保证答案在 0..100 之间
    –尽可能地多设置一些条件
  2. 也可以让同学们自选一个小应用程序进行结对编程的开发
  3. 请两位同学以结对编码(一个同学coding,另一个同学在旁边审核代码,之后再交换角色)的方式完成本次实验,并把程序、运算结果、博客体会等截屏发到其中一位同学的博客上,并在博客中体现另一位同学的学号(仅学号不体现姓名)

另一位结对同学:2252601

代码的编写过程:

  1. 编译出随机生成四则运算的基本代码,代码的构想为通过do while函数随机生成数字和运算符,构成表达式
  2. 编译用户回答以及判断用户答案是否正确或退出的代码。
  3. 完善代码,检查漏洞,如除数不可为0,减法不能出现负数,代码结果在0-100以内,清除缓冲区字符等。
  4. 构造程序界面,改变字体颜色,让程序变得更美观。



遇到的问题:
1.减法出现问题,当x-x的时候答案应该为0,但正确答案却显示为负数,这是因为在编程中先令result=0,然后才使num1=num2,两行交换一下就行
2.用来实现输出居中的Myprintf()不能传变量,但是调整了一下循环就不用全部使用myprintf()就可以实现居中。
3.传递代码的时候出现中文乱码的情况,后来用复制处理了
4.未输出计算结果就清屏了,添加一个system(“pause”)即可
感想:
在四则运算代码的编写过程中,结对编程有助于我们一个人在写代码时,另一个人可以很敏锐的检查出代码的错误并修改、改进。生成四则运算的基础代码很简单,但在改进代码过程中我们也遇到了一些小坎坷,在结对编程中,我们能够发现对方发现不了的错误,让这些坎坷更容易度过,与此同时也提高了纠错的能力。此外,结对编程还能够使程序更丰富更完美。

代码:

点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>

void SetSize(unsigned uCol,unsigned uLine)
{
 char cmd[64];
 sprintf(cmd,"mode con cols=%d lines=%d",uCol,uLine);
 system(cmd);
}

int lenth, lenth2;
int hight, hight2;
 
void myprintf(boolean b, char *str) {
	COORD coord;
	if(!b) { //几句纯粹是调一下左右,更好看
		lenth =lenth2- strlen(str);
	}
	coord.X = lenth;
	coord.Y = hight = (b ? hight+2 : hight2);
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    printf(str) ;   //这个函数没办法把可变参数传进来
}
int main() {
		HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_SCREEN_BUFFER_INFO scr;             
	GetConsoleScreenBufferInfo(out, &scr);      
	lenth2 = lenth = scr.srWindow.Right / 2;    //初始化横向位置
	char opera;
	int num1, num2, result, answer;
	int i;
	// 初始化随机数生成器
	srand(time(NULL));
	do {
	system("color 9E");
	myprintf(FALSE,"\033[1;36m"); 
	myprintf(TRUE,"#############################################\n");
	myprintf(TRUE,"#             四则运算练习程序               #\n");
	myprintf(TRUE,"############输入101可退出本程序###############\n");
	myprintf(TRUE,"\033[0m"); 
	
		// 随机生成运算符和数字
		num1 = rand() % 100 + 1;
		num2 = rand() % 100 + 1;
		opera = rand() % 4;
	
		switch (opera) {
		case 0:
			opera = '+';
			result = num1 + num2;
			break;
		case 1:
			opera = '-';
			result = num1 - num2;
			if (result < 0) { // 确保结果非负
				num1 = num2;
				result = 0;                    //bug修正 
			}
			
			break;
		case 2:
			opera = '*';
			result = num1 * num2;
			break;
		case 3:
			opera = '/';
			// 确保不会除以0,且结果为整数
			num2 = rand() % (num1 + 1);
			if (num2 == 0) num2 = 1; // 防止除以0
			while (num1 % num2 != 0) {
				num2 = rand() % (num1 + 1);
				if (num2 == 0) num2 = 1; // 防止除以0
			}
			result = num1 / num2;
			break;
		default:
			myprintf(TRUE,"运算符错误!\n");
			return 1;
		}
		// 确保结果在0-100范围内
		if (result <0 || result >100) {
			continue; 
		}		
		myprintf(TRUE,"\033[1;33m"); 
		printf("请计算:%d %c %d = ", num1, opera, num2);
		myprintf(TRUE,"\033[0m"); 
		if (!scanf("%d", &answer)) {
			// 如果用户没有输入数字,清空输入缓冲区
			scanf("%*s");
		answer = -1; // 设置一个不可能的答案,以便于后续判断
		}
		// 判断用户答案是否正确或退出
		if (answer == 101) {
			break; // 用户选择退出
		} else if (answer == result) {
			myprintf(TRUE,"\033[1;32m"); 
			myprintf(TRUE,"回答正确!\n");
			myprintf(TRUE,"\033[0m"); 
			system("pause") ;
			system("cls") ;
		} else {
			myprintf(TRUE,"\033[1;31m"); 
			printf("回答错误,正确答案是:%d\n", result);
			myprintf(TRUE,"\033[0m"); 
				system("pause") ;    //不加这个就会直接清屏 
			system("cls") ;
		}
		// 清除字符
		while (getchar() != '\n') {
			;
		}
		myprintf(TRUE,"\033[1;34m");
		for (i = 0; i < 40; i++) {
			printf("-");
		}
		myprintf(TRUE,"\n");
		myprintf(TRUE,"\033[0m"); 
	} while (1);
	myprintf(TRUE,"\033[1;36m"); 
	myprintf(TRUE,"#############################################\n");
	myprintf(TRUE,"#           感谢使用本程序!                #\n");
		myprintf(TRUE,"#############################################\n");
	myprintf(TRUE,"\033[0m"); 
	return 0;
}

标签:结对,myprintf,语言,num2,编程,result,033,TRUE,num1
From: https://www.cnblogs.com/chazubushiju/p/18139735

相关文章

  • 模型微调-书生浦语大模型实战营学习笔记&大语言模型5
    大语言模型-5.模型微调书生浦语大模型实战营学习笔记-4.模型微调本节对应的视频教程为B站链接。笔记对视频的理论部分进行了整理。大模型的训练过程模型视角这里原视频用的“分类”这个名字,我看到的时候还有点懵......
  • 读《我和Labview》Labview编程基础3
    3字符串和路径数据3.1字符串数据类型3.2字符串控件3.3数值、时间与字符串之间的的转换3.3.1基础转换函数3.3.2字符串格式化3.3.3时间与字符串之间的转换3.4正则表达式3.5路径3.5.1路径数据3.5.2相对路径3.5.3路径常量3.5.4路径与其他数据类型的转换3.6数据平化3.6.1......
  • 结对编程-c++四则运算
    题目:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置......
  • 结对编程-C++四则运算
    小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置一......
  • python 有什么资格称为编程排行榜第一
    python有什么资格称为编程排行榜第一?你确定没开玩笑吗?python的开发者以及使用者从来就没有说过python为编程排行榜第一,语言永远都只是一个工具,杀鸡用菜刀,砍树用斧头,那你能说斧头一定比菜到好使吗?编程排行榜是基于某些指标进行评估的,不同的指标可能会导致不同的排名结果。所以讨......
  • 结对
    publicListgetStationsBetween(StringstartStation,StringendStation,List<List>allSubwayStations){ListstationsBetween=newArrayList<>();Map<String,List>graph=buildGraph(allSubwayStations);//检查起始站和终点站是否存在于地铁网络中if(......
  • C++ 递归与面向对象编程基础
    C++递归递归是一种使函数调用自身的技术。这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题。递归可能有点难以理解。理解其工作原理的最佳方法是通过实验来尝试。递归示例将两个数字相加很容易做到,但将一系列数字相加就更复杂了。在下面的示例中,通过将......
  • pre-commit 多语言pre-commit hooks 框架
    pre-commit多语言pre-commithooks框架基于python开发,功能很强大参考使用安装pipinstallpre-commit添加配置.pre-commit-config.yamlrepos:-repo:https://github.com/pre-commit/pre-commit-hooksrev:v2.3.0hoo......
  • 结对编程
    前言小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设......
  • JAVA语言学习-Day13
    参考教学视频:秦疆JVM概述JVM位置:操作系统之上JVM的体系结构.java->ClassFile->类加载器Classloader<-->运行时数据区RuntimeDataArea<-->本地方法接口<-本地方法库运行时数据区RuntimeDataArea<-->执行引擎方法区:MethodAreaJava栈:Stack本地方......