c语言博客3—函数
0.pta总分
1.本章学习总结
1.1函数定义、调用、声明
函数的定义
函数的定义首先要对函数确定函数的三个内容
1.函数的返回值类型
2.函数的名称
3.函数的参数
如定义一个求和函数
int putSum (int a,int b)
{
int sum;
sum=a+b;
return sum
}
其中函数名称为putSum,函数的返回值类型为整形,函数的参数为a和b
函数的调用
#include <stdio.h>
int main()
int putSum(int a, int b);
{
int a = 2, b = 3;
int c;
int putSum(int a, int b);
c = putSum(a, b);
printf("%d + %d = %d\n",a, b, c);
}
int putSum(int a, int b)
{
int sum;
sum=a+b;
return sum;
}
得到结果为2+3=5
函数的声明
函数的声明在函数定义后加;并放在头部即可
1.2全局、局部变量、静态局部变量
1.全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。
2.静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见,每次被调用都使用上一次的值。
3.局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
4.静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
1.3C数据类型及注意点
1.整型变量
int类型
取值范围(32位):-2^15— 2^15-1
转换说明:%d
short int(或简写为short)
取值范围(16位):-2^15— 2^15-1
转换说明:%d
long int(或简写为long)
取值范围(32位):取值范围(16位)-2^31— 2^31-1
转换说明:%ld
2.浮点数
单精度float
取值范围:10^-37 —10^37
转换说明:%f
双精度double
取值范围:(2^63— 2^63-1)
转换说明:%f
3.字符型
转换说明:%c
输入单个字符
注意点
1.输入多个字符用getchar()实现
2.在解决浮点误差问题时,可以利用一个很小的值进行矫正
1.4C运算符
逻辑运算符:!
算术运算符:自增++,自减--,+,-,*,/
关系运算符:<,>,==,!=等
逻辑运算符:&&,||
1.5学习体会
近段时间主要学习函数的使用以及回顾数据类型,对于函数的编写还不太熟练,应在以后多加练习
2.综合作业:小学生口算表达式自动生成系统
2.1流程图
2.2.函数功能及全局变量介绍
菜单相关函数
void OperateMenu();//游戏操作界面
void OperateMenu()//游戏操作界面
{
char option;
int i;
int temp;
system("cls");//清屏
do
{
system("cls");
printf("******************************************\n");
printf("1.一年级口算\n");
printf("2.二年级口算\n");
printf("3.三年级口算\n");
printf("4.退出系统\n");
printf("******************************************\n");
printf("请输入您的选择:");
scanf(" %c", &option);
switch (option)
{
case '1':
system("cls");
GradeOneMenu();
break;
case '2':
system("cls");
GradeTwoMenu();
//GradeTwoMenu();
break;
case '3':
system("cls");
GradeThreeMenu();
//GradeThreeMenu();
break;
case '4':
printf("\n谢谢您的参与!\n");
Sleep(500);
exit(0);
default:
printf("您输入不对,只能输入1,2,3,4,请重输!\n");
Sleep(500);
}
} while (!(option >= '1' && option <= '4'));
}
void GradeOneMenu();//一年级
void GradeTwoMenu();//二年级
void GradeThreeMenu();//三年级
出题相关函数
int putNum(int grade)//生成操作数,用rand随机生成数字,用switch进行转化为运算符,对不同年级对运算符进行限制
int putNum(int grade)//生成操作数
{
int num;
switch (grade)
{
case 1:num = 1 + rand() % 9; break;
case 2:num = 1 + rand() % 99; break;
case 3:num = 1 + rand() % 99; break;
}
return num;
}
int putOperation(int grade)//生成运算符,用rand随机生成数字,对不同年级对数值进行限制
int putOperation(int grade)//生成运算符
{
char op;
int sum = 0;
switch (grade)
{
case 1:sum = 1 + rand() % 1; break;//一年级
case 2:sum = 1 + rand() % 3; break;//二三年级
}
switch (sum)
{
case 1:op = '+'; break;
case 2:op = '-'; break;
case 3:op = '*'; break;
case 4:op = '/'; break;
}
return op;
}
2.3运行结果截图,测试用例。
一年级题目,作答3次,全部正确
二年级题目,作答5次,中途退出
2.4大作业中编程技巧总结
1.分多个cpp文件,可以让代码更简洁,查阅方便
2.运用srand((unsigned)time(NULL));产生真正的随机数