C语言谭浩强第四版例题_c语言谭浩强习题

2020-02-27 其他范文 下载本文

C语言谭浩强第四版例题由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言谭浩强习题”。

例1.1 要求在屏幕上输入以下一行信息.This is a C program.编写程序: #include

// 这是编译预?处理命令 int main()

// 定义主函数

{

// 函数开始的标志

printf(“This is a C program.n”);

// 输出所指定的一行信息

return 0;

// 函数执行完毕时返回函数值0 }

例1.2 求两个整数之和.编写程序: #include

// 这是编译预处理命令

int main()

// 定义主函数 {

// 函数开始

int a,b,sum;

// 本行是程序的声明部分,定义a、b、sum为整型变量

a = 123;

// 对变量a赋值

b = 456;

// 对变量b赋值

sum = a + b;

// 进行a+b 的运算,并把结果存放在变量sum中

printf(“sum is %dn”,sum);

// 输出结果

return 0;

// 使函数返回值为0 }

// 函数结束

例1.3 求两个整数的较大者.编写程序: #include int main()

// 定义主函数 {

// 主函数体开始

int max(int x,int y);

// 对被调用函数max的声明

int a,b,c;

// 定义变量a,b,c scanf(“%d,%d”,&a,&b);

// 输入变量a和b的值

c = max(a,b);

// 调用max函数,将得到的值赋给c

printf(“max=%dn”,c);

// 输出c的值

return 0;

// 返回函数值为0 }

int max(int x,int y)

//定义max函数,函数值为整型, 形式参数x和y为整型

{ int z;

// max函数中的声明部分,定义本函数中用到的变量z为整型

if(x > y)z = x;else z = y;return(z);

//将z的值返回,通过max带回到调用函数的位置 } 例2.1 求1×2×3×4×5 编写程序: #include int main(){ int i,t;t=1;i=2;while(i

t=t*i;

i=i+1;} printf(“%dn”,t);return 0;} 例2.2 有50个学生,要求将成绩在80分以上的学生的学号和成绩输出。编写程序:

例2.19 求 编写程序: #include int main(){

int sign=1;

double deno=2.0,sum=1.0,term;

// 定义deno,sum,term为双精度变量

while(deno

{

sign=-sign;

term=sign/deno;

sum=sum+term;

deno=deno+1;

}

printf(“%fn”,sum);

return 0;}

例3.1 有人用温度计测量出用华氏法表示的温度(如 F,今要求把它转换为以摄氏法表示的温度(如 C)。

编写程序: #include int main(){

float f,c;

// 定义f和c为单精度浮点型变量

f=64.;

// 指定f的值

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

// 利用公式计算c的值

printf(“f=%fnc=%fn”,f,c);

// 输出c的值

return 0;} 例3.2

计算存款利息。有1000元,想存一年。有三种方法可选:(1)活期,年利率为r1

(2)一年期定期,年利率为r2(3)存两次半年定期,年利率为r3

请分别计算出一年后按三种方法所得到的本息和。编写程序: #include int main(){

float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;

p1 = p0 *(1 + r1);

p2 = p0 *(1 + r2);

p3 = p0 *(1 + r3/2)*(1 + r3/2);

printf(“p1=%fnp2=%fnp3=%fn”,p1,p2,p3);

return 0;} 11111123499100例3.3 给定一个大写字母,要求用小写字母输出。编写程序: #include int main(){

char c1,c2;

c1='A';

// 将字符'A'的ASCII代码放到c1变量中

c2=c1+32;

// 得到字符'a'的ASCII代码,放在c2变量中

printf(“%cn”,c2);

// 输出c2的值,是一个字符

printf(“%dn”,c2);

// 输出c2的值,是字符'a'的ASCII代码

return 0;}

例3.10 改写例3.3程序,使之可以适用于任何大写字母.从键盘输入一个大写字母,在显示屏上显示对应的小写字母.编写程序: #include int main(){

char c1,c2;

c1=getchar();

// 从键盘读入一个字符,赋给字符变量c1

c2=c1+32;

// 得到字符'a'的ASCII代码,放在字符变量c2中

putchar(c2);

// 输出c2的值,是一个字符

putchar('n');

return 0;}

#include int main(){

char c1,c2;

c1=getchar();

// 从键盘读入一个大写字符,赋给字符变量c1

c2=c1+32;

// 得到对应的小写字符的ASCII代码,放在字符变量c2中 printf(“大写字母:%cn小写字母:%cn”,c1,c2);// 输出c1,c2的值---大小写字符

return 0;}

例3.4 给出三角形的三边长,求三角形面积。编写程序: #include #include int main(){

double a,b,c,s,area;

// 定义各变量,均为double型

a=3.67;

// 对边长a赋值

b=5.43;

// 对边长b赋值

c=6.21;

// 对边长c赋值

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

// 计算s

area=sqrt(s*(s-a)*(s-b)*(s-c));

// 计算area

printf(“a=%ftb=%ft%fn”,a,b,c);

// 输出三边a,b,c的值

printf(“area=%fn”,area);

// 输出面积area的值

return 0;}

例3.5 求ax

2 bx

 c

0

方程的根。a、b、c由键盘输入

bac

>0  4编写程序: #include #include

// 程序中要调用求平方根函数sqrt

int main()

{double a,b,c,disc,x1,x2,p,q;

// disc是判别式sqrt(b*b-4ac)

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

// 输入实型变量的值要用格式声明“%f”

disc=b*b-4*a*c;

if(disc

else

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

q=sqrt(disc)/(2.0*a);

x1=p+q;x2=p-q;

// 求出方程的两个根

printf(“x1=%7.2fnx2=%7.2fn”,x1,x2);

// 输出方程的两个根

}

return 0;}

