实验10C语言运行环境.docx
《实验10C语言运行环境.docx》由会员分享,可在线阅读,更多相关《实验10C语言运行环境.docx(28页珍藏版)》请在冰豆网上搜索。
实验10C语言运行环境
实验1---0C语言运行环境
演示程序2:
#include
intmain()
{
inta,b,sum;
a=123;
b=456;
sum=a+b;
printf("sumis%d\n",sum);
return0;
}
演示程序3:
#include
intmax(intx,inty)
{intz;
if(x>y)z=x;elsez=y;
return(z);
}
intmain()
{inta,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("max=%d\n",c);
return0;
}
程序4:
求整数10、20和35的平均值。
演示程序4:
#include
intmain()
{
inta,b,c,sum;
doubleaverage;
a=10;b=20;c=35;
sum=a+b+c;
average=sum/3.0;
printf("average=%f\n",average);
return0;
}
1.输入下面的程序:
#include
voidmain()
{
charc1,c2;
c1='a';
c2=‘b’;
printf(“%c%c\n”,c1,c2);
}
(1)运行此程序;
(2)在程序的最后增加语句“printf(“%d%d\n”,c1,c2);”再运行,并分析结果;
(3)将程序的第4行“charc1,c2;”改为“intc1,c2;”后再运行,并分析结果;
(4)将程序的第5、6行改为:
c1=a;/*不用单撇号*/
c2=b;
再运行,并分析结果;
运行出现一个错误。
因为a,b是常量字符,将它赋值给一个变量字符,不能运行。
(5)再将程序的第5、6行改为:
c1=”a”;/*用双撇号*/
c2=”b”;
再运行,并分析结果;
(6)再将程序的第5、6行改为:
c1=300;/*用大于255的整数*/
c2=400;
再运行,并分析结果。
2.输入以下程序:
#include
voidmain()
{
charc1=‘a’,c2=‘b’,c3=‘c’,c4=‘\101’,c5=‘\116’;
printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c%c”,c4,c5);
}
先用人工分析程序,写出应得结果,再与运行结果比较。
应输出:
aabbccabcAN
3.输入并运行下面的程序
#include
voidmain()
{
inta,b;
unsignedc,d;
longe,f;
a=100;
b=-100;
e=50000;
f=32767;
c=a;
d=b;
printf(“%d,%d\n”,a,b);
printf(“%u,%u\n”,a,b);
printf(“%u,%u\n”,c,b);
c=a=e;
d=b=f;
printf(“%d,%d\n”,a,b);
printf(“%u,%u\n”,c,d);
}
请对照程序和运行结果分析:
(1)将一个负整数赋给一个无符号的变量,会得到什么结果;
原样输出。
(2)将一个大于32767的长整数赋给整型变量,会得到什么结果;
原样输出。
(3)将一个长整型数赋给无符号变量,会得到什么结果(分别考虑该长整数的值大于或等于65535以及小于65535的情况)。
大于或等于65535时:
原样输出;小于65535时:
原样输出。
同学们可以改变程序中各变量的值,以便比较。
例如:
a=65580,b=-40000,e=65535,f=65580。
4.输入以下程序:
#include
voidmain()
{
inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d\n”,i,j,m,n);
}
(1)运行程序,分析变量:
i、j、m、n的值
(2)将第7、8行改为:
m=i++;
n=++j;
再运行并分析结果;
(3)将程序改为:
#include
voidmain()
{
inti,j;
i=8;
j=10;
printf(“%d,%d\n”,i++,j++);
}
运行并分析结果;
(4)在(3)的基础上,将printf语句改为:
printf(“%d,%d”,++i,++j);
运行并分析结果;
(5)再将printf语句改为:
printf(“%d,%d,%d,%d”,i,j,i++,j++);
运行并分析结果;
(6)将程序改为:
#include
voidmain()
{
inti,j,m=0,n=0;
i=8;
j=10;
m+=i++;n-=--j;
printf(“i=%d,j=%d,m=%d,n=%d\n”,i,j,m,n);
}
最后,对这次实验作一个简要的总结。
1.阅读下面的程序,说明其功能,然后运行并观察分析结果。
程序一:
#include
voidmain()
{
intx,y;
printf(“Enterintegerxandy:
\n”);
scanf(“%d%d”,&x,&y);
printf(“x=%d,y=%d\n”,x,y);
if(x>y)printf(“x=%d\n”,x);
if(y>x)printf(“y=%d\n”,y);
if(x==y)printf(“x=y=%d\n”,x);
}
功能:
判断两个数的大小,然后分别输出相应的值;
分析:
无论x>y或y>x,都分别输出x和y的值,若x==y,则输出x。
程序二:
#include
voidmain()
{
inta,b,c,t;
printf(“inputintegera,b,c:
\n”);
scanf(“%d%d%d”,&a,&b,&c);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;}
printf(“%d,%d;%d\n”,a,b,c);
}
功能:
将a,b,c按小到大的顺序排列。
分析:
若if句成立,则运行后面花括号的结果。
程序三:
#include
voidmain()
{
intn;
printf(“Enterintegern:
”);
scanf(“%d”,&n);
if(n%2)
printf(“n=%disodd.\n”,n);
else
printf(“n=%diseven.\n”,n);
}
功能:
判断输出n的值为奇数还是偶数。
分析:
若输入n的值为奇数,则输出“n=11isodd”,若输入n的值为偶数,则输出“n=12iseven”。
程序四:
#include
voidmain()
{
intn;
printf(“Enterintegern:
”);
scanf(“%d”,&n);
printf(“n=%d\n”,n);
if(n>=90)
printf(“A\n”);
elseif(n>=80)
printf(“B\n”);
elseif(n>=70)
printf(“C\n”);
elseif(n>=60)
printf(“D\n”);
else
printf(“E\n”);
}
功能:
通过判断输入的成绩,输出相应的等级。
分析:
若n>=90,为A等,若n>=80,为B等,若n>=70,为C等,若n>=60,为D等,其余为E等。
程序五:
#include
voidmain()
{
inta=3,b=4,c=5,d=0;
if(a>b)
d=a;
else
if(c>b)
d=c;
else
d=b;
printf("d=%d\n",d);
}
功能:
判断最大值。
分析:
判断定义的a,b,c,d,找出最大值,然后附值给d,然后输出d。
程序六:
#include
voidmain()
{
intc;
scanf("%d",&c);
if(‘0’<=c&&c<=‘9’)/*条件表达式*/
{
c=c-‘0’;
printf("c=%d\n",c);
}
else
printf("dataerror!
\n");
}
功能:
根据条件,得出结果。
分析:
若满足条件,则运行c=c-‘0’。
并输出相应的值。
2.对于如下函数:
编写程序,用scanf函数输入x的值,求y值。
程序:
#include
intmain()
{intx,y;
printf("输入x:
");
scanf("%d",&x);
if(x<1)
{y=x;
printf("x=%3d,y=x=%d\n",x,y);
}
else
if(x<10)
{y=2*x-1;
printf("x=%d,y=2*x-1=%d\n",x,y);
}
else
{y=3*x-11;
printf("x=%d,y=3*x-11=%d\n",x,y);
}
return0;
}
运行程序,输入x的值(分别为x<1、1≤x<10、x≥10三种情况,如0.5、8、15),检查输出的y值是否正确。
x=0.5
不正确,因为x,y已经被定义为整型。
x=8
正确
x=15
正确
3.将第1题的程序四中的if语句改用switch语句实现,写出程序并运行。
程序:
#include
intmain()
{floatscore;
chargrade;
printf("请输入学生成绩:
");
scanf("%f",&score);
while(score>100||score<0)
{printf("\n输入有误,请重输");
scanf("%f",&score);
}
switch((int)(score/10))
{case10:
case9:
grade='A';break;
case8:
grade='B';break;
case7:
grade='C';break;
case6:
grade='D';break;
case5:
case4:
case3:
case2:
case1:
case0:
grade='E';
}
printf("成绩是%5.1f,相应的等级是%c\n",score,grade);
return0;
}
5.编写程序,用scanf函数输入一个年份year,计算这一年2月份的天数days,然后用输出函数printf输出days。
实验步骤与要求:
(1)有变量定义为整型。
(2)输入前要加提示语句。
(3)输出结果前要有必要的文字说明。
说明:
(1)闰年的条件是:
year能被4整除但不能被100整除,或者year能被400整除。
(2)如果year是闰年,则2月份的天数为29天,不是闰年则为28天。
最后,对这次实验作一个简要的总结。
程序:
#include
intmain()
{
intyear;
intr;
printf("请输入年份:
");
scanf("%d",&year);
r=year%400==0||year%100!
=0&&year%4==0;
printf("这一年二月有%d\n天",28+r);
return1;
}
总结:
平常多看书,才做得快。
1.编写输入m和n(其中,m程序:
#include
intmain()
{inti,s=0,m,n;
scanf("%d,%d",&m,&n);
for(i=m;i<=n;i++)
s=s+i;
printf("%d\n",s);
return0;
}
结果:
2.下面程序的功能是计算n!
。
#include
intmain()
{
inti,n,s=1;
printf("Pleaseentern:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*i;
printf("%d!
=%d\n",n,s);return0;
}
首次运行先输入n=4,输出结果为4!
=24,这时是正确的。
为了检验程序的正确性,再输入n=10,输出为10!
=24320,这显然是错误的。
为了找到程序的错误,可以通过单步执行来观察变量的变化。
分析产生这种现象的原因,把程序改正过来,再用n=20进行实验,分析所得到的结果。
程序:
#include
intmain()
{
inti,n;
doubles=1;
printf("Pleaseentern:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*i;
printf("%d!
=%f\n",n,s);return0;
}
结果:
3.下列程序用于输出fibnocci数列的前20项,每行输出5个。
请补充完整后运行。
/*fibnocci数列的前两项均为1,以后各项等于其前两项之和。
*/
#include
intmain()
{
inti,f1,f2,f3,n;
f1=1;f2=1;
printf("\n%5d%5d",f1,f2);
n=2;
for(i=1;i<=20;i++)
{
if(n%d==0)printf("\n");
f3=f2+f1;
printf("%5d",f3);
n++;
f1=f2;
f2=f3;
}return0;
}
4.编写程序,输出100以内能被7整除的数。
提示:
对7~100的每一个数进行测试,如该数不能被7整除,即模运算不为0,则由continue语句转去下一次循环。
只有模运算为0时,才能执行后面的printf语句,输出能被7整除的数。
程序:
#include
intmain()
{inti,n;
scanf("%d",&n);
for(i=7;i<=n;i++)
if(i%7==0)
printf("%d\n",i);
}
5.编写程序打印图形
1
121
12321
1234321
123454321
1234321
12321
121
1
提示:
分别使用递增循环和递减循环完成,先把图形分成两部分来看待,前五行一个规律,后四行一个规律。
每一部分利用双重for循环,外循环控制行,内循环控制列。
内循环又有两个并列的for循环,一个控制空格的输出,一个控制数据的输出。
程序:
#include
intmain()
{
inti,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=5-i;j++)
printf("");
for(j=1;j<=i;j++)
printf("%2d",j);
for(j=i-1;j>=1;j--)
printf("%2d",j);
printf("\n");
}
for(i=4;i>=1;i--)
{
for(j=1;j<=5-i;j++)
printf("");
for(j=1;j<=i;j++)
printf("%2d",j);
for(j=i-1;j>=1;j--)
printf("%2d",j);
printf("\n");
}
return0;
}
结果:
用公式求PI的近似值,直到发
现某一项的绝对值小于10-6为止(该项不累计加)。
程序:
#include
#include"math.h"
intmain()
{
intsign=1;
doublepi=0.0,n=1.0,term=1.0;
while(fabs(term)>=1e-6)
{
pi=pi+term;
n=n+2;
sign=-sign;
term=sign/n;
}
pi=pi*4;
printf("pi=%10.8f\n",pi);
return0;
}
结果:
1.调试下列程序,使之具有如下功能:
输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。
#include
intmain()
{
inti,n,a[10],av;
for(i=0;iscanf("%d",a[i]);
for(i=0;i{printf("%d",a[i]);
if(i%3==0)
printf("\n");
}
for(i=0;i!
=n;i++)
av+=a[i];
printf("av=%f\n",av);
return0;
}
上面给出的程序是完全可以运行的,但是运行结果是完全错误的。
调试时请注意变量的初值问题、输出格式问题等。
程序:
#include
intmain()
{
inti,n,a[10];
floatav,sum=0;
for(i=0;i<10;i++)
scanf("%5d",&a[i]);
for(i=0;i<10;i++)
{printf("%5d",a[i]);
if((i+1)%3==0)
printf("\n");
}
for(i=0;i<10;i++)
sum=sum+a[i];
av=sum/10;
printf("\nav=%5f\n",av);
return0;
}
结果:
6.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
程序:
#include
voidmain()
{
inti,j,m,n,a[10];
printf("请输入10个整数:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
m=i;
for(j=m+1;j<10;j++)
if(a[m]m=j;
n=a[i];
a[i]=a[m];
a[m]=n;
}
printf("从大到小排好顺序输出:
\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}
7.输入两个字符串,找出其中较大者。
程序:
#include
#include
intmain()
{
charstr[2][10];
charstring[10];
inti;
for(i=0;i<2;i++)
gets(str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
printf("\nthelargeststringis:
\n%s\n",string);
return0;
}
结果:
8.将一个数组中的值按逆序重新存放。
例如:
原来顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
程序:
#include
intreverse(inta[],intn)
{
intp=a+n-1;
intt;
while(a
t=p,p=a,a=t;
}
intmain()
{
inta[5]={8,6,5,4,1};
inti;
reverse(a,5);
for(i=0;i<5;i++)
printf("%d",a[i]);
printf("\n");
return0;
}
5.输入4名学生的姓名及三门课成绩,打印学生成绩表。
(姓名、三门课成绩、平均分)。
程序:
#include
voidmain()
{
charname[4][30];
doublescore[4][4]={0.0};
inti=0,j;
printf("********请输入4名学生的名字和三门成绩********\n");
for(i=0;i<4;++i){
printf("姓名:
");
scanf("%s",name[i]);
for(j=0;j<3;j++)
{
printf("第%d门成绩:
",j+1);
scanf("%lf",&score[i][j]);
score[i][3]+=score[i][j];
}
}
//输出各科成绩和平均成绩
for(i=0;i<4;++i){
printf("%s\n",name[i]);
for(j=0;j<3;j++)
printf("第%d门成绩:
%lf\n",j+1,score[i][j]