C语言.docx

上传人:b****1 文档编号:23057377 上传时间:2023-04-30 格式:DOCX 页数:31 大小:41.50KB
下载 相关 举报
C语言.docx_第1页
第1页 / 共31页
C语言.docx_第2页
第2页 / 共31页
C语言.docx_第3页
第3页 / 共31页
C语言.docx_第4页
第4页 / 共31页
C语言.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

C语言.docx

《C语言.docx》由会员分享,可在线阅读,更多相关《C语言.docx(31页珍藏版)》请在冰豆网上搜索。

C语言.docx

C语言

二读程序:

1.编写程序,输入两个整数给变量a和b,输入的大数放在a中,输入的小数放在b中,求出他们的商数和余数并进行输出。

分析:

题目已指定数据是按照先大后小次序输入,这样可以保证下面程序中变量a存放大数,变量b存放小数,可用除法运算符“/”对整数运算的特点求商,用取余运算符“%”求余数。

#include"stdio.h"

main()

{

inta,b,c,d;

printf("inputtwointegers:

\n");

scanf("%d%d",&a,&b);

c=a/b;

d=a%b;

printf("%d,%d",c,d);

}

程序解释:

第一个printf语句:

\n为回车换行符,表示输入这行话以后光标另起一行。

scanf语句:

输入a和b的值,注意输入的格式要和scanf语句里的格式相同,这里中间有一个空格,即我们输入a以后要按一下空格,再输入b;如果scanf语句是这样写scanf("%d,%d",&a,&b);那么我们输入a的值以后还要输入一个逗号,然后再输入b的值,然后按回车表示输入结束。

2.已知三条边a、b、c,求三角形面积。

计算三角形面积的海伦公式:

,其中

#include

#include

main()

{

floata,b,c,s,area;

scanf("%f,%f,%f",&a,&b,&c);

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));/*调用求平方根函数sqrt*/

printf("area=%f",area);

}

三读程序:

1.输入a、b、c三个整数,求最小值

  #include

voidmain()