例3.6 用%f输出实数,只能得到6位小数.编写程序: #include int main(){double a=1.0;printf(“%fn”,a/3);return 0;} 例 3.7 float型数据的有效位数.编写程序: #include int main(){double a;a=10000/3.0;printf(“%fn”,a);return 0;}

例3.8 先后输出BOY三个字符。编写程序: #include int main(){

char a='B',b='O',c='Y';

putchar(a);

putchar(b);

putchar(c);

putchar('n');

return 0;}

#include int main(){

char a,b,c;

a='B';b='O';c='Y';

putchar(a);

putchar(b);

putchar(c);

putchar('n');

return 0;}

// 定义3个字符变量,并初始化

// 向显示器输出字符B

// 向显示器输出字符O

// 向显示器输出字符Y

// 向显示器输出一个换行符

// 定义3个字符变量

// 给3个字符变量赋值

// 向显示器输出字符B

// 向显示器输出字符O

// 向显示器输出字符Y

// 向显示器输出一个换行符

例3.9 从键盘输入BOY三个字符,然后把它们输出到屏幕。编写程序: #include int main()

{ char a,b,c;

// 定义字符变量a,b,c

a=getchar();

// 从键盘输入一个字符,送给字符变量a

b=getchar();

// 从键盘输入一个字符,送给字符变量b

c=getchar();

// 从键盘输入一个字符,送给字符变量c

putchar(a);

// 将变量a的值输出

putchar(b);

putchar(c);

putchar('n');

return 0;}

#include int main()

{

putchar(getchar());

putchar(getchar());

putchar(getchar());

putchar('n');

return 0;}

// 将变量a的值输出

// 将变量a的值输出

// 换行

// 将接收到的字符输出

// 将接收到的字符输出

// 将接收到的字符输出

例4.1 在例3.5的基础上对程序进行改进。题目要求是求

c

方程的根。axbx 02由键盘输入a,b,c。假设a,b,c的值任意,并不保证

b

4ac

0

。需要在程序中进行判别,如果

b 2

ac

0

,就计算并输出方程的两个实根, 4否则就输出“方程无实根”的信息。

编写程序: #include #include

// 程序中要调用求平方根函数sqrt

int main()

{double a,b,c,disc,x1,x2,p,q;

// disc是判别式sqrt(b*b-4ac)

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

// 输入双精度浮点型变量的值要用格式声明“%lf”

disc=b*b-4*a*c;

if(disc

else

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

q=sqrt(disc)/(2.0*a);

x1=p+q;x2=p-q;

// 求出方程的两个根

printf(“real roots:nx1=%10.6fnx2=%10.6fn”,x1,x2);

// 输出方程的两个根

}

return 0;}

例4.2 输入两个实数,按代数值由小到大的顺序输出这两个数。编写程序: #include int main(){

float a,b,t;

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

if(a>b)

{

t=a;

a=b;

b=t;

}

printf(“%5.2f,%5.2fn”,a,b);

return 0;}

例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。编写程序: #include int main(){

float a,b,c,t;

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

if(a>b)

{

t=a;

a=b;

b=t;

}

// 实现a和b的互换

if(a>c)

{

t=a;

a=c;

c=t;

}

// 实现a和c的互换

if(b>c)

{

t=b;

b=c;

c=t;

}

// 实现b和c的互换

printf(“%5.2f,%5.2f,%5.2fn”,a,b,c);

return 0;}

例4.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。编写程序: #include int main(){

char ch;

scanf(“%c”,&ch);

ch=(ch>='A' && ch

printf(“%cn”,ch);

return 0;} 例4.5有一函数: 1(x0) y0(x0)1(x0)

编一程序,输入一个x值,要求输出相应的y值。编写程序: 程序1: #include int main(){

int x,y;

scanf(“%d”,&x);

if(x

y=-1;

else

if(x==0)y=0;

else y=1;

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

return 0;} 程序2: #include int main(){

int x,y;

scanf(“%d”,&x);

if(x>=0)

if(x>0)y=1;

else

y=0;

else

y=-1;

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

return 0;}

例4.6 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为 60分以下。成绩的等级由键盘输入。编写程序: #include int main(){

char grade;

scanf(“%c”,&grade);

printf(“Your score:”);

switch(grade)

{ default: printf(“data error!n”);break;

case 'A': printf(“85~100n”);break;

case 'B': printf(“70~84n”);break;

case 'C': printf(“60~69n”);break;

case 'D': printf(“

}

return 0;}

例4.7 编写程序,用switch语句处理菜单命令。

在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个’B’或’b’字符,就会执行B操作,等等。

编写程序: #include int main(){

void action1(int,int),action2(int,int);

char ch;

int a=15,b=23;

ch=getchar();

switch(ch)

{

case 'a':

case 'A': action1(a,b);break;

case 'b':

case 'B': action2(a,b);break;

default: putchar('a');

}

return 0;}

void action1(int x,int y){

printf(”x+y=%dn“,x+y);}

void action2(int x,int y){

printf(”x*y=%dn“,x*y);}

例4.8 写一程序,判断某一年是否闰年。编写程序: 程序1: 程序2: #include

#include int main()

