第三章 顺序结构程序设计

3.1 引例

 

【例3.1】求华氏温度100°F对应的摄氏温度

#include<stdio.h>
int main()
{
	int celsius, fahr;
	printf("输入华氏温度:");
	scanf_s("%d", &fahr);
	celsius = 5 * (fahr - 32) / 9;
	printf("华氏温度为:%d,摄氏温度为:%d\n", fahr, celsius);
	return 0;
}

 【例3.2】由键盘输入一个小写字母,将其转换为大写字母输出

#include<stdio.h>
int main()
{
	char c1, c2;
	printf("请输入一个小写字母:");
	c1 = getchar();
	printf("%c,%d\n", c1, c1);
	c2 = c1 - 32;
	printf("%c,%d\n", c2, c2);
	return 0;
}

 3.2 C语言的语句

1.说明语句

定义程序所使用的变量

int a,b;        /*定义两个整型变量*/
char ch;        /*定义一个字符型变量*/

2.表达式语句

赋值表达式:

c=a+b

表达式语句:

c=a+b;

3.分支语句

双分支if—else语句:

if(x>y)
   z=x;
else
   z=y;
#include <stdio.h>
int main()
{
 int a;
 printf("Input integer number:");
 scanf("%d",&a);
 if(a==1){
 printf("Monday\n");
 }else if(a==2){
 printf("Tuesday\n");
 }else if(a==3){
 printf("Wednesday\n");
 }else if(a==4){
 printf("Thursday\n");
 }else if(a==5){
 printf("Friday\n");
 }else if(a==6){
 printf("Saturday\n");
 }else if(a==7){
 printf("Sunday\n");
 }else{
 printf("error\n");
 }
 return 0;
}

多分支switch语句:

#include <stdio.h>
int main()
{
 int a;
 printf("Input integer number:");
 scanf("%d",&a);
 switch(a){
 case 1: printf("Monday\n"); break;
 case 2: printf("Tuesday\n"); break;
 case 3: printf("Wednesday\n"); break;
 case 4: printf("Thursday\n"); break;
 case 5: printf("Friday\n"); break;
 case 6: printf("Saturday\n"); break;
 case 7: printf("Sunday\n"); break;
 default:printf("error\n"); break;
 }
 return 0;
}

4. 循环语句

求一百以内的奇数和:

#include<stdio.h>
int main()
{
	int sum = 0, i = 1;
	while (i <= 99)
	{
		sum = sum + i;
		i = i + 2;
	}
	printf("sum=%d\n", sum);
	return 0;
}

 5.转向语句

转向语句有 break语句、goat语句、continue语句、return语句。

6.复合语句

用用一对{}将若干语句顺序组合在一起所形成的语句叫复合语句。C语言出复合语句外其他所有语句都以分号结束。如:

{ sum=sum+i;
  i=i+2;
 }

即为复合语句。

7.空语句

空语句只由一个分号构成。如

8.函数定义域调用

函数是完成特定功能的小模块,是C语言中唯一的种子程序,常常在一个C语言程序中包含若干个函数,复杂的任务通过调用这些函数来完成。如函数:

int main(int x,int y)           /*求最大值的函数*/
{   int z;                      /*定义临时变量z*/
    if(x>y)                     
     z=x;                       /*x>y时,z的值等于x*/
    else                        
     z=y;                       /*x<y时,z的返回值等于x*/
    return z;                   /*结束函数,返回z*/
}

9.输入和输出

C语言没有提供用于数据输入及输出的语句,所有的输入输出都是通过系统提供的有关函数(如scanf()和printf()函数)来实现。

3.3 数据的输入和输出

3.3.1 输出函数(printf())和输入函数(scanf())

1.printf()函数

一般调用格式为:printf("格式控制字符串",输出项表列)

格式控制字符串用双引号括起来,表示输出的格式;而输出项表列则是要输出的数据,这些数据可以是常量、变量或表达式。

格式字符串中包含两种信息,格式控制说明和普通字符。

格式控制说明:按指定的格式输出数据,其格式为以%开头的格式控制符,不同类整型的数据采用不同格式控制字符,已说明输出数据的类型、形式、长度、小数位数等。

int型数据采用%d,float型和double型数据都采用%f。

普通字符:在输出数据时,需要原样输出字符。

【例3.3】按指定格式输出整型数据示例