{

inta,b,c;

     scanf("%d%d%d",&a,&b,&c);

     if((a

        printf("min=%d\n",a)

     elseif((b

        printf("min=%d\n",b);

     elseif((c

        printf("min=%d\n",c);

     }

2.输入1-7之间的任意数字,程序按照用户的输入输出相应的星期值

#include

voidmain()

{

intday;

scanf("%d",&day);

switch(day)

{

case1:

printf("Monday\n");break;

case2:

printf("Tuesday\n");break;

case3:

printf("Wednesday\n");break;

case4:

printf("Thursday\n");break;

case5:

printf("Friday\n");break;

case6:

printf("Saturday\n");break;

case7:

printf("Sunday\n");break;

default:

printf("Theinputiswrong!

\n");

}

}

四读程序:

1.计算sum=1!

+2!

+…+n!

#include

voidmain()

{

inti,ns=1,sum=0;

scanf(“%d”,&n);

for(i=1;i<=n;i++)

{

s=i*s;

sum=sum+s;

}

printf(“%d!

=%d”,n,sum);

}

2.从数字1开始到200之间,求能被3整除的数,然后求这些数的累加和,直到和的值不大于100为止。

输出这些数及累加和。

#include

voidmain()

{

inti,sum=0;

for(i=1;i<=200;i++)

{

if(i%3!

=0)continue;

sum=sum+i;

printf(i=%6d”,i);

}

printf(“sum=%6d”,sum);

}

3.编写程序以输出下图:

*

***

*****

***

*

#include

main()

{

inti,j,k;

for(i=0;i<3;i++)/*第一个双循环输出上面3行*号*/

{

for(j=0;j<2-i;j++)printf("");/*输出*号前面的空格*/

for(k=0;k<=2*i;k++)printf("*");/*输出*号*/

printf("\n");/*输出完一行*号后换行*/

}

for(i=0;i<2;i++)/*第二个循环嵌套输出下面2行*号*/

{

for(j=0;j<=i;j++)printf("");

for(k=0;k<3-2*i;k++)printf("*");

printf("\n");

}

}

4.求Fibonacci数列前40个数。

这个数列有如下特点,第1、2两个数为1,1。

从第三个数开始,该数是其前面两个数之和。

F1=F2=1(n=1,2)

Fn=Fn-1+Fn-2(

这是由一个古典数学问题引出的,这个问题是这样,有一对兔子,从出生第3个月起每个月都生一对兔子。

小兔子长到第三个月又生一对兔子。

假设所有兔子不死,问每个月的兔子总是多少。

这个问题就是Fibonacci数列问题。

#include

main()

{

longf1=1,f2=1;/*定义长整型变量f1,f2,以免数据溢出*/

inti;

for(i=1;i<=20;i++)

{

printf("%10ld,%10ld\n",f1,f2);/*10ld表示输出数据为长整型,10个字符位置*/

f1=f1+f2;

f2=f1+f2;

}

}

五读程序:

1.利用循环对数组进行赋值和输出:

将任意4个实型数赋给数组a,然后输出数组a。

#include

main()

{

floata[4];

inti;

printf(“Pleaseinput4floatnumber:

”);

for(i=0;i<4;i++)

scanf(“%f”,&a[i]);/*第一个for循环是对数组赋值,i控制数组元素个数*/

for(i=0;i<4;i++)

printf(“%f”,a[i]);/*第二个for循环,依次输出每个数组元素*/

}

如果在对数组元素进行赋值的时候,想在输入每个数之前显示对应的数组名称,第一个for循环可改成如下形式:

for(i=0;i<4;i++)

{

printf(“a[%d]=”,i);

scanf(“%f”,&a[i]);

}

输出时要显示数组名称可将第二个for循环中的printf函数改为

printf(“a[%d]=%f”,i,a[i]);

2利用双循环对二维数组进行赋值和输出:

将数据3,0,-2,11,-5,10赋给一个2行3列的二维数组,输出这个二维数组。

#include

main()

{

inti,j,a[2][3]={{3,0,-2},{11,-5,10}};

for(i=0;i<2;i++)/*外层循环控制行数*/

for(j=0;j<2;j++)/*内循环控制列数*/

printf(“a[%d][%d]=%d”,i,j,a[i][j]);

}

2.从键盘任意输入字符串,将其中所有的大写字母改为小写字母,而所有小写字母改为大写字母,其它字符不变。

(不调用任何字符串处理函数)

#include

main()

{

chars[100];

inti;

gets(s);

for(i=0;s[i]!

='\0';i++)

{

if(s[i]>='A'&&s[i]<='Z')

s[i]=s[i]+32;

else

if(s[i]>='a'&&s[i]<='z')

s[i]=s[i]-32;

}

puts(s);

}

六读程序:

3.猴子吃桃问题:

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃一个。

以后每天早上都吃了前一天剩下的一半加一个。

到第5天早上想再吃时,见只剩下一个桃子了,求第一天摘了多少?

#include

intfun(intp)

{

intn=1,day;

for(day=1;day<=p;day++)

n=(n+1)*2;

returnn;

}

voidmain()

{

intn,day;

printf("Pleaseinputday:

");

scanf("%d",&day);

n=fun(day);

printf("%d",n);

}

(1)算法分析:

解决此问题采取逆向思维的方法,从后往前推断。

(2)子函数分析:

本题的子函数写在主函数的上面,并设置成带有返回值,当然也可以改成不带返回值的。

参数的传递过程是将主函数中day的值传给子函数的参数p,代表已过的天数。

题目中说“到第5天早上想再吃时”,此题中的子函数可以实现任意天的计算,比如9天,8天吃光,这个值由主函数输入。

另外变量n表示猴子摘下的桃子个数。

2.编写程序,利用递归的方法计算n!

#include"stdio.h"

voidmain()

{

longfun(intn);

intn;

printf("Pleaseinputn:

");

scanf("%ld",&n);

printf("%d!

=%ld",n,fun(n));

}

longfun(intn)

{

longs;

if(n==1)return1;

else

{

s=n*fun(n-1);

returns;

}

}

分析:

此题目求n!

时候采用了递归调用。

其结束条件是当n的值减到1时停止递归调用,采用递归调用时候最主要一点就是一定在函数中明确递归的结束条件。

而且递归的过程同学们也需要注意一下,书中151页图5-5表示的非常清晰,请参考。

此题子函数放在了主函数的下边,这样在主函数中要声明一下子函数,即语句longfun(intn);另外此题中的子函数也是有返回值函数。

3.判断一个整数是否为素数,是的输出YES,不是输出NO,这个整数由主函数输入。

#include"stdio.h"

#include"math.h"

intfun(intx)

{

inti,flag=1;

if(x==2||x==3)

return1;

elseif(x==1)

return0;

else

{

for(i=2;i<=(int)sqrt(x);i++)

if(x%i==0)

flag=0;

if(flag==1)

return1;

elsereturn0;

}

}

voidmain()

{

intx,flag;

printf("Pleaseinputintegerx:

");

scanf("%d",&x);

flag=fun(x);

if(flag==1)

printf("YES\n");

else

printf("NO\n");

}

知识补充:

素数:

它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。

素数也是质数。

需要稍微注意的是1不是素数。

(记住一句话:

1什么都不是。

)2是素数,3是素数。

4以上相信大家都会判断了。

4.一个一维数组score,内放10个学生的成绩,求这10个人的平均成绩。

#include"stdio.h"

floataverage(floata[10])

{

inti;

floatave,sum=a[0];

for(i=1;i<10;i++)

sum=sum+a[i];

ave=sum/10;

returnave;

}

main()

{

floatscore[10],ave;

inti;

printf("Pleaseinput10numbers:

\n");

for(i=1;i<10;i++)

scanf("%f",&score[i]);

printf("\n");

ave=average(score);

printf("averagescoreis%.2f\n",ave);

}

说明:

此题用数组名做函数参数,score是实参数组名,a为形参数组名。

调用时数组类型一定要一致,数组名称可相同也可不相同,此题中不相同。

实验二参考答案

1.输入两个整型数字,输出他们的和。

#include

main()

{

inta,b,sum;

scanf(“%d%d”,&a,&b);

sum=a+b;

printf(“a+b=%d”,sum);

}

2.输入两个实型数,输出他们的和与乘积。

#include

main()

{

floata,b,sum,product;

scanf(“%f%f”,&a,&b);

sum=a+b;

product=a*b;

printf(“a+b=%5.2f,a*b=%5.2f”,sum,product);

}

3.求方程

的根(设

)(其中a,b,c的值由键盘输入)。

#include

#include

main()

{

floata,b,c,dt,x1,x2;

scanf(“%f%f%f”,&a,&b,&c);

dt=sqrt(b*b-4*a*c);

x1=(-b+dt)/(2*a);

x2=(-b-dt)/(2*a);

printf(“x1=%5.2f,x2=%5.2f”,x1,x2);

}4.鸡兔同笼,已知鸡兔总头数为h,总脚数为f,求鸡兔各多少只?

(h和f的值由键盘输入,输出鸡和兔的头数)

#include

main()

{

inth,f,x,y;

scanf(“%d%d”,&h,&f);

x=2*h-f/2;

y=f/2-h;

printf(“x=%d,y=%d”,x,y);

}

实验三参考答案

1.输入三个数a、b、c,要求按由小到大的顺序输出。

#include

main()

{

floata,b,c,t;

scanf(“%f,%f,%f”,&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(“%f,%f,%f”,a,b,c);

}

2.编写程序,输入三角形三边a、b、c,判断a、b、c能否构成三角形,若不

能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。

#include

main()

{

floata,b,c,t;

scanf(“%f,%f,%f”,&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;

}

if(a+b>c)

{

if(a==b||b==c)

{

if(a==c)printf(“等边三角型”);

elseif(c*c==a*a+b*b)printf(“等腰直角三角形”);

elseprintf(“一般等腰三角形”);

}

elseif(c*c==a*a+b*b)printf(“一般直角三角形”);

elseprintf(“一般三角形”);

}

elseprintf(“不构成三角形”);

}

3.编程实现下列函数

x(x<1)

y=2x-1(

|3x-11|(

#include

#include

main()

{

intx,y;

printf("inputx=:

");

scanf("%d",&x);

if(x<1)y=x;

elseif(x<10)y=2*x-1;

elsey=abs(3*x-11);

printf("x=%dy=%d\n",x,y);

}

4.编写程序,输入一百分制成绩,对应输出等级A、B、C、D、E,90分以上为A,80分—89分为B,70分—79分为C,60分—69分为D,60分以下为E。

方法一:

用if语句

#include

main()

{

floatscore;

chargrade;

scanf("%f",&score);

if(score>100||score<0)printf("\ninputerror!

");

else

{

if(score>=90)grade='A';

elseif(score>=80)grade='B';

elseif(score>=70)grade='C';

elseif(score>=60)grade='D';

elsegrade='E';

}

printf("thestudentgrade=%c\n",grade);

}

方法二:

用switch语句。

注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。

所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。

则由此可得把score除十取整,化为相应的常数。

#include

main()

{

floatscore,

ints;

chargrade;

scanf("%f",&score);

s=score/10;

if(s<0||s>10)printf("\ninputerror!

");

else

{

switch(s)

{

case10:

case9:

grade='A';break;

case8:

grade='B';break;

case7:

grade='C';break;

case6:

grade='D';break;

default:

grade='E';

}

printf("thestudentgrade=%c\n",ch);

}

}

实验四参考答案

1.编写程序,计算以下级数前n项之和。

#include

voidmain()

{

inti,n;

floats=1.0,sum=1.0,x;

scanf(“%d,%f”,&n,&x);

for(i=1;i<=n;i++)

{

s=s*x/i;

sum=sum+s;

}

printf(“sum=%5.2f”,sum);

}

2.编程打印如下图案(书后习题第3题):

**

****

******

********

**********

************

**************

#include

main()

{

inti,j,n;

for(i=1;i<=7;i++)

{

for(j=0;j<14-2*i;j++)printf("");

for(j=0;j<2*i;j++)printf("*");

printf("\n");

}

}3.编写程序实现输入整数n,输出如下所示由数字组成的菱形。

(图中n=5)

1

121

12321

1234321

123454321

1234321

12321

121

1

#include

main()

{

inti,j,n;

scanf("%d",&n);

for(i=1;i

{

for(j=1;j

for(j=i;j>0;j--)printf("%d",j);

printf("\n");

}

for(i=n;i>0;i--)

{

for(j=1;j

for(j=i;j>0;j--)printf("%d",j);

printf("\n");

}

}

4.输出Fibonacci数列第n项。

其数列通项公式为Fn=Fn-1+Fn-2,F1=1,F2=1。

方法一:

#include

main()

{

floatf,f1=1,f2=1;

inti,n;

scanf("%d",&n);

for(i=3;i<=n;i++)

{

f=f1+f2;

f1=f2;

f2=f;

}

printf("%10.0f\n",f);

}

方法二:

#include

#defineNUM20

voidmain()

{

inti;

floatf[NUM]={1,1};

for(i=2;i

f[i]=f[i-2]+f[i-1];

for(i=0;i

printf("%10.0f\n",f[i]);

}

实验五参考答案

1.编写程序,将1,2,3这三个数赋给数组a,将5,6,7赋给数组b,将两数组对应元素相加的和赋给数组c,输出数组c

#include

voidmain()

{

inta[3]={1,2,3},b[3]={4,5,6},c[3];

inti;

for(i=0;i<3;i++)

{

c[i]=a[i]+b[i];

printf("%d",c[i]);

}

}2.输入任意10个数,按从大到小或从小到大的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1