C语言简介(2)

前言

对上一步部分的补充


提示:以下是本篇文章正文内容,下面的代码可供参考

一、 常量

什么是常量:程序运行期间数值不能变化的叫常量
        100 默认int 
        100u unsigned int
        100lu unsigned long
        100llu unsigned long long
        100l   long
        100ll  long long 

        3.14 默认double
        3.14f float
        3.14l long double

        问题:100年有多少秒,忽略润平年问题?
        #define sec (3600*24*365*100u)

二、格式化输入输出

 %nd 显示n个字符宽度,不够则补空格,右对齐
        %-nd  显示n个字符宽度,不够则补空格,左对齐
        %0nd  显示n个字符宽度,不够则补0,右对齐
        %n.mf 显示n个字符宽度(小数点也算一位),不够则补空格,m是小数点后的位数(四舍五入)
        %g    不显示小数点后多余的0

三、运算符

自变运算符:++/-- 使变量的值自动的加一或者减一
            前自变:++num --num 立即有效
            后自变:num++ num-- 下一行语句生效
            注意:不要在同一行内多次使用自变运算符
        算术运算符:+ - * / %
            整数/整数 结果没有小数点(不四舍五入)
            /% 除数不能为0 浮点数例外(核心已转储)
        关系运算符 > < >= <= == !=
            比较的结果必须是0或者1,比较的结果还能继续参与运算
            int num=-5;
            if(1<num<10)
            永远为真,运算规则与数学不一样
        逻辑运算符 && || !
            会先把运算对象转换成逻辑值,0转换为假,非0转换为真
            A && B 一假即假
            A || B 一真即真
            !A     求反
            && || 具有短路特性:当左边的运算对象已经能够确定整个表达式的结果时,右边的所有运算对象不再计算。
        三目运算符 运算对象有三个部分
            A?B:C
            判读A的值是否为真,如果为真执行B,负责执行C
            改语句不能使用流程控制语句,因为它必须要有运算结果
        赋值运算符 = += -=
            a+=b;
            a-=b
            a*=b 
            a/=b 
            a%=b ...
        位运算符 & | ~ >> << 

        sizeof 也是运算符,但是sizeof括号内的表达式不会计算
      类型转换
            自动类型转换:
                只有相同类型的数据才能运算,不同的类型的数据必须转换成相同的类型才能进行计算
                转换规则:以不丢失数据为基础,适当地牺牲一些空间
                   1、字节少的向字节多的转
                   2、有符号的向无符号的转
                   3、整型向浮点型转

            强制类型转换:
                 (新类型)数据
                 有丢失数据的风险,要谨慎使用

四、分支语句

分支语句
            if(表达式)//单分支
            {
                 表达式为真时,执行此代码
            }

            if(表达式)//双分支
            {
                 表达式为真时,执行此代码
            }
            else
            {
                 表达式为假时,执行此代码
            }

            if(表达式1)//多分支
            {
                 表达式1为真时,执行此代码
            }
            else if(表达式2)
            {
                 表达式2为真时,执行此代码
            }
            else if(表达式3)
            {
                 表达式1为真时,执行此代码
            }
            else
            {
                 表达式都为假时,执行此代码
            }

练习1:输入三个数,排序从大到小;

#include <stdio.h>

int main(int argc,const char* argv[])
{
  int a,b,c;
  int temp;
  printf("请输入三个数值,空格隔开\n");
  scanf("%d %d %d",&a,&b,&c);
  if(a<b)
  {   
      temp=a;
      a=b;
      b=temp;
  }   
  if(a<c)
  {   
  
      temp=a;
      a=c;
      c=temp;
  }   
  if(b<c)
  {   
      temp=b;
      b=c;
      c=temp;
  }
  printf("排序从大到小为:%d %d %d",a,b,c);
}
           

练习2:输入一个年份,判断是否为闰年;

1 #include <stdio.h>
2 
3 int main(int argc,const char* argv[])
4 {
5     printf("输入一个年份:\n");
6     int a;
7     scanf("%d",&a);
8     if((a%4==0&&a%100!=0)||a%400==0)
9         printf("此年份是闰年");
10     else
11         printf("此年份不是闰年");
12 }

           

练习3:输入一个年份和一个月份,判断该月有多少天

1 #include <stdio.h>
2 
3 int main(int argc,const char* argv[])
4 {
5     printf("请输入一个年份和月份,空格隔开:\n");
6     int  a,b;
7     scanf("%d %d",&a,&b);
8     int time=((a%4==0&&a%100!=0)||a%400==0);
9     if(b>12 ||b<1)
10     {
11         printf("输入月份无效");
12     }
13     else if(b==2)
14     {
15         printf("%d年%d月有%d天",a,b,28+time);
16     }
17     else if(b==2||b==4||b==6||b==9||b==11)
18     {
19         printf("%d年%d月有30天",a,b);
20     }
21     else
22         printf("%d年%d月有31天",a,b);
23 }
         

练习4:输入一个三位数,判断是否为水仙花数;

1 #include <stdio.h>
2 
3 int main(int argc,const char* argv[])
4 {
5     printf("请输入一个三位数:\n");
6     int a;
7     int b,s,g;
8     scanf("%d",&a);
9     b=a/100;
10     s=(a%100)/10;
11     g=(a%10);
12     if(a==(b*b*b+s*s*s+g*g*g))
13         printf("该数字是水仙花数");
14     else
15         printf("该数字不是水仙花数");
16 
17 }

练习5:输入一个成绩,为其划分等级。