#include<stdio.h>
int main()
{
	int a = 1, b = 2, c = 3;
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

 使用printf()函数进行数据输出时需注意:

1.格式字符与输出项的类型要一一对应,不同类型的数据所使用的的格式字符不同。

2.一般情况下,格式字符与输出项的个数应相同。如果格式字符的个数多于输出项的个数,则多余的格式将输出不确定的值;如果格式字符的个数少于输出项的个数,则多余的输出项将不能输出。

3.printf()函数中可以没有输出项,此时printf()函数只是来输出一个字符串;也可以有多个输出项,多个输出型之间用逗号进行分隔。若输出型是表达式时printf()函数将按从右到左的顺序计算出其值后输出。

4如果要输出“%”那么要在printf()函数中打“%%”

2.scanf()函数

一般调用格式:scanf("格式控制字符串",输入项表列)

格式控制符说明:int型数据采用%d,float型数据采用%f,而double型数据采用%lf(其中的l是long的首字母,不是数字1)

普通字符:在输入数据时需要原样输入的字符

注意:格式字符要和输入项的类型、个数要一一对应;输入项必须是地址,不能是变量名。

3.3.2 整型数据的输入和输出

printf()、scanf()函数中的格式字符(整型数据)
格式字符含义
d以十进制形式输入/输出带符号整数
o以八进制形式输入/输出无符号整型
x,X以十六进制形式输入/输出无符号整数
u以十进制形式输入/输出无符号整数
printf()函数中的格式修饰符
格式字符含义
l用于输出长整型
-输出结果左对齐,右边补空格
+输出符号(正号或负号)
#

对d、u格式字符无符号无影响;对o格式字符,在输出时加前缀0;对x格式字

符,在输出时加前缀0x

m

指定数据的输出宽度。当数据的实际位数大于m时,则按实际位数输出;当数

据的实际位小于m时,若输出宽度前有“-”则左对齐右补空格,否则右对齐左补

空格

【例3.4】整型数据的输出示例

#include<stdio.h>
int main()
{
	int a = 123;
	long int b = 32770;
	printf("a=%d,b=%ld\n", a, b);
	printf("a=%o,b=%lo\n", a, b);
	printf("a=%#x,b=%#lx\n", a, b);
	printf("a=%d,b=%ld\n", a);
	printf("a+b=%ld\n", a + b, b);
	printf("输出结束!\n");
	return 0;
}

 【例3.5】整型数据的输入示数

#include<stdio.h>
int main()
{
	int a, b;
	long int c;
	scanf_s("%d%d%ld", &a, &b, &c);
	printf("a=%d,b=%d,c=%ld\n",a,b,c);
	return 0;
}

若程序运行时输入:12□23□34        结果如下

若输入12,23□34         结果如下

将语句改为“scanf("%d,%d,%ld",&a,&b,&c);”程序运行时输入:12□23□34 结果如下

 【例3.6】带有修饰符的整型数据的输入输出示例

#include<stdio.h>
int main()
{
	int a, b, c, d;
	scanf_s("%2d%3d%*d,%d%d", &a, &b, &c, &d);
	printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);
	printf("a=%4d,b=%-4d,c=%-4d,d=%4d\n", a, b, c, d);
	printf("a=%+4d,b=%+4d,c=%+4d,d=%+4d\n", a, b, c, d);
	return 0;
}

 根据程序中scanf()函数的格式控制字符串“%2d%3d%*d,%d%d”,编译系统会从输入的内容中先取2列宽度的数字,使a=12,然后取3列数字,使b=345,接下来跳过后面的数字6789,对于逗号后面的输入内容“123□456”,编译系统是从空格的位置进行分隔的,将123和456分别赋值给变量c和d,因此c=123,d=456。

程序中的printf()函数在输出变量a、b、c、d的值时指明了输出的宽度,则当变量值的实际宽度大于输出宽度时按实际数据输出,当变量值的宽度小于输出宽度时,若输出宽度前有“-”则左对齐右补空格,否则右对齐左补空格。在“%”和格式符之间的修饰符“+”,表明要输出数据的符号(正号或负号)。

3.3.3 实型数据的输入和输出

格式字符(实型数据)
函数格式字符含义
        f以小数形式输出单精度或双精度数(保留6位小数)
    printf     E,e            以指数形式输出单精度或双精度数

        g

以%f,%e中较短的输出宽度输出单精度或双精度数
        f                以小数形式输入单精度数
    scanf          E,e                以小数形式输入单精度数
        lf                以小数形式输入双精度数
        le                以指数形式输入双精度数

说明:

