IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 考研C语言程序练习0722 -> 正文阅读

[C++知识库]考研C语言程序练习0722

1、从键盘输入一个整数,判断该数是否为素数。

  • 素数(质数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
#include<stdio.h>
#include<math.h>

/*num 输入的数,1 是素数  2 不是素数*/
int isPrime(int num){
    int flag=1;
    int i;
    /*排除小于等于1的数*/
    if(num<=1){
        return 2;
    }else{
        for(i=2;i<=sqrt(num);i++){
            if(num%i==0){
                flag++;
                break;
            }
        }
    }
    return flag;
}

int main(void){
    int num;
    scanf("%d",&num);
    if(isPrime(num)==1){
        printf("%d is Prime.\n",num);
    }else{
        printf("%d is not Prime.\n",num);
    }
    return 0;
}

2、求解从1到20000内的所有水仙花数。水仙花数是每位数字的n次方之和等于本身,n是这个数的位数。

  • 题解一 不太好,我电脑没跑出来
// 题解一
#include<stdio.h>

/*num的美味数存储到数组bArray 中 num 数;
        bArrayLength :num数的长度*/
void getPerBite4(int num,int bArray[],int *bArrayLength){
    while(num>0){
        bArray[*bArrayLength]=num%10;
        num/=10;
        *bArrayLength++;
    }
}

/*求n次方: 求x的y次方*/
int POW(int x,int y){
    int sum=1,i;
    for(i=0;i<y;i++){
        sum*=x;
    }
    return sum;
}

/*判断num是否是水仙花数*/
void isNarchNum(int num,int bArray[],int bArrayLength){
    int bSum=0;
    int i;
    for(i=0;i<bArrayLength;i++){
        bSum+=POW(bArray[i],bArrayLength);
    }
    if (bSum==num){
        printf("%d 是水仙花数。\n",num);
    }
}

int main(void){
    int isNum;
    for(isNum=1;isNum<=20000;isNum++){
        int bArray[10]={0};
        int bArrayLength=0;
        getPerBite4(isNum,bArray,&bArrayLength);
        isNarchNum(isNum,bArray,bArrayLength);
    }
}
  • 题解二
    • 这里其实n 的取值也就是1 2 3 4 5 位,其实可以逻辑上直接解决
    • 另外 1~9 的 每一位数的1次方 都等于它本身,so
#include<stdio.h>

/*x 的 y 次方*/
int POW(int x,int y){
    int sum = 1;
    int i;
    for(i=0;i<y;i++){
        sum*=x;
    }
    return sum;
}


int main(void){
    int n=1;
    int i,j,num;
    for(num=1;num<=20000;num++){
        if(num<10){
            n=1;
        }else if(num<100){
            n=2;
        }else if(num<1000){
            n=3;
        }else if(num<10000){
            n=4;
        }else{
            n=5;
        }
        int temp = num;
        int tSum=0;
        while(temp>0){
            int part = temp%10;
            tSum+=POW(part,n);
            temp/=10;
        }
        if(tSum==num){
            printf("%d 是水仙数。\n",num);
        }

    }

    return 0;
}

在这里插入图片描述

3、求解从2到20000的所有完数。所有的真因数的和等于本身的数字称为完数。

#include<stdio.h>

int main(void){
    int n,i;
    for(n=2;n<=20000;n++){
        int tSum=0;
        for(i=1;i<n;i++){
            if(n%i==0){
                tSum+=i;
            }
        }
        if(tSum==n){
            printf("%d ",n);
        }
    }
    return 0;
}

6 28 496 8128

4、从键盘输入两个数字n,m,求解m和n的最小公倍数。

  • 最小公倍数= m*n / 最大公因数
  • 最大公因数,辗转相除法
#include<stdio.h>

/*求a 和 b最大公因数*/
int getMaxCom(int a,int b){
    int temp;
    while(b>0){
        temp = a%b;
        a = b;
        b = temp;
    }
    return a;
}

int main(void){
    int n,m;
    scanf("%d %d",&n,&m);
    int MaxCom = getMaxCom(n,m);//获取最大公因数
    /*最小公倍数=n*m / 最大公约数 */
    int result = n*m / MaxCom;
    printf("%d %d 的最小公倍数是 %d\n",n,m,result);
    return 0;
}

在这里插入图片描述

5、一个小球从10m处落下,每次的弹回之前的高度一半,请问小球在静止之前一共走过多少距离。

#include<stdio.h>

int main(void){
    double len = 10.0;
    /*第一次落下*/
    double sumDistance = 10.0;
    while(len>0){
        len/=2;
        sumDistance+=len*2;//每次反弹的上升与下降
    }
    printf("一共走过了%lfm距离",sumDistance);
    return 0;
}

在这里插入图片描述

6、斐波拉契数列。输入数列项数n=9,输出数列为:1 1 2 3 5 8 12 21 34

#include<stdio.h>

int main(void){
    int n;
    scanf("%d",&n);
    int i,j,t,k;
    j = 1;
    t = 1;
    for(i=0;i<n;i++){
        if(i==0 || i==1){
            printf("1 ");
        }else{
            k = j+t;
            t = j;
            j = k;
            printf("%d ",j);
        }
    }
    return 0;
}

在这里插入图片描述

7、输入一行英文,判断其一共有多少单词,不能包括冠词a,例如:A pen drop from tree. 一共有4个单词。

方法一:

#include<stdio.h>

int isWord(char *pWord,int wordArrayLength){
    if(1==wordArrayLength && (('A'== *pWord) || ('a'==*pWord))){
        return 0;
    }
    return 1;
}

int countWordIn(char *pStr){
    // 记录单词数目
    int cnt = 0;
    while(*pStr != '\0'){
        char wordArray[10]={0};
        int wordArrayLength=0;
        while(*pStr !='\0' && *pStr != ' '){
            wordArray[wordArrayLength++]=*pStr;
            pStr++;
        }
        // 判断是否为单词,排除冠词a的情况
        int ret = isWord(wordArray,wordArrayLength);
        if(ret==1){
            cnt++;
        }
        while(*pStr != '\0' && ' '== *pStr){
            pStr++;
        }
    }
    // 返回单词统计数目
    return cnt;
}

int main(void){
    char sentence[1000];
    gets(sentence);
    //printf("%s",sentence);

    int cnt = countWordIn(sentence);
    printf("words is %d\n",cnt);
    return 0;
}

在这里插入图片描述

方法二

  • 我感觉上面的方法太啰嗦了,直接找冠词A 、a
  • 判断一个单词的开头是否是A/a ,然后判断一个单词后面是否是空格,否则的话,单词总数++
#include<stdio.h>

int main(void){
    char sentence[1000];
    gets(sentence);
    int isBegin=0;//判断一个字母是否是单词的开头字母  0 是  1不是
    int i;
    int result=0;//单词数目除了冠词
    for(i=0;sentence[i]!='\0';i++){
        // 判断一个字母前边是否是空格
        if(sentence[i-1]==' ' || i==0){
            isBegin=0;
        }else{
            isBegin=1;
        }
        char zimu = sentence[i];
        if((isBegin==0) && ((zimu=='A')||(zimu=='a')) && ((sentence[i+1]==' ')||(sentence[i+1]=='\0'))){
            // 寻找冠词 a
        }else{
            if(sentence[i+1]==' '||(sentence[i+1]=='\0')){
                result++;
            }
        }
    }
    printf("%d\n",result);
    return 0;
}

在这里插入图片描述

8、两个乒乓球队,甲队有a,b,c三名队员,乙队有d,e,f三名队员,甲队a不愿意跟d比赛,c不愿意跟d,f比赛,求合适的名单。

  • 这一题不太会,看看题解
#include<stdio.h>

void getSchedule(char fristTeam[],char secondTeam[]){
    int i,j;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            if(fristTeam[i]=='a' && secondTeam[j]=='d'){
                continue;
            }else if(fristTeam[i]=='c' && secondTeam[j]=='d'){
                continue;
            }else if(fristTeam[i]=='c' && secondTeam[j]=='f'){
                continue;
            }else{
                printf("%c %c\n",fristTeam[i],secondTeam[j]);
            }
        }
    }
}