1 #include <stdio.h>
2 
3 int main(int argc,const char* argv[])
4 {
5     printf("请输入一个成绩:\n");
6     int a;
7     scanf("%d",&a);
8     if(a>=90&&a<=100)
9         printf("此成绩为A");
10     else if(a>=80&&a<90)
11         printf("此成绩为B");
12     else if(a>=70&&a<80)
13         printf("此成绩为C");
14     else if(a>=60&&a<70)
15         printf("此成绩为D");
16     else if(a>=0&&a<60)
17         printf("此成绩为E");
18     else
19         printf("输入的成绩不符合要求");
20 }

五、开关语句

switch(n)//n可以是数值、表达式,运算结果必须是整数
            {
                 case val://val 必须是常量,如果val=n则打开执行开关
                 break;//关闭执行开关
                 case val:
                 break;
                 default://如果所有的case都没有匹配成功,则打开执行开关,并且放在任何位置都会最后执行
                 break;
            }
            注意:如果每个case后都有break,就形成了分支结构
            switch 不能与continue配合使用
            case n ... m:表示一个范围n~m,只有在gnu编译器下有用,最好别用。

六、循环语句

for循环语句:
               for循环是一种比较灵活且比较危险(与其他循环相比)的一种循环
               一般用一个变量来引导for循环的运行,这个变量叫做循环变量
               for([1];[2];[3])
               {
                    [4];
               }
               1、给循环变量赋初值,C99标准才可以在此处定义循环变量
               2、判断循环条件,一般是判断循环变量是否到达边界
               4、条件2为真,则执行此处代码,也叫循环体
               3、改变循环变量,防止出现死循环,一般对循环变量自加或者自减

               for循环的多种写法:
               for(;;)
               {
                    //死循环
               }
               int i=0;
               for(;i<10;i++)
               {

               }
               for (int i = 0; i < count;)
               {
                    ...
                    i++;
               }
               while 循环
               while (条件)//为真时执行循环体,为假时结束循环。
               {
                    //循环体
               }
               while循环相当于for循环的精简版本
               for循环负责解决明确知道循环次数的问题
               while负责解决只知道循环条件,而不确定循环次数的问题
               
               do while 
               do
               {
                    //循环体
               } while (/条件/);//先执行循环体,再判断循环条件,该循环至少执行一次
               适合先干活,在检查的特殊情况,例如:输入判断密码

               问题:for、while、do-while 有什么区别
               循环嵌套:
               循环语句中包含循环语句
               外层循环执行一次,内层循环执行n次

作业1:计算出所有的水仙花数

  1 #include <stdio.h>
  2 
  3 int main(int argc,const char* argv[])
  4 {
  5     for(int i=100;i<1000;i++)
  6     {
  7         int g,s,b;
  8         b=i/100;
  9         s=i%100/10;
 10         g=i%10;
 11         if(i==b*b*b+s*s*s+g*g*g)
 12             printf("水仙花数有:%d\n",i);
 13     }
 14 }

作业2:输入一个正整数,判断是否是素数

  1 #include <stdio.h>
  2 
  3 int main(int argc,const char* argv[])
  4 {
  5     printf("输入一个正整数:");
  6     int a,b=0;
  7     scanf("%d",&a);
  8     for(int i=1;i<=a;i++)
  9     {
 10         if(a%i==0)
 11             b++;
 12     }
 13     if(b==2)
 14         printf("%d是素数",a);
 15     else
 16         printf("%d不是素数",a);
 17 }

作业3:输入一个正整数,判断是否为回文数 123321 12321

  1 #include <stdio.h>
  2 #include <math.h>
  3 int main(int argc,const char* argv[])
  4 {
  5     printf("输入一个正整数:");
  6     int a,con=0;
  7     int b=0,c=0,d=0;
  8     scanf("%d",&a);
  9     d=a;
 10     c=a;
 11     while(a)
 12     {
 13         con++;
 14         a/=10;
 15     }
 16     int i;
 17     for(i=con;i>0;i--)
 18     {
 19         if((c/(int)pow(10,i-1))==(d%10))
 20         {
 21              c%=(int)pow(10,i-1);
 22              d/=10;
 23              b++;
24          }
 25     }
 26     if(b==con)
 27     {
 28         printf("是回文数\n");
 29     }
 30     else
 31         printf("不是回文数\n");
 32 }

作业4:输入一个六位密码,输入正确的话,显示登录成功。输入错误,提示还剩几次机会,可以继续输入,最多可以输错三次,否则显示账号已锁定,并结束。

 1 #include <stdio.h>
  2 
  3 int main(int argc,const char* argv[])
  4 {
  5     printf("请输入六位密码");
  6     int a,n=4;
  7     int b=123456;
  8     do
  9     {
 10         scanf("%d",&a);
 11         if(a==b)
 12         {
 13             printf("登陆成功\n");
 14             return 0;
 15         }
 16         else
 17         {
 18             n--;
 19             if(n==0)
 20             {
 21                 printf("次数已用完,帐号已锁定\n");
 22                 return 0;
 23             }
24             printf("密码错误,请重新输入,还剩%d次机会",n);
 25         }
 26     }while(1);
 27 }

作业5:输入一个整数,分解显示 -1234 - 1 2 3 4

  1 #include <stdio.h>
  2 #include <math.h>
  3 int main(int argc,const char* argv[])
  4 {
  5     printf("输入一个整数:");
  6     int a,con=0,b;
  7     scanf("%d",&a);
  8     b=a;
  9     if(a<0)
 10     {
 11         a=-a;
 12         b=-b;
 13         printf("- ");
 14     }
 15     while(a)
 16     {
 17         con++;
 18         a/=10;
 19     }
 20     int i;
 21     for(i=con;i>0;i--)
 22     {
 23         printf("%d ",b/(int)pow(10,i-1));
 24         b%=(int)pow(10,i-1);
 25     }
 26     printf("\n");
 27 }

总结

上面的代码仅供参考,也不一定是最精简的,一些变量名命名比较随意,望大家不要模仿。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值