美文网首页C语言
学习日记 | C语言经典例题⑤(实例81-100)

学习日记 | C语言经典例题⑤(实例81-100)

作者: 三金姐姐 | 来源:发表于2020-03-03 22:50 被阅读0次

©一颗斯特拉
【注】
1.标有❤️的是参考资料后做出的题目
2.标有✨的是值得多做的题目

  1. 题目来源于C语言经典例题(菜鸟教程100例)

4.《学习日记 | C语言经典例题③(实例41-60)》中题目比较偏,暂不更。


——3.3更新——

实例81:【求未知数】✨

题目:809??=800??+9?? 其中??代表的两位数, 809??为四位数,8??的结果为两位数,9??的结果为3位数。求??代表的两位数,及809*??后的结果。

01程序分析:
暂无
02Bad Solution:
暂无
03Correct Solution:

#include <stdio.h>

int main(){

    long int a,b,i;
    a = 809;
    for(i = 10; i < 100; i++){
        b = i * a;
        if (b >= 1000 && b <= 10000 && 8 * i < 100 && 9 * i >= 100){
            printf("\n%ld = 800 * %ld + 9 * %ld\n", b,i,i);
        }
    }
    return 0;
}

9708 = 800 * 12 + 9 * 12

04题目总结:
暂无

实例82:【进制数的转换】

题目:八进制转换为十进制

01程序分析:
02Bad Solution:
暂无
03Correct Solution:
【套路一】

#include<stdio.h>
#include<string.h>
int main()
{
    char num[100];
    int i,r=0;
    printf("请输入一个八进制:");
    gets(num);
    for(i=0;i<strlen(num);i++)
    {
        r=r*8+num[i]-'0';//为了得到数的十进制,需要减去0的ASCII码,用'0'表示!!!
    }
    printf("转换为十进制后为:%d",r);
}

【运行结果】

请输入一个八进制:warning: this program uses gets(), which is unsafe.
16
转换为十进制后为:14

【套路二】
可以不添加上面第二个头文件,用while循环来做。

#include<stdio.h>
int main()
{
    char num[100];
    int i=0,r=0;
    printf("请输入一个八进制:");
    gets(num);
    while(num[i]!='\0'){
        r=r*8+num[i]-'0';//为了得到数的十进制,需要减去0的ASCII码,用'0'表示!!!
        i++;
    }
    printf("转换为十进制后为:%d",r);
}

04题目总结:
1.整形常量就是整常数。在C语言中,使用的整常熟有八进制、十六进制和十进制三种。
1)十进制整常数:十进制整常数没有前缀。其数码为0~9。(023不是合法的十进制整常数)
2)八进制整常数:八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7.八进制数通常是无符号数。(-0127不是合法的八进制数)
八进制数其实是由二进制数每三位一组再转化为十进制数组成。
3)十六进制整常数:十六进制整常数的前缀为0X或0x。其数码取值为09,AF或a~f。(0x3H不是合法的十六进制数)
如果使用的数超过了各进制数的范围,就必须用长整型数来表示。
2.八进制与十进制的转换

  • 八进制转化为十进制可以按照十进制的算法来计算。
  • 十进制转化为八进制的话可以先转化为二进制,再由二进制转化为八进制,同样也有直接由十进制转化为八进制的方法。

3.每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。
C语言允许把字符变量按整型量输出,也允许把整形量按字符量输出。
C语言允许字符变量参与数值计算,即用字符的ASCII码参与运算。

实例83:【奇数】❤️✨

题目:求0—7所能组成的奇数个数。(这个数最多八位)

01程序分析:
0-7最少可组成一数的奇数,最多可组成八位数的奇数。这个问题其实是一个排列组合的问题。编写程序时,首先要找到规律。从该数为一位数到该数为8位数开始统计奇数的个数:
① 当该数为一位数时,奇数个数为=4
②当该数为二位数时,奇数个数为=47
③ 当该数为三位数时,奇数个数为=4
8*7
……
⑧ 当该数为八位数时,奇数个数为=4*8^{6}*7
找到规律后,我们再编写程序。
02Bad Solution:
暂无
03Correct Solution:

#include <stdio.h>

int main(){
    long int  s=4,sum=4;
    int i;
    for(i=2;i<=8;i++)
    {
        printf("%d位数为奇数的个数%ld\n", i-1, s);
        if(i==2)
            s=s*7;
        else if(i>2)
            s=s*8;
        sum=sum+s;
    }
    printf("%d位数为奇数的个数%ld\n", i-1, s);
    printf("奇数的总个数为:%ld\n", sum);
    return 0;
}

【运行结果】

1位数为奇数的个数4
2位数为奇数的个数28
3位数为奇数的个数224
4位数为奇数的个数1792
5位数为奇数的个数14336
6位数为奇数的个数114688
7位数为奇数的个数917504
8位数为奇数的个数7340032
奇数的总个数为:8388608

04题目总结:
暂无

实例84:【分解偶数】❤️✨

题目:一个偶数总能表示为两个素数之和。

01程序分析:
暂无
02Bad Solution:
暂无
03Correct Solution:

