首页 > 编程知识 正文

谭浩强c语言配套课件第八章,谭浩强c语言程序设计第三章答案

时间:2023-12-29 20:32:02 阅读:331103 作者:NJNV

本文目录一览:

求谭浩强c语言程序设计视频教程打包下载

C语言程序设计

链接:

 提取码:8uar复制这段内容后打开百度网盘手机APP,操作更方便哦!

若资源有问题欢迎追问~

谭浩强主编的《C语言程序设计》,

谭浩强的这本我们老师说只适合考二级证用的,要真想学C,就去买这两部:C程序设计语言 [(美)克尼汉] 和 C Primer Plus

C程序设计语言 [(美)克尼汉]是C的经典书籍,但并不是一本入门书,而是有一定基础后用的全局把握程序设计用的,适合反复看,用本书入门怕是比较困难;C Primer Plus是一本从基础讲起的入门好书。

C学好就继续加强去学习C++ ,C语言是C++的一个子集,C++则更强大

谭浩强主编的内容到底是什么样的?

C程序设计 谭浩强 清华大学出版社

第一章 C语言的结构

1.程序的构成,main函数和其他函数。

2.头文件、数据说明、函数的开始和结束标志。

3.源程序的书写格式。

4.C语言的风格。

第二章 数据类型及其运算

1.C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。

2.C运算符的种类、运算优先级和结合性。

3.不同类型数据间的转换与运算。

4.C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求

值规则。

第三章 基本语句

1.表达式语句,空语句,复合语句。

2.数据的输入与输出,输入输出函数的调用。

3.复合语句。

4.goto语句和语句标号的使用。

第四章 选择结构程序设计

1.用if语句实现选择结构。

2.用switch语句实现多分支选择结构。

3.选择结构的嵌套。

第五章 循环结构程序设计

1.for循环结构。

2.while和do while循环结构。

3.continue语句和break语句。

4.循环的嵌套。

第六章 数组的定义和引用

1.一维数组和多维数组的定义、初始化和引用。

2.字符串与字符数组。

第七章 函数

1.库函数的正确调用。

2.函数的定义方法。

3.函数的类型和返回值。

4.形式参数与实在参数,参数值的传递。

5.函数的正确调用,嵌套调用,递归调用。

6.局部变量和全局变量。

7.变量的存储类别(自动、静态、寄存器、外部),变量的作用域和生存期。

8.内部函数与外部函数。

第八章 编译预处理

1.宏定义:不带参数的宏定义;带参数的宏定义。

2.“文件包含”处理。

第九章 指针

1.指针与指针变量的概念,指针与地址运算符。

2.变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、

函数、结构体的指针变量。通过指针引用以上各类型数据。

3.用指针作函数参数。

4.返回指针值的指针函数。

5.指针数组,指向指针的指针,main函数的命令行参数。

第十章 结构体(即“结构”)与共用体(即“联合”)。

1.结构体和共用体类型数据的定义方法和引用方法。

2.用指针和结构体构成链表,单向链表的建立、输出、删除与插入。

第十一章 位运算

1.位运算符的含义及使用。

2.简单的位运算。

第十二章 文件操作

只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。

1.文件类型指针(FILE类型指针)。

2.文件的打开与关闭(fopen,fclose)。

3.文件的读写(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf函数),文件的定位(rewind,fseek函数)。

我要c语言第三版谭浩强8.3的答案

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

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

Very Goodj!

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

解:

main()

{

printf(" ************ n");

printf("n");

printf(" Very Good! n");

printf("n");

printf(" ************n");

}

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

解:main()

{int a,b,c,max;

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

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

max=a;

if(maxb)

max=b;

if(maxc)

max=c;

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

}

第三章

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

(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

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

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

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

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

#includestdio.h

void main()

{

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

printf("a%c b%ctc%ctabcn",c1,c2,c3);

printf("tb%c %cn",c4,c5);

解:程序的运行结果为:

aabb cc abc

A N

3.7将"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%cn",c1,c2,c3,c4,c5);

}

3.8例3.6能否改成如下:

#includestdio.h

void main()

{

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

c1=97;

c2=98;

printf("%c%cn",c1,c2);

printf("%d%dn",c1,c2);

}

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

3.9求下面算术表达式的值.

(1)x+a%3*(int)(x+y)%2/4=2.5(x=2.5,a=7,y=4.7)

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

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

#includestdio.h

void main()

{

int i,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

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

}

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

第4章

4.4.a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'.想得

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

a= 3 b= 4 c= 5

x=1.200000,y=2.400000,z=-3.600000

