打印100~200之间的素数:
#include <math.h>
int is_prime(int n)
{
int j = 0;
for (j = 2; j < n; j++)
{
if (n % j == 0)
return 0;
}
return 1;
}
int main()
{
//100-200之间的素数
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
if (is_prime(i) == 1)
{
count++;
printf("%d", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
count = 21
int is_leap_year(int n)
{
return (n % 4 == 0 && n % 100 != 0) || (n % 400 == 0);
}
int main()
{
int y = 0;
for (y = 1000; y <= 2000; y++)
{
if (is_leap_year(y) == 1)
{
printf("%d", y);
}
}
return 0;
}
1004 1008 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048 1052 1056 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1104 1108 1112 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 1156 1160 1164 1168 1172 1176 1180 1184 1188 1192 1196 1200 1204 1208 1212 1216 1220 1224 1228 1232 1236 1240 1244 1248 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292 1296 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 1348 1352 1356 1360 1364 1368 1372 1376 1380 1384 1388 1392 1396 1404 1408 1412 1416 1420 1424 1428 1432 1436 1440 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480 1484 1488 1492 1496 1504 1508 1512 1516 1520 1524 1528 1532 1536 1540 1544 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 1588 1592 1596 1600 1604 1608 1612 1616 1620 1624 1628 1632 1636 1640 1644 1648 1652 1656 1660 1664 1668 1672 1676 1680 1684 1688 1692 1696 1704 1708 1712 1716 1720 1724 1728 1732 1736 1740 1744 1748 1752 1756 1760 1764 1768 1772 1776 1780 1784 1788 1792 1796 1804 1808 1812 1816 1820 1824 1828 1832 1836 1840 1844 1848 1852 1856 1860 1864 1868 1872 1876 1880 1884 1888 1892 1896 1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000
int binary_search(int a[], int k, int s)
{
int left = 0;
int right = s - 1;
while (left<=right)
{
int mid = (left + right) / 2;
if (a[mid] > k)
{
right = mid - 1;
}
else if (a[mid] < k)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;//找不到了
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int key = 7;
//找到了就返回找到的位置的下标
//找不到返回-1
//数组arr传参,实际传递的不是数组的本身
//仅仅传过去了数组首元素的地址
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(arr, key, sz);
if (-1 == ret)
{
printf("找不到\n");
}
else
{
printf("找到了,下标是:%d\n", ret);
}
return 0;
}
写一个函数,每调用一次这个函数,就会将 num 的值增加1:
void Add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf("num = %d\n");//1
Add(&num);
printf("num = %d\n");//2
Add(&num);
printf("num = %d\n");//3
return 0;
}
查询库函数网站:
MSDN(Microsoft Developer Network)
www.cplusplus.com
http://en.cppreference.com (英文版)
http://zh.cppreference.com (中文版)
链式访问
把一个函数的返回值作为另一个函数的参数。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
char arr[20] = "hello";
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
屏幕上打印的是:4321
嵌套调用
函数可以嵌套调用,但是不能嵌套定义。
void new_line()
{
printf("hehe\n");
}
void three_line()
{
int i = 0;
for (i = 0; i < 3; i++)
{
new_line();
}
}
int main()
{
three_line();
return 0;
}
函数声明:
告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。函数的声明一般出现在函数的使用之前。要满足先声明后使用。函数的声明一般要放在头文件中的。
函数定义:
函数的具体实现,交待函数的功能实现。
函数的声明和定义:
int main()
{
int a = 10;
int b = 20;
//函数声明一下 - 告知
int Add(int, int);
int c = Add(a, b);
printf("%d\n", c);
return 0;
}
//函数的定义
int Add(int x, int y)
{
return x + y;
}
30
函数递归
就是自己调用自己,实现把困难的问题简单化,把一个原来看似困难的问题拆分成和原问题看似相似但是相对简单的问题。
递归的两个必要条件
①存在限制条件,当满足这个限制条件的时候,递归便不再继续。
②每次递归调用之后越来越接近这个限制条件
int main()
{
printf("hehe\n");
main();
return 0;
}
但是这个代码运行会发生栈溢出的现象,
函数都是在栈区申请空间,如果一直在申请空间直至栈区空间用完了,再使用就是栈溢出了。
接受一个整型值(无符号),按照顺序打印它的每一位。
输入:1234,输出:1234
void print(int n) {
if(n>9)
{
print(n/10);
}
printf("%d ", n%10);
}
int main()
{
int num = 1234;
print(num);
return 0; }
编写函数不允许创建临时变量,求字符串的长度:
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char arr[] = "bit";
//['b'] ['i'] ['t'] ['\0']
//模拟实现一个strlen函数
printf("%d\n", my_strlen(arr));
return 0;
}