第四篇博客
| 这个作业属于哪个班级 |
| ---- | ---- | ---- |
| 这个作业的地址 |
| 这个作业的目标 | 学习如何设计函数、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文档中。文档保存好请提交课堂派的作业中。