实验一顺序结构程序设计
一、实验目的
1.掌握C语言中使用最多的一种语句——赋值语句的使用方法。
2.掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
二、实验的内容和步骤
1.以下程序多处有错。要按下面指定的形式输入数据和输出数据时,请对该程序做相应的修改。
#include<stdio.h>
void main()
{double a,b,c,s,v;
printf(input a,b,c:\n);
scanf("%d%d%d",a,b,c);
s=a*b;
v=a*b*c;
printf("%d%d%d",a,b,c);
printf("s=%f\n",s,"v=%d\n",v);
}
当程序执行时,屏幕的显示和要求输入形式如下:
input a,b,c:1.0  2.0  3.0→此处的1.02.03.0是用户输入的数据
a=1.000000b=2.000000,c=3.000000→此处是要求的输出格式
s=2.000000,v=6.000000
相关知识:①检查程序错误时应注意几点:
a)有时程序中一个错误会引发一系列错误信息,工作中不应被这种情况所迷惑,改正了一些错误后应及时对源程序重新进行编译;
b)如果修改错误时增删了行,或是一个行里有多个错误,更正前面错误时增删了字符,就可能导致系统对错误定位不准,此时应该重新编译;
c)系统给出的警告信息一般都说明程序中有问题,因为系统发现了可疑情况。对于警告信息同样要逐个仔细分析。除非明确认定不是问题,否则绝不能简单地认为不是错误而不予理睬。实际上,很多警告都是因为程序中确实有严重的隐含错误。
d)在连接中发现新错误也需要仔细检查和修改程序。连接时发现的错误一般是由于函数名或外部变量名字写错,或者一些函数、外部变量没有定义引起的。系统不能对连接错误给以自动定位,只能提供有关的名字信息等。对于这类问题,可以借助编辑器的字符串查命令进行定位。
②正确调用scanf函数和printf函数构成输入和输出语句。
2.有以下程序
#include<stdio.h>
void main()
{char c1,c2;
int n1,n2;
c1=getchar();
c2=getchar();
n1=c1-'0';
n2=n1*10+(c2-'0');
printf("%d\n",n2);
}
程序运行时输入:12<;回车>,执行后输出结果是什么?
相关知识:①getchar()函数用来输入两个字符分别赋给变量c1和c2;
②n1=c1-'0'相当于n1='1'-'0',字符1的ASCII码值比0大一,所以n1中的值为1,c2-'0'相当于'2'-'0';
③把字符串转换为多位数的算法。
3.若有以下程序
#include<stdio.h>
void main()
{int i,j;
int x,y;
scanf("i=%d,j=%d",&i,&j);
scanf("%d%d",&x,&y);
printf("i=%d,j=%d\n",i,j);
printf("%4d%4d\n",x,y);
}
要求给i赋值为10,j赋值为20,给x赋值为100,y赋值为200,则应该怎样从键盘输入数字?
相关知识:①在调用scanf()函数时在格式串中若包含有格式描述符之外的字符时,则要求在输入数据时在对应的位置上输入完全匹配的字符;
数学数组的定义是什么②scanf()函数只包含格式描述符时可用跳格键Tab、空格和回车分隔数据;
③在调用printf()函数时在格式串中若包含有格式描述符之外的字符时,则在输出数据时在对应的位置上输出完全匹配的字符,%d之类的格式符位置输出对应输出项的值;故输出时要注意插入适当的非格式符以便区分各个输出结果。
4.计算定期存款本利之和
设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之
和deposit。要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。
5.键盘输入与屏幕输出练习
问题1要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的。
#include<stdio.h>
main()
{
char a,b;
int c;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
}
A)1234B)1,2,34
C)’1’,’2’,34D)1234
问题2在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1234,则应修改程序中的哪条语句?怎样修改?
问题3要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?
问题4要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为'1','2',34,则应修改程序中的哪条语句?怎样修改?
[提示:利用转义字符输出字符单引号字符。]
问题5要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'1','2',34,则程序应修改程序中的哪条语句?怎样修改?
第1种输入方式:1,2,34↙(以逗号作为分隔符)
第2种输入方式:1234↙(以空格作为分隔符)
第3种输入方式:1234↙(以Tab键作为分隔符)
第4种输入方式:1↙
2↙
34↙(以回车符作为分隔符)
实验二逻辑结构程序设计
一、实验目的
1.了解C语言表示逻辑量的方法。
2.学会正确使用逻辑运算符和逻辑表达式
3.熟练掌握if语句和switch语句。
4.结合程序掌握一些简单的算法。
5.学习调试程序。
二、实验内容
1.若输入10,20,30则程序的执行结果是20,30,10请填充c30104.c程序。
#include“stdio.h”
void main()
{int a,b,c;______________;
_________________;
_________;a=b;b=c;__________;
printf("%d,%d,%d",a,b,c);
}
2.源程序中包含有一些错误,调试下列程序,使之具有如下功能:输入a、b、c三个整数,求最小值。
#include“stdio.h”
void main()
{int a,b,c;
scanf("%d%d%d",a,b,c);
if((a>b)&&(a>c))
if(b<c)
printf("min=%d\n",b);
else
printf("min=%d\n",c);
if((a<b)&&(a<c))
printf("min=%d\n",a);
}
再次运行程序,输入为“2,1,3”,程序输出却是“min=2”。用单步执行的方法,马上发现变量a、b、c的值是不对的,原因是程序要求输入数据的分隔符是空格(还允许使用回车或<Tab>键)。改正输入数据的分隔方式后,程序没有输出,还是用单步执行的方法,监视程序的执行过程,发现程序中条件设计有误,经过改正的程序如下:#include“stdio.h”
void main()
{int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if((a<b)&&(a<c))
printf("min=%d\n",a)
else if((b<a)&&(b<c))
printf("min=%d\n",b);
else if((c<a)&&(c<b))
printf("min=%d\n",c);
else
printf("No find minimum\n");
}
上述程序是按在三个数中仅有一个最小值时才称其为最小值进行设计的。另外,注意程序的书写格式,一定要采用缩进格式,即不同层次(分支)的语句左起的空格不同,这样可以有效地提高程序的可读性。
相关知识:①类似a<b<c 表达式的表示方法;②if 语句的嵌套;③调试工具的使用。④求最值的简单算法。3.参考上一题,编写一个C 程序,求a 、b 、c 、d 四个数中的最大者。
编程点拨:
①多定义一个变量,并一开始令变量max=a;
②if(max<b)max=b;其余多个数据中求最值依此类推。
4.输入4个整数,要求按由小到大顺序输出。得到正确结果后,修改程序使之按由大到小顺序输出。
相关知识:①输入函数scanf()的使用;②简单的排序算法;③通过中间变量t 交换a 和b 值的方法:t=a;a=b;b=t;。5.根据以下函数关系,对输入的每个x 值,计算出相应的y
值。
4310≤≤≤≤x x 当x 取其他值时#include #include
void main()
{float x,y;
scanf("%f",&x);
if (
)y=
;else
if ()y=;else
printf("x=%f,y=%f",x,y);
}
相关知识点:if 语句的嵌套;数学函数的调用方式。
6.模仿第5题,写程序实现以下函数:⎪⎩
⎪⎨⎧≥-<≤-<=)10(113)
101(12)1(x x x x x x y 用scanf 函数输入x 的值,求y 值。运行程序,输入x 的值(分别为x<1、1≤x<10、x≥10三种情况),
检查输出的y 值是否正确。
相关知识:①用if 的嵌套实现分段函数;②比较运算符的正确使用;③算术运算符*的正确使用。
7.阅读分析以下程序的功能。
#include <stdio.h>
void main()
{int choice;
int value;
printf("Convert:\n");/*显示菜单*/
printf("1:decimal to hexadecimal\n");
printf("2:hexadecimal to decimal\n");
printf("3:decimal to octal\n");
printf("4:octal to decimal\n");
printf("enter your choice:");
scanf("%d",&choice);
switch(choice)
{case1:/*选中1时处理*/
printf("enter decimal value:");
scanf("%d",&value);
printf("%d in hexadecimal is:%x\n",value,value);
break;
case2:/*选中2时处理*/
printf("enter hexadecimal value:");
scanf("%x",&value);
printf("%x in decimal is:%d\n",value,value);
break;
case3:/*选中3时处理*/
printf("enter decimal value:");
scanf("%d",&value);
printf("%d in octal is:%o\n",value,value);
break;
case4:/*选中4时处理*/
printf("enter octal value:");
scanf("%o",&value);
printf("%o in decimal is:%d\n",value,value);
break;
}
}
相关知识:①用switch语句实现菜单的方法;②数制转换的方法。
8.编写程序,要求对输入的数字1~7转换成文字星期几,对其它数字不转换。例如,输入5时,程序应该输出Friday。
①编辑、调试和运行该程序,然后输入4。其输出结果是什么?为什么是这样的结果?
②该程序有哪些错误?如何修改?
相关知识:①switch语句的正确使用;②break在switch语句中的作用。
实验三循环控制
一、实验目的
1.熟练掌握用while语句、do while语句和for语句实现循环的方法。
2.掌握在程序设计中用循的方法实现一些常用算法。并进一步学习调试程序的方法。
3.掌握一维数组和二维数组的定义、赋值和输入输出的方法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。