c语言程序设计谭浩强答案
Ⅰ 关于c语言的问题求助! 另求C程序设计第四版(谭浩强编)的答案
1,输出:c1=a,c2=b
c1=97,c2=98
原因:因为输出为整型格式时,就输出对应的ASC代码值;字符格式就输出相应的字符。
2,输出:c1=?,c2=?
c1=-59c2=-58
原因:英文字母对应的asc值越界,所以输出?(不能输出对应的特殊符号,应为格式是%c),至于后面输出的负数,是因为字符常量在内存中存储的时候实际上是以二进制形式存储的,197和198存储进去,内存中因为越界不能完整存储相应的二进制码,而存储的二进制码输出来的整数就是那二进制码对应的负数了。
3,输出:c1=a,c2=b
c1=97,c2=98
原因和1的问基本相同了。。 
我有一本谭浩强的那个书,电子书自己去下了网上很多的。
Ⅱ C语言题 执行下列语句后,a的值为
答案就是B
#define M(x,y)  (X*y)
M(1+2,3)
所以 X=1+2      Y=3
先把式子展开在计算
就是1+2*3=7
然后把7赋值给a
Ⅲ 求谭浩强的《C语言程序设计》第三版(蕞新)电子版!
谭浩强C语言教程全书 Word版 
http://bbs.topsage.com/dispbbs_121_171227_1.html 
c 程序设计习题参考(谭浩强二.三版) 
http://www.khdaw.com/bbs/thread-80-1-1.html 
http://www.khdaw.com/bbs/thread-47-1-4.html 
谭浩强教材: 
http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=4363060 
谭浩强习题答案: 
http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2302699 
吉林大学C语言视频教程 全51集 CSF格式 
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=177517 
C语言基础视频教程 全14讲 完整上架 
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=181035 
C语言程序设计视频教程 曾怡教授讲解 全28讲完整版下载 
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=181575 
数据结构视频教程 清华大学严蔚敏主讲 全48讲 完整版 ASF格式 
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=165468 
数据结构C语言版视频教程 全52讲完整版 
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=156467
Ⅳ 求《C语言程序设计》第四版,谭浩强编,清华大学出版社 课后习题答案
#include<stdio.h>
int main(){
   fload a[3];
   scanf("%f,%f,%f",&a[0],&a[1],&a[2]);
   float temp;
   if(a[0]>a[1]){
	temp = a[0];
        a[0] = a[1];
	a[1] = temp;
   }
   if(a[1]>a[2]){
	temp = a[1];
        a[1] = a[2];
	a[2] = temp;
   }
      if(a[0]>a[1]){
	temp = a[0];
        a[0] = a[1];
	a[1] = temp;
   }
   print("%f %f %f \n", a[0],a[1],a[2]);
}
Ⅳ 谭浩强编着.C语言程序设计的习题答案.清华大学出版社2000年1月第一版
c程序设计习题参考(谭浩强二.三版) 
答案地址:http://www.khdaw.com/bbs/thread-80-1-1.html 
C程序设计之谭浩强版 
答案地址:http://www.khdaw.com/bbs/thread-47-1-4.html 
C语言第三版课后答案(文本文件类型) 
http://www.khdaw.com/bbs/thread-79-1-1.html 
(全)C语言程序设计〔谭浩强〕(第二、三版)PDF版 
答案地址:http://www.khdaw.com/bbs/thread-256-1-1.html 
谭浩强C++程序设计习题答案 
http://www.khdaw.com/bbs/thread-420-1-2.html
Ⅵ 请问谁有c语言程序设计(第二版)课后习题答案,谭浩强的
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
  c1='a'凵or凵97(ASCII)
  c2='B'凵or凵98(ASCII)