int main(void){
    char fristTeam[3]={'a','b','c'};
    char secondTeam[3]={'d','e','f'};
    getSchedule(fristTeam,secondTeam);
    return 0;
}

答案是错误的

//两个乒乓球队,甲队有a,b,c三名队员,乙队有d,e,f三名队员,甲队a不愿意跟d比赛,c不愿意跟d,f比赛,求合适的名单。
#include<stdio.h>

int main(void){
    // 第二对的排位顺序  排除所有不可能,剩下的就是可能
    char one,two,three;
    for(one='d';one<='f';one++){
        for(two='d';two<='f';two++){
            for(three='d';three<='f';three++){
                /*甲队a不愿意跟d比赛,c不愿意跟d,f比赛  d 不能 排在第一位面对a  d,f 不能排在第三位跟c比赛*/
                if(one=='d'|| three=='d' || three=='f' ||one==two || one==three || two==three){
                    continue;
                }else{
                    printf("a:%c\nb:%c\nc:%c\n",one,two,three);
                }
            }
        }
    }
    return 0;
}

a:f
b:d
c:e

9、将三个字符串由小到大排序

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

int main(void){
    char strings[3][100];

    int i,j;
    for(i=0;i<3;i++){
        scanf("%s",strings[i]);
    }

    char temp[100];
    for(i=0;i<2;i++){
        for(j=0;j<2-i;j++){
            //将三个字符串由小到大排序
            if(strcmp(strings[j],strings[j+1])>0){
                strcpy(temp,strings[j]);
                strcpy(strings[j],strings[j+1]);
                strcpy(strings[j+1],temp);
            }
        }
    }
    for(i=0;i<3;i++){
        printf("%s ",strings[i]);
    }

    return 0;
}

在这里插入图片描述

10、一篇文本中共有3行文字,每行不多于5个字符,要求分别统计出每行中的大写字母、小写字母、数字、空格、以及其他字符的个数。

  • 拜拜不想写了,明天见,对自己狠点!!!
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:32:07  更:2021-07-23 10:35:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 15:24:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码