C语言-顺序结构

文章目录

    • 1.变量
    • 2.变量(标识符)命名规则
    • 3.数据类型
    • 4.定义变量
    • 5.变量初始化(变量赋初值)
    • 6.内存溢出错误--注意各种数据的取值范围
    • 7.数制转换
    • 8.指数化表示浮点型数据
    • 9.字符常量
    • 10.转义字符
    • 11.字符变量
    • 12.大小写字母转换
    • 13.字符串常量
    • 14.混合运算
    • 15.算数运算符
    • 16.复合的赋值运算符
    • 17.赋值表达式
    • 18.应用
    • 19.逗号表达式
    • 20.putchar函数
    • 21.getchar函数
    • 22.printf函数
    • 23.scanf
    • 24.顺序结构编写程序的万能公式
    • 25.求解逆序数

1.变量

  • 其值打死也不改变的量
#define PRICE 20
#include 
void main()
{
int a,b,sum;
a=10;
b=20;
sum=(a+b)*PRICE;
printf("%d\n",sum);
}

2.变量(标识符)命名规则

* 只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或者下划线。
* 标识符分为用户标识符和系统关键字(系统占用了,用户不能用)
用户标识符 T/F
max T
3dmax F
jonh.c F
if F
IF T
printf F
以下属于合法的用户标识符的是						C

A 3d	B _/n	C Printf	D struct

3.数据类型

数据类型 含义 eg:
int 基本整型 256,655
float 单精度型(6位有效数字) 3.14,2.66
double float 双精度型 /
char 字符型 ‘a’,“China”

4.定义变量

  • 数据类型(类型说明符) 变量名1,变量名2,…变量名n;
float a;

int b,c,d;

5.变量初始化(变量赋初值)

  • 先定义变量,再初始化(赋初值)
int a,b;
  a=12;
  b=25;
  • 定义的同时初始化
 int a=12,b=24;
  • C语言打死也不许连着赋值!!!!!
定义如下语句:int a,b,c=5;则以下说法正确的是					C
A.a,b,c的值都为5
B.a,b木有值,c的值为5
C.a,b有值,c的值为5
D.以上都不对
定义如下语句:int a=b=c=5;则以下说法正确的是					D
A.a,b,c的值都为5
B.a,b木有值,c的值为5
C.a,b有值,c的值为5
D.以上都不对
  • 如何让a,b,c的值全部为5
int a,b,c;
    a=5;
    b=5;
    c=5;
 int a=5,b=5,c=5;

6.内存溢出错误–注意各种数据的取值范围

#include 
void main()
{
	int a=10000000000,b;
        b=a+1;
	printf("%d\n",b);
}

10000000001????
#include 					D
void main()
{
    float a=3.14,b;
    b=a+1;
    printf("%f\n",b);
}
A.4.14   B.4.140   C.3.14   D.4.140000

7.数制转换

  1. 2,8,16–>10

  2. 10–>2,8,16

    • 整数
    • 小数
  3. 2<–>8<–>16 借助10进制

  4. 计算机里的数制:2,8,10,16进制

  5. C语言中的数制:8,10,16进制--------C语言里没有2进制!!!

计算机里面的数制:
1. 2进制:0,1—Binary notation,(10101)2/B          
2. 8进制:0,1,,7---Octal notation,(125)8/O/Q
3. 10进制:0,,9---Decimal notation, (521)10/D
4.16进制:0,,9,A,,F---Hexadecimal notation, (5FA)16/H
数制转换:
1.	2,8,16-->10:对应位上的数乘以2816的幂次方求和
2.	10-->2,8,16  
1).10进制整数-->2,8,16:28,16取余,方向:由下往上
2).10进制小数-->2,8,16:2,8,16取整,方向:由上往下 
3.	2 <--> 8 <--> 16
…………………………
210=1024        215=32768      216=65536

8.指数化表示浮点型数据

  • 字母e(或E)之前必须有数字,且e后面的指数必须为整数(正整数和负整数)
数据 含义
1e3 1*10的3次方
1.8e-3 1.8*10的负3次方
-.1e3 F
e5 0.1*10的3次方
3e1.5 F
 以下哪一项是C语言中正确的表示形式(C D)
