学习内容
函数的分类与组成
函数参数
函数的调用
写一个判断是否为素数的函数
代码笔记
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>
//函数:子程序
//1.库函数:一些经常使用的函数 不需要重复写基础函数通过文档学习函数 库函数的使用必须包含函数的头文件
//2.自定义函数:与库函数一样,有函数名,返回值类型和函数参数 需要程序员自己来创造 自由空间大
//
// 函数的组成:
// ret_type fun_name(para,*)
//{
// statement;//语句项
//}
// ret_type 返回类型
// fun_name 函数名
// para1 函数参数
//
//
// 库函数举例:
// strcpy->string copy
// int main()
//{
// char arr1[20] = {0};
// char arr2[] = "hello world!";
//
// strcpy(arr1, arr2);
// printf("%s\n", arr1);
// return 0;
//}
//
// memset->memory set
//int main()
//{
// char arr[20] = "hello world!";
// /*memset(arr,'x',5);*/
// memset(arr+6,'x',5);
// printf("%s\n", arr);
// return 0;
//}
//
//
//写一个函数可以找出两个整数中的最大值
函数的定义
// int get_max(int x,int y)
//{
// return (x > y ? x : y);
//}
//
//int main()
//{
// int num1 = 0;
// int num2 = 0;
// scanf("%d %d", &num1,&num2);
// //函数的调用
// int m = get_max(num1,num2);
// printf("%d\n", m);
// return 0;
//}
返回类型如果不需要返回的话可以使用void
//写一个函数可以交换两个整形变量的内容
void Swap(int x,int y)//x,y为形参
{
int z = 0;
z = x;
x = y;
y = z;
}//只改变了形参 对实参没影响
//
//void Swap2(int* px, int* py)//通过地址远程更换
//{
// int z = *px;//z=a
// *px = *py;//a=b
// *py = z;//b=a
//}
//
//int Add(int x, int y)
//{
// int z = 0;
// z = x + y;
// return z;
//}
//
//int main()//a,b为实参
//{
// int a = 0;
// int b = 0;
// scanf("%d %d", &a, &b);
// //相加
// int c = Add(a, b);
// printf("%d\n", c);
// //交换
// printf("交换前:a=%d b=%d\n", a, b);
// //Swap(a, b);
// Swap2(&a, &b);//传输地址
// printf("交换后:a=%d b=%d\n", a, b);
// return 0;
//}
//
int main()
{
int a = 10;
int* p = &a;
a = 20;//直接修改
*p = 30;//间接修改(通过指针)
return 0;
}
//参数
//1.实际参数
// 真实传给函数的参数叫做实参(常量,变量,表达式,函数)无论什么形式的函数,调用时必须有确定的值,以便把这些值传送给形参
//2.形式参数
// 是指函数名后括号中的变量,因为形参只有在函数被调用的过程中才有实例化(分配内存单元)当函数调用结束之后就自动销毁,因此形参只在函数中有效。
//<当实参传给形参时,形参是实参的一份临时拷贝,对形参的修改不会影响实参>
//调用
//1.传值调用: 形参 实参占有不同内存块 修改形参不影响实参
//2.传址调用: 是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式
// 可以让函数与函数外的变量建立真正的联系,也就是函数内部可以直接操作函数外部的变量
//练习
//打印100~200之间的素数
//自写->
//int main()
//{
// //列出所有数字
// int i = 0;
// int j = 0;
// for (i = 100; i <=200; i++)
// {
// //列出i和2之间的整数循环取模
// for (j = 2; j < i - 1; j++)
// {
// int k = i % j;
// //取模为零,代表可以整除,不是素数,直接跳出进行下一个数字的判断
// if (k == 0)
// goto again;
// }
// //取模循环结束仍未跳出代表不可以被整除,是素数打印出来
// printf("%d\n", i);
// again:
// ;
// }
// return 0;
//}
//示例1->
//int main()
//{
// int count = 0;
// int i = 0;
// for (i = 100; i <= 200; i++)
// {
// int j = 0;
// int flag = 1;
// for (j = 2; j < i - 1; j++)
// {
// if (i % j == 0)
// {
// flag = 0;
// break;
// }
// }
// if (flag == 1)
// {
// count++;
// printf("%d\n", i);
// }
//
// }
// printf("\ncount:>%d\n", count);//计数
// return 0;
//}
//优化1. 如果一个数字不是素数 那么他一定有一个因子 <= sqrt(m) 在开方前如果没有找到因子则说明一定为素数因此
// for (j = 2; j < i - 1; j++) --------> for (j = 2; j <= sqrt(i); j++)//引用 数学库函数<math.h> sqrt(开平方)
// 2. 偶数肯定不是素数 因此可令i从101开始 每次i+=2
// for (i = 100; i <= 200; i++) --------> for (i = 101; i <= 200; i+=2)
//写一个函数判断一个数是否是素数(只能被1和它本身整除的数)
//是素数返回1不是返回0
//int is_prime(int n)
//{
//
// int j = 0;
// for (j = 2; j < sqrt(n); j++)
// {
// if (n % j == 0)
// {
// return 0;
// break;
// }
// }
// return 1;
//
//}
//
//int main()
//{
// int count = 0;
// int i = 0;
// for (i = 101; i <= 200; i += 2)
// {
// if (is_prime(i))
// {
// printf("%d\n", i);
// }
// }
// return 0;
//}
感悟总结
注意细节,细心一些,加油!