顺序结构程序设计

第四章 顺序结构程序设计

4.1 C语言语句概述

C语言的语句可分为三类:

  1. 注释语句

  2. 定义语句

  3. 执行语句

    • 简单语句

      • 控制语句(9类)
      • 函数调用语句
      • 表达式语句
      • 空语句
    • 复杂语句

在函数或复合语句内的定义语句必须放在执行语句前,先定义后执行

4.1.1 简单语句

  1. 表达式语句:

    • 一个表达式的尾部加一个分号";"

    • 执行表达式语句就是计算表达式的值

    • 最经典的表达式就是赋值表达式构成的赋值语句;例:i=i+1;

  2. 函数调用语句:

    • 由函数调用加上分号";"组成

    • 例如:
      printf("c program");	/*调用库函数,输出字符串*/		
      
  3. 控制语句:

    • **条件判断语句:**if语句、switch语句等
    • **循环执行语句:**do···while语句、while语句、for语句
    • **转向语句:**break语句、goto语句、continue语句、return语句
  4. 空语句:

    • 只有分号";"组成的语句称为空语句,执行时不产生任何动作

    • while(i>=1)
      ;			/*循环体为空语句*/
      

4.1.2 复合语句

把多个语句用花括号{}括起来的一个语句称为复合语句,在语法上视为一条语句,在花括号的的语句数量不限

4.2 格式化输入输出函数

4.2.1 格式输出函数printf

4.2.1.1 printf函数的一般调用形式
  1. 格式1:printf(“格式控制”);

    • **功能:**按格式控制指定的格式输出数据,将双引号内的内容原样输出,标志不会输出

    • #include <stdio.h>
      printf("a=3,b=5");
      
      输出:a=3,b=5
      
  2. 格式2:printf(“普通字符/占位符”,输出列表的值);

    • **功能:**按格式将值输出,先计算后输出

    • **普通字符:**不带%,需要原样输出的字符

    • **占位符:**带%,被后面输出列表中要输出的值替换

    • #include <stdio.h>
      main()
      {
      	int a=3223;
      	float b=3.1415;
      	printf("a=%d,b=%f,b*10=%e\n",a,b,b*10);
      }
      输出: a=3223,b=3.141500,b*10=3.141500e+001
      
4.2.1.2 printf函数中常用的格式说明

在C语言中,printf函数的格式说明的一般形式为:

%[标志][宽度指示符][精度指示符][长度修饰符]占位符
4.2.1.2.1 格式字符

格式字符 说明


​ %d或%i 以十进制形式输出带符号整数(正数不输出符号)


​ %o 以八进制形式输出无符号整数(前缀0不输出,只输出实际存储的补码)


​ %x或%X 以十六进制形式输出无符号整数(不输出前缀0x,x表示用于abcdef输出,X表示用于ABCDEF输出)


​ %u 以十进制形式输出无符号整数


​ %f 以小数形式输出单、双精度实数,不指定精度时默认输出6位小数


​ %c 输出单个字符,不输出单引号


​ %s 输出一个字符串,不输出双引号


​ %e或%E 以指数形式输出单、双精度实数,小数位隐含6位,指数部分占5位,用E时,指数以大写表示


​ %g或%G 根据数值大小,自动选用%f或%e中输出宽度较短的一种输出单、双精度实数,不输出0,用“G”表示指数以大写形式,如没有指出精度,精度默认为6


4.2.1.2.2 宽度指示符
  1. 用来指定输出数据项的最小字段宽度,用十进制整数表示
  2. 省略宽度指示符时,按系统规定位数输出
  3. 若实际位数大于指定的宽度,则按实际位数输出;若实际位数小于指定宽度,则右对齐,左边补空格
