第四篇博客

| 这个作业属于哪个班级 |


| ---- | ---- | ---- |
| 这个作业的地址 |
| 这个作业的目标 | 学习如何设计函数、C语言基本数据类型 |
| 姓名 | 卢伟杰 |

0.展示PTA总分

1.本章学习总结

1.1 函数定义、调用、声明

  • 函数定义的一般形式
     函数类型  函数名  (形式参数表)   /*函数首部*/
     {
         函数实现过程                  /*函数体*/
     }

     形参表中的格式为: 类型1 形参1, 类型2 形参2,……
     形参数量可以是一个、多个,或者没有形参。
  • 函数调用
    一般形式 : 函数名 (实际参数表)  //实参可以是常量、变量和表达式。

    两种情况:
     A. 赋值语句
        volume = cylinder (radius, height);
     B. 输出函数的实参
        printf ("%f", cylinder (radius, height));

    函数结果的返回形式 :return 表达式;

    不返回结果的函数 :函数类型void 表示不返回结果、省略return;
  • 函数声明的一般形式

    函数类型 函数名 (参数表);

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

  • 局部变量

    使用的变量定义在函数地内部,有效使用范围局限于所在的函数内。

    使用局部变量可以避免各个函数之间的干扰。

  • 全局变量

    一般情况把全局变量定义在程序的最前面,即第一个函数的前面。

    当一些变量需要被多个函数共同使用,可定义全局变量。

    可以帮助解决函数多结果返回的问题。

  • 静态局部变量

    静态变量定义形式 :static 类型名 变量表

    存放在静态存储区,不会因函数调用结束而被系统回收。

    由于存储单元被保留,一旦含有静态局部变量的函数被再次调用,则被重新激活;

    上次函数调用后的值仍然保存着,可供本次调用继续使用,持续到系统结束。

1.3 C数据类型及注意点


| 类型名 | 字节长度 |
| ---- | ---- | ---- |
| int | 4 |
| char | 1 |
| short | 2 |
| long | 4 |
| float | 4 |
| double | 8 |

  • 字符型输入与输出问题
    int    printf("%d", ...);
           scanf("%d", &...);

    double  printf("%f", ...);
            scanf("%lf", &...);
  
    float   printf("%f", ...);
            scanf("%f", &...);
   
    char    printf("%c", ...);
            scanf("%c", &...);

    输出时可以加入.x如 :%。2f 来控制小数位数。

    %lf     表示四舍五入保留整数;
    %02d    (可输出)02来补零;
    %2d     数字宽度为二,不够用空格补零;
    %6.1d   数字宽度为6,保留一位小数。

    ch = getchar() : 等待用户输入一个字符,赋值给变量ch.
    

1.4 C运算符


| 算术运算符 | 用于各类数值运算。包括加(+)、减(-)、乘()、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。 |
| ---- | ---- | ---- |
| 关系运算符 | 用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。 |
| 逻辑运算符 | 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 |
| 位操作运算符 | 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 |
| 赋值运算符 | 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,
=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 |
| 特殊运算符 | 有括号(),下标[],成员(→,.)等几种。

2.综合作业 :小学生口算表达式自动生成系统

函数功能及全局变量介绍

     void OperateMenu();            //游戏操作界面

     void GradeOneMenu();           //一年级

     int computerNumber(int grade); //生成一年级的操作数

     char getOperator();            //生成一年级的运算符

模块流程图

一年级模块流程图

代码执行运用的函数

代码主要执行

                int titleNumber;
		scanf("%d", &titleNumber);

		if (titleNumber > 0)
		{
			int countNumber = 1;//完成的题目数量
			int rightNumber = 0;//正确的题目数量
			double accuracyRight;  //题目正确率

			for (countNumber; countNumber <= titleNumber; countNumber++)
			{
				int num1, num2;                             /*1.生成操作数函数*/
				srand(time(0));
				num1 = computerNumber(1);
				num2 = computerNumber(1);

				char operator;                              /*2.生成随机运算符函数*/
				operator = getOperator();

				printf("%d%c%d=\n", num1, operator, num2);  /*3.生成表达式函数,并输出展示*/


				printf("是否继续答题y/n:");
				char ch;
				scanf("\n%c", &ch);
				if (ch == 'n')
				{
					Sleep(500);
					OperateMenu();
					return;
				}
				else if (ch == 'y')
				{
					int sum;
					int answer;
					int choice;

					if (operator == '+')
					{
						choice = 1;
					}
					else if (operator == '-')
					{
						choice = 2;
					}
					
					switch (choice)
					{
					case 1:
						sum = num1 + num2; break;
					case 2:
						if (num1 < num2)
						{
							int temp;
							temp = num1;
							num1 = num2;
							num2 = temp;
						}
						sum = num1 - num2; break;
					}

					printf("请输入你的答案:");
					scanf("%d", &answer);

					if (answer == sum)
					{
						printf("回答正确,你真棒!\n");
						rightNumber++;
					}
					else if (answer != sum)
					{
						printf("回答错误,继续加油!\n");
						printf("答案是:%d\n", sum);
					}				
				}
			}
			accuracyRight = (rightNumber * 1.0 / titleNumber) * 100;
			int percent = '%';
			printf("你的正确率为%.1f%c,请继续努力!", accuracyRight,percent);

			return;
		}
		else
		{
			Sleep(500);
			OperateMenu();
			return;
		}

运行结果截图、测试用例


大作业中编程技巧总结

  • 画流程图十分重要!!!!!这样能使各个条件更加清晰易懂!循环和分支结构能更好的使用。

  • 函数的使用能减少大量代码的使用,只要一次定义就能多次使用。

  • 过程中注意return的正常使用,不然可能会闪退。

代码提交

  • 请博客作业页面内容+口算系统的全部代码复制到一个word文档中。文档保存好请提交课堂派的作业中。
posted @ 2020-11-30 21:58  昨日云流  阅读(95)  评论(1编辑  收藏  举报