题目来自练习册和牛客网的一些编程题目整理

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

image
image

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

image


#include<stdio.h>

int fun(int n) {
    if(n<=2){
        return 1;
    } else{
        return fun(n - 1) + fun(n - 2);
    }
}

int main() {
    //有一对兔子,从出生后第 3 个月起每个月都生一对兔子
    // 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第 n 个月的兔子对数为多少?
    //斐波那契数列
    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");
}

image

#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(){
   // 编写一个函数 long long factorial(int n),用于计算 n 的阶乘。(要求使用递归实现)
   int n;
    scanf("%d",&n);
    printf("%lld",factorial(n));
}
#include<stdio.h>
//输入一个只包含'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(){
    //函数的方式实现pow()求x的n次方
    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);
}

image
image
image
image
image
image
image

#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);
}

image
image

#include <stdio.h>

// s=1+1/(1+2)+1/(1+2+3)+......+1/(1+2+3+4+....+n) 计算结果
// 函数来计算前n个自然数的和
double sum_of_n(int n) {
    return (double) n * (n + 1) / 2;
}

// 函数来计算给定的序列s
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;
}
posted on 2024-05-24 09:16  蒸饺  阅读(140)  评论(0)    收藏  举报