C语言谭浩强第四版例题_c语言谭浩强习题
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;} 11111123499100例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(x0) y0(x0)1(x0)
编一程序,输入一个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,即 n1编写程序:
#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;} 1111例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个数开始,该数是其前面两个数之和。即:(n1)F11(n2)F21 FFF(n3)n1n2n
编写程序:
#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 将一个二维数组行和列的元素互换,存到另一个二维数组中。
14123a456
编写程序:
#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;}
b2536例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]交换
一 选择题(24分,每小题2分)1.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是()。 A 存放读入数据项的存储区B 存放读入数据的地址或指向此地址的指针 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......
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语言 【第15页】 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("*******......
C语言设计谭浩强第三版的课后习题答案1.5请参照本章例题,编写一个C程序,输出以下信息: main() { printf("************ \n"); printf("\n"); printf("Very Good! \n")......