1.在格式字符串的“%”和格式字符之间也可以有一些修饰符。printf()函数中的修饰符“#”对于f、e、g格式字符当结果有小数时才给出小数点。

2.在输出实型数据时,还可以指定输出的精度,即在格式字符串的“%”和格式字符之间加入“m.n”,其中m指明输出的总位数,n指明小数点后的位数,若实际输出位数大于n,则超过的部分四舍五入;若实际输出位数小于n则不足的部分后补0。

3.使用scanf()函数输入实型数据时不能指明精度,即使用“%.nf”的格式是错误的。

【例3.7】实型数据的输入输出示例

#include<stdio.h>
int main()
{
	float f;
	double d;
	scanf_s("%f%lf", &f, &d);
	printf("f=%f,d=%f\n", f, d);
	printf("f=%e,d=%e\n", f, d);
	printf("f=%4.2f,d=%.3f\n", f, d);
	return 0;
}

 3.3.4 字符型数据的输入和输出

1.scanf()函数和printf()函数对字符型数据进行输入输出

【例3.8】字符型数据的输入输出示例

#include<stdio.h>
int main()
{
	char a, b, c;
	scanf_s("%c%c%c", &a,1, &b,1, &c,1);
	printf("a=%3c,b=%c,c=%c\n", a, b, c);
	return 0;
}

若程序运行输入:x□y□z        则输出结果如下

这是由于在格式输入字符数据(%c)时,若格式控制字符串中没有非格式字符,则认为所有输入的字符均为有效字符。因此对于输入的“x□y□z ”,编译系统将字符'x'赋值给变量a,'□'赋值给变量b,'y'赋值给变量c。只有当输入为“xyz”时,才能把'x'、'y'、'z'分别赋值给变量a,b,c。

若将语句改为“scanf("%c%c%c",&a,&b,&c);” ,程序运行时输入:x□y□z         则输出结果如下:

这是由于在格式控制串字符中加入了空格,非格式字符需要原样输入,则输入数据时可以使用空格作为间隔,编译系统会将'x'、'y'、'z'分别赋值给变量a,b,c。

 若将语句改为“scanf("%3c%3c%*3c%c",&a,&b,&c);” 程序运行时输入“HowAreYou?” 则输出结果如下

格式控制字符串中的“%3c”说明从输入的数据中截取3列赋值给相应的变量,但是字符数据只能保存一个字符,因此编译系统将字符'H'赋值给变量a。同理,字符'A'赋值给变量b。“%*3c”表示要跳过3列数据,最后将字符'?'赋值给变量c。

 2.使用getchar()函数和putchar()函数对字符型数据进行输入输出

getchar()函数

一般调用格式:ch=getchar(); 从键盘缓存区中读取一个字符,并赋值给ch

putchar()

一般调用格式:putchar(输出参数);只输出一个字符,输出参数是字符型变量或字符型常量

【例3.9】由键盘输入一个字符,将其输出到屏幕

1.用getchar()函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋值给任何变量,而直接作为putchar()函数的参数。本例可以改写如下:

2.可以在printf()函数输出刚接收的字符。如: 

 3.4 数学库函数

常用的数学库函数:

①指数函数 exp(x):计算e^{x}

②绝对值函数 fabs(x):计算|x|

③以e为底的对数函数log(x):计算 lnx 

④幂函数pow(x,y):计算x^{y}

⑤平方根函数 sqrt(x):计算\sqrt{x}

在程序中调用数学库函数时,一定要在程序的开头使用 #include<math.h>

【例3.10】输入一个球的半径,根据公式\frac{4 \pi r^{3}}{3}计算并输出球的体积

#include<stdio.h>
#include<math.h>
#define PI 3.14
int main()
{
	float r, v;
	printf("输入半径r:");
	scanf_s("%f", &r);
	v = 4.0 / 3 * PI * pow(r, 3);
	printf("体积为:%2f\n", v);
	return 0;
}

 【例3.11】求一元二次方程ax^{2}+bx+c=0的根,设b^{2}-4ac>0x=\frac{-b\pm \sqrt{b^{2}-4ac}}{2a}

#include<stdio.h>
#include<math.h>
int main()
{
	float a, b, c, x1, x2, p, q;
	printf("请输入三个系数:");
	scanf_s("a=%f,b=%f,c=%f", &a, &b, &c);
	p = -b / (2 * a);
	q = sqrt(b * b - 4 * a * c) / (2 * a);
	x1 = p + q; x2 = p - q;
	printf("x1=%5.2f\nx2=%5.2f\n", a, b, c);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值