【C语言初阶】初入江湖遇到的问题

一、大小写的转换

题目要求:实现字母大小写,多组输入输出。

所遇到的问题:对于getchar()内的判断条件无从下手;对于ascll表掌握不全;

实现代码如下:

#include<stdio.h>

int main()

{

    int ch = 0;

    while ((ch = getchar()) != EOF)//EOF意为-1。本语句即只要输入项是字符即可打印

    {

        //因为回车也算一个字符,所以在输入第一个字符换行后,getchar会读取换行的回车键

        //换行的回车被读取,若防止回车被读取,可在其前面多读取一次消耗回车

        getchar();

        putchar(ch + 32);

        printf("\n");

    }

    return 0;



 对于大小字母转换,ascll值相差32,具体使用请参考详细的ascll表。

079de3f9a13a46ff8f690050ba16c7c9.png

 

二、缩进二进制

题目要求:我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数的表达特点。请输出十进制整数1234对应的八进制和十六进制。

输出描述:十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X

#include <stdio.h>
int main() {
    int a=1234;
    printf("0%o 0X%X",a,a);
    return 0;
}
printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示

关于进制

1.十进制: 都是以0-9这九个数字组成,不能以0开头。

2.二进制: 由0和1两个数字组成。

3.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。

4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。

进制转换博主还没有接触,这一题所用的知识点就这么多

三、进制A+B

题目要求:输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-231~231-1)。

#include <stdio.h>
int main() {
    int a,b;
    scanf("%x %o",&a,&b);
    //十六进制Hexadecimal一般以0x开头,例如0xFF。八进制Octal,一般以0开头,例如07。
    printf("%d",a+b);
    return 0;
}

这题解题思路与上题大概一致,都用了“%x” “%o”进行简单转换;

四、2的n次方的计算

题目要求:

不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d",2<<(n-1));
  //在2进制中,2的表示为00000010
  //我们只使用移位符来完成2的n次方,仅需使这个1往左移动。
  //如4:00000100;8:00001000
  //要注意为什么这里是(n-1)
  //因为2本身已经在第二位了,是2的1次方。
    return 0;
}

 对于二进制的写法博主大大没有掌握,但有另一种解题方法进行2n次方的计算

#include <stdio.h>
#include<math.h>
//#include<math.h> 是包含math头文件的意思, .h是头文件的扩展名(header file),这一句声明了本程序要用到标准库中的 math.h文件。math.h头文件中声明了常用的一些数学运算,比如乘方,开方运算等等
int main() {
    int a, b;
    scanf("%d",&a);
    b=pow(2,a);
    //乘方的应用
    printf("%d",b);
    return 0;
}

也可以这样写

#include <stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    int i,y;
    for(i=0;i<x;i++)
    {
        y=y*2;
    }
    printf("%d",y);
    return 0;
}

五、统计成绩

描述

输入n科成绩(浮点数表示),统计其中的最高分,最低分以及平均分。

数据范围:1≤�≤100 1≤n≤100  , 成绩使用百分制且不可能出现负数

输入描述:

两行,
第1行,正整数n(1≤n≤100)
第2行,n科成绩(范围0.0~100.0),用空格分隔。

输出描述:

输出一行,三个浮点数,分别表示,最高分,最低分以及平均分(小数点后保留2位),用空格分隔。

int main()
{
    int n,i=0;
    scanf("%d",&n);
    float a=0,b=0,c=100.1,d=0;
    //成绩范围为(0.0-100.0),因为后面c与a要进行比较,需给c一个较大值,也可以给其他值,只要大于100就可以;
    for (i;i<n;++i)
    {
        scanf("%f",&a);
        if(a>b)b=a;
        //a与b进行比较,如果a>b,则将a值赋给b,依次类推得出最大值;
        if(a<c)c=a;
        //与最大值同理
        d=a+d;
        
    }
    printf("%.2f %.2f %.2f",b,c,d/n);
    //"%.2f"是为了保留两位小数
    return 0;
}

以上就是小bit遇到的问题,并已得到解决。希望这篇博客能激励自己也激励和博主一样的小bit。

长风破浪会有时,直挂云帆济沧海。

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇事问春风乄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值