栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言:练习题三

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言:练习题三

文章目录
    • 一、递归求和
    • 二、逆序递归
    • 三、猜年龄
    • 四、逆序
    • 五、回文数
    • 六、查询日期
    • 七、删除指定字母
    • 八、判断质数
    • 九、函数调用
    • 十、字符反转

一、递归求和

题目描述

利用递归方法求5!。

题目分析

递归公式:fn=fn_1*4!

代码

#include
int main()
{
    int i;
    int fact(int);
    for(i=0;i<6;i++){
        printf("%d!=%dn",i,fact(i));
    }
}
int fact(int j)
{
    int sum;
    if(j==0){
        sum=1;
    } else {
        sum=j*fact(j-1);
    }
    return sum;
}

效果

二、逆序递归

题目描述

逆序递归

题目分析

利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

源码

#include 
 
int main()
{
    int i=5;
    void palin(int n);
    printf("请输入5个字符40:40");
    palin(i);
    printf("n");
}
void palin(n)
int n;
{
    char next;
    if(n<=1) {
        next=getchar();
        printf("相反顺序输出结果40:40");
        putchar(next);
    } else {
        next=getchar();
        palin(n-1);
        putchar(next);
    }
}

效果

三、猜年龄

题目描述

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,
他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。 最后问第一个人,他说是10岁。请问第五个人多大?

题目分析

利用递归的方法,递归分为回推和递推两个阶段。 要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推

源码

#include 
 
int age(n)
int n;
{
    int c;
    if(n==1) c=10;
    else c=age(n-1)+2;
    return(c);
}
int main()
{
    printf("%dn",age(5));
}

效果

四、逆序

题目描述

给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

题目分析

学会分解出每一位数

源码

#include 
 
int main( )
{
    long a,b,c,d,e,x;
    printf("请输入 5 位数字:");
    scanf("%ld",&x);
    a=x/10000;        
    b=x%10000/1000;   
    c=x%1000/100;     
    d=x%100/10;       
    e=x%10;           
    if (a!=0){
        printf("为 5 位数,逆序为: %ld %ld %ld %ld %ldn",e,d,c,b,a);
    } else if(b!=0) {
         printf("为 4 位数,逆序为: %ld %ld %ld %ldn",e,d,c,b);
    } else if(c!=0) {
         printf("为 3 位数,逆序为:%ld %ld %ldn",e,d,c);
    } else if(d!=0) {
         printf("为 2 位数,逆序为: %ld %ldn",e,d);
    } else if(e!=0) {
         printf("为 1 位数,逆序为:%ldn",e);
    }
}

效果

五、回文数

题目描述

一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

题目分析

学会分析每一位数。

源码

#include 
 
int main( )
{
    long ge,shi,qian,wan,x;
    printf("请输入 5 位数字:");
    scanf("%ld",&x);
    wan=x/10000;        
    qian=x%10000/1000;  
    shi=x%100/10;       
    ge=x%10;            
    if (ge==wan&&shi==qian) { 
        printf("这是回文数n");
    } else {
        printf("这不是回文数n");
    }
}

效果

六、查询日期

题目描述

请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

题目分析

用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。

源码

#include
 
int main()
{
    char i,j;
    printf("请输入第一个字母:n");
    scanf("%c",&i);
    getchar();//scanf("%c",&j);的问题,第二次是读入的一个换行符,而不是输入的字符,因此需要加一个getchar() 吃掉换行符
    switch(i)
    {
        case 'm':
            printf("mondayn");
            break;
        case 'w':
            printf("wednesdayn");
            break;
        case 'f':
            printf("fridayn");
            break;
        case 't':
            printf("请输入下一个字母n");
            scanf("%c",&j);
            if (j=='u') {printf("tuesdayn");break;}
            if (j=='h') {printf("thursdayn");break;}
        case 's':
            printf("请输入下一个字母n");
            scanf("%c",&j);
            if (j=='a') {printf("saturdayn");break;}
            if (j=='u') {printf("sundayn"); break;}
        default :
            printf("errorn"); break;
    }
    return 0;
}

效果

七、删除指定字母

题目描述

删除一个字符串中的指定字母,如:字符串 “aca”,删除其中的 a 字母。

题目分析

循环遍历,对照删除。

源码

#include
#include
#include
 
// 删除字符串中指定字母函数
char* deleteCharacters(char * str, char * charSet)
{
    int hash [256];
    if(NULL == charSet)
        return str;
    for(int i = 0; i < 256; i++)
        hash[i] = 0;
    for(int i = 0; i < strlen(charSet); i++)
        hash[charSet[i]] = 1;
    int currentIndex = 0;
    for(int i = 0; i < strlen(str); i++)
    {
        if(!hash[str[i]])
            str[currentIndex++] = str[i];
    }
    str[currentIndex] = '';
    return str;
}
 
int main()
{
    char s[2] = "a";     // 要删除的字母
    char s2[5] = "aca";  // 目标字符串
    printf("%sn", deleteCharacters(s2, s));
    return 0;
}

效果

八、判断质数

题目描述

判断一个数字是否为质数。

题目分析

质数(prime number)又称素数,有无限个。 一个大于1的自然数,除了1和它本身外,不能被其他自然数整除

源码

#include
#include
#define MAX 1000
 
 
int prime[MAX];
 
int isPrimeNaive(int n)
{
    if(n <= 1)
        return 0;
    for(int i = 2; i < n; i++)
        if(n % i == 0)
            return 0;
    return 1;
}
 
int isPrime(int n)
{
    if(n<= 1)
        return 0;
    if(n == 2)
        return 1;
    if(n%2 == 0)
        return 0;
    int limit = (int)sqrt((double)n);
    for(int i = 3; i <= limit; i=i+2)
    {
        if(n % i == 0)
            return 0;
    }
    return 1;
}
 
void sieve()
{
    prime[0] = 0;
    prime[1] = 0;
    for(int i = 2; i < MAX; i++)
        prime[i] = 1;
    int limit = (int)sqrt((double)MAX);
    for(int i = 2; i <= limit; i++)
    {
        if(prime[i])
            for(int j = i*i; j <= MAX; j+=i)
                prime[j] = 0;
    }
}
 
int isPrimeSieve(int n)
{
    if(prime[n])
        return 1;
    else
        return 0;
}
 
int main()
{
    sieve();
    printf("N=%d %dn", 1, isPrime(1));
    printf("N=%d %dn", 2, isPrime(2));
    printf("N=%d %dn", 3, isPrime(3));
    printf("N=%d %dn", 4, isPrime(4));
    printf("N=%d %dn", 7, isPrime(7));
    printf("N=%d %dn", 9, isPrime(9));
    printf("N=%d %dn", 13, isPrime(13));
    printf("N=%d %dn", 17, isPrime(17));
    printf("N=%d %dn", 100, isPrime(100));
    printf("N=%d %dn", 23, isPrime(23));
    printf("N=%d %dn", 1, isPrime(1));
    return 0;
}

效果

九、函数调用

题目描述

练习函数调用。

题目分析

练习函数调用。

源码

#include 
void hello_world(void)
{
    printf("Hello, world!n");
}
void three_hellos(void)
{
    int counter;
    for (counter = 1; counter <= 3; counter++)
        hello_world();
}
int main(void)
{
    three_hellos();
}

效果

十、字符反转

题目描述

字符串反转,如将字符串 “www.abcd.com” 反转为 “moc.dcba.www”。

题目分析

无

源码

#include 
 
 
void reverse(char* s)
{
    // 获取字符串长度
    int len = 0;
    char* p = s;
    while (*p != 0)
    {
        len++;
        p++;
    }
    
    // 交换 ...
    int i = 0;
    char c;
    while (i <= len / 2 - 1)
    {
        c = *(s + i);
        *(s + i) = *(s + len - 1 - i);
        *(s + len - 1 - i) = c;
        i++;
    }
}
 
int main()
{
    char s[] = "www.abcd.com";
    printf("'%s' =>n", s);
    reverse(s);           // 反转字符串
    printf("'%s'n", s);
    return 0;
}

效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号