关于C语言的

关于C语言的,第1张

三、程序阅读题

1.阅读以下程序,若输入60,写出程序运行结果。

#include<stdioh>

void main()

{ int x;

scanf("%d ",&x);

if (x>=60)

printf("pass");

else

printf("fail");

}

结果:pass

2.阅读以下程序,若输入5,写出程序运行结果。

#include <stdioh>

int main( )

{ int i, n;

double fact;

scanf("%d", &n);

fact=1;

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

fact=i;

printf("%0f\n", fact);

结果:120

1.5请参照本章例题,编写一个C程序,输出以下信息:

Very Goodj!

解:

main()

{

printf(" \n");

printf("\n");

printf(" Very Good! \n");

printf("\n");

printf(" \n");

}

16编写一个程序,输入a b c三个值,输出其中最大者。

解:main()

{int a,b,c,max;

printf("请输入三个数a,b,c:\n");

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

max=a;

if(max<b)

max=b;

if(max<c)

max=c;

printf("最大数为:%d",max);

}

第三章

33 请将下面各数用八进制数和十六进制数表示:

(1)10 (2)32 (3)75 (4)-617

(5)-111 (6)2483 (7)-28654 (8)21003

解:十 八 十六

(10)=(12)=(a)

(32)=(40)=20

(75)=(113)=4b

(-617)=(176627)=fd97

-111=177621=ff91

2483=4663=963

-28654=110022=9012

21003=51013=520b

35字符常量与字符串常量有什么区别?

解:字符常量是一个字符,用单引号括起来。字符串常量是由0个或若干个字符

而成,用双引号把它们括起来,存储时自动在字符串最后加一个结束符号'\0'

36写出以下程序的运行结果:

#include<stdioh>

void main()

{

char c1='a',c2='b',c3='c',c4='\101',c5='\116';

printf("a%c b%c\tc%c\tabc\n",c1,c2,c3);

printf("\t\b%c %c\n",c4,c5);

解:程序的运行结果为:

aabb cc abc

A N

37将"China"译成密码密码规律:用原来的字母后面第4个字母代替原来的字母,

例如,字母"A"后面第4个字母是"E",用"E"代替"A"因此,"China"应译为"Glmre"

请编一程序,用赋初值的议程使c1,c2,c3,c4,c5分别变成'G','1','m','r','e',并

输出

main()

{char c1="C",c2="h",c3="i",c4='n',c5='a';

c1+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);

}

38例36能否改成如下:

#include<stdioh>

void main()

{

int c1,c2;(原为 char c1,c2)

c1=97;

c2=98;

printf("%c%c\n",c1,c2);

printf("%d%d\n",c1,c2);

}

解:可以因为在可输出的字符范围内,用整型和字符型作用相同

39求下面算术表达式的值

(1)x+a%3(int)(x+y)%2/4=25(x=25,a=7,y=47)

(2)(float)(a+b)/2+(int)x%(int)y=35(设a=2,b=3,x=35,y=25)

310写出下面程序的运行结果:

#include<stdioh>

void main()

{

int i,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf("%d,%d,%d,%d\n",i,j,m,n);

}

解:结果: 9,11,9,10

第4章

44a=3,b=4,c=5,x=12,y=24,z=-36,u=51274,n=128765,c1='a',c2='b'想得

到以下的输出格式和结果,请写出程序要求输出的结果如下:

a= 3 b= 4 c= 5

x=1200000,y=2400000,z=-3600000

x+y= 360 y+z=-120 z+x=-240

u= 51274 n= 128765

c1='a' or 97(ASCII)

c2='B' or 98(ASCII)

解:

main()

{

int a,b,c;

long int u,n;

float x,y,z;

char c1,c2;

a=3;b=4;c=5;

x=12;y=24;z=-36;

u=51274;n=128765;

c1='a';c2='b';

printf("\n");

printf("a=%2d b=%2d c=%2d\n",a,b,c);

printf("x=%86f,y=%86f,z=%96f\n",x,y,z);

printf("x+y=%52f y=z=%52f z+x=%52f\n",x+y,y+z,z+x);

printf("u=%6ld n=%9ld\n",u,n);

printf("c1='%c' or %d(ASCII)\n",c1,c2);

printf("c2='%c' or %d(ASCII)\n",c2,c2);

}

45请写出下面程序的输出结果

结果:

57

5 7

67856400,-789123962

67856400 ,-789123962

6786,-78912,67856400,-789123962,67856400,-789123962

6785640e+001,-789e+002

A,65,101,41

1234567,4553207,d687

65535,17777,ffff,-1

COMPUTER, COM

46用下面的scanf函数输入数据,使a=3,b=7,x=85,y=7182,c1='A',c2='a',

问在键盘上如何输入

main()

{

int a,b;

float x,y;

char c1,c2;

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

scanf(" x=%f y=%e",&x,&y);

scanf(" c1=%c c2=%c",&c1,&c2);

}

解:可按如下方式在键盘上输入:

a=3 b=7

x=85 y=7182

c1=A c2=a

说明:在边疆使用一个或多个scnaf函数时,第一个输入行末尾输入的"回车"被第二

个scanf函数吸收,因此在第二\三个scanf函数的双引号后设一个空格以抵消上行

入的"回车"如果没有这个空格,按上面输入数据会出错,读者目前对此只留有一

初步概念即可,以后再进一步深入理解

47用下面的scanf函数输入数据使a=10,b=20,c1='A',c2='a',x=15,y=-375,z=578,请问

在键盘上如何输入数据?

scanf("%5d%5d%c%c%f%f%f %f",&a,&b,&c1,&c2,&y,&z);

解:

main()

{

int a,b;

float x,y,z;

char c1,c2;

scanf("%5d%5d%c%c%f%f",&a,&b,&c1,&c2,&x,&y,&z);

}

运行时输入:

10 20Aa15 -375 +15,678

注解:按%5d格式的要求输入a与b时,要先键入三个空格,而后再打入10与20。%f是用来禁止赋值的。在输入时,对应于%f的地方,随意打入了一个数15,该值不会赋给任何变量。

38设圆半径r=15,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积,用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字请编程

解:main()

{

float pi,h,r,l,s,sq,vq,vz;

pi=31415926;

printf("请输入圆半径r圆柱高h:\n");

scanf("%f,%f",&r,&h);

l=2pir;

s=rrpi;

sq=4pirr;

vq=40/30pirrr;

vz=pirrh;

printf("圆周长为: =%62f\n",l);

printf("圆面积为: =%62f\n",s);

printf("圆球表面积为: =%62f\n",sq);

printf("圆球体积为: =%62f\n",vz);

}

49输入一个华氏温度,要求输出摄氏温度,公式为C=5/9(F-32),输出要有文字说明,取两位小数

解: main()

{

float c,f;

printf("请输入一个华氏温度:\n");

scanf("%f",&f);

c=(50/90)(f-32);

printf("摄氏温度为:%52f\n",c);

}

第五章 逻辑运算和判断选取结构

54有三个整数a,b,c,由键盘输入,输出其中最大的数

main()

{

int a,b,c;

printf("请输入三个数:");

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

if(a<b)

if(b<c)

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

else

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

else if(a<c)

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

else

printf("max-%d\n",a);

}

方法2:使用条件表达式

main()

{int a,b,c,termp,max;

printf(" 请输入 A,B,C: ");

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

printf("A=%d,B=%d,C=%d\n",a,b,c);

temp=(a>b)a:b;

max=(temp>c) temp:c;

printf(" A,B,C中最大数是%d,",max);

}

55 main()

{int x,y;

printf("输入x:");

scanf("%d",&x);

if(x<1)

{y=x;

printf("X-%d,Y=X=%d \n",x,y);

}

else if(x<10)

{y=2x-1;

printf(" X=%d, Y=2X-1=%d\n",x,y);

}

else

{y=3x-11;

printf("X=5d, Y=3x-11=%d \n",x,y);

}

}

57给一个不多于5位的正整数,要求:1求它是几位数2分别打印出每一位数字3按逆序打印出各位数字例如原数为321,应输出123

main()

{

long int num;

int indiv,ten,hundred,housand,tenthousand,place;

printf("请输入一个整数(0-99999):");

scanf("%ld",&num);

if(num>9999)

place=5;

else if(num>999)

place=4;

else if(num>99)

place=3;

else if(num>9)

place=2;

else place=1;

printf("place=%d\n",place);

printf("每位数字为:");

ten_thousand=num/10000;

thousand=(num-tenthousand10000)/1000;

hundred=(num-tenthousand10000-thousand1000)/100;

ten=(num-tenthousand10000-thousand1000-hundred100)/10;

indiv=num-tenthousand10000-thousand1000-hundred100-ten10;

switch(place)

{case 5:printf("%d,%d,%d,%d,%d",tenthousand,thousand,hundred,ten,indiv);

printf("\n反序数字为:");

printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,tenthousand);

break;

case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);

printf("\n反序数字为:");

printf("%d%d%d%d\n",indiv,ten,hundred,thousand);

break;

case 3:printf("%d,%d,%d\n",hundred,ten,indiv);

printf("\n反序数字为:");

printf("%d%d%d\n",indiv,ten,hundred);

case 2:printf("%d,%d\n",ten,indiv);

printf("\n反序数字为:");

printf("%d%d\n",indiv,ten);

case 1:printf("%d\n",indiv);

printf("\n反序数字为:");

printf("%d\n",indiv);

}

}

