zoukankan      html  css  js  c++  java
  • C博客作业03--函数

    0.展示PTA总分(0----2)

    截图展示本次题目集排名分数截图。PTA题目集至少完成2/3,否则倒扣-2分

    1.本章学习总结(4分)

    整理这两周学习主要知识点,并能对每个知识点介绍简单案例或语法。不要截图ppt,自己文字书写。知识点包含:

    1.1 函数定义、调用、声明

    1.1.1函数定义与声明

    • 函数定义就是指函数的具体实现过程,交代清函数的功能。

    • 声明一般位于头文件中,告知编译器这儿有个叫xxx的函数,声明有这么一个函数的存在,但并不实现。

    • 定义是指对函数功能的确立,包括指定函数名,函数值类型,形参类型和函数体等,它是一个完整独立的函数单位。而声明的作用是把函数的各种信息告知编译系统,以便在调用该函数时按照此进行检查。(例如函数名是否正确,实参与形参的类型和个数是否一致)

    • 在函数调用前若未作声明,则编译器会将函数类型默认为int型。

    • 如果被调用函数的定义出现在主函数前,可以不必加以声明,因为此时编译器已经预先知道了函数的信息,可以说函数定义本身也是一种声明。

    1.1.2函数调用

    举个栗子:

    #include <stdio.h>
    
    void swap(int x,int y)
    {
        int temp;
        temp=x;
        x=y;
        y=temp;
        printf("x=%d,y=%d
    ",x,y);
    }
    
    void main()
    {
        int a=6;
        int b=8;
        swap(a,b);
        printf("a=%d,b=%d
    ",a,b);
    }
    
    • 运行结果为x=8,y=6,a=6,b=8。实参a和b并没有实现数值交换,体现了函数在调用时的单向传递性。

    1.2 全局、局部变量、静态局部变量

    • 全局变量:全局变量是定义在函数外的变量,作用域为整个程序,如果在一个函数中改变了全局变量的值,将会影响到所有函数。

    • 局部变量:只在定义它的函数内有效,离开了函数体就会无效。

    • 静态局部变量:只在定义它的函数内有效。不同于一般的局部变量的是,它在每次调用后会保留上一次调用后的值,以这个值来参与下一次函数的调用。

    1.3 C数据类型及注意点

    每个数据类型特点及其相关知识的扩展。如浮点误差、字符型数据输入问题等等

    基本数据类型

    1. char:字符型;
    2. short:短整型;
    3. int:整型;
    4. long:长整型;
    5. float:单精度浮点型;
    6. double:双精度浮点型

    浮点误差的解决方案

    因为二进制数值可以准确表示整数,所以可以将小数乘以10或100等变成整数,然后做整数运算,最后再除回10或100等变成小数以获得精确结果。

    字符型数据的输入

    1. scanf输入:
      scanf(“%c”,&a);可以用来输入一个字符,放在循环体中用于输入多个字符,也可用scanf(“%c”,&a);输入字符数组。
    2. getchar()输入:
      用while((a=getchar)!= )语句实现多个字符的输入。

    1.4 C运算符

    • 算数运算符:
      +(加),—(减),*(乘),/(除),%(取余),++(自加),--(自减)
    • 关系运算符:
      ==(恒等于),!=(不等于),>=(大于等于),<=(小于等于)
    • 逻辑运算符:
      &&(与),||(或),!(非)
    • 赋值运算符:
      =(把右边操作数赋值为左边操作数)
      +=(加且赋值)
      -=(减且赋值)
      <<=(左移且赋值)

    =(右移且赋值)
    &=(按位与且赋值)
    ^=(按位异或且赋值)
    |=(按位或且赋值)

    • 位运算符:
      <<(二进制左移运算符)

    (二进制右移运算符)
    2.综合作业(6分):小学生口算表达式自动生成系统
    口算题参考网站

    一、基本功能要求:
    1.至少完成一个年级的口算题自动出题系统,尽量完成3个年级的出题设计。
    2.注意每个年级运算数要求,运算数和运算符要随机生成
    3.用户每选择一个难度级别后必须输入题目数量,能统计用户的正确率。用户每算一题,若错误,给出正确答案。 用户中途退出,不继续做题,需要有个提示操作可中途退出。

    二、注意

    1. 请先画流程图理清数据处理流程,再进入代码编写。理清系统需要设计的模块。
      2.流程图中,对应一个模块内容,务必设计函数封装,不要把代码都放main或某一个函数中。独立功能代码块、重复功能代码块、各种异常情况要单独封装函数处理,让程序的扩展性更强。
    2. 软件界面必须友好,多加文字提示,能让用户自己当前做什么,接下来怎么做,每步操作可以退到主菜单界面。
      4.注意异常数据处理,如除0错误、不合法数据、临界数据,系统保证运行时候不崩溃。

    三、进阶功能:
    1.每个年级设计二级菜单,选择不同题型出题。不想做题可以返回主菜单。
    2.混合运算比如2+3*4运算,注意考虑运算符优先级问题
    3.可以设置答题时间,用户超过答题时间,提示不能继续做题,重新选抽题。请查阅C的时间函数。
    以下为博客作业需要完成内容:

    2.1.模块流程图
    请梳理各模块流程图,在编程前先画流程图再写代码。代码中有修改,流程图也跟着修改。二级模块,可以再画流程图展示。

    一年级模块流程图
    二年级模块流程图
    三年级 模块流程图
    2.2.函数功能及全局变量介绍
    介绍你用到核心函数接口及全局变量。

    2.2.1.全局变量
    变量名,作用。
    未用到全局变量
    2.2.2 菜单相关函数
    文字介绍函数功能、思路,截图函数代码。

    void OperateMenu()//游戏操作界面
    
    {
    
    	char option;
    
    	int i;
    
    	int temp;
    
    	system("cls");//清屏
    
    
    
    	do
    
    	{
    
    		system("cls");
    
    		printf("****************************************
    ");
    
    		printf("1.一年级口算
    ");
    
    		printf("2.二年级口算
    ");
    
    		printf("3.三年级口算
    ");
    
    		printf("4.退出系统
    ");
    
    		printf("****************************************
    ");
    
    		printf("请输入您的选择:");
    
    		scanf(" %c", &option);
    
    		switch (option)
    
    		{
    
    		case '1':
    
    			system("cls");
    
    			GradeOneMenu();
    
    			//GradeOneMenu();
    
    			break;
    
    
    		case '4':
    
    			printf("
    拜拜了您嘞!
    ");
    
    			Sleep(500);
    
    			exit(0);
    
    		default:
    
    			printf("别瞎搞,只能输入1,2,3,4,请重输!
    ");
    
    			Sleep(500);
    
    		}
    
    	}
    

    2.2.2 出题相关函数
    文字介绍函数功能、思路,截图函数代码。
    等等

    void GradeOneMenu()//一年级
    
    {
    
    
    
    	while (1)
    
    	{
    
    		system("cls");
    
    		printf("*********************一年级小朋友好!********************************
    ");
    
    		printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。
    ");
    
    		printf("**如果您不想做,输入n退回主菜单。
    ");
    
    		printf("***************************************************************
    ");
    
    		char ch;
    
    		scanf("
    %c", &ch);
    
    		if (ch == 'n')
    
    		{
    
    			Sleep(500);
    
    			OperateMenu();
    
    			return;
    
    		}
    
    		if (ch == 'y')//选择答题
    
    		printf("本次题目数为十道
    ");
    		
    			{
    				int num1 = 0;//操作数1
    				int num2 = 0;//操作数2
    				char operation;//随机符号
    				int rightAnswer;//正确答案
    				int userAnswer;//用户输入的答案
    				int t;//临时变量
    				int test;//选择做哪种测试
    				int right=0;//正确题提数
    						 /*答题模块*/
    				for (int i = 1; i <= 10; i++)
    				{
    				printf("1、 加法
    ");
    
    				printf("2、 减法
    ");
    
    				printf("3、 加减法
    ");
    			
    				scanf("%d", &test);
    				/*1.生成操作数函数*/
    
    				num1 = Getvalue();
    				num2 = Getvalue();
    
    				/*2.生成随机运算符函数*/
    
    				{
    					int n;
    					switch (test)
    					{
    					case 1:n = 1; break;
    					case 2:n = 2; break;
    					case 3:n = 1 + rand() % 2;; break;
    
    					}
    					switch (n)
    					{
    					case 1:operation = '+'; break;
    					case 2:operation = '-'; break;
    
    					}
    
    				}
    
    				/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
    				if (operation == '-' && num1 < num2)
    				{
    					t = num1;
    					num1 = num2;
    					num2 = t;
    				}
    
    				/*4.生成表达式函数,并输出展示*/
    				printf("%d%c%d=", num1, operation, num2);
    				scanf("%d", &userAnswer);
    				switch (operation)//程序计算正确结果
    				{
    				case '+':
    					rightAnswer = num1 + num2;
    					break;
    				case '-':
    					rightAnswer = num1 - num2;
    					break;
    				}
    				//评判答案对错
    				if (rightAnswer == userAnswer)
    				{
    					right++;
    					printf("做对这么easy的题不值得夸赞");
    				}
    				if (rightAnswer != userAnswer)
    				{
    					printf("不会吧不会吧,不会真有人连一年级的题都做不出来吧!
    ");
    					printf("正确答案是%d!
    ", rightAnswer);
    				}
    				Sleep(666);
    				system("cls");
    			}
    				double accuracy = (double)right * 0.1;
    				printf("你的正确率是%.1f
    ", accuracy);
    
    		}
    		
    
    
    
    		printf("是否继续答题y/n:");
    
    		
    
    	}
    
    int Getvalue();//生成操作数函数
    
    int Getvalue()
    {
    	int num;
    	num = rand() % 51;
    	return num;
    }
    

    2.3.运行结果截图,测试用例。
    截图时候务必在图片中有文字说明该测试数据是什么,不能只有图片。测试数据有错也务必在图片上说明原因。
    建议用动图 展示




    2.4.大作业中编程技巧总结
    总结大作业编程中用到哪些课堂没有学过知识点

    1. 将一个大问题分成几个模块去分别设计,可以使问题简化很多。
    2. 利用好随机数函数,生成随机操作数和随机操作符。
    3. 当两数相减为负数时,引入临时变量t交换两数位置,使输出正数。
      代码提交
      请博客作业页面内容+口算系统的全部代码复制到一个word文档中。(记住,要复制过去,不能截图),文档保存好请提交课堂派的作业中。我们会用课堂派对你写的代码进行查重,请务必要独立完成。
  • 相关阅读:
    自定义图标集
    微软Power BI 每月功能更新系列——Power BI 9月版本功能更新全面解读
    使用Power BI中的假设参数控制表视觉中要显示的行数
    如何使用Power Query自动存储最近2年的数据
    vscode-常用快捷键
    微信小程序开发-入门到熟练(wepy-初级篇)
    vscode-函数注释插件-正则插件
    vscode 编写Markdown文件
    wepy-开发总结(功能点)
    常用git命令
  • 原文地址:https://www.cnblogs.com/letmee/p/14064235.html
Copyright © 2011-2022 走看看