解:
#include <stdio.h>
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=%2d\n",a,b,c);
   printf("x=%8.6f,y=%8.6f,z=%9.6f\n",x,y,z);
   printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);
   printf("u=%6ld n=%9ld\n",u,n);
   printf("c1='%c' or %d(ASCII)\n",c1,c1);
   printf("c2='%c' or %d(ASCII)\n",c2-32,c2);
}
4.5 请写出下面程序的输出结果:
#include <stdio.h>
main()
{ int a=5,b=7;
   float x=67.8564,y=-789.124;
   char c='A';
   long n=1234567;
   unsigned u=65535;
   printf("%d%d\n",a,b);
   printf("%3d%3d\n",a,b);
   printf("%f,%f\n",x,y);
   printf("%-10f,%-10f\n",x,y);
   printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);
   printf("%e,%10.2e\n",x,y);
   printf("%c,%d,%o,%x\n",c,c,c,c);
   printf("%ld,%lo,%x\n",n,n,n);
   printf("%u,%o,%x,%d\n",u,u,u,u);
   printf("%s,%5.3s\n","COMPUTER","COMPUTER");
}
运行结果:(在TC2.0中)
57
凵凵5凵凵7
67.856400,-789.124023
67.856400凵,-789.124023
凵凵凵67.86,凵-789.12,67.8564,-789.1240,67.856400,-789.124023
6.785640e+Ol,凵凵-7.9e+02
A,65,10l,4l
1234567,4553207,d687
65535,177777,ffff,-1
COMPUTER,凵凵COM
4.6 用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a'。问在键盘上如何输入?
#include <stdio.h>
main()
{ int a,b;
   float x,y;
   char c1,c2;
   scanf("a=%d凵b=%d",&a,&b);
   scanf("%f凵%e",&x,&y);
   scanf("凵%c凵%c",&c1,&c2);
   printf("a=%d,b=%d,x=%f,y=%f,cl=%c,c2=%c\n,a,b,x,y,c1,c2);
}
解:可按如下方式在键盘上输入:
a=3凵b=7↙
8.5凵71.82↙
A凵a↙
输出为:
a=3,b=7,x=8.500000,y=71.820000,cl=A,c2=a
请注意:在第三个scanf函数双引号中第一个字符为空格字符。如果没有这个空格字符,而写成:
scanf("%c%c,&c1,&c2);
按以上的输入,输出就会变成以下两行:
a=3,b=7,x=8.500000,y=71.820000,cl=
,c2=A
这是因为在输入完第二行数据后按的回车键被作为一个字符送到内存输入缓冲区中,因此第三个scanf函数中的第一个变量c1读人了回车符(实际上是回车符的ASCII码)。第三行输入的第一个字符A被c2读取,所以在执行printf函数输出cl时,就输出一个回车符,输出c2时就输出字符A。我们在程序第三个scanf函数双引号中第一个字符处放了一个空格字符,这样第二行末尾输入的回车符就不会输入给c1,而是与该空格字符对应,第三行输入的第一个字符A就被cl读取。也可以不在scanf函数中加空格,而在第三个函数前加一个getchar函数:getchar(); 用它将前面的回车符“吃掉”。
在一个函数中如果有几个scanf函数,在输人数据时往往会出现一些想象不到的情况(例如前面碰到的情况),其中一个重要的原因就是由回车符引起的。C语言很灵活,书上不可能把一切细节都讲到,读者在遇到类似情况时,上机多试验一下就可以找出规律来。
4.7 用下面的scanf函数输入数据,使a=10,b=20,c1='A',c2='a',x=1.5,y=-3.75,z=67.8,请问在键盘上如何输入数据?
     scanf("%5d%5d%c%c%f%f%*f,%f",&a,&b,&c1,&c2,&x,&y,&z);
解:
#include <stdio.h>
main()
{
   int a,b;
   float x,y,z;
   char cl,c2;
   scanf("%5d%5d%c%c%f%f%*f,%f",&a,&b,&cl,&c2,&x,&y,&x);
   printf("a=%d,b=%d,c1=%c,c2=%c,x=%6.2f,y=%6.2f,z=%6.2f\n",a,b,c1,c2,x,y,z);
}
运行情况如下:
凵凵凵10凵凵凵20Aa1.5凵-3.75凵1.5,67.8↙  (此行为输人的数据)
a=10,b=20,cl=A,c2=a,x=凵凵1.50,y=凵-3.75,x=凵67.80  (此行为输出)
说明:按%5d格式的要求输入a与b时,要先键入三个空格,然后再键人10与20。%*f是用来禁止赋值的。在输入时,对应于%*f的地方,随意打人了一个数如1.5,该值不会赋给任何变量。
4.8 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。
解:
#include <stdio.h>
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=3.0/4.0*pi*r*r*r;
   vz=pi*r*r*h;
   printf("圆周长为:1=%6.2f\n",l);
   printf("圆面积为:s=%6.2f\n",s);
   printf("圆球表面积为:sq=%6.2f\n",sq);
   printf("圆球体积为:sv=%6.2f\n",vq);
   printf("圆柱体积为:sz=%6.2f\n",vz);
}
运行结果:
请输入圆半径r,圆柱高h;
1.5,3↙
圆周长为:l= 9.42
圆面积为:s= 7.07
圆球表面积为:sq= 28.27
圆球体积为:sv= 7.95
圆柱体积为:sz= 21.21
4.9 输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输出要有文字说明,取2位小数。
解:
#include <stdio.h>
main()
{ float c,f;
   printf("请输入一个华氏温度:\n");
   scanf("%f",&f);
   c=(5.0/9.0)*(f-32); /*注意5和9要用实型表示,否则5/9的值为0*/
   printf("摄氏温度为:%5.2f\n",c);
}
运行结果:
请输入一个华氏温度:
78
摄氏温度为:25.56
4.10 编程序,用getchar函数读入两个字符给cl、c2,然后分别用putchar函数和printf函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整型?抑或二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整型变量与字符变量是否在任何情况下都可以互相代替?如char"c1,c2;" 与"int cl,c2;" 是否无条件地等价?
解:
#include <stdio.h>
main()
{ char c1,c2;
   printf("请输入两个字符c1,c2:\n");
   c1=getchar();
   c2=getchar();
   printf("用putchar语句输出结果为:\n");
   putchar(c1);
   putchar(c2);
   printf("\n");
   printf("用printf语句输出结果为:\n");
   printf("%c,%c\n",c1,c2);
}
运行结果:
请输入两个字符c1,c2:
ab↙
用putchar语句输出结果为:
ab↙
用printf语句输出结果为:
a,b
请注意连续用两个getchar函数时怎样输入字符。不应当用以下方法输入:
a↙
b↙
因为第一行将a和回车符输入到内存的输入缓冲区,因此c1得到a,c2得到一个回车符。在输出c2时就会产生一个回车换行,而不会输出任何可显示的字符。在实际操作时,只要输入了"a↙"后,屏幕显示马上从用户屏切换到TC窗口,程序接着执行下去。因为系统认为用户已输入了两个字符,所以我们连续输入ab两个字符然后再按回车键,就保证了c1和c2分别得到字符a和b。
回答思考问题:
(1) c1和c2可以定义为字符型或整型,二者皆可。
(2) 在printf函数中用%d格式符输出,即:
     printf("%d,%d\n",c1,c2);
(3) 字符变量在计算机内占一个字节,而整型变量占两个字节,因此整型变量在可输出字符的范围内(ASCII码为0~255之间的字符)是可以与字符数据互相转换的。如果整数在此范围外,则不能代替,请分析以下三个程序。
程序1:(4-10-1.c)
#include <stdio.h>
main()
{ int c1,c2; /*定义为整型*/
   printf("请输入两个整数c1,c2:\n");
   scanf("%d,%d",&c1,&c2);
   printf("按字符输出结果为:\n");
   printf("%c,%c\n",c1,c2);
   printf("按ASCII码输出结果为:\n");
   printf("%d,%d\n",c1,c2);
}
运行结果:
请输入两个整数c1,c2:
97,98↙
按字符输出结果为:
a,b
按ASCII码输出结果为:
97,98
程序2:(4-10-2.c)
#include <stdio.h>
main()
{ char c1,c2; /* 定义为字符型*/
   int i1,i2; /* 定义为整型 */
   printf("请输入两个字符c1,c2:\n");
   scanf("%c,%c",&c1,&c2);
   i1=c1; /* 将字符型赋值给整型变量*/
   i2=c2;
   printf("按字符输出结果为:\n");
   printf("%c,%c\n",i1,i2); /* 将整型变量按字符输出*/
   printf("按整数输出结果为:\n");
   printf("%d,%d\n",c1,c2); /* 将字符变量按整型输出*/
}
运行结果:
请输入两个字符c1,c2:
a,b↙
按字符输出结果为:
a,b
按整数输出结果为:
97,98
程序3:(4-10-3.c)
#include <stdio.h>
main()
{ char c1,c2;/* 定义为字符型 */
   char i1,i2;/* 定义为整型 */
   printf("请输入两个整数i1,i2:\n");
   scanf("%c,%c",&i1,&i2);
   c1=i1; /* 将整数赋给字符变量 */
   c2=i2;
   printf("按字符输出结果为:\n");
   printf("%c,%c\n",c1,c2);
   printf("按整数输出结果为:\n");
   printf("%d,%d\n",c1,c2);
}
运行结果:
请输入两个整数i1,i2:
289,330↙
按字符输出结果为:
!,J
按整数输出结果为:
33,74
请注意c1和c2是字符变量,只占一个字节,只能存放0~255范围内的整数,而现在输入给i1和i2的值已超过0~255的范围,所以只将i1和i2在内存中两个字节的低8位赋给c1和c2。可以看到,289-255=33,330-255=74;而与ASCII码33和74相应的字符为"!"
另外,团IDC网上有许多产品团购,便宜有口碑
Ⅶ C++面向对象程序设计(谭浩强)习题答案
一、单项选择题(每题1分,共20分)
1、在C语言程序中应包含一个       。
A)语句         B)函数调用          C)主函数        D)子函数
2、C程序       构成。
A)由主程序和子程序           B)可以由一个主函数和若干其他函数
C)只能由一个函数即主函数    D)可以由若干个主函数和其他函数
3、C语言基本类型包括(   )
A) 整型、实型、逻辑型          B) 整型、实型、字符型、逻辑型   
C) 整型、字符型、逻辑型        D) 整型、实型、字符型
4、逻辑运算符两侧运算对象的数据类型             。
A) 只能是0和1         B) 只能是0或非0正数
C) 只能是整型或字符型数据      D) 可以是任何类型的数据
5、设有定义:log x=-123456L,则能够正确输出变量x值的语句是         。
A)printf("x=%8dL\n",x);           B)printf("x=%8dL\n",x);
C)printf("x=%1d\n",x);            D)printf("x=%LD",x);
6、printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度小于5,则输出按下列哪种方式进行      。
A)从左起输出字符串                  B)按原字符串长度从左到右输出 
C)右对齐输出该字符串,左补空格      D)输出错误信息
7、语句while(!e)中的条件!e等价与         。
A)e==0          B)e!=1            C)e!=0        D)e==1
8、设有程序段
int k=10;
while(k=0) k=k-1;
则下面描述中正确的是        。
A)while循环执行10次              B)循环是无限循环
C)循环体1次也不执行               D)循环体执行1次
9、初始化语句正确的是          。
A)int a[1][4]={1,2,3,4,5};      B)float x[3][ ]={{1},{2},{3}};
C)long b[2][3]={{1},{2},{3}};    D)double y[ ][3]={{1,2},{3},{4}};
10、若要求:如果字符串s1大于字符串s2,则执行语句1,应当使用       。
A)if(s1>s2)  语句1                B)if(strcmp(s1,s2))  语句1 
C)if(strcmp(s2,s1)>0)  语句1      D)if(strcmp(s1,s2)>0)  语句1
11、已知:char str1[10],str2[10]= "Hello! ";则在程序中能够将字符串"Hello! "赋给数组str1的正确语句是         。
A)str1="Hello!"  B)strcpy(str1,str2)  C) str1=str2  D) strcpy(str2,str1)
12、若有说明:int *p ,m = 5 , n ; 以下正确的程序段是          。
A)p = &n ;  scanf ("%d" ,&p) ;     B) p = &n ;  scanf ("%d" ,*p) ;
C) scanf ("%d" , &n) ;  *p = n;     D) p = &n ;  *p = m ;
13、下面程序段的运行结果是         。
char *s = "abcde" ;
s + = 2 ; printf ("%d" ,s) ;
A) cde       B) 字符'c'    C)字符'c'的地址   D)无确定的输出结果
14、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是         。
A) c = *p1 + *p2 ;   B)p2 = c ;   C) p1 = p2 ;    D) c = *p1*(*p2) ;
15、若有以下定义,则对a数组元素地址的正确引用是       。
int  a[5] , *p = a ;
A) p + 5           B) *a + 1         C) & a + 1         D) & a[0]     
16、下列说法中错误的是         。
A) 主函数可以放在程序的任何地方。
B) 非主函数总是通过函数调用语句来执行。
C ) C程序的书写格式灵活,一行可以写多个语句。
D)  C程序的注释也参加编译并出现在目标程序中。
17、以下说法正确的是        。
A) C语言程序总是从第一个定义的函数开始执行。
B) 在C语言程序中,要调用的函数必须在main()函数中定义。
C) C语言程序总是从main()函数开始执行。
D、C语言程序中的main()函数必须放在程序的开始部分。
18、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=‘A’+‘6’-‘3’后,c2中的值为             。
A) D              B) 68      C) 不确定的值         D) C
19、以下叙述正确的是            。
A) 在C程序中,每行只能写一条语句 
B) 若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C) 在C程序中,%是只能用于整数运算的运算符
D) 在C程序中,无论是整数还是实数,都能被准确无误地表示
20、如果已经定义的变量,正确交换变量a、b的是      。
A)a=b;b=a;                          B)a=b;t=a;b=t;
C)t=a;a=b;b=t;                      D)a=a+b;b=a-a;a=a-b;
21、下面输入语句中正确的是       。(设:int a,b,c;)
A)input(a,b,c);                     B)scanf("%d%d%d",&a,&b,&c);
C)scanf(%d,%d,%d,&a,&b,&c);         D)scanf("%d,%d,%d",a,b,c);
22、下面有关for循环的正确描述是          。
A)for循环只能用于循环次数已经确定的情况
B)for循环是先执行循环体,后判条件
C)在for循环中,不能用break语句跳出循环
D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
23、C语言中while和do-while循环的主要区别是        。
A)do-while的循环体至少执行1次  B)while的循环条件比do-while的循环条件严格
C)do-while允许从外部转到循环体内    D)do-while的循环体不能是复合语句
24、已知:int a[10];则对a数组元素的正确引用的是        。
A)a[10]         B)a[3.5]          C)a[5]        D)a[10-10]
25、在C语言中,二维数组元素在内存中的存放顺序是         。
A)按行存放      B)按列存放        C)由用户定义  D)由函数决定
26、已知:int a[ ][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是         。
A)2             B)3               C)4           D)无法确定
27、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是         。
main( )
{ int *p ,*q , a,b ; 
     p =&a ;         
printf ("input a:") ;
scanf ("%d" , *p) ;
…    }
A) *p表示的是指针变量p的地址   B)*p表示的是变量a的值,而不是变量a的地址
C)*p表示的是指针变量p的值     D)*p只能用来说明p是一个指针变量
28、已有定义int k = 2 ; int *ptr1,*ptr2 ;且ptr1和ptr2均已指向变量k ,下面不能正确执行的赋值语句是        。
A) k = *ptr1+*ptr2 ;  B) ptr2 = k ;  C) ptr1 = ptr2 ;  D) k = *ptr1 *(*ptr2) ;
29、变量的指针,其含义是指该变量的        。
A)值              B)地址            C)名          D)一个标志
30、若有语句int *point , a = 4 ; 和point = &a ; 下面均代表地址的一组选项是         。
A)a , point ,*&a                 B) &*a ,&a , *point   
C) *&point , *point , &a          D) &a , &*point ,point
31、在C语言中,回车换行符是(        )
A.  \ n      B.  \ t         C.  \ v         D.  \ b
32、下列字符串不是标识符的是(      )
A. sum       B.  Average     C.  Day_night    D.  M.D.JOHN
33、 在C语言中,下列类型属于构造类型的是(          )
A.整型      B.字符型      C.实型        D.数组类型
34、设有如下定义:
   int x=10,y=5,z;
   则语句printf(“%d\n”,z=(x+=y,x/y));
   的输出结果是(           )
    A.0         B.1         C.3          D.4