A. 0128    B. 1e1.2     C. 0101(表示八进制101)    D. 1F316进制数)

9.字符常量

  • 由单引号引起来的单个字符、字母、数字
字符常量 T/F
‘2’,‘h’,’*’ T
‘aa’ F
‘\n’ T
‘\’ T
‘\x56’ T
‘\123’ T

10.转义字符

  • 有些以‘\’开头的特殊字符
转义字符 含义
\n 换行
\ \
\t 横向跳格
\ddd ddd表示1-3位的八进制数-----单个字符 特殊:0开头,表示八进制数
\xhh hh表示1-2位的16进制数------单个字符
#include 
void main()
{
	int a,b,sum;
	a=12;
	b=24;
	sum=a+b;
	printf("%d\\\n",sum);
}

36\
press any key to continue

11.字符变量

  • 只能存放单个字符常量

    • 定义:char 字符变量名1,…,字符变量名n;
    char ch;
    char ch1,ch2,ch3;
    
  • 初始化

    • 先定义变量,再初始化(赋初值)
    char a,b;
    a='s';
    b='T';
    
    • 定义的同时初始化
     char a='D',b='m';
    
    定义语句如下
    char s1,s2,s3;
    关于初始化正确的是				D
    A s1='//'   B s2='abcd'   C s3='\t\\'   D 都不对
    注意斜杠的方向!!!
       \\   \
    

12.大小写字母转换

回顾: a---97
      A---65
      a=A+32
程序:
     #include 
     void main()
     {
       char ch1,ch2;
       ch1='a';
       ch2=ch1-32;
       printf("%c\n",ch2);
     }
思考:
     #include 
     void main()
     {
       char ch1,ch2;
       ch1=97;
       ch2=ch1-32;
       printf("%c\n",ch2);
     }
   能否得到大写字母 A  呢????
思考:
     #include 
     void main()
     {
       char ch1,ch2;
       ch1='M';
       ch2=ch1+'a'-'A';  /*等价于ch2=ch1+32*/
       printf("%c\n",ch2);
     }

13.字符串常量

  • 由双引号引起来的字符序列
 "How are you?"
 "China"
 'a'----字符常量----单个字符----1个字节
 "a"----字符串常量----2个字节
 char s1;
     s1='a'; -----------OK
     s1="a"; -----------不OK
  • C规定:在每一个字符串常量的末尾加一个“字符串结束标志”,以便于系统根据此标志判断字符串是否结束。
  • '\0’就是“字符串结束标志”(系统默认加上的)
  • 单个字符、字符串在内存中占几个字符位置??
 "China"-----------6个字符    '\0'
 "China\n"---------7个字符(转义字符)
 "China\\32"-------9)个字符
 "China\0hh"-------6)个字符
 "Ch\0ABC\0DE"-----(3)个字符
注意:如果字符串出现多个'\0',则遇到第一个就结束了!!!!!

14.混合运算

'H'-'t'+3.14*5
  1. 注意优先级别

  2. "="在C语言中称为赋值运算符

    int a=3;
    "=="在C语言中才是恒等!!!!
    
     a=12;/*表示将12赋值给变量a*/
    
  3. 如果出现混合运算,则要以"="左边的类型为准,强制性将右边的的类型转换为左边的类型

  int a;
  char ch1,cha2;
  float b;
  ch1='H';
  ch2='d';
  b=3.14;
  a=ch1+ch2-b;
  1. 强制类型转换打死也不遵循四舍五入!!!!!
  int a;
  float b,c;
  b=3.56;
  c=2.13;
  a=b+c;
  printf("%d\n",a);/*conversion from 'float' to'int', possible loss of data*/

  A.5     B.6     C.5.69     D.5.690000
  1. 如何进行强制类型转换:

    • (要转换的类型说明符)变量名;

    • (要转换的类型说明符)表达式;

      表达式:有运算符连接起来的式子

float a=3.798651,b=6.856342;
int c;
c=(int)a;  ------------3
c=(int)b;  ------------6
c=(int)(a+b);-----------10
c=(int)a+(int)b;--------9

15.算数运算符