58 1if语句

main()

{long i;

float bonus,bon1,bon2,bon4,bon6,bon10;

/初始化变量/

bon1=10000001;

bon2=1000000075+bon1;

bon4=200000005+bon2;

bon6=200000003+bon4;

bon10=4000000015+bon6;

printf("请输入利润");

scanf("%ld",&i);

/计算/

if(i<=le5)

bonus=i01;

else if(i<2e5)

bonus=bon1+(1-100000)0075;

else if(i<=4e5)

bonus=bon2+(i-200000)005;

else if(i<=6e5)

bonus=bon4+(i-400000)003;

else if(i<=le6)

bonus=bon6+(i-600000)0015;

else

bonus=bon10+(i-1000000)001;

printf("奖金是 %102f",bonus);

}

用switch语句编程序

main()

{long i;

float bonus,bon1,bon2,bon4,bon6,bon10;

int branch;

/初始化变量/

bon1=10000001;

bon2=bon1+1000000075

bon4=bon2+200000005;

bon6=bon4+200000003;

bon10=bon6+4000000015;

printf("请输入利润:");

scanf("%ld",&i);

branch=i/100000;

if(branch>10)

branch=10;

/计算/

switch(branch)

{case 0:bonus=i01;break;

case 1:bonus=bon1+(i-100000)0075;break;

case 2:

case 3:bonus=bon2+(i-200000)005;break;

case 4:

case 5:bonus=bon4+(i-400000)003;break;

case 6:

case 7:

case 8:

case 9:bonus=bon6+(i-600000)0015;break;

case 10:bonus=bon10+(i-1000000)001;

}

printf(" 奖金是 %102f",bonus);

}

59 输入四个整数,按大小顺序输出

main()

{int t,a,b,c,d;

printf("请输入四个数:");

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

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

if(a>b)

{t=a;a=b;b=t;}

if(a>c)

{t=a;a=c;c=t;}

if(a>d)

{t=a;a=d;d=t;}

if(b>c)

{t=b;b=c;c=t;}

if(b>d)

{t=b;b=d;d=t;}

if(c>d)

{t=c;c=d;d=t;}

printf("\n 排序结果如下: \n");

printf(" %d %d %d %d \n",a,b,c,d);

}

510塔

main()