int main(){

{

int year,leap;

int year,leap;

scanf(”%d“,&year);

scanf(”%d“,&year);

if(year%4==0)

if(year%4!=0)

{

if(year%100==0)

{

if(year%400==0)

leap=1;

else

leap=0;

}

else

leap=1;

}

else

leap=0;

if(leap)

printf(”%d is “,year);

else

printf(”%d is not “,year);

printf(”a leap year.n“);

return 0;

}

leap=0;

else if(year%100!=0)

leap=1;

else if(year%400!=0)

leap=0;else

leap=1;if(leap)

printf(”%d is “,year);else

printf(”%d is not “,year);printf(”a leap year.n“);return 0;}

#include

程序3: int main(){

int year,leap;

printf(”enter year:“);

scanf(”%d“,&year);

if((year%4==0 && year%100!=0)||(year%400==0))

leap=1;

else

leap=0;

if(leap)

printf(”%d is “,year);

else

printf(”%d is not “,year);

printf(”a leap year.n“);

return 0;}

程序4: #include

#include int main(){

int year;

bool leap;

scanf(”%d“,&year);

if(year%4==0)

{

if(year%100==0){

if(year%400==0)

leap=true;

else

leap=false;}

else

leap=true;

}

else

leap=false;

if(leap==true)

printf(”%d is “,year);

else

printf(”%d is not “,year);

printf(”a leap year.n“);

return 0;

} 例4.9 求 ax

c 

0

方程的解。bx编写程序: #include #include int main(){

double a,b,c,disc,x1,x2,realpart,imagpart;

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

printf(”The equation “);

if(fabs(a)

printf(”is not a quadraticn“);

else

{

disc=b*b-4*a*c;

if(fabs(disc)

printf(”has two equal roots:%8.4fn“,-b/(2*a));

else

if(disc>1e-6)

{

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

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

printf(”has distinct real roots:%8.4f and %8.4fn“,x1,x2);

}

else

{

realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf(” has complex roots:n“);

printf(”%8.4f+%8.4fin“,realpart,imagpart);

printf(”%8.4f-%8.4fin“,realpart,imagpart);

}

}

return 0;}

例4.10 运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。编写程序: #include int main(){

int c,s;

float p,w,d,f;

printf(”please enter price,weight,discount:“);

// 提示输入的数据

scanf(”%f,%f,%d“,&p,&w,&s);

// 输入单价、重量、距离

if(s>=3000)c=12;

else

c=s/250;

switch(c)

{

case 0:

d=0;break;

case 1:

d=2;break;

case 2:

case 3:

d=5;break;

case 4:

case 5:

case 6:

case 7:

d=8;break;

case 8:

case 9:

case 10:

case 11: d=10;break;

case 12: d=15;break;

}

f = p * w * s *(1-d / 100);

printf(”freight=%10.2fn“,f);

return 0;}

// 3000km以上为同一折扣

// 3000km以下各段折扣不同,c的值不相同

// c=0,代表250km以下,折扣d=0

// c=1,代表250到500km以下,折扣d=2% // c=2和3,代表500到1000km以下,折扣d=5% // c=4-7,代表1000到2000km以下,折扣d=8% // c=8-11,代表2000到3000km以下,折扣d=10% // c12,代表3000km以上,折扣d=15% // 计算总运费

// 输出总运费,取两位小数

例5.1求1+2+3+„+100,即 n1编写程序:

#include int main(){

int i=1,sum=0;

// 定义变量i的初值为1,sum的初值为0

while(i

// 当i>100,条件表达式i

{

// 循环体开始

sum=sum+i;

// 第一次累加后,sum的值为1

n100

i++;

}

printf(”sum=%dn“,sum);

return 0;}

例5.2 用do…while语句求:编写程序:

#include int main(){ int i=1,sum=0;do

{

sum=sum+i;

i++;}while(i

// 加完后,i的值加1,为下次累加作准备

// 循环体结束

// 输出1+2+3„+100的累加和 1001+2+3+…+100,即 nn例5.3 while和do---while循环的比较。编写程序:

(1)用while循环 #include int main(){ int i,sum=0;printf(”please enter i,i=?“);scanf(”%d“,&i);while(i

{

sum=sum+i;

i++;};printf(”sum=%dn“,sum);return 0;}

(2)用do„while循环 #include int main(){ int i,sum=0;printf(”please enter i,i=?“);scanf(”%d“,&i);do

{

sum=sum+i;

i++;}while(i

例5.4 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。编写程序:

#include #define SUM 100000 int main(){

float amount,aver,total;

int i;

for(i=1,total=0;i

{

printf(”please enter amount:“);

scanf(”%f“,&amount);

total= total+amount;

if(total>=SUM)break;

}

aver=total/i;

printf(”num=%dnaver=%10.2fn“,i,aver);

return 0;}

例5.5 要求输出100~200之间的不能被3整除的数。编写程序:

#include int main(){int n;for(n=100;n

{if(n%3==0)

continue;

printf(”%d “,n);

} printf(”n“);return 0;}

例5.6 输出以下4*5的矩阵。编写程序:

#include int main(){

int i,j,n=0;

for(i=1;i

for(j=1;j

//控制在输出5个数据后换行

printf(”%dt“,i*j);}

printf(”n“);

return 0;} #include int main(){

int i,j,n=0;

for(i=1;i

for(j=1;j

//控制在输出5个数据后换行

if(i==3 && j==1)break;

//遇到第3行第1列,终止内循环

printf(”%dt“,i*j);}

printf(”n“);

return 0;} #include int main(){

int i,j,n=0;

for(i=1;i

for(j=1;j

//控制在输出5个数据后换行

if(i==3 && j==1)continue;

//遇到第3行第1列,提前结束执行本次内循环体

printf(”%dt“,i*j);}

printf(”n“);

return 0;} 1111例5.7用