输出语句输出结果
printf("%3d",4321);4321(实际位数为4大于指定位数3)
printf("%f\n",123.54);123.540000(没有宽度指示符,按系统规定位数输出)
printf("%12f",123.54);–123.540000(-代表空格)
printf("%e\n",123.54);1.235400e+002(没有宽度指示符,按系统规定位数输出)
printf("%14e\n",123.54);-1.235400e+002(-代表空格)
printf("%8g\n",123.5)小数形式为123.500000,指数形式为1.235000e+002;宽度较短为小数形式,且%g不输出0,则为—123.5
4.2.1.2.3 精度指示符
  1. 以“."开头,后跟十进制整数,通常与宽度指示符结合使用,格式为“m.n”,m是输出数据所占的总宽度,n是输出数据的精度
  2. ”n“对于f、e、E,”n“表示输出小数的位数,当输出数据的小数位数大于”n“时,,截去右边多余的小数,并对截去的第一位小数做四舍五入,当输出数据的小数位数小于“n”时,在小数最右侧补0
  3. "n"对于g或G,表示输出有效数字位数,并对截去的第一位小数做四舍五入,整数部分不丢失
  4. “n”对于s,表示要输出字符的个数,实际位数大于定义精度时,截去超过的部分
输出语句输出结果
printf("%8.3f",123.55)-123.550
printf("%8.0f",123.55)-----124
printf("%.3e",123.56789)1.236e+002
printf("%g",123.56789)123.567(没有指出精度,默认为6位,截去最后一位四舍五入)
printf("%.7g\n",123.56789)123.5679
printf("%.5\n",“abcdefg”)abcde
输出数据的实际精度并非完全取决于格式控制串中的宽度和精度,而是取决于数据在计算机内的存储精度
4.2.1.2.4 长度修饰符

长度修饰符分为h、l两种

  1. h表示短整型输出:可加在格式符d、o、x、u前面;如%hd
  2. l表示长整型输出:如%ld;但在VC中,int和long占用的字节数相同,故输出长整型整数时也可不加l,加在f前无意义
#include <stdio.h>
main()
{
    int a=15;
    float b=123.1234567;
    double c=12345678.1234567;
    char d='p';
    printf("a=%d,%5d,%o,%x\n",a,a,a,a);
    printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
    printf("c=%lf,%f,%8.4lf\n",c,c,c);
    printf("d=%c,%8c\n",d,d);
}

输出结果:
    a=15,---15,17,f
    b=123.123459,123.123459,123.1235,1.231235e+002
    c=12345678.123457,12345678.123457,12345678.1235
   	d=p,-------p
4.2.1.2.5 标志

标志字符为:-、+、#、空格和0五种

标志意义
-输出结果左对齐,右边填空格;不加-号则输出结果右对齐,左边填空格
+输出符号(正号或负号)
#对c,s,d,u类无影响;对o类:在输出结果前加0;对x类:在输出结果前加0x
空格输出值为正时加空格,为负时加负号
0对数值格式,在指定宽度时,输出数据左边空格处填数字0,且有负号时,0要补到-号和数值中间:-0012
输出语句输出结果
printf("%-6d\n",111);111—(-代表空格)
printf("%+d\n",111);+111
printf("% d\n",111);-111(-代表空格)
printf("% d\n",-111);-111(-代表负号)
printf("%#o\n",10);012
printf("%06.2f\n",1.6);001.60
4.2.1.3 使用printf函数注意事项
  1. 格式控制字符串中格式说明之间可根据需要插入逗号、空格、转义字符等

  2. 格式控制字符串中格式说明与输出项应当个数一致

  3. 在格式控制字符串中,除了合法的格式说明外,可包含任意的合法字符,这些合法字符原样输出

  4. 如需要输出一个%号,则应在格式控制字符串中用两个连续的%表示

    printf("%d%%\n",23);
    输出:23%
    
    
  5. 在VC中,printf函数返回值是本次调用输出的字符个数!

  6. 不要在输出函数中改变输出变量的值,VC中,输出顺序是从右向左

4.2.2 格式输入函数scanf

4.2.2.1 scanf函数的一般调用形式

scanf函数的一般调用形式为:scanf(“格式控制字符串”,地址表列);