x+y= 3.60 y+z=-1.20 z+x=-2.40

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=1.2;y=2.4;z=-3.6;

u=51274;n=128765;

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

printf("n");

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

printf("x=%8.6f,y=%8.6f,z=%9.6fn",x,y,z);

printf("x+y=%5.2f y=z=%5.2f z+x=%5.2fn",x+y,y+z,z+x);

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

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

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

}

4.5请写出下面程序的输出结果.

结果:

57

5 7

67.856400,-789.123962

67.856400 ,-789.123962

67.86,-789.12,67.856400,-789.123962,67.856400,-789.123962

6.785640e+001,-7.89e+002

A,65,101,41

1234567,4553207,d687

65535,17777,ffff,-1

COMPUTER, COM

4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,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=8.5 y=71.82

c1=A c2=a

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

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

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

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

4.7用下面的scanf函数输入数据使a=10,b=20,c1='A',c2='a',x=1.5,y=-3.75,z=57.8,请问

在键盘上如何输入数据?

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 20Aa1.5 -3.75 +1.5,67.8

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

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

解:main()

{

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

pi=3.1415926;

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

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

l=2*pi*r;

s=r*r*pi;

sq=4*pi*r*r;

vq=4.0/3.0*pi*r*r*r;

vz=pi*r*r*h;

printf("圆周长为: =%6.2fn",l);

printf("圆面积为: =%6.2fn",s);

printf("圆球表面积为: =%6.2fn",sq);

printf("圆球体积为: =%6.2fn",vz);

}

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

解: main()

{

float c,f;

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

scanf("%f",f);

c=(5.0/9.0)*(f-32);

printf("摄氏温度为:%5.2fn",c);

}

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

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

main()

{

int a,b,c;

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

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

if(ab)

if(bc)

printf("max=%dn",c);

else

printf("max=%dn",b);

else if(ac)

printf("max=%dn",c);

else

printf("max-%dn",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=%dn",a,b,c);

temp=(ab)?a:b;

max=(tempc)? temp:c;

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

}

5.5 main()

{int x,y;

printf("输入x:");

scanf("%d",x);

if(x1)

{y=x;

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

}

else if(x10)

{y=2*x-1;

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

}

else

{y=3*x-11;

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

}

}

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

main()

{

long int num;

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

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

scanf("%ld",num);

if(num9999)

place=5;

else if(num999)

place=4;

else if(num99)

place=3;

else if(num9)

place=2;

else place=1;

printf("place=%dn",place);

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

ten_thousand=num/10000;

thousand=(num-tenthousand*10000)/1000;

hundred=(num-tenthousand*10000-thousand*1000)/100;

ten=(num-tenthousand*10000-thousand*1000-hundred*100)/10;

indiv=num-tenthousand*10000-thousand*1000-hundred*100-ten*10;

switch(place)

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

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

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

break;

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

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

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

break;

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

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

printf("%d%d%dn",indiv,ten,hundred);

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

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

printf("%d%dn",indiv,ten);

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

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

printf("%dn",indiv);

}

}

5.8 1.if语句

main()

{long i;

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

/*初始化变量*/

bon1=100000*0.1;

bon2=100000*0.075+bon1;

bon4=200000*0.05+bon2;

bon6=200000*0.03+bon4;

bon10=400000*0.015+bon6;

printf("请输入利润");

scanf("%ld",i);

/*计算*/

if(i=le5)

bonus=i*0.1;

else if(i2e5)

bonus=bon1+(1-100000)*0.075;

else if(i=4e5)

bonus=bon2+(i-200000)*0.05;

else if(i=6e5)

bonus=bon4+(i-400000)*0.03;

else if(i=le6)

bonus=bon6+(i-600000)*0.015;

else

bonus=bon10+(i-1000000)*0.01;

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

}

用switch语句编程序

main()

{long i;

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

int branch;

/*初始化变量*/

bon1=100000*0.1;

bon2=bon1+100000*0.075

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

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

scanf("%ld",i);

branch=i/100000;

if(branch10)

branch=10;

/*计算*/

switch(branch)

{case 0:bonus=i*0.1;break;

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

case 2:

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

case 4:

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

case 6:

case 7:

case 8:

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

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

}

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

}

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

main()

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

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

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

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

if(ab)

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

if(ac)

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

if(ad)

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

if(bc)

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

if(bd)

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

if(cd)

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

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

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

}

5.10塔

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(d11 d21 d31 d41)

h=0;

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

}

第六章 循环语句

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

main()