+  -  *  /  %  ++  --
  1. /:除法运算,取整运算符(n
31/2==15   1/2==0    2/7==0    9/2==4
  1. %:模运算符–求余运算符(%运算符两边的运算数必须为整数类型)
31%2==1    5%3==2
3.14%2----不OK
(int)3.14%2----OK
注意:
      1/2==0         除法运算      
      1.0/2==0.5     混合运算   
  1. 自增、自减运算符:++ –

    • 自增自减运算符只能用于变量,不能用于常量和表达式!!!!
      i++;-----OK
      --j;-----OK
      5++;-----不OK
      (i+j)++;-------不OK
    
    • i++(i–):先使用i的值,然后再给i加1(下一次再使用i的值加1)
     int i,j;
     i=3;
     j=i++;
     printf("%d,%d\n",i,j);
    				 4,3                
      ++i(--i):先给i加1,再使用i的值
    
      int i,j;
      i=3;
      j=++i;
      printf("%d,%d\n",i,j);
      				  4,4                
    
     int i,j,m;
     i=3;
     j=5;
     m=i+++++j;
     printf("%d,%d,%d\n",i,j,m);  
     					4,6,9               
    
    • 报错,有歧义!!!!
    int i,j,m;
    i=3;
    j=5;
    m=i+++j;/*m=(i++)+j   m=i+(++j)*/
    printf("%d,%d,%d\n",i,j,m);  
    
  2. 自增自减运算结合方向:比较奇葩—自右至左!前一个会影响下一个的值!!

 int i=5;
 printf("%d,%d,%d,%d\n",++i,i++,i--,--i);
                          5   3   4   4                           
 A.6,6,7,5    B.5,3,4,4    C.6,6,4,5    D.5,3,6,5

16.复合的赋值运算符

  • 在赋值运算符"="之前加上其他运算符,构成了复合的运算符

  • 复合表达式:复合运算符连接起来的式子

  • 复合语句:复合表达式;

     a+=5;     等价于:a=a+5;
     i-=8;     等价于:i=i-8;
     j/=t-6;   等价于:j=j/t-6 ; ----不OK
     j=j/(t-6);----OK
    

17.赋值表达式

  • 由"="连接起来式子
 a=5
  • 赋值语句:赋值表达式后面加一个分号
 int a,b;
 a=(b=5);
 printf("%d,%d\n",a,b);
 5 5

int a,b,c;
a=(b=5)=(c=5);----不OK

18.应用

int a=12,则a+=a-=a*a的值是()
解析:a+=a-=a*a
第一步:a+=A
第二步:a=a+A
第三步:a=a+(a-=a*a)
第四步:a=a+(a=a-a*a)
         =12+(12-12*12)
         =12-132
         =-120------不OK
第四步:a=a+(a=a-a*a)
         =a+(a=12-12*12)-----a是变量  a=-132
         =-132-132
         =-264------OK

A.-120    B.-264   C.0    D.138

19.逗号表达式

  • 表达式1,表达式2,…,表达式n

  • 结合方向:自左至右

  • 整个逗号表达式的值是最右边那个表达式的值

    3+5,6-9,3+10,6-2  -----------4
    
  • 逗号表达式的优先级别—贼低!!!最低!!!

  • 思考—逗号表达式中间有没有变量!!!

    int i,j,n,m;
    i=5;
    j=6;
    m=(3+5,i++,j++,n=++i,i+j);
    856,714
    printf("%d\n",m);
    

20.putchar函数

  • 一次输出一个字符

  • 语法:putchar(变量名或者单个字符常量);

  • 注意:如果是字符常量,一定要用单引号引起来

  • 一次只能输出一个字符!!!

    #include 
    void main()
    {
      char ch1,ch2;
      ch1='H';
      ch2='m';
      putchar(ch1);
      putchar('\n');
      putchar(ch2);
      putchar('\n');
    }
    

21.getchar函数

  • 一次输入单个字符

  • 语法: 变量名= getchar();

  • 注意:getchar后面的括号里面啥东东都不要写!!!

  • 一次只能输入一个字符!!!

#include 
void main()
{
  char ch1,ch2;
  ch1=getchar();
  ch2=getchar();
  putchar(ch1);
  putchar('\n');
  putchar(ch2);
  putchar('\n');
}

22.printf函数

  • 语法:printf(“格式控制”,输出列表);
  • printf("%d,%c,%f,%o,%x,%s",输出列表);
符号 含义
%d 以十进制整型输出整数
%o 以八进制形式输出整数
%x 以十六进制形式输出整数
%c 以字符形式输出单个字符
%f 以小数形式输出单、双精度小数,隐含输出6位小数
%s 输出字符串
  1. 格式控制都是小写字母

  2. 格式控制与后面的输出列表变量一一对应

  3. printf("%md",a)

    • m是整数
    • m是指输出的结果占几列宽度
    • m是正整数的话,输出结果差几列左补几个空格
    • m是负整数的话,输出结果差几列右补几个空格
    • 如果m的绝对值小于原来数的宽度,则原样输出
  4. printf("%m.nf",a);

    • m是指输出的结果占几列宽度,n是指小数点后保留几位有效数字

    • m是正整数的话,输出结果差几列左补几个空格;

    • m是负整数的话,输出结果差几列右补几个空格;

    • printf("%2.5f",a);

      m

    • m 宽度控制–输出占几列宽度,n 精度控制–小数点后保留几位有效数字
    • 遵循四舍五入
    • printf("%.nf",a); 直接不管输出几列宽度,只需要考虑精度n
    #include 
    void main()
    {
     int a=5,b=6;
     float c=3.14;
     printf("%d,%d,%f\n",a,b,c);
    }
    
  5. printf("%m.ns",“China”);

    • m是指输出的结果占几列宽度
    • m是正整数的话,输出结果差几列左补几个空格
    • m是负整数的话,输出结果差几列右补几个空格
    • n指的是从字符串左边起数n个字符输出
    • 如果m的绝对值小于原来数的宽度,则原样输出
    • m
    • printf("%.ns",“China”); 直接从字符串左端数n个字符输出即可
    • 如果n大于字符串原本宽度,则字符串原样输出
    • printf("%ms",“China”);
      • m是指输出的结果占几列宽度
      • m大于原来字符串的宽度
      • m是正整数的话,输出结果差几列左补几个空格
      • m是负整数的话,输出结果差几列右补几个空格
      • m小于原来字符串宽度:-----原样输出!!!
  6. printf("%mc",a)

    • m是指输出的结果占几列宽度
    • m大于原来字符的宽度
    • m是正整数的话,输出结果差几列左补几个空格
    • m是负整数的话,输出结果差几列右补几个空格
  7. C语言中木有二进制

  数制转换
     int a=8,b=010;
     printf("%o,%d\n",a,b);
  1. 注意格式控制中有木有分隔符(逗号、空格、下划线、转义字符、木有)
    因为输出的结果与格式控制中的分隔符一一对应!!!!
int a=12,b=20,c=30,d=50;
printf("%d%d%d%d\n",a,b,c,d);
A.12203050    B.12 20 30 50     C.12,20,30,50     D.12_20_30_50
  1. printf(“你是大人才!\n不许瞌睡!!\n”);

printf输出的内容:除了转义字符和格式控制之外的任何东东–普通字符
原样输出!!!!

23.scanf

  • 标准的输入函数
  1. 一次性输入多个不同类型的变量值
  2. scanf(“格式控制”,输入列表);
    scanf("%d,%f,%c",&a,&b,&c);
  3. & 称为取地址运算符
  4. scanf中格式控制木有宽度、精度控制!!!!!
  5. 注意格式控制里面的分隔符,因为输入的时候要与之对应!!!!
#include 
void main()
{
   int a,b,c;
   scanf("%d,%d,%d",&a,&b,&c);
   printf("%d %d %d\n",a,b,c);

}
  1. 如果格式控制中间木有分隔符,输入数据的时候用:enter、空格、tab可以隔开,但是逗号、分号不能乱用!
  2. 格式控制不建议用转义字符
  3. 使用scanf按照%s格式输入字符串的时候,可以不加取地址运算符&,加上也没错
char ch1[5];
scanf("%s",ch1);
printf("%s\n",ch1);

24.顺序结构编写程序的万能公式

  1. 考虑定以几个变量
  2. 变量定义成啥类型:int float char
  3. 变量初始化----scanf
  4. 摆公式
  5. 输出—printf
已知矩形的两条边,编写程序求矩形的面积。s=a*b
#include 
void main()
{
  float a,b;
  double s;
  a=3.121345;
  b=5.217676;
  s=a*b;
  printf("%f\n",s);
}
#include 
void main()
{
  float a,b;
  double s;
  scanf("%f,%f",&a,&b);
  s=a*b;
  printf("%f\n",s);
}
#include 
void main()
{
  float a,b;
  double s;
  printf("请输入矩形的两条边:\n");
  scanf("%f,%f",&a,&b);
  s=a*b;
  printf("%f\n",s);
}
#include 
void main()
{
  float a,b;
  double s;
  printf("请输入矩形的两条边:\n");
  scanf("%f,%f",&a,&b);
  s=a*b;
  printf("%5.2f\n",s);
}
//已知任意三角形的三条边,编写程序求三角形的面积。
/*
海伦公式:
a,b,c
s=1.0/2*(a+b+c)
area=根号下(s*(s-a)*(s-b)*(s-c))
area=sqrt(s*(s-a)*(s-b)*(s-c))
sqrt--- 求平方根函数
*/    
#include 
#include 
void main()
{
  float a,b,c;
  double s,area;
  printf("请输入三角形的三条边:\n");
  scanf("%f,%f,%f",&a,&b,&c);
  s=1.0/2*(a+b+c);
  area=sqrt(s*(s-a)*(s-b)*(s-c));
  printf("%5.2f\n",area);
}
//已知一元二次方程的三个系数,求一元二次方程根!!!
/*
a*x*x+b*x+c=0
x1=(-b+根号下(b的平方-4ac))/2a
x2=(-b-根号下(b的平方-4ac))/2a
*/
#include 
#include 
void main()
{
  float a,b,c;
  double x1,x2;

  printf("请一元二次方程的三个系数:\n");
  scanf("%f,%f,%f",&a,&b,&c);

  x1=(-b+sqrt(b*b-4*a*c))/(2*a);
  x2=(-b-sqrt(b*b-4*a*c))/(2*a);
 
  printf("%5.2f,%5.2f\n",x1,x2);
}
/*
d=b*b-4*a*c
d>0 两个不等实根
d=0 两个相等实根
d<0 一对共轭虚根  x1=a+bi    x2=a-bi
*/

25.求解逆序数

逆序数教程

//已知任意一个三位正整数,求它的反相数。
//思考:四位?五位?。。。n位?
/*
345--->543      875--->578
分析:
      第一步:
           875=8*100+7*10+5
           578=5*100+7*10+8
      第二步:/ 取整  % 求余
           8=875/100
           7=(875-8*100)/10
           5=875%10
      第三步:反相数=5*100+7*10+8
*/
#include 
void main()
{
    int m,b,s,g,n;/*m原三位正整数,b百位数,s十位数,g个位数,n是m的反相数*/

    printf("请输入任意一个三位正整数:\n");
    scanf("%d",&m);

    b=m/100;/*分解百位数*/
    s=(m-b*100)/10;/*分解十位数*/
    g=m%10;/*分解个位数*/

    n=g*100+s*10+b;

    printf("%d的反相数是%d\n",m,n);
}
//求解10位数以内
#include 
int main()
{
    int i=0,m=0,n=0,x=0;
    scanf("%d",&x);
    do{
        m=x%10;//得到个位数 
        n=x/10;//去掉个位后剩下的数 
        x=n;
        i=i*10+m;
	   }while(x!=0);
    printf("%d",i);
    return 0;
}
//输入球的半径r,计算并输出球的体积。
//v=4*PI*r*r*r/3

#include 
#define PI 3.14  /*定义PI,它的值一生一世都是3.14*/
void main()
{
   float r;
   double v;
   
   printf("请输入球体的半径:\n");
   scanf("%f",&r);

   v=4*PI*r*r*r/3;

   printf("%5.2f\n",v);
}

你可能感兴趣的:(C语言学习,字符串,printf,c语言)