35、在C语言中,语句和数据定义是用(         )作为结束标记的
    A.句号      B.逗号       C.分号        D.括号
36、以下程序的输出结果是(        )         
main( )
{  char c1=’8’,c2=’2’;
           printf(“%c,%c,%d,%d\n”,c1,c2,c1-c2,c1+c2);  }
A.因输出格式不合法,输出出错信息
B.8,2,6,106        C.8,2,6,10         D.8,2,5,9
37、两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是(    )
 main( )
 {int x;
  scanf(“%d”,&x);
  if(x++>5) printf(“%d\n”,x);
  else printf(“%d\n”,x--); }
    A.7和5        B.7和4        C.6和4     
38、有如下程序段:
int k=0;
while(k++<=2) printf(“%d\n”,k);
则正确的执行结果是(       )      
A. 2         B.  0         C.1         D无结果
3             1            2
4             2            3
39、变量i的值为3,i的地址为2000,若欲使指针变量p指向变量i,则下列赋值正确的是(        )       
    A.&i =3     B.*p=3     C.*p=2000    D  p=&i
40、下面程序的执行结果是(         )         
   main( )
   {int i, *i_pointer;
i_pointer=&i;
*i_pointer=9;
printf(“i=%d”,i); }
    A.i=0      B.i=9      C.i值不确定    D.程序有错误