{

int a,b,num1,num2,temp;

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

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

if(num1num2)

{

temp=num1;

num1=num2;

num2=temp;

}

a=num1,b=num2;

while(b!=0)

{

temp=a%b;

a=b;

b=temp;

}

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

printf("它们的最小公倍数为:%dn",num1*num2/2);

}

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

解:

#include stdio.h

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 其它字符数=%dn",letters,space,

digit,other);

}

6.3求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=a*10;

++count;

}

printf("a+aa+aaa+…=%dn",sn);

}

6.4 求1+2!+3!+4!+…+20!.

main()

{

float n,s=0,t=1;

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

{

t=t*n;

s=s+t;

}

printf("1!+2!+…+20!=%en",s);

}

6.5 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+k*k;

}

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

{

s3=s3+1/k;

}

printf("总和=%8.2fn",s1+s2+s3);

}

6.6水仙开花

main()

{

int i,j,k,n;

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

for(n=100;n1000;n++)

{

i=n/100;

j=n/10-i*10;

k=n%10;

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

{

printf("%d",n);

}

}

printf("n");

}

6.7完数

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;ij;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(n1)

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

if(n2)

printf(",%d",k2);

if(n3)

printf(",%d",k3);

if(n4)

printf(",%d",k4);

if(n5)

printf(",%d",k5);

if(n6)

printf(",%d",k6);

if(n7)

printf(",%d",k7);

if(n8)

printf(",%d",k8);

if(n9)

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;ij;i++)

{

if((j%i)==0)

{

n++;

s=s-i;

k[n]=i;/*将每个因子赋给k0,k1...k9*/

}

}

if(s==0)

{

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

for(i=0;in;i++)

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

printf("%dn",k[n]);

}

}

5.8 有一个分数序列: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("总和=%9.6fn",s);

}

6.9球反弹问题

main()

{

float sn=100.0,hn=sn/2;

int n;

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

{

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

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

}

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

printf("第10次反弹%f米.n",hn);

}

6.10猴子吃桃

main()

{

int day,x1,x2;

day=9;

x2=1;

while(day0)

{

x1=(x2+1)*2;

x2=x1;

day--;

}

printf("桃子总数=%dn",x1);

}

6.14打印图案

main()

{

int i,j,k;

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

{

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

printf(" ");

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

printf("*");

printf("n");

}

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

{

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

printf(" ");

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

printf("*");

printf("n");

}

6.15乒乓比赛

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!=kj!=k)

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

printf("顺序为:na-%ctb--%ctc--%cn",i,j,k);

}

}

}

}

7.1用筛选法求100之内的素数.

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

#includemath.h

#define N 101

main()

{

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

for(i=2;iN;i++) a[i]=i;

for(i=2;isqrl(N);i++)

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

{

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

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

a[j]=0;

printf("n");

for(i=2,line=0;iN;i++)

{

if(a[i]!=0)

{

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

line++;

if(line==10)

{

printf("n");

line=0;}

}

}

7.2用选择法对10个数排序.

/*选择法排序.*/

#define N 10

main()

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

/*输入数据*/

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

for (i=0;iN;i++)

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

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

}

printf("n");

for(i=0;iN;i++)

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

printf("n");

/*排序*/

for (i=0;iN-1;i++)

{ min=i;

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

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

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

/*输出*/

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

for(i=0;iN;i++)

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

}

7.3对角线和:

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

main()

{

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

int i,j;

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

for(i=0;i3;i++)

for(j=0;j3;j++)

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

for(i=0;i3;i++)

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

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

}

7.4插入数据到数组

/*插入数据到数组*/

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;i10;i++)

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

printf("n");

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

scanf("%d",number);

end=a[9];

if(numberend)

a[10]=number;

else

{for(i=0;i10;i++)

{ if(a[i]number)

{temp1=a[i];

a[i]=number;

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

{temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

for(i=0;j11;i++)

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

}

7.5将一个数组逆序存放。

/*数组逆序存放*/

#define N 5

main()

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

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

for(i=0;iN;i++)

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

for(i=0;iN/2;i++)

{ temp=a[i];

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

a[N-i-1]=temp;

}

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

for(i=0;iN;i++)

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

}

7.6杨辉三角

/*打印杨辉三角形*/

#define N 11

main()

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

for(i=1;iN;i++)

{a[i][i]=1;

a[i][1]=1;

}

for(i=3;iN;i++)

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

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

for(i=1;iN;i++)

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

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

printf("n");

}

printf("n");

}

7.8鞍点

/*查找鞍点*/

#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;in;i++)

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

for(j=0;jm,j++);

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

}

for(i=0;in;i++)

{ for(j=0;jm;j++)

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

pritf("n");

}

flag2=0;

for(i=0;in;i++)

