C语言大学实用教程 第三章 简单的C程序设计 西南财经大学经济信息工程学院 刘家芬 jfliu@swufe.edu.cn
C程序结构 数据描述:变量声明 数据操作:执行语句
C语言中的语句 变量声明语句 表达式语句 函数调用语句 复合语句 {} 空语句 ; 九种控制语句 类型关键字 变量名1(,变量名2…,变量名n); 例int a,b,c; 表达式语句 c=a+b; 函数调用语句 printf(“%d”,c); 复合语句 {} 空语句 ; 九种控制语句 条件判断语句:if语句、switch语句; 循环执行语句:while语句、 do while语句、 for语句; 转向语句:break语句、goto语句、continue语句、return语句。
赋值语句 赋值语句是表达式语句的一种,由赋值表达式再加上分号构成的表达式语句,其一般形式为: 注意: 变量=表达式; 注意: 1.在赋值运算符“=”右边的表达式也可以是一个赋值表达式,例如a=(b=5);相当于b=5;a=b; 2. 在变量声明中给变量赋初值时,赋初值后的变量与其它同类变量之间仍用逗号分隔,整个语句则以分号结尾。例如int a=5,b,c; 3.在变量声明中,不允许连续给多个变量赋初值 int a=b=c=5; int a=5,b=5,c=5;
标准输入输出 如何进行数据的输入输出? #include <stdio.h> #include “stdio.h” 输入和输出都是相对于计算机而言 输入:从标准输入设备上输入数据到计算机内存 输出:将计算机内存中的数据送到标准输出设备 C语言中输入输出操作通过调用标准库函数来实现 #include <stdio.h> #include “stdio.h”
字符输入输出函数 字符输出函数 putchar(ch) 输出一个字符ch,例如: putchar('A'); (输出大写字母A) putchar(x); (输出字符变量x的值) putchar('\101'); (也是输出字符A) putchar('\n'); 对控制字符则执行控制功能,不在屏幕上显示。
例3.1 putchar函数 #include <stdio.h> void main() { char a,b,c; a='B'; b='O'; c='Y'; putchar(a); putchar(b); putchar(c); putchar('\n'); }
字符输入输出函数 字符输入函数 getchar() 通常把输入的字符赋予一个字符变量,构成赋值语句,如 char c; c=getchar();
例3.2 getchar函数 #include <stdio.h> void main() { char ch; printf("Press a key and then press Enter:") ch = getchar(); printf("You pressed "); putchar(ch); putchar('\n'); }
格式输出函数 格式输出函数 printf(格式说明字符串, 输出项表列); 其关键字最末一个字母f即为format之意 按用户指定的格式将数据显示到屏幕上 其中格式说明字符串用于指定输出格式,可由格式控制字符和普通字符组成。格式控制字符是在%后面跟有特定字符,以说明输出数据的输出形式、输出长度等 “%d”表示按十进制整型输出; “%ld”表示按十进制长整型输出; “%c”表示按字符型输出等。 普通字符在输出时原样显示,在显示中起提示作用 printf("a=%d b=%f", a, b);
格式控制 常见的格式控制字符: %d 用于输出十进制整数 %ld 用于输出十进制长整数 %md或%mld m用于指定输出的宽度。如果数据位数小于m则在左端补空 白;如果数据位大于m则按实际位数输出 例如 int a=123,b=12345; printf("%4d,%4d",a,b); 输出结果为_123,12345 int a=135790; printf("%8ld",a); 输出结果为_ _135790 long
格式控制 常见的格式控制字符: %o 以八进制整数形式输出 %x 以十六进制整数形式输出 %u 以无符号整数形式输出 %c 用于输出一个字符 以上格式都可以指定输出宽度 例如 int a=-1; printf("%d,%o,%x,%u",a,a,a,a); 输出结果为-1,177777,ffff,65535
格式控制 常见的格式控制字符: %f 以小数形式输出单精度或双精度实数,带6位小数 %mf 输出的数据宽度为m,如果数据长度大于m,则突破m的限制原样输出。如果数据长度小于m,则在左边补空格 %m.nf 输出的数据共占m列,其中小数占n位。不足的在左侧补空格 %-m.nf 输出的数据共占m列,其中小数占n位。不足的在右侧补空格 例如 float f=123.456; printf("%f, %10f, %10.2f, %.2f, %-10.2f\n",f,f,f,f,f); 输出结果为 123.456001, 123.456001, _ _ _ _123.46, 123.46, 123.46_ _ _ _
格式控制 常见的格式控制字符: %s 用于字符串输出 %ms 输出的字符串宽度为m,如果字符串长度大于m,则突破m的限制,将字符串原样输出。如果字符串长度小于m,则在左边补空格 %-ms 同上,右补空格 %m.ns 取字符串左端n个字符,输出占m列,不足的在左侧补空格 %-m.ns 取字符串左端n个字符,输出占m列,不足的在右侧补空格 例如 printf("%3s,%7.2s,%.4s,%-5.3s\n", "CHINA", "CHINA", "CHINA", "CHINA"); 输出结果为 CHINA, _ _ _ _ _CH, CHIN, CHI _ _
格式控制 常见的格式控制字符: %e 以规范化的指数形式输出实数。尾数部分的小数占6位,指数部分占5位(根据编译系统不同有会所差别) 例如 printf("%e",123.456); 输出结果为1.234560e+002 %me 输出的数据共占m列,其中尾数部分小数占6位。不足的在左侧补空格 %m.ne 输出的数据共占m列,其中尾数部分小数占n位。不足的在右侧补空格 %-m.ne同上,只是不足的在右侧补空格 例如 f=123.456; printf("%e, %10e,%10.2e,%.2e,%-10.2e",f,f,f,f,f); 输出为1.234560e+002, 1.234560e+002, _1.23e+002, 1.23e+002, 1.23e+002_ 13位 13位 10位 9位 10位
格式控制 常见的格式控制字符: %g 用来输出实数,系统自动选择f或e格式中宽度较小的一种输出,且不输出无意义的0。例如 printf("%f, %e, %g",f,f,f); 输出结果为123.456000, 1.234560e+002, 123.456 10位 13位 7位 %% 如果想输出%,则在格式说明符中用连续两个%表示,例如 printf(“%f%%”,1.0/3); 输出结果为0.333333%
例3.3 格式输出 #include <stdio.h> void main() { float f1 = 100.15799, f2 = 12.55, f3 = 1.7; int n1 = 123, n2 = 45, n3 = 6; printf("printf WITHOUT width or precision specifications:\n"); printf("%f\n%f\n%f\n", f1, f2, f3); printf("%d\n%d\n%d\n", n1, n2, n3); printf("printf WITH width and precision printf("%5.2f\n%6.1f\n%3.0f\n", f1, f2, f3); printf("%5d\n%6d\n%3d\n\n", n1, n2, n3); }
格式输入函数 scanf("%d,%f”, &a,&b); 格式输入函数 scanf的格式控制符意义与printf中的格式控制符基本相同 地址列表用于指定变量的存储地址。使用地址运算符&可获得该变量的地址 scanf("%d,%f”, &a,&b); 非格式字符 格式说明 地址表列
例3.4 scanf函数 #include <stdio.h> void main( ) { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); } 运行时输入:3(空格)4 (空格) 5 运行时输出:3,4,5
标准输入注意事项 1.“&”是地址运算符 2. “%d%d%d”格式符间无分隔符输入数据时,在两数之间可以用一个或多个空格分隔,也可以用回车键、Tab键分隔。 3. 格式说明中的普通字符,应照原样输入。 如输入语句scanf(“a=%d, b=%f”,&a,&b); 运行时应键入:a=5, b=3.3 若语句为scanf(“a:%d; b:%f”,&a,&b); 运行时应键入:a:5; b:3.3
标准输入注意事项 4. d%用于输入十进制整数; u%用于输入无符号整数; o%用于输入八进制整数; x%用于输入十六进制整数; c%用于输入单个字符; s%用于输入字符串:以非空字符开始,遇第一个空白字符结束 f%, e%和g%作用相同,用于输入实数(小数或指数形式均可) 加上l前缀用于输入长整型数(%ld)或者双精度实数(%lf)
标准输入注意事项 5. 允许指定输入数据所占的列数,系统自动按位截取所需数据。例: scanf(“%3d%3d”,&a,&b); 6. 输入数据时不能规定小数部分精度,如: scanf(“%7.2f”,&a); 7. 在用“%c”格式输入字符时,空格符和转义字符都作为有效字符输入。如: scanf(“%c%c%c”,&c1,&c2,&c3); 若输入:a b c , c1的值是'a',c2的值是' ' ,c3的值是'b'. 正确的输入方法是:abc 8. 可使用%*表示读入该数据项,但跳过不赋值 例如scanf(“%2d %*3d %2d”,&a,&b); 用户输入12_345_67将把12赋给a,67赋给b
例3.5 #include <stdio.h> void main() { int a, b; printf("Please input a and b:"); scanf("%d%d", &a, &b); printf("a=%d, b=%d, a+b=%d\n",a,b,a+b); } Please input a and b: a=12, b=34, a+b = 46 12 34↙ 遇空格、TAB 键、回车、非十进制整数时结束
例3.6 #include <stdio.h> void main() { int a, b; printf("Please input a and b:"); scanf("%d,%d", &a, &b); printf("a=%d, b=%d, a+b=%d\n",a,b,a+b); }
例3.7 #include <stdio.h> void main() { int a, b; printf("Please input a and b:"); scanf("%2d%2d", &a, &b); printf("a=%d, b=%d, a+b=%d\n",a,b,a+b); } 如果输入1234 如果输入123a 按宽度截取,遇非法字符时结束
例3.8 #include <stdio.h> void main() { int a, b; printf("Please input a and b:"); scanf("%2d%*2d%2d", &a, &b); printf("a=%d, b=%d, a+b=%d\n",a,b,a+b); } 如果输入123456↙
例3.9 #include <stdio.h> void main() { int a, b; scanf("%d%*c%d", &a, &b); printf("a = %d, b = %d\n", a, b); } 这样使得用户可以以任意单个字符(回车、空格、制表符、逗号、其它)作为分隔符
例3.10 %C格式符 如果输入12+3? 如果输入12_+_3? #include <stdio.h> void main() { int data1, data2, sum; char op; printf("Please enter the expression data1 + data2\n"); scanf("%d%c%d",&data1, &op, &data2); printf("%d%c%d = %d\n", data1, op, data2, data1+data2); } 如果输入12+3? 如果输入12_+_3?
例3.11 %C格式符 #include <stdio.h> void main() { int a; char b; float c; printf("Please input an integer:"); scanf("%d", &a); printf("integer: %d\n", a); printf("Please input a character:"); scanf("%c", &b); printf("character: %c\n", b); printf("Please input a float number:"); scanf("%f", &c); printf("float: %f\n", c); } 程序的执行有什么问题?如何修改?
回顾例3.10 以任意分隔符输入加法算式 #include <stdio.h> void main() { int data1, data2, sum; char op; printf("Please enter the expression data1 + data2\n"); scanf("%d%1s%d",&data1, &op, &data2); printf("%d%c%d = %d\n", data1, op, data2, data1+data2); } 12↙ +↙ 3↙ 12+3↙ 12 + 3↙
这一章我们学习了 字符输入函数getchar() 字符输出函数putchar() 格式输入函数scanf() 格式输出函数printf() 格式控制字符
作业 习题3