41、表达式(int)2.1416的值时(          )
    A.  2        B. 2.1        C. 0            D.  3
42、下列运算符优先级最高的是(         )
    A.  >     B.  +      C.  &&      D.  !=
43、程序段如下:
     int  k=1;
     while  (k=0)  k=k+1;
  则以下说法正确的是(         )
    A.  while循环执行20次       B.  循环是无限循环
    C.  循环体语句一次也不执行   D.循环体语句执行一次
44、C语言容许函数值类型缺省定义,此时该函数值隐含的类型时(        )
    A.  float型      B.  Int型       C.  Long 型      D. Double型
45、在C语言中引用数组元素时,其数组下标的数据类型是(       )
    A.  整型常量                 B.  整型表达式  
C.  整型常量和整型表达式     D.  任何类型的表达式
46、以下程序段的输出结果是(          )
char  str[  ]=”ABCD”,   *P=str;
printf(“% d \ n”, *( p+4 ));
A.  68    B.  0      C.  字符D的地址    D.  不确定的值
47、一个C程序的执行是从(        )        
    A.本程序中的main函数开始,到main函数结束
    B.本程序中的第一个函数开始,到本程序中的最后一个函数结束
C.本程序中的main函数开始,到本程序中的最后一个函数结束
D.本程序中的第一个函数开始,到本程序中的main函数结束
48、关于return语句,下列说法中不正确的是(         )         
    A.函数可以通过return语句获得返回值。
    B.没有return语句函数就不能获得返回值。
    C.return语句后面可以是常量、变量名或表达式,只要有确定的值
    D.C语言中允许函数不返回值
