首页 > 编程语言 >实验三 C语言函数应用编程

实验三 C语言函数应用编程

时间:2024-10-22 21:49:51浏览次数:8  
标签:return 函数 int 编程 C语言 score ans printf include

任务一

#include <stdio.h>
char score_to_grade(int score); // 函数声明

int main() {
    int score;
    char grade;
    while(scanf("%d", &score) != EOF) {
        grade = score_to_grade(score); // 函数调用

        printf("分数: %d, 等级: %c\n\n", score, grade);
   }
    return 0;
}

char score_to_grade(int score) {
    char ans;
    switch(score/10) {
    case 10:
    case 9:  ans = 'A'; break;
    case 8:  ans = 'B'; break;
    case 7:  ans = 'C'; break;
    case 6:  ans = 'D'; break;
    default: ans = 'E';
   }
    return ans;}

 

 功能是根据满分为100的分数,按60分以下,60分,70分,80分,90分以上分别转为等级制EDCBA

有问题,分支后面没有break会导致switch程序段继续执行后面的分支

任务二

#include <stdio.h>

int sum_digits(int n); // 函数声明

int main() {
    int n;
    int ans;
    while(printf("Enter n: "), scanf("%d", &n) != EOF) {
        ans = sum_digits(n); 

        printf("n = %d, ans = %d\n\n", n, ans);
   }
    return 0;
}


int sum_digits(int n) {
    int ans = 0;
    while(n != 0) {
        ans += n % 10;
        n /= 10;
   }
    return ans;
}

 

 计算输入数字的各数位数字之和

可以实现。前面是通过程序循环结构来实现,这里是通过递归的方式实现

实验三

#include <stdio.h>

int power(int x, int n); 

int main() {
    int x, n;
    int ans;
    while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
        ans = power(x, n); 

        printf("n = %d, ans = %d\n\n", n, ans);
        }
    return 0;
}

// 函数定义

int power(int x, int n) {
    int t;
    if(n == 0)
        return 1;
    else if(n % 2)
        return x * power(x, n-1);
    else {
        t = power(x, n/2);
        return t*t;
  }
}

 

 功能是根据输入的x,n计算x的n次方

是递归函数

任务四

#include <stdio.h>
int is_prime(int n){
    for(int i=2;i<n/2;i++){
        if(n%i==0) return 0;
    }
    return 1;
}
int main(){
    for(int i=3;i<99;i++){
        if(is_prime(i)&&is_prime(i+2)){
            printf("%d %d\n",i,i+2);
        }
    }
    return 0;
}

 

 任务五

#include <stdio.h>
void hanoi(int n, char source, char target, char auxiliary, int *moveCount) {
    if (n == 1) {
        printf("移动盘子从 %c 到 %c\n", source, target);
        (*moveCount)++;
    } else {
        hanoi(n - 1, source, auxiliary, target, moveCount);
        printf("移动盘子从 %c 到 %c\n", source, target);
        (*moveCount)++;
        hanoi(n - 1, auxiliary, target, source, moveCount);
    }
}
void printHanoiMoves(int n) {
    int moveCount = 0;
    printf("对于 n = %d 的移动方案:\n", n);
    hanoi(n, 'A', 'C', 'B', &moveCount);
    printf("总移动次数: %d\n\n", moveCount);
}

int main() {
    int n;
    while (1) {
        printf("请输入盘子的数量 n(输入 -1 结束):");
        scanf("%d", &n);
        if (n == -1) break;
        if (n < 1) {
            printf("请输入一个正整数。\n\n");
            continue;
        }
        printHanoiMoves(n);
    }
    return 0;
}

 

 

任务六

这里是非递归方式

#include <stdio.h>
int fac(int n){
    if(n==0) return 1;
    else return n*fac(n-1);
}
int func(int n, int m){
    if(n<m) return 0;
    else return fac(n)/fac(m)/fac(n-m);
}

int main() {
    int n, m;
    int ans;
    while(scanf("%d%d", &n, &m) != EOF) {
        ans = func(n, m);  
        printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
   }
    return 0;
} 

 

 这里是递归方式

#include <stdio.h>
int func(int n, int m){
    if(n<m) return 0;
    else if(m==0) return 1;
    else return func(n-1,m)+func(n-1,m-1);
}

int main() {
    int n, m;
    int ans;
    while(scanf("%d%d", &n, &m) != EOF) {
        ans = func(n, m);  
        printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
   }
    return 0;
} 

 任务七

 

