C语言督学营(1)

(1) 判断某个年份是不是闰年,如果是闰年,请输出 “yes” ,否则请输出 “no。
#include<stdio.h>
int main(){
    int year;
    scanf("%d",&year);
    if(year%4==0 || year%400==0 &&year%100!=0)
     {
            printf("%d","yes/n");
     }
    else
    {
           printf("%d","no/n");
    }
    return 0;

错误示范(以上代码)

#include <stdio.h>  
  
int main() {  
    int year;  
    scanf("%d", &year);  
    if ((year % 4 == 0 || year % 400 == 0) && year % 100 != 0) {  
        printf("yes\n");  
    } else {  
        printf("no\n");  
    }  
    return 0;  
}

正确示范(以上代码)

  这两种代码的输出结果之所以不同,是因为在 printf 函数中使用的格式指示符不同。

在第一种代码中,使用了 %d 作为格式指示符,它会输出一个整数。而在第二种代码中,使用了 %s 作为格式指示符,它会输出一个字符串。

  具体来说,当输入的年份满足闰年的条件时,第一种代码会输出一个整数,即 "yes" 的 ASCII 码值,而第二种代码会输出一个字符串 "yes"。同样地,当输入的年份不满足闰年的条件时,第一种代码会输出一个整数,即 "no" 的 ASCII 码值,而第二种代码会输出一个字符串 "no"。

  因此,如果你希望输出字符串 "yes" 或 "no",应该使用第二种代码中的 %s 格式指示符。

(2)读取一个整型数,字符,浮点数,分别到变量 i j k 中,然后将 i j k 直接相加并输出,
小数点后保留两位小数,不用考虑输入的浮点数的小数部分超过了两位。
  
#include<stdio.h>
int main(){
  int a;
  char b;
  float c;
  int abs;
  scanf("%d %f %c",&a ,&b,&c);
  printf("%0.2d",&abs);
  return 0;
}

这段代码中存在几个错误。以下是对代码的逐行分析:

  1. #include<stdio.h>:这一行是正确的,包含了标准输入输出库的头文件。
  2. int main(){:主函数的开始,没有问题。
  3. int a;:声明一个整数变量a。
  4. char b;:声明一个字符变量b。
  5. float c;:声明一个浮点数变量c。
  6. int abs;:声明一个整数变量abs,但是通常我们使用int abs来计算绝对值。
  7. scanf("%d %f %c",&a &b &c);:scanf函数接收输入,但这一行中存在两个错误。首先,对于%f,scanf期望的是浮点数输入,而不是整数或字符。其次,变量b和c的地址应用是错误的,应该使用&运算符。
  8. abs=a+b+c;:这行代码将a、b和c的值相加,但问题在于b是一个字符,而c是一个浮点数,所以这个加法运算可能会导致不正确的结果。
  9. printf("%0.2d",&abs);:printf函数用于输出结果,但这里存在两个错误。首先,格式字符串应该是"%0.2d",而不是"%d"。其次,应该传递变量的地址作为参数,但在这行代码中,我们传递了abs的地址。
  10. return 0;:返回0表示程序正常结束。
  11. }:主函数的结束。
    #include<stdio.h>  
    int main(){  
      int a;  
      char b;  
      float c;  
      int abs;  
      scanf("%d %f %c",&a, &c, &b); // 修改了scanf的参数顺序  
      abs = a + (int)c + b; // 对c进行了类型转换,确保加法运算正确  
      printf("%0.2d", abs); // 修改了printf的格式字符串和参数  
      return 0;  
    }

    修改后的代码如以上所示

    #include<stdio.h>
    int main(){
      int a;
      char b;
      float c;
      int are;
      scanf("%d %c %f",&a ,&b,&c);
      printf("%5.2f\n",a+b+c);
      return 0;
    }

    最终结果的代码如上所示:

    这两个代码的运行结果不一样,主要是因为它们读取输入的方式和计算的方式有所不同。

  12. scanf("%d %f %c",&a, &c, &b);:这行代码会先读取一个整数(对应变量a),然后读取一个浮点数(对应变量c),最后读取一个字符(对应变量b)。
  13. abs = a + (int)c + b;:这里首先将浮点数c强制转换为整数,然后与字符b相加,得到的结果再与整数a相加。
  14. printf("%0.2d", abs);:这行代码使用%0.2d格式化字符串输出结果,其中0.2表示保留两位小数,不足的部分会用0填充。
  15. scanf("%d %c %f",&a ,&b,&c);:这行代码的输入顺序是先读取整数a,然后读取字符b,最后读取浮点数c。
  16. printf("%5.2f\n",a+b+c);:这里直接将三个变量相加,然后使用%5.2f格式化字符串输出结果,其中5.2表示总共5位宽度,其中小数部分有2位。
  17. 由于输入顺序和计算方式的不同,两个程序得到的结果可能会有差异。比如如果第一个程序先输入整数123,字符'',浮点数12.3,那么计算结果是135.3(取整后为135),而第二个程序先输入整数123,字符'',浮点数12.3,计算结果也是135.3(取整后为135)。但如果输入的数值或字符不同,两个程序得到的结果可能会不同。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值