题目来自练习册和牛客网的一些编程题目整理
| 函数都有返回值 且只有一个返回值 |
| 声明类型为void 可以返回空值 |
| 若调用一个函数中没有return语句 返回一个不确定的值 |
| 形参是动态变量 实参和形参之间的数据传递方式为 实参到形参的单向值传递 |
| 形参的值发生改变 不会影响主调函数中的实参的值 |
| 存储类别: |
| static 静态存储 调用结束后不释放 下一次继续使用 |
| extern 可以在一个文件中引用另一个文件中定义的变量或者函数 |
| auto 自动变量 调用结束后自动释放 |
| register 变量存储在寄存器中 而非内存中 |
| 嵌套调用:调用一个函数的过程调用另一个函数 |
| 递归调用:调用一个函数的过程直接或间接调用函数本身 |
| 每一个变量和函数两个属性:数据类型和数据的存储类别 |
| 函数两部分组成:函数首部和函数体 |
| 全局变量采用静态存储方式 |
汉诺塔 递归函数


| 规律就是:f(n)=2*f(n-1)+1 |
| |
| #include<stdio.h> |
| int Han(int x){ |
| if(x==1){ |
| return 1; |
| } else{ |
| return 2*Han(x-1)+1; |
| } |
| } |
| int main(){ |
| |
| |
| int n,num; |
| scanf("%d",&n); |
| num=Han(n); |
| printf("%d个圆盘需要移动%d次",n,num); |
| } |
不死神兔问题 斐波那契数列 递归函数
| 有一对兔子,从出生后第 3 个月起每个月都生一对兔子 |
| 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第 n 个月的兔子对数为多少? |

| |
| #include<stdio.h> |
| |
| int fun(int n) { |
| if(n<=2){ |
| return 1; |
| } else{ |
| return fun(n - 1) + fun(n - 2); |
| } |
| } |
| |
| int main() { |
| |
| |
| |
| int n; |
| scanf("%d", &n); |
| printf("总共 %d 对", fun(n)); |
| } |
| #include<stdio.h> |
| |
| void fun(int x) { |
| if (x / 3 > 0) |
| fun(x / 3); |
| printf("%d", x); |
| } |
| |
| int main() { |
| fun(6); |
| printf("\n"); |
| } |

