实验二
Part 1
各种修饰符的使用,自己输过之后印象会比较深。
格式化输入输出函数及格式符使用练习,改正后的源代码如下:
1 #include <stdio.h> 2 int main() { 3 float x,y; 4 char c1,c2,c3; 5 int a1,a2,a3; 6 scanf("%d%d%d",&a1,&a2,&a3); 7 printf("%d,%d,%d\n",a1,a2,a3); 8 scanf("%c%c%c",&c1,&c2,&c3); 9 printf("%c%c%c\n",c1,c2,c3); 10 scanf("%lf,%1f",&x,&y); 11 printf("%f,%1f\n",x,y); 12 return 0; 13 }
运行结果:

第一个错误是第6行没有加&,从键盘输入的数据找不到该去的地方了。第二个是第十行,要得到长整形的数据输入时就要按长整形输入。
Part 2
putchar和getchar函数,只能用于单个字符,格式分别为putchar()和getchar(),括号里是要输出或输入的字符或者是表示字符的常量,括号里也可以用转义字符,要直接输出单个字符是要给字符加单引号。
Part 3
if和else语句,if()或者else()括号里是判断表达式,表达式真就执行后面的语句,假就进入另一个分支。if和else是一个完整的语句,所以if表达式后面是没有‘;’的,否则编译时会提示else前没有匹配的if。if可以单独出现,但是else不可以。
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 { 12 case 1: printf("high翻了:)\n"); break; 13 case 2: printf("low爆了:(\n"); break; 14 default: printf("一言难尽,无法概括。。。\n"); 15 } 16 return 0; 17 }
这段代码能正常运行,得到预期的结果。感觉这个效果和条件语句一样,都是判断条件然后选择性地执行,得到不同条件对应的结果。但是表达上有些不一样,case后面只能是常量表达式,情况多的时候就很麻烦,在if里可以用一个表达式表示范围,但是用switch就要一个一个写出来。感觉也就情况少的时候能用一下。
去掉break后的运行结果:


输入的level从第一个case开始判断,判断为符合条件时执行后面的语句,遇到break结束,若没有遇到break则继续执行下一个case,直到遇到break结束这个switch语句。有时遇到好几个case使用同一个语句时就不用每条都加break了,在最后一个case后面加就行。
Part 5
源代码:(分别用if和switch语句编写)
1 //要求用户从键盘输入一个答案选项(A,B,C,D之一),如果用户答案是'A',则输 2 //出提示信息"Binggo, you are right~",否则,输出提示信息"try again~" 3 #include <stdio.h> 4 int main(){ 5 char answer; 6 printf("请输入你的答案(A,B,C or D):"); 7 scanf("%c",&answer); 8 if(answer=='A') 9 printf("Binggo, you are right~\n"); 10 else 11 printf("try again~\n"); 12 return 0; 13 }
1 //要求用户从键盘输入一个答案选项(A,B,C,D之一),如果用户答案是'A',则输 2 //出提示信息"Binggo, you are right~",否则,输出提示信息"try again~" 3 #include <stdio.h> 4 int main(){ 5 char answer; 6 printf("请输入你的答案(A,B,C or D):"); 7 scanf("%c",&answer); 8 switch(answer){ 9 case 'A':printf("Binggo, you are right~\n");break; 10 default :printf("try again~\n");break; 11 }
运行结果:


注意:字符要加‘’
part 6
从一本书上看到了一个输出星号,使之排列成三角形团的变成题目,刚好上课讲循环的时候讲了一个差不多的例子,于是想试着用循环语句写一下。脑阔疼就这么开始了(可能因为我比较菜吧)······
先看源代码(题目包含在注释中):
1 /*编写程序输出下列字符 2 ******* 3 ***** 4 *** 5 * 6 */ 7 8 #include <stdio.h> 9 int main(){ 10 char x; 11 int b,length,c,d; 12 x='*'; 13 c=1;d=c; 14 b=7;length=b; 15 while (b>=1&&d<=4) 16 { 17 while(b>=1) //行内循环输出b个星号 18 { 19 printf("%c",x); 20 b=--b; 21 } 22 length=length-2; //执行完第17行的while后b的值为1,把length重新赋值给b 23 b=length; 24 25 printf("\n"); //输完一行换行 26 27 while(c>=1) 28 { 29 printf(" "); 30 c=--c; 31 } 32 d=d+1; 33 c=d; 34 } 35 return 0; 36 }
运行结果:

其实呢,我原本的想法是,每一行的星号个数都是有规律的,那么就让电脑计算一串星号的长度(我记得有个sizeof函数),然后每行递减两个,这样只要写出第一行星号就行了,而且不管第一行有几个星号(奇数个的)都可以一直输出到最后只剩下一个星号位为止。但是······设想太丰满了。我只能想到这么一个大概的想法,但是完全不知道该怎么实现······
感觉就不是很熟练吧。于是我从一个星号开始,写到一行星号,然后让每行的星号数量都不一样,再考虑行前的空格。分成三个部分,先画出行内循环的流程图,空格的循环是一样的,然后再把它们用一个大的循环连接起来。b的值时固定的,,但每行循环的次数不一样,要继续下一行循环,就要给b重新赋值,所以又定义了一个length。空格的循环同理。中间困扰的问题是循环条件的推算和通过中间变量重新赋值,还有循环的顺序问题吧,写着写着就解决了。
感受:流程图要好好画,这样能节省很多时间,不然感觉没有思路不知道怎么办。还有变量的命名最好能看出来代表什么,这样看着就比较直观,因为感觉自己写的变量一多看着就比较乱。最后,最重要的感悟就是一定要确认文件的保存!昨天打开电脑想写作业的时候发现找不到最后修改的那个代码了,然后流程图也淹没在草稿里了,所以又修改了一遍······
虽说技术含量不是很高,成功运行那一瞬间还是超有满足感的:)这个程序缺点是只能输出如图的星号,要想按这个规律再多出一行,要改动的数据会比较多。好像还是一开始的想法比较简洁???写完现在这个之后现在好像又有点思路了,这周再尝试一下吧。
事后看起来真是风轻云淡呢:)一闪一闪亮晶晶,满天都是小星星***

浙公网安备 33010602011771号