{

int h=10;

float x,y,x0=2,y0=2,d1,d2,d3,d4;

printf("请输入一个点(x,y):");

scanf("%f,%f",&x,&y);

d1=(x-x0)(x-x0)+(y-y0)(y-y0);

d2=(x-x0)(x-x0)+(y+y0)(y+y0);

d3=(x+x0)(x+x0)+(y-y0)(y-y0);

d4=(x+x0)(x+x0)+(y+y0)(y+y0);

if(d1>1 && d2>1 && d3>1 && d4>1)

h=0;

printf("该点高度为%d",h);

}

第六章 循环语句

61输入两个正数,求最大公约数最小公倍数

main()

{

int a,b,num1,num2,temp;

printf("请输入两个正整数:\n");

scanf("%d,%d",&num1,&num2);

if(num1<num2)

{

temp=num1;

num1=num2;

num2=temp;

}

a=num1,b=num2;

while(b!=0)

{

temp=a%b;

a=b;

b=temp;

}

printf("它们的最大公约数为:%d\n",a);

printf("它们的最小公倍数为:%d\n",num1num2/2);

}

62输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数

解:

#include <stdioh>

main()

{

char c;

int letters=0,space=0,degit=0,other=0;

printf("请输入一行字符:\n");

while((c=getchar())!='\n')

{

if(c>='a'&&c<='z'||c>'A'&&c<='Z')

letters++;

else if(c==' ')

space++;

else if(c>='0'&&c<='9')

digit++;

else

other++;

}

printf("其中:字母数=%d 空格数=%d 数字数=%d 其它字符数=%d\n",letters,space,

digit,other);

}

63求s(n)=a+aa+aaa+…+aa…a之值,其中工是一个数字

解:

main()

{

int a,n,count=1,sn=0,tn=0;

printf("请输入a和n的值:\n");

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

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

while(count<=n)

{

tn=tn+a;

sn=sn+tn;

a=a10;

++count;

}

printf("a+aa+aaa+…=%d\n",sn);

}

64 求1+2!+3!+4!+…+20!

main()

{

float n,s=0,t=1;

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

{

t=tn;

s=s+t;

}

printf("1!+2!+…+20!=%e\n",s);

}

65 main()

{

int N1=100,N2=50,N3=10;

float k;

float s1=0,s2=0,s3=0;

for(k=1;k<=N1;k++)/计算1到100的和/

{

s1=s1+k;

}

for(k=1;k<=N2;k++)/计算1到50各数平方和/

{

s2=s2+kk;

}

for(k=1;k<=N3;k++)

{

s3=s3+1/k;

}

printf("总和=%82f\n",s1+s2+s3);

}

66水仙开花

main()

{

int i,j,k,n;

printf(" '水仙花'数是:");

for(n=100;n<1000;n++)

{

i=n/100;

j=n/10-i10;

k=n%10;

if(i100+j10+k==iii+jjj+kkk)

{

printf("%d",n);

}

}

printf("\n");

}

67完数

main()

#include M 1000/定义寻找范围/

main()

