实验二 格式化输入输出和分支语句

                                        实验2 格式化输入输出和分支语句

实验目的
1. 掌握格式字符的使用方法,特别是%d, %f, %c, %s的基础用法,以及%lf和%ld使用注意事项
2. 掌握格式化输出函数printf()和格式化输入函数scanf()的用法
3. 掌握单个字符输出函数putchar()和单个字符输入函数getchar()的用法
4. 理解分支结构,掌握if语句和if...else语句的用法
5. 掌握switch语句的用法
实验内容

Part1: 格式化输出函数printf()和格式化输入函数scanf()

ex1

#include <stdio.h>
int main() {
	int x=1234;
	float f=123.456;
	double m=123.456;
	char ch='a';
	char a[]="Hello, world!"; // 定义一个数组a,数组中连续存放了字符串常量hello,world!
	int y=3, z=4; 
	printf("%d %d\n", y, z);
	printf("y=%d, z=%d\n", y,z);
	printf("%8d,%2d\n", x,x);
	printf("%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f);
	printf("%lf\n",m);
	printf("%3c\n", ch);
	printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a);
	return 0;
}

  

分析:

1.line16   

%8d表示后面的x宽度为8,故输出的1234前有四个空格;

“%2d”表示x宽度为2,右对齐的方式输出,整型数位数超过了宽度按实际整数位输出。

2.Line17   

“%f”输出浮点数,以小数形式输出,默认保留六位。浮点数为近似数,在电脑中以二进制保存产生溢出,精确度改变。

“%8f"表示宽度为8,右对齐输出。

“%8.1f”  数据8表示宽度,其中小数点占一位。数据1表示保留小数点后一位有效数字,这里123.456小数点后保留一位四舍五入为123.5。其中123.5只有五位但宽度为8,故补三位空格。

“%.2f”表示小数保留两位,整数部分按实际输出。

“%.2e”其中  %e是以指数形式输出,2是指输出的小数部分的位数。

3.Line18

“%lf”表示按double类型输出,双精度长浮点型有效数字长,为精确数。所以输出123.456000而不是123.456001.

4.Line19

“%3c”表示字符宽度为三,故输出a前有两位空格。

5.Line20

“%15s”表示输出字符串长度为15

“% 10.5s”表示字符串宽度为10,后面.5表示从左取五位,后面同理。  

ex2

       

#include <stdio.h>
int main() {
	double x,y;
	char c1,c2,c3;
	int a1,a2,a3;
	scanf("%d%d%d",&a1,&a2,&a3);
	printf("%d,%d,%d\n",a1,a2,a3);
	scanf("%c%c%c",&c1,&c2,&c3);
	printf("%c%c%c\n",c1,c2,c3);
	scanf("%lf,%lf",&x,&y);
	printf("%lf,%lf\n",x,y);
	return 0;
} 

 分析:

错误1:scanf()中a1,a2,a3前未加地址符&

错误2:%f应改为%lf

Part2: 验证性内容
ex3
 
将中间代码换掉后
 #include <stdio.h>
 int main() {
 	double a,b,c;
 	scanf("%lf %lf %lf", &a, &b, &c);
 	
 	if(a<0 || b<0 || c<0) 
 		printf("不能构成三角形\n");
 	else if(a+b>c && a+c>b && b+c>a) {
	 
 		if(a==b || a==c|| b==c){
 			if(a==b && a==c)
 			printf("构成等边三角形\n");
 		else
 		    printf("构成等腰三角形\n");}
	
	else
      	printf("构成一般三角形\n");}
		  else
		  printf("不能构成三角形");	 	
 	return 0;
} 

  输出的结果不变。

ex4

#include <stdio.h>
#include <stdlib.h>
int main() {
	char choice;
	
	// 显示菜单 
	printf("输入0~9以内的数字,选择屏幕背景色前景色方案: \n");
	printf("1-\t黑底绿色\n");
	printf("2-\t白底黑色\n");
	printf("3-\t蓝底白色\n");
	printf("其它-\t黑底白色(默认)\n");
	printf("\n请输入, 选择你想使用的屏幕配色方案:    ");
	
	// 要求用户从键盘输入0~9的数字,选择屏幕配色方案 
	choice = getchar();
	
	// 根据用户输入,设置屏幕配色方案 
	if (choice == '1') {
		system("color 02");
		printf("《黑客帝国》一类的影视剧常见这种屏幕色:)\n"); 
	} 
		
	else if(choice == '2') {
		system("color f0");
		printf("大部分编辑器默认是这种配色:)\n");	
	}
		
	else if(choice == '3') {
		system("color 1f");
		printf("这是机器蓝屏故障时的不讨喜色:)\n");
	}
		
	else {
		system("color 0f");
		printf("控制台程序默认小黑窗:)\n");		
	}
		
		
	printf("programming is fun, just try@_@\n");
	
	
	return 0;
} 

  结果