49、按照C语言的规定,下列说法正确的是(       )       
    A.实参可以是常量、变量或表达式,在传递给形参时,要求实参必须有确定的值
    B.形参可以是常量、变量或表达式
    C.实参可以为任意类型
    D.形参与其对应的实参类型要求可以不一致
50、设有int a[ ]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是 (  )
A.10,11,12    B.11,12,12        C.10,12,12        D.11,11,12
51、C语言中基本数据类型包括         。
A、整型、实型、逻辑型     B、整型、实型、字符型
C、整型、字符型、逻辑型   D、整型、实型、数组 、字符型
52、下列常数中不能作为C语言常量的是           。
A、0xA5    B、2.5e-2    C、3e2     D、0582
53、下列不属于C语言关键字的是           。
A、default   B、void   C、struct    D、external
54、已知int j,i=1; 执行语句j= -i++;后,j的值是         。
A、1        B、2        C、-1       D、-2
55、已知int i,a; 执行语句i=(a=2*3,a*5),a+6;后,i的值是        。
A、6        B、12       C、30       D、36
56、已知int x=1,y=2,z; 执行语句z=x>y?++x:++y;后,z的值是       。
A、1        B、2        C、3        D、4
57、不能进行++和—运算的数据类型是           。
A、指针     B、double    C、int       D、long
58、为了明确表示不带回函数值,定义函数时函数名前用      。
A、int        B、void      C、struct     D、static
59、若有 int a[2][3]={1, 3, 5, 7, 9, 11};则a[1][2]的值为      。
A、3         B、5         C、11       D、9
60、对于存储类型为       的变量,只有使用时才占用内存单元。
    A、static      B、extern    C、auto      D、前面都不对