例如:scanf("%d,%d",&a,&b);"%d,%d"是格式控制字符串;"&a,&b"组成地址表列,表示两个输入项

  1. 格式控制字符串是指定输入数据的格式,与printf函数一样,包含普通字符和格式说明
  2. 各输入项只能是合法的地址表达式,即某个存储单元的地址,可以是变量的地址,或字符串的首地址
4.2.2.2 scanf函数中常用的格式说明

与printf函数类似,每个格式说明都必须用%开头,以一个格式字符作为结束,其一般形式:

%【*】【输入数据宽度】【长度修饰符】格式字符

4.2.2.2.1 格式字符

格式字符 说明


​ d或i 输入有符号的十进制整数


​ o 输入无符号的八进制整数


​ x或X 输入无符号的十六进制整数


​ u 输入无符号的十进制整数


​ f或e 输入实型数(小数形式或指数形式)


​ c 输入单个字符


​ s 输入字符串,结果存入字符数组中。输入时,以第一个非空白字符开始,第一个空白字符(按下空格键、Tab键或 Enter键)结 束,系统自动加上’\0’作为字符串结束标志


4.2.2.2.2 “*”符

表示读入该输入项后不赋予相应的变量,即跳过该输入值

scanf("%d*d%d",&a,&b);
若输入:10 20 30
则把10赋予a,20被跳过,30赋予b
4.2.2.2.3 数据宽度

在格式字符前可加入一个十进制正整数来指定输入的宽度,表示最多读入的数据位数,即读取相应的位数给相应的变量,多余的部分进行截取

scanf("%3d%5f",&a,&b);
若输入:123456.789
则把123赋给a,456.78赋给b,剩下截去
4.2.2.2.4 长度修饰符

长度格式符为h和l;VC中,输入short型整数,格式控制要用%hd;输入double型数据,须用%lf或%le,否则数据不能输入;但%d与%ld一样

4.2.2.3 使用scanf函数注意事项
  1. 格式控制串是为了输入数据使用的,无论其中有什么普通字符都不会想printf函数一样输出在屏幕上,显示输入提示要用printf函数

  2. 格式控制串中的普通字符必须原样输入;且输入项要给出变量地址,给出变量名非法

    • scanf("%d,%d",&a,&b);

      **输入时:**3,5 (输入的两个数中间逗号要原样输入)

    • scanf(“a=%d,c=%d”,&a,&b);

      **输入时:**a=3,c=5 (5给了b,并不是给了c;&后跟的是哪个变量,最终输入的值就赋给了哪个变量)

  3. 在格式说明中只能指定输入数据的总宽度,不能对实型数指定小数位的宽度(不能指定精度);例如:scanf("%5.2f",&a);是非法的

  4. 针对整型数据有4中输入方式:%d可自动跳过空白字符(空格、Tab键、回车),找到第一个非空白字符

    • 1’空格’'2:

      scanf("%d%d",&a,&b);
      输入时:1 2
      
      
    • 1“空格”“回车”2:

      scanf("%d%d",&a,&b);
      输入时:
          1 
          2
      
    • 1“Tab键”2:

      scanf("%d%d",&a,&b);
      输入时:
          1	2
      
    • 1“空格”“Tab键”“回车”2:

      scanf("%d%d",&a,&b);
      输入时:
          1 	
          2
      
  5. 针对字符型数据仅有一种输入方式:%c认为输入的所有字符均为有效字符;得到一个字符时,光标自动下移

    scanf("%c%c%c",&ch1,&ch2,&ch3);
    若输入:a b c
         则ch1得到a,ch2得到空格,ch3得到b
    若输入:abc
         则ch1得到a,ch2得到b,ch3得到c
    
    若在格式控制字符串中加入空格作为间隔,则输入时各数据间可加空格!
  6. 调用scanf函数时,注意变量类型与格式字符保持一致

  7. scanf函数也有一个返回值,返回值就是成功输入的项数

  8. 当输入数据的个数小于输入项的个数时,程序等待输入,直到满足要求为止。当输入数据的个数大于输入项的个数时,多余的数据不消失,作为下一个输入操作的输入数据!

    #include <stdio.h>
    main()
    {
        int a,b,c,d;
        scanf("%d%d",&a,&b);
        printf("a=%d,b=%d\n",a,b);
        scanf("%d%d",&c,&d);
        printf("c=%d,d=%d\n",c,d);
    }
    输入:30 35 40 45
    输出:a=30,b=35
         c=40,d=45
    程序运行到第一个scanf函数时,要求输入两个整数,但输入了4个,第一个scanf只把30给a,35给b;允许到第二个scanf函数时,4045作为该操作的输入数据
    