47公式求 

的近似值,直到发现某一项的绝对值小于510*6 为止(该项不累计加)。编写程序:

#include #include int main(){

int sign=1;

// sign用来表示数值的符号

double pi=0.0,n=1.0,term=1.0;

// pi代表π,n代表分母,term代表当前项的值

while(fabs(term)>=1e-8)

// 检查当前项term的绝对值是否大于或等于10的(-6)次方

{

pi=pi+term;

// 把当前项term累加到pi中

n=n+2;

// n+2是下一项的分母

sign=-sign;

// sign代表符号,下一项的符号与上一项符号相反

term=sign/n;

// 求出下一项的值term

}

pi=pi*4;

// 多项式的和pi乘以4,才是π的近似值

printf(”pi=%10.8fn“,pi);

// 输出π的近似值

}

#include #include int main(){

int sign=1;

// sign用来表示数值的符号

int t=0;

// t 代表当前执行循环体的次数

double pi=0.0,n=1.0,term=1.0;// pi代表π,n代表分母,term代表当前项的值

while(fabs(term)>=1e-6)

// 检查当前项term的绝对值是否大于或等于10的(-6)次方

{t=t+1;

// 每进入一次循环体,t的值加1

pi=pi+term;

// 把当前项term累加到pi中

n=n+2;

// n+2是下一项的分母

sign=-sign;

// sign代表符号,下一项的符号与上一项符号相反

term=sign/n;

// 求出下一项的值term

}

pi=pi*4;

// 多项式的和pi乘以4,才是π的近似值

printf(”pi=%10.6fn“,pi);

// 输出π的近似值

}

例5.8 求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为

1、1。从第3个数开始,该数是其前面两个数之和。即:(n1)F11(n2)F21 FFF(n3)n1n2n

编写程序:

#include int main(){

int f1=1,f2=1,f3;

int i;

printf(”%12dn%12dn“,f1,f2);

for(i=1;i

{

f3=f1+f2;

printf(”%12dn“,f3);

f1=f2;

f2=f3;} return 0;}

#include int main(){

int f1=1,f2=1;

int i;

for(i=1;i

{

printf(”%12d %12d “,f1,f2);

if(i%2==0)printf(”n“);

f1=f1+f2;

f2=f2+f1;

}

return 0;}

// 每个循环中输出2个月的数据,故循环20次即可 // 输出己知的两个月的兔子数 // 计算出下一个月的兔子数,并存放在f1中 // 计算出下两个月的兔子数,并存放在f2中

例5.9输入一个大于3的整数n,判定它是否素数(prime,又称质数)。编写程序:

#include int main(){int n,i;

printf(”please enter a integer number,n=?“);

scanf(”%d“,&n);

