格式字符 | 意义 | 格式字符 | 意义 |
c | 按字符型输出 | o | 按八进制整数输出 |
d | 按十进制整数输出 | x | 按十六进制整数输出 |
u | 按无符号整数输出 | s | 按字符串输出 |
f | 按浮点型小数输出 | g | 按e和f格式中较短的一种输出 |
e | 按科学计数法输出 |
修饰符是可选的,用于确定数据输出的宽度、精度、小数位数、对齐方式等,用于产生
更规范整洁的输出,当没有修饰符时,以上各项按系统缺省设定显示。
(1) 字段宽度修饰符
表3 - 3列出了字段宽度修饰符。
表3-3 字段宽度修饰符
修饰符 | 格式说明 | 意义 |
M | %md | 以宽度m输出整型数,不足m时,左补空格 |
0m | %0md | 以宽度m输出整型数,不足m时,左补零 |
m,n | %m.nf | 以宽度m输出实型小数,小数位为n位 |
例如:设i = 123,a = 12.34567,
则:
printf("%4d +++ %5.2f",i,a);
输出: 123 +++ 12.35
printf("%2d +++ %2.1f",i,a ) ;
输出:
123 +++ 12.3
可以看出,当指定场宽小于数据的实际宽度时,对整数,按该数的实际场宽输出,对浮点数,相应小数位的数四舍五入。例如: 1 2 . 3 4 5 6 7按%5.2f 输出,输出1 2 . 3 5。若场宽小于等于浮点数整数部分的宽度,则该浮点数按实际位数输出,但小数位数仍遵守宽度修饰符给出的值。如上面的1 2 . 3 4 5 6 7按%2.1f 输出,结果为:1 2 . 3。
在实际应用中,还有一种更灵活的场宽控制方法,用常量或变量的值作为输出场宽,方法是以一个" * "作为修饰符,插入到%之后。
例如:i = 123;
printf("%*d" , 5 , i);
此处,5为场宽,输出为
123
在程序中,可以用一个整形变量K来指示场宽:
printf("%*d" , k , i ) ;
可以根据k的值动态地决定i的显示场宽,这在解某些问题时是相当有用的。
(2) 对齐方式修饰符
负号“-”为“左对齐”控制符,一般所有输出数据为右对齐格式,加一个“ -”号,则变为“左对齐”方式。
例如: i=123,a = 12.34567
printf("%4d %10.4f",i,a);
输出为: 12312.3457
printf("%-4d %10.4f",i,a);
输出为: 12312.3457
printf("%4d %-10.4f",i,a);
输出为: 12312.3457
(3) l和h
可以与输出格式字符d、f、u等连用,以说明是用long型或short型格式输出数据,如:
%hd 短整型
%lf 精度型
%ld 长整型
%hu 无符号短整型
2. 普通字符
普通字符包括可打印字符和转义字符,可打印字符主要是一些说明字符,这些字符按原样显示在屏幕上,假如有汉字系统支持,也可以输出汉字。
转义字符是不可打印的字符,它们其实是一些控制字符,控制产生非凡的输出效果。
例如:i = 123,n = 456,a = 12.34567,且i为整型,n为长整型。
printf("%4d \t%7.4f \n \t %lu \n" , i , a , n ) ;
输出为:
12312.3457
456
其中\t为水平制表符,作用是跳到下一个水平制表位,在各个机器中,水平制表位的宽度是不一样的,这里设为8个字符宽度,那么“ \t”跳到下一个8的倍数的列上。
“\n”为回车换行符,碰到“ \n”,显示自动换到新的一行。
在c语言中,假如要输出%,则在控制字符中用两个%表示,即%%。
[例3-2] 输出格式控制符的使用。
# include<stdio.h>
main( )
{
int a;
long int b;
short int c;
unsigned int d;
char e;
float f;
double g;
a = 1023;
b = 2222;
c = 123;
d = 1234;
e = 'x';
f = 3.1415926535898;
g = 3.1415926535898;
printf("a = %d \n" , a);
printf("a = %0 \n" , a);
printf("a = %x \n" , a);
printf("b = %ld \n" , b);
printf("c = %d \n" , c);
printf("d = %u \n" , d);
printf("e = %c \n" , e);
printf("f = %f \n" , f);
printf("g = %f \n" , g);
printf("\n");
}
执行程序,输出为:
a = 1023
a = 1777
a = 3ff
b = 2222
c = 123
d = 1234
e = x
f = 3.141593
g = 3.141593
3.2.3 getchar()函数与putchar()函数
putchar() 与getchar( )是对单个字符进行输入输出的函数。
getchar( )的功能是返回键盘输入的一个字符,它不带任何参数,其通常格式如下:
ch = getchar( )
ch为字符型变量,上述语句接收从键盘输入的一个字符并将它赋给ch。
putchar( )的作用是向屏幕上输出一个字符,它的功能与printf函数中的%c相当。putchar( )必须带输出项,输出项可以是字符型常量、变量、表达式,但只能是单个字符而不能是字符串。
[例3-3] 输入一个字符,回显该字符并输出其A S C I I码值。
#include<stdio.h>
main( )
{
char ch;
ch = getchar( ) ;
putchar(ch);
printf("%d \n" , ch);
}
运行程序:
g
g 103
需要注重的是,字符输入输出函数定义在头文件stdio.h中,故当程序中使用putchar( )或getchar( )函数时,必须在main( )之前用语句:
#include<stdio.h>
将 stdio.h包含进来。
3.2.4 程序应用举例
[例3-4] 下面的程序是一个复数加法的例子。
#include <stdio.h>
main( )
{
float a1,b1,a2,b2;
char ch;
printf("\t\t\tcomplexs Addition\n");
printf("please input the first complex:\n");
printf("\t realpart:");
scanf("%f" , &a1);
printf("\t virtualpart:");
scanf("%f" , &b1);
printf("%5.2f +i %5.2f\n",a1,b1);
printf("\n please input the second complex:\n");
printf("\t realpart:");
scanf("%f",&a2);
printf("\t virtualpart :");
scanf("%f" , &b2);
printf("%5.2f +i %5.2f\n",a2,b2);
printf("\n The addition is :");
printf("%6.3f +i %6.3f\n",a1+a2,b1+b2);
printf(" program normal terminated,press enter...");
ch = getchar( ) ;
ch=getchar();
}
运行结果如下:
complexs addition
please input the first complex :
realpart :1.2
virtualpart :3.4
1.20 +i 3.40
please input the second complex :
realpart:5.6
virtualpart:7.8
5.60 +i 7.80
The addition is:6.800 +i 11.200
program normal terminated, press enter....
3.3 条件控制语句
在程序的三种基本结构中,第二种即为选择结构,其基本特点是:程序的流程由多路分支组成,在程序的一次执行过程中,根据不同的情况,只有一条支路被选中执行,而其他分支上的语句被直接跳过。
C语言中,提供if语句和switch语句选择结构, if语句用于两者选一的情况,而switch用于多分支选一的情形。
3.3.1 if语句
1. if语句的两种基本形式
首先,我们看一个例子,由此了解选择结构的意义及设计方法。
[例3-5] 输入三个数,找出并打印其最小数。
分析:设三个数为A、B、C,由键盘读入,我们用一个变量MIN来标识最小数, A、B、C与MIN皆定义为int型变量。
每次比较两个数,首先比较A和B,将小的一个赋给MIN,再把第三个数C与MIN比较,再将小的一个赋给MIN,则最后MIN即为A、B、C中最小数。
算法如下:
1) 输入A、B、C。
2) 将A与B中小的一个赋给MIN。
3 ) 将MIN与C中小的一个赋给MIN。
4) 输出MIN。
将第2)步细化为:若A < B,则MIN <==A,否则:MIN <==B;其流程图见图3- 1。
第3)步细化为:若C < M I N,则MIN <==C;其流程图见图3 - 2。
非凡情况下,假如switch表达式的多个值都需要执行相同的语句,可以采用下面的格式:
switch (i)
{
case 1:
case 2:
case 3: 语句1;
break;
case 4:
case 5: 语句2;
break;
default: 语句3;
}
当整型变量i的值为1、2或3时,执行语句1,当i的值为4或5时,执行语句2,否则,执行语句3。
[例3-9] 输入月份,打印1 9 9 9年该月有几天。
程序如下:
#include <stdio.h>
main( )
{
int month;
int day;
printf("please input the month number :");
scanf("%d" , &month);
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: day=31;
break;
case 4:
case 6:
case 9:
case 11:day=30;
break;
case 2: day=28;
break;
default : day=-1;
}
if day=-1
printf("Invalid month input !\n");
else
printf("1999.%d has %d days \n",month,day);
}
3.3.3 程序应用举例
[例3-10] 解一元二次方程a x2+ b x + c = 0,a、b、c由键盘输入。
分析:对系数a、b、c考虑以下情形
1) 若a = 0:
① b < > 0,则x=-c/b ;
② b = 0, 则:① c = 0, 则x无定根;
② c < > 0,则x无解。
2) 若a < > 0 ;
① b2-4 a c > 0,有两个不等的实根;
② b2-4 a c = 0,有两个相等的实根;
③ b2-4 a c < 0,有两个共轭复根。
用嵌套的i f语句完成。程序如下:
#include <math.h>
#include <stdio.h>
main( )
{
float a,b,c,s,x1,x2;
double t;
printf(" please input a,b,c:");
scanf("%f %f %f" , &a , &b , &c);
if (a==0.0)
if(b! = 0.0)
printf("the root is :%f\n",-c/b);
else if (c==0.0)
printf("x is inexactive\n ");
else
printf("no root!\n");
else
{
s = b * b - 4 * a * c ;
if(s > = 0.0)
if(s > 0.0)
{
t = s q r t ( s ) ;
x1 = -0.5 *(b + t) / a;
x 2 = - 0 . 5 * ( b - t ) / a ;
printf("There are two different roots:%f and%f\n" ,x 1 , x 2 ) ;
}
else
printf("There are two equal roots:%f\n",-0.5*b/a);
else
{
t = sqrt( -s );
x1=-0.5*b/a; / *实部* /
x2=abs(0.5*t/a); /*虚部的绝对值* /
printf("There are two virtual roots:");
printf("%f+i%f\t\t%f-i%f\n",x1,x2,x1,x2 );
}
}
}
运行结果如下:
please input a,b,c : 1 2 3
There are two virtual roots:
-1.000000 + i 1.000000 -1.000000 - i 1.000000
please input a,b,c : 2 5 3
There are two different roots : -1.500000 and -1.000000
please input a,b,c : 0 0 3
No root!
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |