首页 > 其他分享 >C语言习题练习

C语言习题练习

时间:2024-10-28 09:51:56浏览次数:7  
标签:arr int 练习 C语言 素数 str 字符串 习题 回文

1.某人需要走n阶台阶,一次可以选择走一阶或两阶台阶,问走完n阶台阶共有多少种方法?

这是一个典型的斐波那契数列问题。可以使用递归或动态规划来解决。

方法一:递归

#include <stdio.h>

int climbStairs(int n) {
    // base cases
    if (n <= 2) {
        return n;
    }
    
    // recursive case
    return climbStairs(n - 1) + climbStairs(n - 2);
}

int main() {
    int n;
    printf("请输入楼梯的阶数:");
    scanf("%d", &n);
    int ways = climbStairs(n);
    printf("走到楼梯顶部的走法总数:%d\n", ways);
    return 0;
}

方法二:动态规划

#include <stdio.h>

int climbStairs(int n) {
    if (n <= 2) {
        return n;
    }
    
    int prev1 = 1;
    int prev2 = 2;
    int curr;
    
    for (int i = 3; i <= n; i++) {
        curr = prev1 + prev2;
        prev1 = prev2;
        prev2 = curr;
    }
    
    return curr;
}

int main() {
    int n;
    printf("请输入楼梯的阶数:");
    scanf("%d", &n);
    int ways = climbStairs(n);
    printf("走到楼梯顶部的走法总数:%d\n", ways);
    return 0;
}

以递归代码运行为例,结果如下:

2.输入10个整数(可以有重复数据),现删除指定数据,并输出删除后的序列,且未删除的数据的前后位置不变

代码如下:

#include<stdio.h>
void Del(int* arr,int del,int N)
{
	int i = 0;
	int j = 0;
	for (i = 0;i < N;i++)
	{
		if (arr[i] != del)
		{
			arr[j++] = arr[i];
		}
	}
	for (i = 0;i < j;i++)
	{
		printf("%d ", arr[i]);
	}
}

int main()
{
	int N = 10;

	int arr[10] = { 0 };
	int i = 0;
	for (i = 0;i < N;i++)
	{
		scanf_s("%d", &arr[i]);
	}
	int del = 0;
	scanf_s("%d", &del);
	Del(arr,del,N);

	return 0;
}

代码运行结果如下:

3.编写一个程序,输入一个字符串,判断该字符串是否为回文字符串(正序和倒序相同)。 如果是回文字符串,则输出"是回文字符串",否则输出"不是回文字符串"。

#include <stdio.h>
#include <string.h>

int isPalindrome(char str[]) {
    int len = strlen(str);
    int i, j;
    
    for(i = 0, j = len-1; i < j; i++, j--) {
        if(str[i] != str[j]) {
            return 0;
        }
    }
    
    return 1;
}

int main() {
    char str[100];
    printf("请输入一个字符串:");
    scanf("%s", str);
    
    if(isPalindrome(str)) {
        printf("是回文字符串\n");
    } else {
        printf("不是回文字符串\n");
    }
    
    return 0;
}

输出:

请输入一个字符串:abcdcba
是回文字符串

4.编写一个程序,输入一个正整数n,将该整数分解为若干个素数的乘积。 例如,输入数值为20,可以分解为2 * 2 * 5

#include <stdio.h>

int isPrime(int num) {
    if(num <= 1) {
        return 0;
    }
    
    for(int i = 2; i * i <= num; i++) {
        if(num % i == 0) {
            return 0;
        }
    }
    
    return 1;
}

void primeFactorization(int n) {
    printf("%d可以分解为素数的乘积:", n);
    
    for(int i = 2; i <= n; i++) {
        if(isPrime(i) && n % i == 0) {
            printf("%d ", i);
            n /= i;
            i--;
        }
    }
    
    printf("\n");
}

int main() {
    int n;
    printf("请输入一个正整数:");
    scanf("%d", &n);
    
    primeFactorization(n);
    
    return 0;
}

输出:

请输入一个正整数:20
20可以分解为素数的乘积:2 2 5

 该程序中包含了两个函数,isPrime用于判断一个数是否为素数,primeFactorization用于将一个正整数分解为素数的乘积。 首先需要调用isPrime函数来判断一个数是否为素数。isPrime函数通过遍历判断从2到i的平方根之间是否存在可以整除的数,如果存在,则该数不是素数,返回0;否则,返回1。 然后,在primeFactorization函数中,使用一个循环来遍历从2到n的数。首先判断该数是否为素数并且能够整除n,如果是,则打印该数并将n除以该数,再将循环变量i减1,以便继续检查是否有其他素数可以整除n。最后,输出结果。

标签:arr,int,练习,C语言,素数,str,字符串,习题,回文
From: https://blog.csdn.net/NJL12138/article/details/143204576

相关文章

  • js练习:Click and Drag
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>ClickandDrag</title><linkrel="stylesheet"href="style.css"><linkrel="icon"h......
  • 提高ADC采样精度:C语言中的滤波与取平均值技巧
    在嵌入式系统中,ADC(模数转换器)是常用的组件,用于将模拟信号转换为数字信号。然而,由于噪声和其他干扰因素,ADC采样值可能会波动,导致读数不稳定。为了提高ADC读数的准确性,常用的方法是进行滤波和取平均值。本文将详细介绍如何在C语言中实现ADC采样值的滤波和取平均值,并提供详细的代......
  • 中国计量大学《C语言程序设计》课程实验报告
    中国计量大学《C语言程序设计》课程实验报告实验课程:   C语言程序设计        实验名称:实验一 熟悉上机环境、程序设计-顺序结构                                      实验......
  • 数学建模习题6.6
    `importnumpyasnpmatches=np.array([[0,1,0,1,1,1],#1队[0,0,0,1,1,1],#2队[1,1,0,1,0,0],#3队[0,0,0,0,1,1],#4队[0,0,1,0,0,1],#5队[0,0,1,0,0,0]#6队],dtype=int)n=matches.shape[0]closure=matches.cop......
  • 数学建模习题6.1
    非赋权图:importnetworkxasnximportmatplotlib.pyplotaspltG=nx.Graph()nodes=['v1','v2','v3','v4','v5','v6']G.add_nodes_from(nodes)edges=[('v1','v2'),('......
  • 数学建模习题6.5
    `importnumpyasnpdistances=np.array([[0,2,7,np.inf,np.inf,np.inf],[2,0,4,6,8,np.inf],[7,4,0,1,3,np.inf],[np.inf,6,1,0,1,6],[np.inf,8,3,1,0,3],[np.inf,np.inf,np.inf,6,3,0]],dtype=float)students=np.array([50,40......
  • 练习LabVIEW第二十一题
    学习目标:刚学了LabVIEW,在网上找了些题,练习一下LabVIEW,有不对不好不足的地方欢迎指正!第二十一题:用一个chart(波形图表)显示一个随机数,用前面板控件改变chart(波形图表)的大小和位置开始编写:前面板放置波形图表,程序框图添加一个while循环做无限循环,循环内放一个随机数,输......
  • python数学建模习题六
    学号后四位3026,1班6.1importnetworkxasnximportmatplotlib.pyplotaspltL1=[(1,2),(1,3),(1,4),(2,3),(2,6),(3,4),(4,5),(5,6)]G1=nx.Graph();G1.add_nodes_from(range(1,7))G1.add_edges_from(L1);posl=nx.shell_layout(G1)plt.subplot(131......
  • CuTest C语言单元测试框架
    CuTestC语言单元测试框架Cutest是一个轻量级的C/C++单元测试框架,旨在提供简单、易用的测试功能。它的主要特点包括:简洁性:Cutest以简洁的语法使得编写测试用例变得容易,降低了学习曲线。灵活性:支持多种测试风格,可以根据需要进行定制。单头文件:Cutest仅包含一个头文件,......
  • 刷c语言练习题13(牛客网)
    1、有以下程序12345678#include<iostream>#include<cstdio>usingnamespacestd;intmain(){  intm=0123,n=123;  printf("%o%o\n",m,n);  return0;}程序运行后的输出结果是()A、01230173B、0123173C、123173D、173173答案:C解析:......