Part1:格式化输出函数printf()和格式化输入函数scanf()
①
1 /* 2 《C语言程序设计教程学习指导》p118 实验内容(1) 3 这是一个常用格式控制符使用示例 4 运行程序,结合运行结果,对照每一行printf()中的格式控制符,理解和巩固其功能和用法 5 */ 6 #include <stdio.h> 7 int main() { 8 int x=1234; 9 float f=123.456; 10 double m=123.456; 11 char ch='a'; 12 char a[]="Hello, world!"; // 定义一个数组a,数组中连续存放了字符串常量hello,world! 13 int y=3, z=4; 14 printf("%d %d\n", y, z); 15 printf("y=%d, z=%d\n", y,z); 16 printf("%8d,%2d\n", x,x); 17 printf("%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f); 18 printf("%lf\n",m); 19 printf("%3c\n", ch); 20 printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a); 21 return 0; 22 }
注意修饰符的使用。对于整数、实数和字符串,[.precision]的功能并不相同。plus:对于无符号数和实数,[#]的作用也大相径庭;有符号的整数、无符号的整数、实数、字符和字符串的输出一般形式不同。
②
更改前:
1 /* 2 《C语言程序设计教程学习指导》p119 实验内容(2) 3 这是一个格式化输入输出函数及格式符使用练习 4 找出两处错误,修改并运行程序 5 为a1,a2,a3,c1,c2,c3,x,y输入数据,使得: 6 a1=1,a2=2,a3=3,c1='a',c2='b',c3='c', x=1.5, y=2.5 7 */ 8 #include <stdio.h> 9 int main() { 10 double x,y; 11 char c1,c2,c3; 12 int a1,a2,a3; 13 scanf("%d%d%d",a1,a2,a3); 14 printf("%d,%d,%d\n",a1,a2,a3); 15 scanf("%c%c%c",&c1,&c2,&c3); 16 printf("%c%c%c\n",c1,c2,c3); 17 scanf("%f,%lf",&x,&y); 18 printf("%f,%lf\n",x,y); 19 return 0; 20 }
更改后:
1 /* 2 《C语言程序设计教程学习指导》p119 实验内容(2) 3 这是一个格式化输入输出函数及格式符使用练习 4 找出两处错误,修改并运行程序 5 为a1,a2,a3,c1,c2,c3,x,y输入数据,使得: 6 a1=1,a2=2,a3=3,c1='a',c2='b',c3='c', x=1.5, y=2.5 7 */ 8 #include <stdio.h> 9 int main() { 10 double x,y; 11 char c1,c2,c3; 12 int a1,a2,a3; 13 scanf("%d%d%d",&a1,&a2,&a3); 14 printf("%d,%d,%d\n",a1,a2,a3); 15 scanf("%c%c%c",&c1,&c2,&c3); 16 printf("%c%c%c\n",c1,c2,c3); 17 scanf("%lf,%lf",&x,&y); 18 printf("%lf,%lf\n",x,y); 19 return 0; 20 }
即第13行缺少了取地址运算符"&";双精度变量x对应双精度格式%lf
plus:
务必原样输入的情况:格式控制符中出现常规字符(包括转义字符)
使用格式控制符%c输入单个字符空格和转义字符均作为有效字符被输入
系统认为数据输入结束的情况:1、空格、回车、tab;2、[width];3、非法输入
在输入多个数据时若前面数据的输入遇到非法字符且输入的非法字符不是格式控制字符串中的常规字符则将影响后面数据输入
Part2:
①putchar()
1 /* 2 putchar()可以用于在屏幕上输出单个字符 3 括号中要给出想要输出的字符参数,参数可以是字符型常量/变量/表达式 4 如果使用这个函数,需要在程序前面加上#include <stdio.h> 5 */ 6 #include <stdio.h> 7 int main() { 8 char ch; 9 ch = 'A'; 10 putchar(ch); // 参数ch是字符型变量 11 putchar(ch+32); // 参数ch+32是字符型表达式 12 putchar('\x41'); // 参数是字符型常量,是用十六进制表示的转义字符,是'A'的ASCⅡ码值 13 putchar('\n'); // 参数\n是字符型常量,是转义字符,表示换行 14 return 0; 15 }
ch为一个字符变量/常量/表达式,=printf("%c",ch)
②getchar()
1 /* 2 getchar()可以用于从键盘上输入单个字符 3 括号中不需要参数 4 如果输入成功,函数会返回用户从键盘输入的字符 5 如果使用这个函数,需要在程序前面加上#include <stdio.h> 6 */ 7 #include <stdio.h> 8 int main() { 9 char ch; 10 ch = getchar(); // 用户从键盘输入字符,如果输入成功,输入的字符被赋值给ch 11 putchar(ch); // 使用putchar()输出字符变量ch中存放的字符 12 printf("%c",ch); // 使用printf()和格式符%c输出单个字符 13 return 0; 14 }
功能为输入一个字符,若输入不止一个字符,则后续的getchar调用不会再等待用户按键而直接读取缓冲区中的字符直到读完
Part3:if语句
1 /* 2 单分支if语句使用示例 3 从键盘上输入两个整数分别给a和b 4 如果a>b,就交换,使得a里面存放小的数,b里面存放大的数 5 */ 6 #include <stdio.h> 7 int main() { 8 int a,b; 9 int t; // 用于交换a和b时,作为中间变量 10 printf("输入两个整数给a和b:\n"); 11 scanf("%d%d",&a,&b); 12 if(a>b) { 13 t = a; 14 a = b; 15 b = t; 16 } 17 printf("a=%d, b=%d\n",a,b); 18 return 0; 19 }
仅当if后只有一条语句时,{}才能省略
if...else
1 /* 2 二分支if语句使用示例 3 从键盘上输入一个整数给n,判断n是奇数还是偶数 4 */ 5 #include <stdio.h> 6 int main() { 7 printf("输入一个整数给n:\n"); 8 scanf("%d",&n); 9 if(n%2) 10 printf("n是奇数.\n"); 11 else 12 printf("n是偶数.\n"); 13 return 0; 14 }
If...else if
1 /* 2 多分支if语句示例 3 输入1,2,3...的不同整数,显示不同提示信息 4 */ 5 #include <stdio.h> 6 int main() { 7 int level; 8 printf("输入现在状态等级(1-5): "); 9 scanf("%d",&level); 10 if(level == 1) 11 printf("high翻了:)\n"); 12 else if(level == 2) 13 printf("low爆了:(\n"); 14 else 15 printf("一言难尽,无法概括。。。\n"); 16 return 0; 17 }
以上三种条件语句简洁明了,没有过多解读。
Part 4 switch
1 /* 2 switch语句使用示例 3 输入1,2,3...的不同整数,显示不同提示信息 4 */ 5 #include <stdio.h> 6 int main() { 7 int level; 8 printf("输入现在状态等级(1-5): "); 9 scanf("%d",&level); 10 switch(level) { 11 case 1: printf("high翻了:)\n"); break; 12 case 2: printf("low爆了:(\n"); break; 13 default: printf("一言难尽,无法概括。。。\n"); 14 } 15 return 0; 16 }
switch语句中括号里表达式的值必须是整型或字符型;语句序列中是否有break语句会影响程序执行流程
去掉case 1和case 2最后的break, 保存并重新编译后,再次运行,分别输入1和2:
输入1:
输入现在状态等级(1-5): 1 high翻了:) low爆了:( 一言难尽,无法概括。。。 -------------------------------- Process exited after 0.5854 seconds with return value 0 请按任意键继续. . .
输入2:
输入现在状态等级(1-5): 2 low爆了:( 一言难尽,无法概括。。。 -------------------------------- Process exited after 0.4865 seconds with return value 0 请按任意键继续. . .
遇到break则跳出,否则一直执行
Part 5
1 /*编程模拟用户做选择题的情况:要求用户从键盘输入一个答案选项(A,B,C,D之一),如果用户答案是'A',则输出提示信息"Binggo, you are right~",否则,输出提示信息"try again~"。*/ 2 #include<stdio.h> 3 int main() 4 { 5 char ch; 6 printf("输入一个答案(A,B,C,D之一):") ; 7 ch=getchar(); 8 switch(ch) 9 { 10 case 'A':printf("Binggo, you are right~");break; 11 default:printf("try again~");break; 12 } 13 return 0; 14 }
或
1 #include<stdio.h> 2 int main() 3 { 4 char ch; 5 printf("输入一个答案(A,B,C,D之一):") ; 6 scanf("%c",&ch); 7 switch(ch) 8 { 9 case 'A':printf("Binggo, you are right~");break; 10 default:printf("try again~");break; 11 } 12 return 0; 13 }
或
1 #include <stdio.h> 2 int main() 3 { 4 char ch; 5 printf("请输入你的答案(A,B,C or D):"); 6 scanf("%c",&ch); 7 if(ch=='A') 8 printf("bingo,you are right~"); 9 else 10 printf("try again~"); 11 return 0; 12 }
Plus:
第一次试验的十转二,我在第一篇中展示为死循环的错误结果,今终于做出如下改动:
1 #include<stdio.h> 2 int main() 3 { 4 int x,y,z=0,k=1; 5 printf("输入一个正整数\n"); 6 scanf("%d",&x); 7 while(x!=0||y!=1) 8 { 9 y=x%2; 10 x/=2; 11 z+=y*k; 12 k*=10; 13 } 14 printf("%d\n",z); 15 return 0; 16 }
即:改变了while括号中的条件,但仅能计算十进制为1~1023的数。之后将继续不断改进。
评论地址:
https://www.cnblogs.com/jiuyuan/p/10645894.html
https://www.cnblogs.com/nuist-tyl/p/10643576.html
https://www.cnblogs.com/NyaNyaGoose/p/10640071.html