二、填空题    (每空1分,共20分)
1、用C语言编写的程序,编译成功后生成的文件扩展名是        ,连接成功后生成的文件扩展名是        。
2、用汇编语言写的程序必须通过        程序翻译后才能执行,而高级语言写的源程序可以通过        程序翻译一句执行一句的方式,也可以通过        程序一次翻译产生目标程序,然后执行。
3、若x和n均是int型变量,且x和n的初值均为5,则计算下列表达式后x的值为          ,n的值为           。      x+=n++
4、若a是int型变量,则计算下面表达式后a的值为           。    a=25/3%3
5、若for循环用以下形式表示:for(表达式1;表达式2;表达式3) 循环体语句,则执行语句for(i=0;i<3;i++) printf("*");时,表达式1执行   次,表达式3执行  次。
6、在C程序中,从        开始到        结束的内容为注释信息,并且注释信息        (可以/不可以)出现在程序的任何地方。
7、C程序有且只有一个主函数,它的函数名是        ,主函数        (可以/不可以)调用任何非主函数,任何非主函数        (可以/不可以)调用主函数。
8、若有定义:char c=‘\010’;则变量c中包含的字符个数为______。
9、鸡兔共有30只,脚共有90个,下面程序段是计算鸡兔各有多少只,请填空。
for(x=1;x<=29;x++)
  {y=30-x;
   if(        ) printf("%d,%d\n",x,y);  }