{

int k0,k1,k2,k3,k4,k5,k6,k7,k8,k9;

int i,j,n,s;

for(j=2;j<=M;j++)

{

n=0;

s=j;

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

{

if((j%i)==0)

{

if((j%i)==0)

{

n++;

s=s-i;

switch(n)/将每个因子赋给k0,k1…k9/

{

case 1:

k0=i;

break;

case 2:

k1=i;

break;

case 3:

k2=i;

break;

case 4:

k3=i;

break;

case 5:

k4=i;

break;

case 6:

k5=i;

break;

case 7:

k6=i;

break;

case 8:

k7=i;

break;

case 9:

k8=i;

break;

case 10:

k9=i;

break;

}

}

}

if(s==0)

{

printf("%d是一个'完数',它的因子是",j);

if(n>1)

printf("%d,%d",k0,k1);

if(n>2)

printf(",%d",k2);

if(n>3)

printf(",%d",k3);

if(n>4)

printf(",%d",k4);

if(n>5)

printf(",%d",k5);

if(n>6)

printf(",%d",k6);

if(n>7)

printf(",%d",k7);

if(n>8)

printf(",%d",k8);

if(n>9)

printf(",%d",k9);

printf("\n");

}

}

方法二:此题用数组方法更为简单

main()

{

static int k[10];

int i,j,n,s;

for(j=2;j<=1000;j++)

{

n=-1;

s=j;

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

{

if((j%i)==0)

{

n++;

s=s-i;

k[n]=i;/将每个因子赋给k0,k1k9/

}

}

if(s==0)

{

printf("%d是一个完数,它的因子是:",j);

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

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

printf("%d\n",k[n]);

}

}

58 有一个分数序列:2/1,3/2,5/3,8/5……求出这个数列的前20项之和

解: main()

{

int n,t,number=20;

float a=2,b=1,s=0;

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

{

s=s+a/b;

t=a,a=a+b,b=t;

}

printf("总和=%96f\n",s);

}

69球反d问题

main()

{

float sn=1000,hn=sn/2;

int n;

for(n=2;n<=10;n++)

{

sn=sn+2hn;/第n次落地时共经过的米数/

hn=hn/2;/第n次反跳高度/

}

printf("第10次落地时共经过%f米 \n",sn);

printf("第10次反d%f米\n",hn);

}

610猴子吃桃

main()

{

int day,x1,x2;

day=9;

x2=1;

while(day>0)

{

x1=(x2+1)2;

x2=x1;

day--;

}

printf("桃子总数=%d\n",x1);

}

614打印图案

main()

{

int i,j,k;

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

{

for(j=0;j<=2-1;j++)

printf(" ");

for(k=0;k<=2i;k++)

printf("");

printf("\n");

}

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

{

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

printf(" ");

for(k=0;k<=4-2i;k++)

printf("");

printf("\n");

}

615乒乓比赛

main()

{

char i,j,k;/i是a是对手;j是b是对手;k是c的对手/

for(i='x';i<='z';i++)

for(j='x';j<='z';j++)

{

if(i!=j)

for(k='x';k<='z';k++)

{

if(i!=k&&j!=k)

{if(i!='x' && k!='x' && k! ='z')

printf("顺序为:\na-%c\tb--%c\tc--%c\n",i,j,k);

}

}

}

}

71用筛选法求100之内的素数

/用筛选法求100之内的素数/

#include<mathh>

#define N 101

main()

{

int i,j,line,a[N];

for(i=2;i<N;i++) a[i]=i;

for(i=2;i<sqrl(N);i++)

for(j=i+1;j<N;j++)

{

if(a[i]!=0 && a[j]!=0)

if(a[j]%a[i]==0)

a[j]=0;

printf("\n");

for(i=2,line=0;i<N;i++)

{

if(a[i]!=0)

{

printf("%5d",a[i]);

line++;

if(line==10)

{

printf("\n");

line=0;}

}

}

72用选择法对10个数排序

/选择法排序/

#define N 10

main()

{ int i,j,min,temp,a[N];

/输入数据/

printf("请输入十个数:\n");

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

{ printf("a[%d]=",i);

scanf("%d",&a[i]);

}

printf("\n");

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

printf("%5d",a[i]);

printf("\n");

/排序/

for (i=0;i<N-1;i++)

{ min=i;

for(j=i+1;j<N;j++)

if(a[min]>a[j]) min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

/输出/

printf("\n排序结果如下:\n");

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

printf("%5d",a[i]);

}

73对角线和:

/计算矩阵对角线元素之和/

main()

{

float a[3][3],sum=0;

int i,j;

printf("请输入矩阵元素:\n");

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

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

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

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

sum=sum+a[i][i];

printf("对角元素之和=62f",sum);

}

74插入数据到数组

/插入数据到数组/

main()

{int a[11]={1,4,6,9,13,16,19,28,40,100};

int temp1,temp2,number,end,i,j;

printf("初始数组如下:");

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

printf("%5d",a[i]);

printf("\n");

printf("输入插入数据:");

scanf("%d",&number);

end=a[9];

if(number>end)

a[10]=number;

else

{for(i=0;i<10;i++)

{ if(a[i]>number)

{temp1=a[i];

a[i]=number;

for(j=i+1;j<11;j++)

{temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

for(i=0;j<11;i++)

printf("a%6d",a[i]);

}

75将一个数组逆序存放。

/数组逆序存放/

#define N 5

main()

{ int a[N]={8,6,5,4,1},i,temp;

printf("\n 初始数组:\n");

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

printf("%4d",a[i]);

for(i=0;i<N/2;i++)

{ temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp;

}

printf("\n 交换后的数组:\n");

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

printf("%4d",a[i]);

}

76杨辉三角

/打印杨辉三角形/

#define N 11

main()

{ int i,j,a[N][N];

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

{a[i][i]=1;

a[i][1]=1;

}

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

for(j=2;j<=i-1;j++)

a[i][j]=a[i01][j-1]+a[i-1][j];

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

{ for(j=1;j<=i;j++)

printf("%6d",a[i][j];

printf("\n");

}

printf("\n");

}

78鞍点

/查找鞍点/

#define N 10

#define M 10

main()

{ int i,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;

printf("\n输入行数n:");

scanf("%d",&n);

printf("\n输入列数m:");

scanf("%d",&m);

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

{ printf("第%d行\n",i);

for(j=0;j<m,j++);

scanf("%d",&a[i][j];

}

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

{ for(j=0;j<m;j++)

printf("%5d",a[i][j]);

pritf("\n");

}

flag2=0;

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

{ max=a[i][0];

for(j=0;j<m;j++)

if(a[i][j]>max)

{ max=a[i][j];

maxj=j;

}

for (k=0,flag1=1;k<n && flag1;k++)

if(max>a[k][max])

flag1=0;

if(flag1)

{ printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max);

flag2=1;

}

}

if(!flag2)

printf("\n 矩阵中无鞍点! \n");

}

79变量说明:top,bott:查找区间两端点的下标;loca:查找成功与否的开关变量

/折半查找/

#include<stdioh>

#define N 15

main()

{ int i,j,number,top,bott,min,loca,a[N],flag;

char c;

printf("输入15个数(a[i]>[i-1])\n);

scanf("%d",&a[0]);

i=1;

while(i<N)

{ scanf("%d",&a[i]);

if(a[i]>=a[i-1])

i++;

esle

{printf("请重输入a[i]");

printf("必须大于%d\n",a[i-1]);

}

}

printf("\n");

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

printf("%4d",a[i]);

printf("\n");

flag=1;

while(flag)

{

printf("请输入查找数据:");

scanf("%d",&number);

loca=0;

top=0;

bott=N-1;

if((number<a[0])||(number>a[N-1]))

loca=-1;

while((loca==0)&&(top<=bott))

{ min=(bott+top)/2;

if(number==a[min])

{ loca=min;

printf("%d位于表中第%d个数\n",number,loca+1);

}

else if(number<a[min])

bott=min-1;

else

top=min+1;

}

if(loca==0||loca==-1)

printf("%d不在表中\n",number);

printf("是否继续查找Y/N!\n");

c=getchar();

if(c=='N'||c=='n')

flag=0;

}

}

710/统计字符数/

main()

{ int i,j,uppn,lown,dign,span,othn;

char text[3][80];

uppn=lown=dign=span=othn=0;

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

{ printf("\n请输入第%d行:\n",i);

gets(text[i]);

for(j=0;j<80 && text[i][j]!='\0';j++)

{if(text[i][j]>='A' && text[i][j]<='Z')

uppn+=1;

else if(text[i][j]>='a' && text[i][j]<='z')

lown+=1;

else if(text[i][j]>='1' && text[i][j]<='9')

dign+=1;

else if(text[i][j]=' ')

span+=1;

else

othn+=1;

}

}

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

printf("%s=n",text[i]);

printf("大写字母数:%d\n",uppn);

printf("小写字母数:%d\n",lown);

printf("数字个数:%d\n",dign);

printf("空格个数:%d\n",span);

printf("其它字符:%d\n",othn);

}

711/打印图案/

main()

{static char a[5]={'','','','',''};

int i,j,k;

char space=' ';

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

{printf("\n");

for(j=1;j<=3i;j++)

printf("%lc",space);

for(k=0;k<=5;k++)

printf("%3c",a[k];

}

}

712/译电文/

#include<stdioh>

main()

{int i,n;

char ch[80],tran[80];

printf("请输入字符:");

gets(ch);

printf("\n密码是%c",ch);

i=0;

while(ch[i]!='\0')

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

tran[i]=26+64-ch[i]+1+64;

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

tran[i]=26+96-ch[i]+1+96;

else

tran[i]=ch[i];

i++;

}

n=i;

printf("\n原文是:");

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

putchar(tran[i]);

}

713/连接两个字符串(不用'stract')/

main()

{

char s1[80],s2[40];

int i=0,j=0;

printf("\n请输入字符串1:");

scanf("%s",s1);

printf("\n请输入字符串2:");

scanf("%s",s2);

while(s1[i]!='\0')

i++;

while(s2[j]!='\0')

s1[i++]=s2[j++];

s1[i]='\0';

printf("\n连接后字符串为:%s",s1);

}

714/字符串比较/

#include<stdioh>

main()

{int i,resu;

char s1[100],s2[100];

printf("请输入字符串1:\n");

gets(s1);

printf("\n 请输入字符串2:\n");

gets(s2);

i=0;

while((s1[i]==s2[i]) && (s1[i]!='\0'))i++;

if(s1[i]=='\0' && s2[i]=='\0')resu=0;

else

resu=s1[i]-s2[i];

printf(" %s与%s比较结果是%d",s1,s2,resu);

}

715/字符串复制/

#include<stdioh>

main()

{

char from[80],to[80];

int i;

printf("请输入字符串");

scanf("%s",from);

for(i=0;i<=strlen(from);i++)

to[i]=from[i];

printf("复制字符串为:%s\n",to);

}

第八章 函数

81(最小公倍数=uv/最大公约数)

hcf(u,v)

int u,v;

(int a,b,t,r;

if(u>v)

{t=u;u=v;v=t;}

a=u;b=v;

while((r=b%a)!=0)

{b=a;a=r;}

return(a);

}

lcd(u,v,h)

int u,v,h;

{int u,v,h,l;

scanf("%d,%d",&u,&v);

h=hcf(u,v);

printf("HCF=%d\n",h);

l=lcd(u,v,h);

printf("LCd=%d\n",l);

}

{return(uv/h);}

main()

{int u,v,h,l;

scanf("%d,%d",&u,&v);

h=hcf(u,v);

printf("HCF=%d\n",h);

l=lcd(u,v,h);

printf("LCD=%d\n",l);

}

82求方程根

#include<mathh>

float x1,x2,disc,p,q;

greater_than_zero(a,b)

float a,b;

{

x1=(-b+sqrt(disc))/(2a);

x2=(-b-sqrt(disc))/(2a);

}

equal_to_zero(a,b)

float a,b;

{x1=x2=(-b)/(2a);}

smaller_than_zero(a,b)

float a,b;

{p=-b/(2a);

最多就到82。。。。。。

1

int sub(int x)

{

int y=0;

static int z=0;//仅初始化一次,保留上次值

y+=x++,z++;

printf("%d,%d,%d,",x,y,z);

return y;

}

void main()

{

int i;

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

printf("%d\n",sub(i));//i=0,x=0,进入sub,先执行y=x,y=0,x++为1,z++为1,输出1,0,1,0

//i=1,x=1,进入sub,先执行y=x,y=1,x++为2,z++为2,输出2,1,2,1

//i=2,x=2,进入sub,先执行y=x,y=2,x++为3,z++为3,输出3,2,3,2

}

2

#include <stdioh>

void generate(char x,char y)

{

{

if (x==y)

putchar(y);

else

{ putchar(x);

generate(x+1,y);

putchar(x);

}

}

}

void main()

{

char i,j;

for(i='1';i<'6';i++) //i='1',for循环输出10个 ' ',x==y=='1'打印'1'

//i='2',for循环输出9个 ' ',x!=y,putchar('1');打印'1',执行generate('2','2');,打印'2',putchar('1'),,打印'1';

//i='3',for循环输出8个 ' ',x!=y,putchar('1');打印'1',执行generate('2','3');x!=y,putchar('2');,打印'2',执行generate('3','3');,打印'3',注意递归调用,接着putchar('2'),打印'2',putchar('1'),打印'1';其余类似,仔细点

{

for(j=1;j<60-i;j++)

putchar(' ');

generate('1',i);

putchar('\n');

}

}

while(a=14):就是给a赋值14 然后while里面一直是true 所以一直循环 直到里面break跳出 此时a=14+2=16 y=12+16+16+16=60

15请参照本章例题,编写一个C程序,输出以下信息:

Very Good!

解:

mian()

{printf(“”);

printf(“\n”);

printf(“Very Good!\n”);

printf(“\n”);

printf(“”);

}

16 编写一个程序,输入a、b、c三个值,输出其中最大值。

解:

mian()

{int a,b,c,max;

printf(“请输入三个数a,b,c:\n”);

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

max=a;

if(max<b)

max=b;

if(max<c)

max=c;

printf(“最大数为:“%d”,max);

}

第三章

36写出以下程序运行的结果。

main()

{char c1=’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);

}

解:

aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc

AㄩN

37 要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。

解:

#include <stdioh>

main()

{ char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;

c1+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);

}

运行结果:

密码是Glmre

39求下面算术表达式的值。

(1)x+a%3(int)(x+y)%2/4

设x=25,a=7,y=47

(2)(float)(a+b)/2+(int)x%(int)y

设a=2,b=3,x=35,y=25

(1)25

(2)35

310写出程序运行的结果。

main()

{int i,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n);

}

解:

9,11,9,10

312 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。

(1)a+=a (2) a-=2 (3) a=2+3 (4)a/=a+a

(5) a%=(n%=2),n的值等于5

(6)a+=a-=a=a

解:

(1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0

第四章

4.4若a=3,b=4,c=5,x=12,y=24,z=-36,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

a=_3_ _b=_4_ _c=_5

x=1200000,y=2400000,z=-3600000

x+y=_3600_ _y+z=-120_ _z+x=-240

c1=ˊaˊ_or_97(ASCII)

c2=ˊbˊ_or_98(ASCII)

main()

{int a=3,b=4,c=5;

long int u=51274,n=128765;

float x=12,y=24,z=36;

char c1=’a’,c2=’b’;

printf("a=%2d b=%2d c=%2d\n",a,b,c);

printf("x=%f,y=%f,z=%f\n",x,y,z);

printf("x+y=%52f y+z=%52f z+x=%52f\n",x+y,y+z,z+x);

printf("u=%6ld n=%9ld\n",u,n);

printf("%s %s %d%s\n","c1=’a’","or",c1,"(ASCII)");

printf("%s %s %d%s\n","c2=’a’","or",c2,"(ASCII)");

}

4.7用scanf下面的函数输入数据,使a=3,b=7,x=85,y=7182,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?

main()

{

int a,b;float x,y;char c1c2;

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

scanf("_x=%f_y=%e",&x,&y);

scanf("_c1=%c_c2=%c",&c1,&c2);

}

a=3_b=7

_x=85_y=7182

_c1=A_c2=a

4.8设圆半径r=15,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。

main()

{float r,h,C1,Sa,Sb,Va,Vb;

scanf("%f,%f",&r,&h);

C1=2314r;

Sa=314rr;

Sb=4Sa;

Va=4314rrr/3;

Vb=Sah;

printf("C1=%2f\n",C1);

printf("Sa=%2f\nSb=%2f\nVa=%2f\nVb=%2f\n",Sa,Sb,Va,Vb);

}

4.9输入一个华氏温度,要求输出摄氏温度。公式为

c=5(F-32)/9

输出要求有文字说明,取位2小数。

main()

{float F,c;

scanf("%f",&F);

c=5(F-32)/9;

printf("c=%2f",c);

}

4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如:

char c1,c2;

int c1,c2;

是否无条件的等价?

#include"stdioh"

main()

{char c1,c2;

c1=getchar();c2=getchar();

putchar(c1);putchar(’\n’);putchar(c2);putchar(’\n’);

}

#include"stdioh"

main()

{char c1,c2;

c1=getchar();c2=getchar();

printf("c1=%d c2=%d\n",c1,c2);

printf("c1=%c c2=%c\n",c1,c2);

}

第五章

51 什么是算术运算?什么是关系运算?什么是逻辑运算?

解:略。

52 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如3&&5的值为“真”,系统给出3&&5的值为1。

53 写出下面各逻辑表达式的值。设a=3,b=4,c=5。

(1) a+b>c&&b==c

(2) a||b+c&&b-c

(3) !(a>b)&&!c||1

(4) !(x=a)&&(y=b)&&0

(5) !(a+b)+c-1&&b+c/2

解:

(1) 0

(2) 1

(3) 1

(4) 0

(5) 1

54 有3个整数a、b、c,由键盘输入,输出其中最大的数。

解:

方法一

#include <stdioh>

main()

{ int a,b,c;

printf("请输入3个整数:");

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

if(a<b)

if(b<c) printf("max=%d\n",c);

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

else if(a<c) printf("max=%d\n",c);

else printf("max=%d\n",a);

}

方法二:使用条件表达式,可以使程序更加简明、清晰。

程序如下:

#include <stdioh>

main()

{ int a,b,c,temp,max;

printf("请输入3个整数:");

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

temp=(a>b)a:b; / 将a和b中的大者存人temp中 /

max=(temp>c)temp:c; / 将a和b中的大者与c比较,取最大者/

printf("3个整数的最大数是%d\n”,max);

}

55 有一函数:

写一程序,输入x值,输出y值。

解:

#include <stdioh>

main()

{int x,y;

printf("输入x:");

scanf("%d",&x);

if(x<1) / x<1 /

{ y=x;

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

}

else if (x<10) / 1≤x-10 /

{ y=2x-1;

printf("x=%3d, y=2x-1=%d\n",x,y);

}

else / x≥10 /

{ y=3x-11;

printf("x=%3d, y=3x-11=%d\n",x,y);

}

}

56 给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。

解:

程序如下:

#include <stdioh>

main()

{ float score;

char grade;

printf("请输入学生成绩:");

scanf("%f",&score);

while(score>100||(score<0)

{ printf("\n输入有误,请重新输入:");

scanf("%f",&score);

}

switch((int)(score/10))

{ case 10:

case 9: grade=’A’;break;

case 8: grade=’B’;break;

case 7: grade=’C’;break;

case 6: grade=’D’;break;

case 5:

case 4:

case 3:

case 2:

case 1:

case 0: grade=’E’;

}

printf("成绩是%51f,相应的等级是%c。\n",score,grade);

}

说明:对输入的数据进行检查,如小于0或大于100,要求重新输入。(int)(score/10)的作用是将 (score/10) 的值进行强制类型转换,得到一个整型值。

57 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字。例如原数为321,应输出123。

解:

#include <stdioh>

main()

{ long int num;

int indiv,ten,hundred,thousand,ten_thousand,place;

/分别代表个位、十位、百位、千位、万位和位数/

printf("请输入一个整数(0~99999):");

scanf("%ld",&num);

if (num>9999) place=5;

else if(num>999) place=4;

else if(num>99) place=3;

else if(num>9) place=2;

else place=1;

printf("place =%d\n", place);

ten_thousand=num/10000;

thousand=num/1000%10;

hundred=num/100%10;

ten=num%100/10;

indiv=num%10;

switch(place)

{ case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);

printf("\n反序数字为;");

printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);

break;

case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);

printf("\n反序数字为:");

printf("%d%d%d%d\n",indiv,ten,hundred,thousand);

break;

case 3: printf("%d,%d,%d",hundred,ten,indiv);

printf("\n反序数字为:");

printf("%d%d%d\n",indiv,ten,hundred);

break;

case 2: printf("%d,%d",ten,indiv);

printf("\n反序数字为:");

printf("%d%d\n",indiv,ten);

break;

case 1: printf("%d",indiv);

printf("\n反序数字为:");

printf("%d\n",indiv);

break;

}

}

58 企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提成10% ;利润高于10万元,低于20万元(100000<I≤200000)时,其中10万元按10%提成,高于10万元的部分,可提成75% ;200000<I≤400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;400000<I≤600000时,高于40万元的部分按3%提成;600000〈I≤1000000时,高于60万的部分按15%提成;I>1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。

解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按75%提成。

(1) 用if语句编程序。

#include <stdioh>

main()

{ long i;

float bonus,bon1,bon2,bon4,bon6,bon10;

bon1=10000001; /利润为10万元时的奖金/

bon2=bon1+1000000075; /利润为20万元时的奖金/

bon4=bon2+200000005; /利润为40万元时的奖金/

bon6=bon4+200000003; /利润为60万元时的奖金/

bon10=bon6+4000000015; /利润为100万元时的奖金/

printf("请输入利润i:");

scanf("%ld",&i);

if(i<=100000)

bonus=i01; /利润在10万元以内按01提成奖金/

else if(i<=200000)

bonus=bon1+(i-100000)0075; /利润在10万至20万元时的奖金/

else if(i<=400000)

bonus=bon2+(i-200000)005; /利润在20万至40万元时的奖金/

else if(i<=600000)

bonus=bon4+(i-400000)003; /利润在40万至60万元时的奖金/

else if(i<=1000000)

bonus=bon6+(i-600000)0015; /利润在60万至100万元时的奖金/

else

bonus=bon10+(i-1000000)001; /利润在100万元以上时的奖金/

printf(”奖金是%102f\n",bonus);

}

此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时,奖金应由两部分组成:①利润为10万元时应得的奖金。即100000ⅹ01;②10万元以上部分应得的奖金。即(num-100000)ⅹ0075。同理,20万~40万这个区间的奖金也应由两部分组成:①利润为20万元时应得的奖金,即100000ⅹ01ⅹ10万ⅹ0075;②20万元以上部分应得的奖金,即(num-200000)ⅹ005。程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。

(2) 用switch语句编程序。

输入利润i,确定相应的提成等级branch

根据branch确定奖金值

0 奖金=i01

1 奖金=bon1+(i-105)0075

2 奖金=bon2+(i-2105)005

3

4 奖金=bon4+(i-4105)003

5

6 奖金=bon6+(i-6105)0015

7

8

9

10 奖金=bon10+(i-106)001

输出奖金

#include <stdioh>

main()

{ long i;

float bonus, bon1, bon2, bon4, bon6, bon10;

int c;

bon1=10000001;

bon2=bon1+1000000075;

bon4=bon2+200000005;

bon6=bon4+200000003;

bon10=bon6+4000000015;

printf("请输入利润i:");

scanf("%ld",&i);

c=i/100000;

if(c>10) c=10;

switch(c)

{ case 0: bonus=101;break;

case 1: bonus=bon1+(i-100000)0075;break;

case 2 :

case 3: bonus=bon2+(i-200000)005; break;

case 4:

case 5: bonus=bon4+(i-400000)003;break;

case 6:

case 7:

case 8:

case 9: bonus=bon6+(i-600000)0015;break;

case 10: bonus=bon10+(i-1000000)001;

}

printf("奖金是%102f",bonus);

}

59 输入4个整数,要求按由大到小的顺序输出。

解:此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后,可以有更多的排序方法。

#include <stdioh>

main()

{ int t,a,b,c,d;

printf("请输入4个整数:");

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

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

if(a>b) {t=a; a=b; b=t;}

if(a>c) {t=a; a=c; c=t;}

if(a>d) {t=a; a=d; d=t;}

if(b>c) {t=a; b=c; c=t;}

if(b>d) {t=b; b=d; d=t;}

if(c>d) {t=c; c=d; d=t;}

printf("排序结果如下:\n");

printf("%d, %d, %d, %d\n",a,b,c,d);

}

510 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

程序如下:

#include <stdioh>

main()

{ int h=10;

float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;

printf("请输入一个点(x,y):");

scanf("%f,%f",&x,&y);

d1=(x-x1)(x-x1)+(y-y1)(y-y1); /求该点到各中心点的距离/

d2=(x-x2)(x-x2)+(y+y2)(y+y2);

d3=(x+x3)(x+x3)+(y-y3)(y-y3);

d4=(x+x4)(x-x4)(y+y4)(y+y4);

if(d1>1&&d2>1&&d3>1&&d4>1) h=0; /判断该点是否在塔外/

printf("该点高度为%d\n",h);

}

第六章

第六章 循环控制

61输入两个正整数m和n,求其最大公约数和最小公倍数。

main()

{long m,n,i=1,j,s;

scanf("%ld,%ld",&m,&n);

for(;i<=m&&i<=n;i++)

{if(m%i==0&&n%i==0) s=i;}

if(m>=n) j=m;

else j=n;

for(;!(j%m==0&&j%n==0);j++);

printf("s=%ld,j=%ld\n",s,j);

}

62输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include"stdioh"

main()

{char c;int i=0,j=0,k=0,l=0;

while((c=getchar())!=’\n’)

{if(c>=65&&c<=90||c>=97&&c<=122) i++;

else if(c>=48&&c<=57) j++;

else if(c==32) k++;

else l++;}

printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);

}

63求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。

#include"mathh"

main()

{int n,sum=0,i=1,s=2;

scanf("%d",&n);

while(i<=n)

{sum=sum+s;s=s+2pow(10,i);

i++;}

printf("sum=%d\n",sum);

}

64 求 ,(即求1!+2!+3!+4!+5!+…+20!)

main()

{int n,i=1;long sum=0,s=1;

scanf("%d",&n);

while(i<=n) {s=si;sum=sum+s;i++;}

printf("sum=%ld\n",sum);

}

65 求

main()

{double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum;

for(;i<=100;i++) s1=s1+i;

for(;j<=50;j++) s2=s2+jj;

for(;k<=10;k++) s3=s3+1/k;

sum=s1+s2+s3;

printf("sum=%f\n",sum);

}

66打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。

#include"mathh"

main()

{int x=100,a,b,c;

while(x>=100&&x<1000) {a=001x;b=10(001x-a);c=x-100a-10b;

if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf("%5d",x);x++;}

}

67一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格式输出其因子:

6 its factors are 1、2、3

main()

{int m,i,j,s;

for(m=6;m<10000;m++)

{s=1;

for(i=2;i<m;i++)

if(m%i==0) s=s+i;

if(m-s==0)

{printf("%5d its fastors are 1 ",m);for(j=2;j<m;j++) if(m%j==0)

printf("%d ",j);printf("\n");}

}

}

main()

{int m,i,j,s;

for(m=6;m<1000;m++)

{s=m-1;

for(i=2;i<m;i++)

if(m%i==0) s=s-i;

if(s==0)

{printf("%5d its fastors are 1 ",m);for(j=2;j<m;j++) if(m%j==0)

printf("%d ",j);printf("\n");}

}

}

68有一分数序列:

求出这个数列的前20项之和。

main()

{int i=1,n;double t,x=1,y=2,s,sum=0;

scanf("%ld",&n);

while(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}

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

}

69一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反d多高?

main()

{int i,n;double h=100,s=100;

scanf("%d",&n);

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

{h=05;if(i==1) continue;s=2h+s;}

printf("h=%f,s=%f\n",h,s);

}

610猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。

main()

{int i=1,sum=0;

for(;i<=10;sum=2sum+1,i++);

printf("sum=%d\n",sum);

}

611用迭代法求 。求平方根的迭代公式为:

要求前后两次求出的得差的绝对值少于000001。

#include"mathh"

main()

{float x0,x1,a;

scanf("%f",&a);

x1=a/2;

do

{x0=x1;x1=(x0+a/x0)/2;}

while(fabs(x0-x1)>=000001);

printf("%3f\n",x1);

}

612 用牛顿迭代法求方程在15附近的根。

main()

{double x,y;x=15;

do{y=2xxx-4xx+3x-6;

x=x-y/(6xx-8x+3);}

while(y!=0);

printf("x=%3f\n",x);

}

613用二分法求方程在(-10,10)之间的根

main()

{double x1,x2,y1,y2;x1=-10;x2=10;

do{y1=2x1x1x1-4x1x1+3x1-6;

x1=x1-y1/(6x1x1-8x1+3);}

while(y1!=0);

do

{y2=2x2x2x2-4x2x2+3x2-6;

x2=x2-y2/(6x2x2-8x2+3);}

while(y2!=0);

printf("x1=%3f,x2=%3f\n",x1,x2);

}

614打印以下图案

是‘右移位运算’。请参考如下:

右移运算符

右移运算符>>使指定值的所有位都右移规定的次数。它的通用格式如下所示:

value >> num

这里,num 指定要移位值value 移动的位数。也就是,右移运算符>>使指定值的所有位都右移num位。下面的程序片段将值32右移2次,将结果8赋给变量a:

int a = 32;

a = a >> 2; // a now contains 8

当值中的某些位被“移出”时,这些位的值将丢弃。例如,下面的程序片段将35右移2 次,它的2个低位被移出丢弃,也将结果8赋给变量a:

int a = 35;

a = a >> 2; // a still contains 8

用二进制表示该过程可以更清楚地看到程序的运行过程:

00100011 35

>> 2

00001000 8

将值每右移一次,就相当于将该值除以2并且舍弃了余数。你可以利用这个特点将一个整数进行快速的2的除法。当然,你一定要确保你不会将该数原有的任何一位移出。

右 移时,被移走的最高位(最左边的位)由原来最高位的数字补充。例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都 在左边补0,这叫做符号位扩展(保留符号位)(sign extension ),在进行右移 *** 作时用来保持负数的符号。例如,–8 >> 1 是–4,用二进制表示如下:

11111000 –8 >>1 11111100 –4

函数sub中的引入参数是是形式参考,比方说第一个sub(x3, x4);

函数最先执行的语句是:int x = x3, int y = x4;//把x3跟x4的值赋给x跟y

所以函数里面改变的是x跟y的值,而x跟y在函数结束后就被清除了,所以受改变的只有全局变量x1,第一次执行sub的时候,

x = x3;

x1 = x;//x1==10;

同理,第二次的时候x1的值就等于x2了,所以x1最终值为40,其他值不变,输出结果是:

10, 20, 40, 40

答案应该是 10,x

因为结构体变量做实参,属于值传递类型。在调用函数期间,改变形参的值,是无法返回到主调函数的。

struct n{ int x; char c; }; /定义结构体类型名/

main() {struct n a={10,'x'}; /定义结构体变量a/

func(a); /调用函数/

printf("%d,%c",ax,ac); } /输出结果/

func(struct n b) /定义调用函数/

{ bx=20; bc='y'; }

以上就是关于关于C语言的全部的内容,包括:关于C语言的、我要c语言第三版谭浩强8.3的答案、C语言 写出下列程序的运行结果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9458435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存