| #include<stdio.h> |
| #include<string.h> |
| int main(){ |
| |
| char arr1[10]; |
| char arr2[10]; |
| gets(arr1); |
| gets(arr2); |
| puts(strcat(arr1,arr2)); |
| #include<stdio.h> |
| void swap(int *x,int *y){ |
| int tem=0; |
| tem= *x; |
| *x=*y; |
| *y=tem; |
| } |
| int main(){ |
| |
| int n,m; |
| scanf("%d\n",&n); |
| scanf("%d",&m); |
| swap(&n,&m); |
| printf("%d %d",n,m); |
| } |
| #include<stdio.h> |
| long long factorial(int n){ |
| long long sum=1; |
| for (int i = 1; i < n+1; ++i) { |
| sum*=i; |
| } |
| return sum; |
| } |
| int main(){ |
| |
| int n; |
| scanf("%d",&n); |
| printf("%lld",factorial(n)); |
| } |
| |
| //输入一个只包含'a','b','c'的字符串,问'a','b','c'分别出现了多少次。 |
| int main() { |
| int a = 0, b = 0, c = 0; |
| char d; |
| while ((d = getchar()) != '\n') { |
| if (d == 'a') |
| a++; |
| else if (d == 'b') |
| b++; |
| else if (d == 'c') |
| c++; |
| } |
| printf("%d %d %d", a, b, c); |
| return 0; |
| } |
| #include<stdio.h> |
| int my_pow(int x,int n){ |
| int fang=1; |
| for (int i = 1; i < n+1; ++i) { |
| fang*=x; |
| } |
| return fang; |
| } |
| int main(){ |
| |
| int x,n; |
| scanf("%d",&x); |
| scanf("%d",&n); |
| printf("%d",my_pow(x,n)); |
| } |
| #include<stdio.h> |
| |
| int a = 0, b = 0; |
| |
| void fun() { |
| int a = 5; |
| printf("%d,%d;", a, b); |
| } |
| |
| void main() { |
| b = 5; |
| fun(); |
| printf("%d,%d\n", a, b); |
| } |
| 静态局部变量默认值为0 |
| #include<stdio.h> |
| void fun(){ |
| static int m; |
| m+=5; |
| printf("%d ",m); |
| } |
| |
| void main() { |
| int n; |
| for (int n = 1; n < 5; ++n) |
| fun(); |
| printf("\n"); |
| |
| } |
| #include<stdio.h> |
| |
| int a = 1; |
| |
| int f(int n) { |
| static int a = 2; |
| int t = 0; |
| if (n % 2) { |
| static int a = 3; |
| t += a++; |
| } else { |
| static int a = 4; |
| t += a++; |
| } |
| return t + a++; |
| } |
| |
| |
| void main() { |
| int s = a, i; |
| for (i = 0; i < 2; i++) |
| s += f(i); |
| printf("%d\n", s); |
| } |







| #include<stdio.h> |
| f2()局部数组 修改值对全局数组无影响 |
| f1()为全局数组赋值 |
| f3()打印值 |
| |
| #define M 5 |
| int a[M]; |
| |
| void f2() { |
| int a[M], i, n; |
| n = 3; |
| for (int i = 0; i < n; ++i) |
| a[i] = i; |
| } |
| |
| void f1() { |
| for (int i = 0; i < M; ++i) |
| a[i] = i + i; |
| } |
| |
| void f3(int a[]) { |
| int i; |
| for (int i = 0; i < M; ++i) |
| printf("%d,", a[i]); |
| } |
| |
| |
| void main() { |
| f1(); |
| f3(a); |
| f2(); |
| f3(a); |
| printf("\n"); |
| } |
| #include<stdio.h> |
| |
| void fun(char c[]) { |
| int i = 0; |
| while (c[i]) { |
| if (c[i] >= 'a' && c[i] <= 'z') |
| c[i] -= ('a' - 'A'); |
| i++; |
| } |
| } |
| |
| void main() { |
| char s[81]; |
| gets(s); |
| fun(s); |
| puts(s); |
| } |
| 下标为奇数的字符右移到下一个奇数位置 最右边被移出字符串的字符放到第一个奇数位置 |
| 下标为偶数的字符不动 例如:abcdefgh 结果ahcbedgf |
| #include<stdio.h> |
| |
| void f(char s[]) { |
| int i, n, k; |
| char c; |
| n = 0; |
| for (i = 0; s[i] != '\0'; i++) |
| n++; |
| if (n % 2 == 0) |
| k = n - 1; |
| else |
| k = n - 2; |
| c = s[k]; |
| for (i = k - 2; i >= 1; i -= 2) |
| s[i + 2] = s[i]; |
| s[1] = c; |
| } |
| |
| void main() { |
| char s[20] = "abcdefgh"; |
| f(s); |
| printf("%s", s); |
| } |


| #include <stdio.h> |
| |
| |
| |
| double sum_of_n(int n) { |
| return (double) n * (n + 1) / 2; |
| } |
| |
| |
| double calculate_s(int n) { |
| double s = 0.0; |
| for (int i = 1; i <= n; i++) { |
| s += 1.0 / sum_of_n(i); |
| } |
| return s; |
| } |
| |
| int main() { |
| int n; |
| scanf("%d", &n); |
| double result = calculate_s(n); |
| printf("%f\n", result); |
| return 0; |
| } |
| 求输入数包含整数的位数: |
| #include <stdio.h> |
| |
| int countDigits(int number) { |
| int count = 0; |
| while (number != 0) { |
| number /= 10; |
| count++; |
| } |
| return count; |
| } |
| |
| int main() { |
| int number; |
| scanf("%d", &number); |
| int digitCount = countDigits(number); |
| printf("该整数包含 %d 位\n", digitCount); |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了