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

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

时间:2024-10-29 17:31:31浏览次数:6  
标签:return 函数 int 编程 C语言 char score ans printf

1. 实验任务1

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

问题1:函数score_to_grade的功能是什么?形参类型、返回值类型是什么?

判断成绩的等级;形参类型、返回值类型是整形;字符型

问题2:如果line21-28以下形式,有问题吗?如果有,指出有哪些问题?

有,无论成绩多少都是E。

2. 实验任务

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

问题1:函数sum_digits的功能是什么?

问题2:如果保持main代码和函数sum_digits声明不变,把函数sum_digits定义成如下实现方式能实现同等的效果吗? 如果不能实现同等效果,分析原因。 如果能实现同等效果,说明两种实现方式背后的算法思维区别。

1:计算各个位数的和

2:能

1是迭代,2是递归

3. 实验任务

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

问题1: 函数power的功能是什么?

问题2:函数power是递归函数吗?如果是,找出递归模式。写出这个递归模式对应的数学公式模 型。

 

 

4. 实验任务4

#include<stdio.h>
#include<math.h>

int is_prime(int n);

int main() {
    int m, count = 0;
    for (m = 2; m <= 100 - 2; m++) {  // 注意这里的上限,避免越界访问
        if (is_prime(m) && is_prime(m + 2)) {
            count++;
            printf("%d %d\n", m, m + 2);
        }
    }
    printf("100以内的孪生素数有%d个", count);
    return 0;
}
int is_prime(int n){
    int i;
    for(i=2;i<=n/2;i++){
      if(n%i == 0)
    return 0;
    }
    return 1;
}

5. 实验任务

#include<stdio.h>
int count = 0;
void hanoi(unsigned n,char from,char temp,char to);
void moveplate(unsigned nth,char from,char to);
int main(){
    int n;
    char from = 'A',temp = 'B',to = 'C';
    printf("输入n:");
    while(scanf("%d",&n)!= EOF){
      count = 0;
      hanoi(n,from,temp,to);
      printf("一共移动%d\n",count);
    }
    return 0;
} 
void hanoi(unsigned n,char from,char temp,char to){
    if(n == 1)
      moveplate(n,from,to);
    else{
        hanoi(n-1,from,to,temp);
        moveplate(n,from,to);
        hanoi(n-1,temp,from,to);
    }
}
void moveplate(unsigned nth,char from,char to){
    printf("%u: %c --> %c\n",nth, from, to);
    count++;
}

6. 实验任务

#include <stdio.h>
int func(int n, int 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;
 }
 int func(int n,int m){
     int i1,ans,i2;
     int ans1 = 1,ans2 = 1;
     if(n < m){
         ans = 0;
     return ans;
     }
    else if(n > m&&m !=0){
        for(i1 = n-m+1;i1 <= n;i1++){
            ans1 *= i1;
        }
        for(i2 = 1;i2 <= m;i2++){
            ans2 *= i2;
        }
        ans = ans1 / ans2;
        return ans;
    }
    else if(n == m)
      return 1;
    else if(m == 0)
      return 1;
 }

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

7. 实验任务

#include <stdio.h>
#include<stdlib.h>
 void print_charman(int n);
 int main() {
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n);
    return 0;
 }
 void print_charman(int n){
    int t = 0;
    int i,j;         
    for(i = n; i >= 1; i--){
        for(j = 0; j < t; j++)
          printf("\t");
        for(j = 0; j < 2 * i - 1; j++)
          printf(" o\t");
          printf("\n");
        for(j = 0; j < t; j++)
          printf("\t");
        for(j = 0; j < 2 * i - 1; j++)
          printf("<H>\t");
          printf("\n");             
        for(j = 0; j < t; j++)
          printf("\t");
        for(j = 0; j < 2 * i - 1; j++)
          printf("I I\t");
          printf("\n");
           t++;
     }
 }

 

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

相关文章

  • 实验2 类和对象_基础编程1
    任务1:源代码:t.h1#pragmaonce23#include<string>45classT{6public:7T(intx=0,inty=0);8T(constT&t);9T(T&&t);10~T();1112voidadjust(intratio);13voiddisplay()const;1415......
  • 现在职业PHP 程序员通常用什么编程工具
    标题:现代职业PHP程序员通常使用的编程工具开头段落:现代职业PHP程序员通常使用的编程工具主要包括集成开发环境(IDE)、版本控制系统、调试工具、数据库管理工具、以及代码质量工具。这些工具共同构建了PHP开发的基础框架,使开发工作更加高效、组织化。特别地,集成开发环境(IDE)无疑是......
  • 实验2 类和对象 基础编程1
    实验任务1:源代码t.h:点击查看代码#pragmaonce#include<string>//类T:声明classT{//对象属性、方法public:  T(intx=0,inty=0); //普通构造函数  T(constT&t); //复制构造函数  T(T&&t);   //移动构造函数  ~T();     //析......
  • python3 堆相关函数的使用
    215.数组中的第K个最大元素classSolution:deffindKthLargest(self,nums:List[int],k:int)->int:ans=[]foriinrange(k):heapq.heappush(ans,nums[i])foriinrange(k,len(nums)):ifnums[i]>ans[......
  • 激活函数和GLU
    LLaMA系列用的FFN层现在是SwishGLU,这里Swish是个激活函数,GLU是个线性单元,二者合起来是SwishGLU。FFNTransformer中原始的FFN长这样:\[FFN(x)=ReLU(xW_1+b_1)W_2+b_2\]两个线性层中间夹了个relu激活函数写成模型代码就是:x=up_proj(x)x=relu(x)x=down_proj(x)或者......
  • C语言 【句子倒叙】
        在学期C语言前期,经常会遇到一个经典的题目:倒序字符串。这个题目利用指针可以很简单地得到解决。句子倒叙需要用到这个思想,在正式句子倒叙之前我们先来倒叙字符串。#include<stdio.h>voidreverse(char*arr,char*right){ char*left=arr; while(left<......
  • C++ 网络编程 IO多路复用、select、poll、epoll知识点总结
    1.什么是I/O多路复用?I/O多路复用(I/OMultiplexing)是一种编程技术,允许一个线程或进程同时管理多个I/O通道(如文件描述符、套接字等)。它使得单个进程能够在不使用多个线程或进程的情况下,同时处理多个I/O操作。这在网络编程和高性能服务器中尤为重要,因为它可以有效地利用系......
  • c语言-数组队列-学习笔记
    数组队列#include<stdio.h>#include<stdlib.h>/*数组顺序队列*/typedefstructSqQueue{ intdata[10]; intfront; intrear;}SqQueue;voidInitQueue(SqQueue*Q){ Q->front=Q->rear=0;}voidEnQueue(SqQueue*Q,inta){ Q->data[Q->rear......
  • JUC并发编程1
    JUC并发编程1.常见的加锁方式1.1synchronized关键字要求:多个线程并行执行,依次实现对数字的+1、-1操作。即一次+1、一次-1,依次执行。Share类classShare{privateintnumber=0;publicsynchronizedvoidincr()throwsInterruptedException{//......
  • 重要的原函数和导函数
    导数描述了函数变化的速率,而原函数则是已知导数逆过程的结果。本文将详细讨论一些重要的原函数和导函数,并深入分析它们之间的数学关系。导数与原函数的定义导数是表示函数变化率的一个量,通常通过极限的形式定义。假设函数为\(f(x)\),则导数\(f'(x)\)可以定义为:\[f'(x)=\lim......