4.3 字符数据的输入/输出

C语言没有提供输入输出语句,数据输入输出由标准函数来实现,VC中调用标准输入输出函数前,要求使用与编译命令对头文件”stdio.h“进行说明!

4.3.1 字符输出函数

putchar函数事标准字符输出函数,功能是再默认输出终端上输出单个字符

putchar(ch); ch可以是一个字符变量或常量,也可以是一个转义字符

例:输出单个字符‘B’

#include <stdio.h>
main()
{
    char ch='B';	
    putchar(ch);	/*输出字符变量ch的值*/
    putchar('\n');	/*输出一个转义字符换行符*/
    putchar('B');	/*输出一个字符常量B*/
    putchar('\n');	/*输出一个转义字符换行符*/
    putchar(0x42);	/*输出十六进制数42对应十进制66ASCII值对应的B*/
    putchar('\n');	/*输出一个转义字符换行符*/
}

4.3.2 字符输入函数

getchar函数是标准输入函数,功能是从系统默认的输入终端输入一个字符

getchar(); 输入时可以是字母字符、数字字符和其他字符等

getchar函数等待输入直到按下回车键才结束,回车键前所输入的所有字符都会显示在屏幕上,但只有第一个字符作为函数的返回值

getchar函数得到的字符可以赋给字符变量或整型常量,也可以不赋给任何变量,可直接作为表达式的一部分

例:输入单个字符

#include <stdio.h>
main()
{
    char c;
    c=getchar();
    putchar(c);
}

输入:abc
    
输出:a
上述程序可写为:    
#include <stdio.h>
main()
{
    putchar(getchar());
}

4.4 顺序结构程序设计举例

4.4.1 鸡兔同笼

鸡和兔总数a头,鸡和兔共有b只脚,问鸡和兔各有多少只?

**分析:**设有x只鸡,y只兔;x、y、a、b四个数均为整型变量;a与b由用户输入,x、y根据a和b的实际数量改变;a=x+y;b=2x+4y;则x=a-(b-2a)/2;y=(b-2a)/2;

#include <stdio.h>
main()
{
	int a,b,x,y;
	printf("Input the head:");
	scanf("%d",&a);
	printf("Input the feet:");
	scanf("%d",&b);
	x=(4*a-b)/2;
	y=(b-2*a)/2;
	printf("The number of chick is %d\n",x);
	printf("The number of rabbit is %d\n",y);
}

4.4.2 求圆的周长和面积

**分析:**圆周长:L=2πr;圆面积:S=πr²

#include <stdio.h>
#define PI 3.14159
main()
{
    float r,l,s;
    scanf("%f",&r);
    l=2*PI*r;
    s=PI*r*r;
    printf("\nl=%8.4f",l);
    printf("\ns=%8.4f",s);
}

4.4.3 输入两个整数,求出它们的商和余数并输出

#include <stdio.h>
main()
{
    int a,b;			/*定义两个整型变量*/			
    scanf("%d%d",&a,&b);
    printf("商=%d,余数=%d\n",a/b,a%b);
}

4.4.4 读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位进行四舍五入,最后求输出结果

#include <stdio.h>
main()
{
    double a,b,c,ave;
    scanf("%f%f%f",&a,&b,&c);
    ave=(a+b+c)/3;
    printf("%.1f\n",ave);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值