10、一个C源程序至少包括_________个函数,即_______函数。
11、若有说明int i,j,k;则表达式i=10,j=20,k=30,k*=i+j的值为_______________。
12、语句"printf("%x,%o",16,12);"的输出结果是                 。
13、开发一个C程序的步骤是        ,        ,        ,       。
14、一个C程序中必须包含一个且只包含一个              函数。
15、C语言中每个基本语句都以                结束。
16、C语言规定,对程序中用到的变量,必须先        ,后         。
17、单精度浮点型变量和双精度浮点型变量的类型标识符分别为         和          。
18、C语言中唯一的三元运算符是        ,运算优先级最低的运算符是             。
19、 函数可以嵌套                ,不能嵌套              。
20、欲将1,2分别输入给x,y,则执行scanf(“x=%d,y=%d”,&x,&y);
语句时的输入格为                  。
21、若x=2,y=3,则执行x*=y+1语句后,x的值为                  。
22、           是C程序的基本组成单位。
23、在循环语句中执行了break语句,则              。
24、C语言规定,凡不加类型说明的函数,一律按            。
25、函数调用的三种方式:          、          、            。
26、在函数调用中给出的参数称         ,在函数定义中给出的参数称              。
27、C语言中自动在每个字符串的末尾添加一个          。
28、if与else的配对关系中,else总是与                      的if配对。
29、文件的打开使用          函数;文件的关闭使用           函数。
30、若int x [ ]={1, 3, 5},* p=x;则*(p++)的值为        。
31、一个函数由两部分组成,他们是             和             。
32、C语言是通过            来进行输入和输出的。
33、C语言的数据类型有四大类,他们是         、          、         、           。
34、当执行以下程序段后,i的值为           、j的值为           、k的值为         。
int  a,b,c,d,i,j,k;
a=10;  b=c=d=5;   i=j=k=0;
for( ; a>b; ++b) i++;
while (a>++c)  j++;
do  k++;  while  (a>d++);
35、若有以下定义:double w[10];则w数组元素下标的上限是       ,下限是        。
36、Break语句只能用于                和             语句。
37、在循环中,continue语句与break语句的区别是:continue语句只是                   ,break 是                 。
38、若有说明int i,j,k;则表达式i=10,j=20,k=30,k*=i+j的值为            。
39、语句"printf("%x,%o",16,12);"的输出结果是                 。
三、程序填空
1、下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环。请填空。
main()
{int a,max=0;
     scanf("%d",&a);
     while(     );
       { if (max<a) max=a;
        scanf("%d",&a);}
     printf("%d",max);}
2、以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。
main()
{  float   x,amax,amin;
    scanf(“%f”,&x);
    amax=x;     amin=x;
      while(                )
      {    if ( x>amax ) amax=x;
           else  if (x<amin)               ;
                           ;    }
        printf(“\namax=%f\namin=%f\n”,amax,amin);}
3、输入若干字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输出统计结果,运行结束。
#include <stdio.h>
void main()
{ char ch;              ;
  while((              )!='\n')
  {if(ch>='0'&&ch<='9') s1++;
   if((ch>='a' && ch<='z')||                         ) s2++;}
   printf(“%d,%d\n”,s1,s2);}
4、findmax返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。
findmax(int s[ ], int t)
{  int k,p;
   for(p=0, k=p;  p<t;  p++) 
         if (s[p]>s[k])               ;
   return              ;  }
5、以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。
main()
{  float   x,amax,amin;
    scanf(“%f”,&x);
    amax=x;     amin=x;
      while(               )
      {      if ( x>amax ) amax=x;
                  else  if (x<amin)            ;
                              ;   }
        printf(“\namax=%f\namin=%f\n”,amax,amin); }
6、输入若干字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输出统计结果,运行结束。
#include <stdio.h>
void main()
{ char ch; 
_________;
  while((              )!='\n')
  {if(ch>='0'&&ch<='9') s1++;
   if((ch>='a' && ch<='z')||                   ) s2++;}
   printf(“%d,%d\n”,s1,s2);}
7、下面程序的功能是求出用数字0至9可以组成多少个没有重复数字的三位数。请填空。
main()
{int i,j,k,count=0;
     for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if(          ) continue;
else for(k=0;k<=9;k++)
  if(           ) count++;
     printf("%d",count); }
 
8、输出3——100之间的所有素数     
#include “stdio.h”                 
main()                            
{  int i,j;                          
   for(i=3;i<=100;i++)                 
{for(j=2;j<=i-1;j++)         
   if(           )  break;   
 if(            )           
   printf(“%4d”,i);          
} }                                 
9、将字符串s中所有的字符‘c’删除
#include “stdio.h” 
main()
{ char  s[80];
 int i,j;
            
for(i=j=0;s[i]!=‘\0’;i++)
if(s[i]!=‘c’)
puts(s);  }
 
10、用选择法对10个整数排序(从小到大)
      main()
        {int i,j,min,temp,a[11];
         for(i=1;i<=10;i++)
                                  
         for(i=1;i<=9;i++) 
            {min=i;
             for(         ;j<=10;j++) 
                 if(a[min]>a[j])
                                          
              temp=a[i];
                           ;
              a[min]=temp;}
           for(i=1;i<=10;i++)
                                   }
 