如果把line11中用于存放用户选择的choice类型改成int,修改程序代码,使其依然能够满足题目要求。
 
#include <stdio.h>
#include <stdlib.h>
int main() {
	int x;
	
	// 显示菜单 
	printf("输入0~9以内的数字,选择屏幕背景色前景色方案: \n");
	printf("1-\t黑底绿色\n");
	printf("2-\t白底黑色\n");
	printf("3-\t蓝底白色\n");
	printf("其它-\t黑底白色(默认)\n");
	printf("\n请输入, 选择你想使用的屏幕配色方案:    ");
	
	// 要求用户从键盘输入0~9的数字,选择屏幕配色方案 
	scanf("%d",&x);
	
	// 根据用户输入,设置屏幕配色方案 
	if (x == 1) {
		system("color 02");
		printf("《黑客帝国》一类的影视剧常见这种屏幕色:)\n"); 
	} 
		
	else if(x == 2) {
		system("color f0");
		printf("大部分编辑器默认是这种配色:)\n");	
	}
		
	else if(x == 3) {
		system("color 1f");
		printf("这是机器蓝屏故障时的不讨喜色:)\n");
	}
		
	else {
		system("color 0f");
		printf("控制台程序默认小黑窗:)\n");		
	}
		
		
	printf("programming is fun, just try@_@\n");
	
	
	return 0;
} 

  结果相同。

part3: 编程练习
从键盘上输入一个三位数以内的十进制整数,判断其是否满足正序、逆序相同。
#include<stdio.h>
int main(){
int a,b,c;
	printf("请输入一个三位数以内的十进制整数:\n");
	printf("计算其逆序数。。。\n");
	scanf("%d",&a);
	b=a/10+a/10*10;
	c=a/100+(a/10)%10*10+a/100*100;
	if(a<1||a>999)
	printf("拜托看看题目好不啦!");
	else if(a>=1&&a<10)
	printf("%d正序与逆序相同",a);
	else if(a<=99&&a>=10){
	
	if(a==b)
		
	printf("%d正序与逆序相同",a);
	else
	printf("%d正序与逆序不同",a);
	}
	else if(a>=100&&a<=999){
	if(a==c)
	printf("%d正序与逆序相同",a);
	else
	printf("%d正序与逆序不同",a);
	}

	return 0;
} 

  

  • 从键盘上输入年份和月份,计算该月有多少天。

代码

 
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int year,month,day,leapyear;
	scanf("%d %d",&year,&month);
	if(year<0||month<1||month>12)
	{
		printf("输入的数据错误!\n");
		exit(0);
	}
	leapyear=year%4==0&&year%100!=0||year%400==0;
	if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
	day=31;
	else if(month==4||month==6||month==9||month==11)
	day=30;
	else
	day=28+leapyear; 
	printf("%d年%d月的天数为:%d\n",year,month,day);
	return 0;
 } 

  

 
  •  从键盘输入一个百分制成绩(整型量),要求输出成绩等级:优秀、良好、中等、及格、不及格。

代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int score;
	printf("输入数据(0~100):");
	scanf("%d",&score);
	if(score<0||score>100)
	{
		printf("分数不在有效区间内\n");
		exit(0);
	}
	switch(score/10)
	{
		case 10:
		case 9:printf("优秀\n");break;
		case 8:printf("良好\n");break;
		case 7:printf("中等\n");break;
		case 6:printf("及格\n");break;
	    default:printf("不及格\n");break; 
	}
	return 0;
}

  运行结果

实验总结与体会
1.输入输出()后要加;%d %d如果有空格输入时也要加空格。输入字符时与前面之间不加空格。
2.对于switch使用不熟,default容易拼错。if与else之间的关系不够清晰。
3.踩坑:case后不能直接加数字,需要先加空格。
             地址符&忘加。
 

               if里的{}容易和其他的{}弄混。

                                                                                         

猜你喜欢

转载自www.cnblogs.com/nuist123-4/p/11795670.html