#include <stdio.h>
#include <stdlib.h>
void print_charman(int n){
    int num=0;
    for(int i=2*n-1;i>0;i-=2){
        printf("%*s",num,"");
        for(int j=0;j<i;j++){
            printf(" o    ");
        }
        printf("\n");
        printf("%*s",num,"");
        for(int j=0;j<i;j++){
            printf("<H>   ");
        }
        printf("\n");
        printf("%*s",num,"");
        for(int j=0;j<i;j++){
            printf("I I   ");
        }
        printf("\n");
        num+=6;
    }
    
}

int main() {
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); // 函数调用 
    return 0;
}

 

 

 

标签:return,函数,int,编程,C语言,score,ans,printf,include
From: https://www.cnblogs.com/wangzhadan/p/18493758

相关文章

  • 激活函数ReLU带来的神经元死亡问题
    神经元死亡问题:在使用ReLU激活函数及其变种激活函数时,输入小于零的神经元会输出零。这可能会带来神经元死亡问题。神经元死亡问题的原因和影响  某一个神经元输出0后,代表这个神经元死亡,这些神经元在前向传播中不再对输入产生任何影响。如果在训练过程中某些神经元的......
  • 【C++指南】类和对象(四):类的默认成员函数——全面剖析 : 拷贝构造函数
     引言拷贝构造函数是C++中一个重要的特性,它允许一个对象通过另一个已创建好的同类型对象来初始化。了解拷贝构造函数的概念、作用、特点、规则、默认行为以及如何自定义实现,对于编写健壮和高效的C++程序至关重要。 C++类和对象系列文章,可点击下方链接阅读:【C++指南......
  • FreeRTOS学习——临界段代码保护及调度器挂起与恢复及其API函数内部实现详解
    FreeRTOS临界段代码保护及调度器挂起与恢复FreeRTOS临界段代码保护及调度器挂起与恢复临界保护区任务调度器挂起与恢复使用格式特点函数内部实现**vTaskSuspendAll();****==总结==**:xTaskResumeAll();FreeRTOS临界段代码保护及调度器挂起与恢复临界保护区什么......
  • 【趣学C语言和数据结构100例】
    #1024程序员节|征文#【趣学C语言和数据结构100例】问题描述56.设将n(n>1)个整数存放到区带头结点处单链表乚中,设计算法将L中保存的序列循环石移k(0<k<n)个位置。例如,若k=1,则将链表(0,1,2,3}变为{3,0,1,2}57.设有一个带头结点的非循环双链表L,其每个结点中除有pre、da......
  • 手写节流函数-基本实现
    <buttonclass="btn">按钮</button><!--<scriptsrc="./js/underscore.js"></script>--><script>functionhdcthrottle(fn,time){//获取开始时间letstartTime=0const_throttleFn=f......
  • 数据结构 链表 C语言
    数据结构第二章的链表//线性表的链式存储#include<stdlib.h>#include<stdio.h>typedefintElemType;typedefstructnode{ElemTypedata;structnode*next;}Node,*LinkList;//初始化空的单链表voidInitList(LinkList*L){*L=(LinkLis......
  • 节流throttle函数
    认识节流throttle函数◼我们用一副图来理解一下节流的过程当事件触发时,会执行这个事件的响应函数;如果这个事件会被频繁触发,那么节流函数会按照一定的频率来执行函数;不管在这个中间有多少次触发这个事件,执行函数的频繁总是固定的;节流的应用场景:➢监听页面......
  • 奇偶序号分割单链表(C语言)
    算法思想:要想将单链表L按照奇偶序号分割为两个单链表A(奇),B(偶),我们便可以定义一个变量来记录当前遍历的结点序号的奇偶,两个指针ra,rb,ra负责将奇数位置结点赋到A中,rb同理核心代码:voiddevide(LinkListL,LinkListA,LinkListB){intindex=1;LNode*p=L->next;......
  • 防抖函数-手写(基本实现)
    <button>按钮</button><inputtype="text"><!--本地引入:下载js文件并且本地引入--><!--<scriptsrc="./js/underscore.js"></script>--><script>/*自己实现函数需要做的事情......
  • 编程时怎么把函数当做变量使用
    在编程时,把函数当做变量使用的方法包括:1.函数赋值给变量;2.函数作为参数传递;3.将函数作为返回值;4.匿名函数与Lambda表达式;5.函数式编程的应用。在编程中善于利用函数作为变量的特性,能够写出更简洁、模块化和易于维护的代码。1.函数赋值给变量在许多编程语言中,函数可以像......