四、判断题    (每题1分,共20分)
1、若有说明int c;则while(c=getchar());是正确的C语句。 ( )
2、int i,*p=&i;是正确的C说明。 ( )
3、7&3+12的值是15。 ( )
4、在C语言中,函数既可嵌套调用又可嵌套定义。 ( )
5、for( ; ; )S中的语句S必执行无穷多次。 ( )
6、unsigned 和
Ⅷ 求C语言程序设计(谭浩强)(第三版)课后题答案
http://hi..com/ccircle/blog/item/01dfb100528c34027bec2c93.html
C语言程序设计第三版谭浩强课后习题答案(1)
Ⅸ 《C语言程序设计教程》第三版(谭浩强\张基温)编着,高等教育出版社出版,课后习题答案!
#include<stdio.h>
void main()
{
printf("I am a student.\n");
printf(" I love china .\n");
}
Ⅹ 谭浩强版C语言答案
C语言设计谭浩强第三版的课后习题答案(一)
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(max<b) 
max=b; 
if(max<c) 
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个或若干个字符 
而成,用双引号把它们括起来,存储时自动在字符串最后加一个结束符号'\0'. 
3.6写出以下程序的运行结果: 
#include<stdio.h> 
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 
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%c\n",c1,c2,c3,c4,c5); 
} 
3.8例3.6能否改成如下: 
#include<stdio.h> 
void main() 
{ 
int c1,c2;(原为 char c1,c2) 
c1=97; 
c2=98; 
printf("%c%c\n",c1,c2); 
printf("%d%d\n",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写出下面程序的运行结果: 
#include<stdio.h> 
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章 
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=%2d\n",a,b,c); 
printf("x=%8.6f,y=%8.6f,z=%9.6f\n",x,y,z); 
printf("x+y=%5.2f y=z=%5.2f z+x=%5.2f\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); 
} 
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.2f\n",l); 
printf("圆面积为: =%6.2f\n",s); 
printf("圆球表面积为: =%6.2f\n",sq); 
printf("圆球体积为: =%6.2f\n",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.2f\n",c); 
} 
第五章 逻辑运算和判断选取结构 
5.4有三个整数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); 
} 
5.5 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=2*x-1; 
printf(" X=%d, Y=2*X-1=%d\n",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(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-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%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); 
} 
} 
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(i<2e5) 
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(branch>10) 
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("\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); 
} 
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(d1>1 && d2>1 && d3>1 && d4>1) 
h=0; 
printf("该点高度为%d",h); 
} 
第六章 循环语句 
6.1输入两个正数,求最大公约数最小公倍数. 
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",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 其它字符数=%d\n",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+…=%d\n",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!=%e\n",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.2f\n",s1+s2+s3); 
} 
6.6水仙开花 
main() 
{ 
int i,j,k,n; 
printf(" '水仙花'数是:"); 
for(n=100;n<1000;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;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,k1...k9*/ 
} 
} 
if(s==0) 
{ 
printf("%d是一个完数,它的因子是:",j); 
for(i=0;i<n;i++) 
printf("%d,",k[i]); 
printf("%d\n",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.6f\n",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(day>0) 
{ 
x1=(x2+1)*2; 
x2=x1; 
day--; 
} 
printf("桃子总数=%d\n",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!=k&&j!=k) 
{if(i!='x' && k!='x' && k! ='z') 
printf("顺序为:\na-%c\tb--%c\tc--%c\n",i,j,k); 
} 
} 
} 
} 
C语言设计谭浩强第三版的课后习题答案(二)   Post By:2008-3-12 20:42:27 
7.1用筛选法求100之内的素数. 
/*用筛选法求100之内的素数*/ 
#include<math.h> 
#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;} 
} 
} 
7.2用选择法对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]); 
} 
7.3对角线和: 
/*计算矩阵对角线元素之和*/ 
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("对角元素之和=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;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]); 
} 
7.5将一个数组逆序存放。 
/*数组逆序存放*/ 
#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]); 
} 
7.6杨辉三角 
/*打印杨辉三角形*/ 
#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"); 
} 
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;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"); 
} 
7.9变量说明:top,bott:查找区间两端点的下标;loca:查找成功与否的开关变量. 
/*折半查找*/ 
#include<stdio.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(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; 
} 
} 
7.10/*统计字符数*/ 
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); 
} 
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/*译电文*/ 
#include<stdio.h> 
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]); 
} 
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]!='\0') 
i++; 
while(s2[j]!='\0') 
s1[i++]=s2[j++]; 
s1[i]='\0'; 
printf("\n连接后字符串为:%s",s1); 
} 
7.14/*字符串比较*/ 
#include<stdio.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]!='\0'))i++; 
if(s1[i]=='\0' && s2[i]=='\0')resu=0; 
else 
resu=s1[i]-s2[i]; 
printf(" %s与%s比较结果是%d",s1,s2,resu); 
} 
7.15/*字符串复制*/ 
#include<stdio.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("复制字符串为:%s\n",to); 
} 
第八章 函数