#include<stdio.h>
#include<math.h>
int isprime(int n);
int main()
{
    int even,i;
    do{
        printf("请输入一个偶数(>2):");
        scanf("%d",&even);
    }while(even%2!=0||even==2);
    //其中一个素数可以用做差的方法表示,变量越少越好。
    for(i=2;i<even;i++) {
        if(isprime(i)&&isprime(even-i))
            break;
    }
    //一定能分解吗?这样的分解是唯一的吗?
    printf("%d = %d + %d",even,i,even-i);
    return 0;
}

int isprime(int n){
    int i;
    for(i=2;i<sqrt(n)+1;i++)
        if(n%i==0)return 0;
    return 1;
}

请输入一个偶数(>2):8
8 = 3 + 5

04题目总结:
暂无

实例85:【素数+整除】

题目:判断一个素数能整除几个9组成的数。

01程序分析:
暂无
02Bad Solution:

include<stdio.h>
int main()
{
    int i,num,sum=9;
    printf("请输入一个素数:");
    scanf("%d",&num);
    for(i=1;;i++){
        if(sum%num==0){break;}
        sum=sum*10+9;
    }
    printf("%d 能被 %d 个9组成的 %d 整除",num,i,sum);
}

【运行结果】

请输入一个素数:13
13 能被 6 个9组成的 999999 整除

【缺陷】
这里变量sum较大,改为长整型,类型符号说明符为long int或者long。在内存中占4个字节。
03Correct Solution:

#include<stdio.h>
int main()
{
    int i,num;
    long int sum=9;
    printf("请输入一个素数:");
    scanf("%d",&num);
    for(i=1;;i++){
        if(sum%num==0){break;}
        sum=sum*10+9;
    }
    printf("%d 能被 %d 个 9 组成的 %ld 整除",num,i,sum);
}

04题目总结:
暂无

实例88:【循环】

题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的 *。

01程序分析:
固定了长度,用数组来做。输入后就操作。
02Bad Solution:

#include<stdio.h>
int main()
{
    int i,j,a[7];
    printf("请输入7个数(1-50):\n");
    for(i=0;i<7;i++){
        scanf("%d",&a[i]);
        for(j=0;j<a[i];j++)
            printf("*");
        printf("\n");
    }
    return 0;
}

【运行结果】

结果02

【缺陷】
考虑复杂了,这里用数组意义不大。题目比较简单,出现了输入的限制,最好写上例外。
03Correct Solution:

#include<stdio.h>
int main()
{
    int i,j,a;
    printf("请输入7个数(1-50):\n");
    for(i=0;i<7;i++){
        scanf("%d",&a);
        if(a>50){
            printf("不符合要求,请重新输入!");
        }
        else {
            for (j = 0; j < a; j++)
                printf("*");
        }
        printf("\n");
    }
    return 0;
}

04题目总结:
暂无

实例89:【加密-数字变换】

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

01程序分析:
02Bad Solution:
暂无
03Correct Solution:

#include<stdio.h>
int main()
{
    int i,j,a[4],num,temp;
    printf("请输入一个四位数:");
    scanf("%d",&num);
    //先提取每一位上的数放进一个数组里
    a[0]=num/1000;
    a[1]=num%1000/100;
    a[2]=num%100/10;
    a[3]=num%10;
    //每位数做变换
    for(i=0;i<4;i++){
        a[i]=(a[i]+5)%10;
    }
    //交换1、4位和2、3位
    for(i=0;i<3/2;i++) {
        temp = a[i];
        a[i] = a[3 - i];
        a[3 - i] = temp;
    }
    //打印结果
    printf("加密后的为:");
    for(i=0;i<4;i++)
        printf("%d",a[i]);
}

【运行结果】

请输入一个四位数:1234
加密后的为:9786

04题目总结:

实例96:【zi'chuan】

题目:计算字符串中子串出现的次数 。

01程序分析:
02Bad Solution:
暂无
03Correct Solution:
【运行结果】


实例1:【C语言交换行】

题目:给定一个 5*5 的矩阵(数学上,一个 r×c 的矩阵是一个由 r 行 c 列元素排列成的矩形阵列),将第 n 行和第 m 行交换,输出交换后的结果。
输入共 6 行,前 5 行为矩阵的每一行元素, 元素与元素之间以一个空格分开。
第 6 行包含两个整数 m、n,以一个空格分开。(1 <= m,n <= 5)输出输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。样例输入:


屏幕快照 2020-03-03 下午9.43.01.png

01程序分析:
暂无
02Bad Solution:
暂无
03Correct Solution:

#include<stdio.h>
int main()
{
    int i,j,a[5][5],m,n,temp;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            scanf("%d",&a[i][j]);
    scanf("%d",&m);
    scanf("%d",&n);
    for(i=0;i<5;i++){
        temp=a[m-1][i];
        a[m-1][i]=a[n-1][i];
        a[n-1][i]=temp;
    }
    for(i=0;i<5;i++) {
        for (j = 0; j < 5; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    return 0;
}

【运行结果】

结果03

04题目总结:
暂无

相关文章

网友评论

    本文标题:学习日记 | C语言经典例题⑤(实例81-100)

    本文链接:https://www.haomeiwen.com/subject/bnzrkhtx.html