{ max=a[i][0];

for(j=0;jm;j++)

if(a[i][j]max)

{ max=a[i][j];

maxj=j;

}

for (k=0,flag1=1;kn flag1;k++)

if(maxa[k][max])

flag1=0;

if(flag1)

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

flag2=1;

}

}

if(!flag2)

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

}

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

/*折半查找*/

#includestdio.h

#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(iN)

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

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

i++;

esle

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

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

}

}

printf("n");

for(i=0;iN;i++)

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

printf("n");

flag=1;

while(flag)

{

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

scanf("%d",number);

loca=0;

top=0;

bott=N-1;

if((numbera[0])||(numbera[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(numbera[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;

}

}

7.10/*统计字符数*/

main()

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

char text[3][80];

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

for(i=0;i3;i++)

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

gets(text[i]);

for(j=0;j80 text[i][j]!='';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;i3;i++)

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

printf("大写字母数:%dn",uppn);

printf("小写字母数:%dn",lown);

printf("数字个数:%dn",dign);

printf("空格个数:%dn",span);

printf("其它字符:%dn",othn);

}

7.11/*打印图案*/

main()

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

int i,j,k;

char space=' ';

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

{printf("n");

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

printf("%lc",space);

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

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

}

}

7.12/*译电文*/

#includestdio.h

main()

{int i,n;

char ch[80],tran[80];

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

gets(ch);

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

i=0;

while(ch[i]!='')

{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;in;i++)

putchar(tran[i]);

}

7.13/*连接两个字符串(不用'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]!='')

i++;

while(s2[j]!='')

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

s1[i]='';

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

}

7.14/*字符串比较*/

#includestdio.h

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]!=''))i++;

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

else

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

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

}

7.15/*字符串复制*/

#includestdio.h

main()

{

char from[80],to[80];

int i;

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

scanf("%s",from);

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

to[i]=from[i];

printf("复制字符串为:%sn",to);

}

第八章 函数

8.1(最小公倍数=u*v/最大公约数.)

hcf(u,v)

int u,v;

(int a,b,t,r;

if(uv)

{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("H.C.F=%dn",h);

l=lcd(u,v,h);

printf("L.C.d=%dn",l);

}

{return(u*v/h);}

main()

{int u,v,h,l;

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

h=hcf(u,v);

printf("H.C.F=%dn",h);

l=lcd(u,v,h);

printf("L.C.D=%dn",l);

}

8.2求方程根

#includemath.h

float x1,x2,disc,p,q;

greater_than_zero(a,b)

float a,b;

{

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

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

}

equal_to_zero(a,b)

float a,b;

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

smaller_than_zero(a,b)

float a,b;

{p=-b/(2*a);

最多就到8.2.。。。。。。

谭浩强C语言课本第八章的一道课后题,程序有错误,编译不能通过,请高人指教,谢谢。

#include stdio.h

#includestring.h

#define N 10

void input(int num[],char name[N][8])

{

int i;

for(i=0;iN;i++)

{

printf("nInput NO.:");

scanf("%d",num[i]);

printf("Input name:");

getchar();

gets(name[i]);

}

}

void sort(int num[],char name[N][8])

{

int i,j,min,temp1;

char temp2[8]={0};

for(i=0;iN-1;i++)

{

min=i;

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

if(num[min]num[i])

min=j;

temp1=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=temp1;

strcpy(name[min],temp2);

}

printf("nresult:n");

for(i=0;iN;i++)

printf("n%5d%10s",num[i],name[i]);

}

void search(int sign,int num[],char name[N][8])

{

int top,bott,mid,loca;

loca=0;

top=0;

bott=N-1;

if((signnum[0])||(signnum[N-1]))

loca=-1;

while((sign==1)(top=bott))

{

mid=(bott+top)/2;

if(sign==num[mid])

{

loca=mid;

printf("NO. %d, his name is %s。n",sign,name[loca]);

sign=-1;

}

else if(signnum[mid])

bott=mid-1;

else

top=mid+1;

}

if(sign==1loca==-1)

printf("Can not fine %d.n",sign);

}

void main()

{

int num[N],number,flag=1,c,n;

char name[N][8];

input(num,name);

sort(num,name);

while(flag==1)

{

printf("nInput number to look for:");

scanf("%d",number);

search(number,num,name);

printf("Continue or not(Y/N)?");

getchar();

c=getchar();

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

flag=0;

}

}

少包含头文件了,包含进去就差不多了,另外处理逻辑上有点问题,在仔细跟踪下代码看看逻辑那里有问题了 ,输入要查询的号码,没有输出结果。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。