for(i=2;i

if(n%i==0)break;

if(i

else printf(”%d is a prime number.n“,n);

return 0;} #include #include int main(){int n,i,k;

printf(”please enter a integer number:n=?“);

scanf(”%d“,&n);

k=sqrt(n);

for(i=2;i

if(n%i==0)break;

if(i

else printf(”%d is a prime number.n“,n);

return 0;} 例5.10 求100~200间的全部素数。编写程序:

# include # include int main(){int n,k,i,m=0;

for(n=101;n

// n从100变化到200,对每个n进行判定

{ k=sqrt(n);

for(i=2;i

if(n%i==0)break;

// 如果n被i整除,终止内循环,此时i

if(i>=k+1)

// 若j>=k+1,表示n未被整除

{printf(”%d “,n);

// 应确定n是素数

m=m+1;

// m用来控制换行,一行内输出10个录素数

}

if(m%10==0)printf(”n“);

// m累计到10的倍数,换行

}

printf(”n“);

return 0;

} 例5.11 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。

A B C D E F G …… W X Y Z

编写程序:

#include int main(){char c;

c=getchar();

// 输入一个字符给字符变量c

while(c!='n')

// 检查c的值是否换行符'n'

{if((c>='a' && c='A' && c

// c如果是字母

{ if(c>='W' && c='w' && c

// 如果是26个字母中最后4个字母之一

else c=c+4;

// 如果是前面22个字母之一,就使c加4,即变成其后第4个字母

}

printf(”%c“,c);

// 输出己改变的字符

c=getchar();

// 再输入下一个字符给字符变量c

}

printf(”n“);

return 0;}

#include int main(){char c;

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

// 输入一个字符给字符变量c并检查它c的值是否换行符

{if((c>='A' && c='a' && c

// c如果是字母

{ c=c+4;

// 只要是字母,都先加4

if(c>='Z' && c'z')

// 如果是26个字母中最后4个字母之一

c=c-26;

// c的值改变为26个字母中最前面的4个字母中对应的字母

}

printf(”%c“,c);

// 输出己改变的字符

}

printf(”n“);

return 0;}

例6.1 对10个数组元素依次赋值为0,1, 2,3,4,5,6,7,8,9,要求按逆序输出。编写程序:

#include int main(){

int i,a[10];

for(i=0;i

a[i]=i;

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

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

printf(”n“);

return 0;}

例6.2 用数组处理求Fibonacci数列问题 编写程序:

#include int main(){

int i;

int f[20]={1,1};

for(i=2;i

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

for(i=0;i

{

if(i%5==0)printf(”n“);

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

}

printf(”n“);

return 0;}

例6.3 有10个地区的面积,要求对它们按由小到大的顺序排列。编写程序:

#include int main(){

int a[10];

int i,j,t;

printf(”input 10 numbers :n“);

for(i=0;i

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

printf(”n“);

for(j=0;j

for(i=0;i

if(a[i]>a[i+1])

{t=a[i];a[i]=a[i+1];a[i+1]=t;}

printf(”the sorted numbers :n“);

for(i=0;i

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

printf(”n“);

return 0;}

// 进行9次循环,实现9趟比较// 在每一趟中进行9-j次比较

// 相邻两个数比较

例6.4 将一个二维数组行和列的元素互换,存到另一个二维数组中。

14123a456

编写程序:

#include int main(){

int a[2][3]={{1,2,3},{4,5,6}};

int b[3][2],i,j;

printf(”array a:n“);

for(i=0;i

{

for(j=0;j

{

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

b[j][i]=a[i][j];

}

printf(”n“);

}

printf(”array b:n“);

for(i=0;i

{

for(j=0;j

printf(”%5d“,b[i][j]);

printf(”n“);

}

return 0;}

b2536例6.5 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。编写程序:

#include int main(){int i,j,row=0,colum=0,max;

int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};

// 定义数组并赋初值

max=a[0][0];

// 先认为a[0][0]最大

for(i=0;i

for(j=0;j

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

// 如果某元素大于max,就取代max的原值

{max=a[i][j];

row=i;

// 记下此元素的行号

colum=j;

// 记下此元素的列号

}

printf(”max=%dnrow=%dncolum=%dn“,max,row,colum);

return 0;}

例6.6 输出一个已知的字符串。编写程序:

#include int main(){char c[15]={'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.'};

int i;

for(i=0;i

printf(”%c“,c[i]);

printf(”n“);

return 0;}

例6.7 输出一个菱形图。编写程序:

#include int main(){char diamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};

int i,j;

for(i=0;i

{for(j=0;j

printf(”%c“,diamond[i][j]);

printf(”n“);

}

return 0;} 例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。编写程序:

#include int main()

{

char string[81];

int i,num=0,word=0;

char c;

gets(string);

// 输入一个字符串给字符数组string

for(i=0;(c=string[i])!='';i++)

// 只要字符不是''就继续执行循环

if(c==' ')word=0;

// 如果是空格字符,使word置0

else if(word==0)

// 如果不是空格字符且word原值为0

{word=1;

// 使word置1

num++;

// num累加1,表示增加一个单词

}

printf(”There are %d words in this line.n“,num);

//输出结果

return 0;}

例6.9 有3个字符串,要求找出其中最大者。编写程序: #include #include int main(){

char str[3][20];

// 定义二维字符数组

char string[20];

// 定义一维字符数组,作为交换字符串时的临时字符数组

int i;

for(i=0;i

gets(str[i]);

// 读入3个字符串,分别给str[0],str[1],str[2]

if(strcmp(str[0],str[1])>0)

// 若str[0]大于str[1]

strcpy(string,str[0]);

// 把str[0]的字符串赋给字符数组string

else

// 若str[0]小于等于str[1]

strcpy(string,str[1]);

// 把str[1]的字符串赋给字符数组string

if(strcmp(str[2],string)>0)

// 若str[2]大于string

strcpy(string,str[2]);

// 把str[2]的字符串赋给字符数组string

printf(”nthe largest string is:n%sn“,string);

// 输出string

return 0;}

例7.1 输出以下的结果,用函数调用实现。

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

How do you do!

****************** 编写程序:

#include int main(){void printstar();

void print_meage();

printstar();

print_meage();

printstar();

return 0;} void printstar()

{ printf(”******************n“);} void print_meage()

{printf(” How do you do!n“);}

例7.2 输入两个整数,要求输出其中值较大者。要求用函数来找到大数。编写程序:

#include int main(){ int max(int x,int y);

int a,b,c;

printf(”please enter two integer numbers:“);

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

c=max(a,b);

printf(”max is %dn“,c);}

int max(int x,int y)

// 定义max函数 {

int z;

// 定义临时变量

z=x>y?x:y;

// 把x和y中大者赋给z

return(z);

// 把z作为max函数的伦值带回main函数 } 例7.3将例7.2稍作改动,将在max函数中定义的变量z改为float型。函数返回值的类型与指定的函数类型不同,分析其处理方法。编写程序:

#include int main(){int max(float x,float y);

float a,b;

int c;

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

c=max(a,b);

printf(”max is %dn“,c);

return 0;} int max(float x,float y){float z;

z=x>y?x:y;

return(z);}

例7.4 输入两个实数,用一个函数求出它们之和。编写程序: 程序1:

#include int main(){float add(float x, float y);

float a,b,c;printf(”Please enter a and b:“);scanf(”%f,%f“,&a,&b);c=add(a,b);printf(”sum is %fn“,c);return 0;}

float add(float x,float y)

{float z;

z=x+y;

return(z);}

程序2:

#include float add(float x,float y)

{float z;

z=x+y;

return(z);}

void main(){ float a,b,c;printf(”Please enter a and b:“);scanf(”%f,%f“,&a,&b);c=add(a,b);printf(”sum is %fn“,c);}

例7.5 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。编写程序: 程序1:

#include int main(){ int max4(int a,int b,int c,int d);

// 对max4的函数声明

int a,b,c,d,max;

printf(”Please enter 4 interger numbers:“);

// 提示输入4个数

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

// 输入4个数

max=max4(a,b,c,d);

// 调用max4函数,得到4个数中的最大者

printf(”max=%d n“,max);

// 输出4个数中的最大者

return 0;}

int max4(int a,int b,int c,int d)

// 定义max4函数

{int max2(int a,int b);

// 对max2的函数声明

int m;

m=max2(a,b);

// 调用max2函数,得到a和b两个数中的大者,放在m中

m=max2(m,c);

// 调用max2函数,得到a,b,c三个数中的大者,放在m中

m=max2(m,d);

// 调用max2函数,得到a,b,c,d四个数中的大者,放在m中

return(m);

// 把m作为函数值带回main函数 } int max2(int a,int b)

// 定义max2函数

{if(a>=b)

return a;

// 若a>=b,将a为函数返回值

else

return b;

// 若a

程序4: #include void main(){ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(”Please enter 4 interger numbers:“);

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

max=max4(a,b,c,d);

printf(”max=%d n“,max);}

int max4(int a,int b,int c,int d){int max2(int a,int b);return max2(max2(max2(a,b),c),d);

} int max2(int a,int b){ return(a>b?a:b);

} 程序2:

#include int main(){ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(”Please enter 4 interger numbers:“);

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

max=max4(a,b,c,d);

printf(”max=%d n“,max);

return 0;}

int max4(int a,int b,int c,int d){int max2(int a,int b);int m;

m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);} int max2(int a,int b){

return(a>b?a:b);} 程序3:

#include void main(){ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(”Please enter 4 interger numbers:“);

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

max=max4(a,b,c,d);

printf(”max=%d n“,max);}

int max4(int a,int b,int c,int d){int max2(int a,int b);int m;

m=max2(max2(max2(a,b),c),d);

/* 仔细分析此行 */ return(m);} int max2(int a,int b){ return(a>b?a:b);

} 程序4:

#include void main(){ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(”Please enter 4 interger numbers:“);

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

max=max4(a,b,c,d);

printf(”max=%d n“,max);}

int max4(int a,int b,int c,int d){int max2(int a,int b);return max2(max2(max2(a,b),c),d);

} int max2(int a,int b){ return(a>b?a:b);

} 例7.6 有5个学生坐在一起

 问第5个学生多少岁?他说比第4个学生大2岁  问第4个学生岁数,他说比第3个学生大2岁  问第3个学生,又说比第2个学生大2岁  问第2个学生,说比第1个学生大2岁  最后问第1个学生,他说是10岁  请问第5个学生多大

编写程序:

#include int main(){ int age(int n);

printf(”NO.5,age:%dn“,age(5));

//输出第5人的年龄

return 0;}

int age(int n)

//定义递归函数

{int c;

if(n==1)

// 如果n等于1

c=10;

// 年龄为10

else

// 如果n不等于1

c=age(n-1)+2;

// 年龄是前一人的年龄加2(如第4人年龄是第3人年龄加2)

return(c);

// 返回年龄 }

例7.7 用递归方法求n!。编写程序:

#include int main(){ int fac(int n);

int n;

int y;

printf(”input an integer number:“);

scanf(”%d“,&n);

y=fac(n);

printf(”%lld!=%dn“,n,y);

return 0;} int fac(int n){

int f;

if(n

printf(”n

else if(n==0||n==1)

f=1;

else f=fac(n-1)*n;

return(f);}

例7.8 Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动一盘子的步骤。编写程序:

#include int main(){

void hanoi(int n,char one,char two,char three);

// 对hanoi函数的声明

int m;

printf(“input the number of diskes:”);

scanf(“%d”,&m);

printf(“The step to move %d diskes:n”,m);

hanoi(m,'A','B','C');} void hanoi(int n,char one,char two,char three)

// 定义hanoi函数

// 将n个盘从one座借助two座,移到three座

{

void move(char x,char y);

// 对move函数的声明

if(n==1)

move(one,three);

else

{

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

} }

void move(char x,char y)

// 定义move函数

{

printf(“%c-->%cn”,x,y);}

例7.9 输入10个数,要求输出其中值最大的元素和该数是第几个数。编写程序:

#include int main()

{int max(int x,int y);

int a[10],m,n,i;

printf(“enter 10 integer numbers:”);

for(i=0;i

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

printf(“n”);

for(i=1,m=a[0],n=0;i

{ if(max(m,a[i])>m)

// 若max函数返回的值大于m

{m=max(m,a[i]);

// max函数返回的值取代m原值

n=i;

// 把此数组元素的序号记下来,放在n中

}

}

printf(“The largest number is %dnit is the %dth number.n”,m,n+1);

} int max(int x,int y)

{ return(x>y?x:y);} 例7.10 有一个一维数组score,内放10个学生成绩,求平均成绩。编写程序:

#include int main(){ float average(float array[10]);

// 函数声明

float score[10],aver;

int i;

printf(“input 10 scores:n”);

for(i=0;i

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

printf(“n”);

aver=average(score);

// 调用average函数

printf(“average score is %5.2fn”,aver);

return 0;}

float average(float array[10])

// 定义average函数

{int i;

float aver,sum=array[0];

for(i=1;i

sum=sum+array[i];

// 累加学生成绩

aver=sum/10;

return(aver);} 例7.11 有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。编写程序:

#include int main(){float average(float array[ ],int n);float score1[5]={98.5,97,91.5,60,55};float score2[10]={67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5};printf(“The average of cla A is %6.2fn”,average(score1,5));printf(“The average of cla B is %6.2fn”,average(score2,10));return 0;} float average(float array[ ],int n){int i;

float aver,sum=array[0];

for(i=1;i

sum=sum+array[i];

aver=sum/n;

return(aver);}

例7.12用选择法对数组中10个整数按由小到大排序。编写程序:

#include int main(){void sort(int array[],int n);int a[10],i;printf(“enter array:n”);for(i=0;i

scanf(“%d”,&a[i]);sort(a,10);printf(“The sorted array:n”);for(i=0;i

printf(“%d ”,a[i]);printf(“n”);return 0;}

void sort(int array[],int n){int i,j,k,t;

for(i=0;i

{k=i;

for(j=i+1;j

if(array[j]

k=j;

t=array[k];array[k]=array[i];array[i]=t;} } 例7.13 有一个3×4的矩阵,求所有元素中的最大值。编写程序:

#include int main(){ int max_value(int array[][4]);

int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};

printf(“Max value is %dn”,max_value(a));

return 0;} int max_value(int array[][4]){int i,j,max;max=array[0][0];for(i=0;i

for(j=0;j

if(array[i][j]>max)max=array[i][j];return(max);} 例7.14 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。编写程序:

#include float Max=0,Min=0;

// 定义全局变量Max,Min int main(){ float average(float array[ ],int n);

float ave,score[10];

int i;

printf(“Please enter 10 scores:”);

for(i=0;i

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

ave=average(score,10);

printf(“max=%6.2fnmin=%6.2fnaverage=%6.2fn”,Max,Min,ave);

return 0;} float average(float array[ ],int n)

// 定义函数,有一形参是数组

{int i;

float aver,sum=array[0];

Max=Min=array[0];

for(i=1;i

{if(array[i]>Max)Max=array[i];

else if(array[i]

sum=sum+array[i];

}

aver=sum/n;

return(aver);} 例7.15 若外部变量与局部变量同名,分析结果。编写程序:

#include int a=3,b=5;

// a,b是全局变量 int main(){ int max(int a,int b);

// 函数声明。a,b是形参

int a=8;

// a是局局部变量

printf(“max=%dn”,max(a,b));

// 变量a是函数中定义的局部变量a return 0;}

int max(int a,int b)

// a,b是函数形参

{ int c;c=a>b?a:b;

// 把a和b中的大者存放在c中

return(c);} 例7.16 考察静态局部变量的值。编写程序:

#include int main(){ int f(int);int a=2,i;for(i=0;i

printf(“%dn”,f(a));return 0;} int f(int a){ auto int b=0;

static c=3;

b=b+1;

c=c+1;

return(a+b+c);} 例7.17 输出1到5的阶乘值。编写程序:

#include int main(){ int fac(int n);int i;for(i=1;i

printf(“%d!=%dn”,i,fac(i));return 0;} int fac(int n){ static int f=1;

f=f*n;

return(f);}

例7.18 调用函数,求3个整数中的大者。编写程序:

#include int main(){int max();

extern int A,B,C;

// 把外部变量A,B,C的作用域扩展到从此处开始

printf(“Please enter three integer numbers:”);scanf(“%d %d %d”,&A,&B,&C);printf(“max is %dn”,max());return 0;} int A ,B ,C;

// 定义外部变量A,B,C

int max()

{int m;m=A>B?A:B;if(C>m)m=C;return(m);} 例7.19 给定b的值,输入a和m,求a*b和am的值。编写程序: 文件file1.c #include int A;

int main()

{int power(int);

int b=3,c,d,m;

printf(“enter the number a and its power m:n”);

scanf(“%d,%d”,&A,&m);

c=A*b;

printf(“%d*%d=%dn”,A,b,c);

d=power(m);

printf(“%d**%d=%dn”,A,m,d);

return 0;}

文件file2.c extern A;int power(int n){int i,y=1;

for(i=1;i

y*=A;

return(y);} 例7.20 有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。编写程序:

file1.c(文件1)#include int main(){extern void enter_string(char str[]);extern void delete_string(char str[],char ch);extern void print_string(char str[]);

// 以上3行声明在本函数中将要调用的已在其他文件中定义的3个函数

char c,str[80];enter_string(str);

// 调用在其他文件中定义的enter_string函数

scanf(“%c”,&c);delete_string(str,c);

// 调用在其他文件中定义的delete_string函数

print_string(str);

// 调用在其他文件中定义的print_string函数

return 0;

}

file2.c(文件2)//#include void enter_string(char str[80]){

gets(str);

}

file3.c(文件3)//#include void delete_string(char str[],char ch){int i,j;for(i=j=0;str[i]!='';i++)

if(str[i]!=ch)

str[j++]=str[i];str[j]='';}

file4.c(文件4)//#include void print_string(char str[]){ printf(“%sn”,str);}

例8.1 通过指针变量访问整型变量。编写程序:

#include int main(){ int a=100,b=10;

// 定义整型变量a,b,并初始化

int *pointer_1, *pointer_2;

// 定义指向整型数据的指针变量pointer_1, pointer_2

pointer_1=&a;

// 把变量a的地址赋给指针变量pointer_1

pointer_2=&b;

// 把变量b的地址赋给指针变量pointer_2

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

// 输出变量a和b的值

printf(“*pointer_1=%d,*pointer_2=%dn”,*pointer_1,*pointer_2);

return 0;}

例8.2 输入a和b两个整数,按先大后小的顺序输出a和b。编写程序:

#include int main(){ int *p1,*p2,*p,a,b;

printf(“please enter two integer numbers:”);

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

// 输入两个整数

p1=&a;

// 使p1指向变量a

p2=&b;

// 使p2指向变量b

if(a

// 如果a

{p=p1;p1=p2;p2=p;}

// 使p1与p2的值互换

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

// 输出a,b

printf(“max=%d,min=%dn”,*p1,*p2);

// 输出p1和p2所指向的变量的值

return 0;}

例8.3 题目要求同例8.2,即对输入的两个整数按大小顺序输出。现用函数处理,而且用指针类型的数据作函数参数。编写程序:

#include int main(){void swap(int *p1,int *p2);

int a,b;

int*pointer_1,*pointer_2;

printf(“please enter a and b:”);

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

pointer_1=&a;

pointer_2=&b;

if(a

printf(“max=%d,min=%dn”,a,b);

return 0;}

void swap(int *p1,int *p2){int temp;

temp=*p1;

*p1=*p2;

*p2=temp;} 例8.4 对输入的两个整数按大小顺序输出。编写程序:

#include int main(){void swap(int *p1,int *p2);

int a,b;

int*pointer_1,*pointer_2;

printf(“please enter two integer numbers:”);

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

pointer_1=&a;

pointer_2=&b;

if(a

printf(“max=%d,min=%dn”,a,b);

return 0;}

void swap(int *p1,int *p2){int *p;

p=p1;

p1=p2;

p2=p;} 例8.5 输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。编写程序:

#include int main(){ void exchange(int *q1, int *q2, int *q3);

// 函数声明

int a,b,c,*p1,*p2,*p3;

printf(“please enter three numbers:”);

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

p1=&a;p2=&b;p3=&c;

exchange(p1,p2,p3);

printf(“The order is:%d,%d,%dn”,a,b,c);

return 0;}

void exchange(int *q1, int *q2, int *q3)

// 定义将3个变量的值交换的函数

{void swap(int *pt1, int *pt2);

// 函数声明

if(*q1

// 如果a

if(*q1

// 如果a

if(*q2

// 如果b

}

void swap(int *pt1, int *pt2)

// 定义交换2个变量的值的函数

{int temp;

temp=*pt1;

// 换*pt1和*pt2变量的值

*pt1=*pt2;

*pt2=temp;}

例8.6 有一个整型数组a,有10个元素,要求输出数组中的全部元素。编写程序:(1)下标法。#include int main(){int a[10];

int i;

printf(“please enter 10 integer numbers:”);

for(i=0;i

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

for(i=0;i

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

printf(“%n”);

return 0;}(2)通过数组名计算数组元素地址,找出元素的值 #include int main(){int a[10];

int i;

printf(“please enter 10 integer numbers:”);

for(i=0;i

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

for(i=0;i

printf(“%d ”,*(a+i));

//通过故数组名和元素序号计算元素地址,再找到该元素

printf(“n”);

return 0;}(3)用指针变量指向数组元素

#include int main(){int a[10];

int *p,i;

printf(“please enter 10 integer numbers:”);

for(i=0;i

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

for(p=a;p

printf(“%d ”,*p);

// 用指针指向当前的数组元素

printf(“n”);

return 0;}

例8.7 通过指针变量输出整型数组a的10个元素。编写程序:

#include int main(){ int *p,i,a[10];

p=a;

printf(“please enter 10 numbers:”);

for(i=0;i

scanf(“%d”,p++);

for(i=0;i

printf(“%d ”,*p);

printf(“n”);

return 0;}

#include int main(){ int i,a[10],*p=a;

printf(“please enter 10 integer numbers:”);

for(i=0;i

scanf(“%d”,p++);

p=a;

for(i=0;i

printf(“%d ”,*p);

printf(“n”);

return 0;}

例8.8 将数组a中n个整数按相反顺序存放 编写程序:

#include int main(){void inv(int x[ ],int n);int i,a[10]={3,7,9,11,0,6,7,5,4,2};printf(“The original array:n”);for(i=0;i

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

// 输出未交换时数组各元素的值

printf(“n”);inv(a,10);

printf(“The array has been inverted:n”);for(i=0;i

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

printf(“n”);return 0;}

void inv(int x[ ],int n)

{int temp,i,j,m=(n-1)/2;

for(i=0;i

{j=n-1-i;

temp=x[i];x[i]=x[j];x[j]=temp;

}

return 0;}

// 调用inv函数,进行交换 // 输出交换后数组各元素的值 // 形参x是蚊数组名

// 把x[i]和x[j]交换

谭浩强版C语言期末考试

一 选择题(24分,每小题2分)1.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是()。 A 存放读入数据项的存储区B 存放读入数据的地址或指向此地址的指针 C 一个......

C语言程序设计谭浩强重点笔记

C语言设计 学习笔记早晨: 06:40起床 07:20——08:20 上午: 08:30——10:30 10:50——11:30 中午: 12:00——02:00 下午: 02:30——04:30 晚上: 05:30——08:00 08:00——09:00......

谭浩强C语言第八章答案.doc

8.1 # include int yueshu(int m,int n); int beishu(int m,int n); int main() { int a,b,Y,B; printf("输入两个数字:\n"); scanf("%d%d",&a,&b); Y=yueshu(a,b); B=b......

C语言程序设计(谭浩强)第四版_课后答案精讲

第一章 程序设计和C语言 【第15页】 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("*******......

C语言设计谭浩强第三版的课后习题答案

C语言设计谭浩强第三版的课后习题答案1.5请参照本章例题,编写一个C程序,输出以下信息: main() { printf("************ \n"); printf("\n"); printf("Very Good! \n")......

《C语言谭浩强第四版例题.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
C语言谭浩强第四版例题
点击下载文档
相关专题 c语言谭浩强习题 例题 第四版 语言 c语言谭浩强习题 例题 第四版 语言
[其他范文]相关推荐
[其他范文]热门文章
下载全文