C程序设计第四版谭浩强课后习题

C语言习题的编码、注解 、小笔记 以及小经验的记录与分享

【第四版谭浩强课后习题】

第二章 算法——程序的灵魂

2-4(6)将100~200之间的素数输出。

#include
#include    /*1.用了sqrt()不要忘记引用math函数*/

int main()
{
	int sum,i,n;       //指非素数的个数 
	for( i=100;i<=200;i++)                   /*2.for循环中的语句用分号连接*/
		for ( n = (int)sqrt(i);n>=2;n--)   /*3.(int)要有括号括起*/
			if (i%n == 0)
			{
				sum+=1;
				break;                       /*4.注意break的运用*/
				}	
			else 
				continue;
	printf("100至200间素数的个数为%d\n",101-sum);
	return 0;
 } 

2-4(7)求两个数 m 和 n 的最大公约数。

#include

int main()   /*当遇到 undefined reference to `WinMain'的报错时,main可能打错了*/ 
{
	int Gongyueshu (int x,int y);
	int a[2],i,t,gongyueshu;
	for(i=0;i<=1;i++)        //for循环中的语句用分号连接;语句顺序不能错 
	{
		printf("请输入第%d个数",i+1);
		scanf("%d",&a[i]);    //得到输入的两个数字 
	}
	if (a[0]<a[1])
	{
		t=a[0];
		a[0]=a[1];
		a[1]=t;     //保证a[0]是较大的数字 
	}
	gongyueshu =  Gongyueshu (a[0],a[1]);  //多出现一个变量时,要及时定义这个变量 
	printf("最大公约数为%d\n",gongyueshu);
	return 0;

 } 
 
 
 int Gongyueshu (int x,int y)   //求两个数最大公约数的函数 
 {
 	int yushu;
 	while (x%y !=0 )
 	{
 		yushu = x%y;           
 		x = y;
 		y = yushu;        /*大的数对小的数取余,若余数不为零,则用小的数对余数再次取余,知道余数为零 (用循环语句处理)*/ 
	 }
 		
 	return y;
 }

2-4(8) 求方程ax²+bx+c=0的根。

#include
#include    //调用math函数,因为要用到 sqrt()开根号 
int main()  
{
	float a,b,c,derta;   //***尤其要注意a、b、c 要设为浮点型,因为 int/int 的结果还是 int(余数会被抹掉) ,仅将 resl设为 float 是不够的 
	float resl1,resl2;                                         
	printf("请分别输入方程ax2+bx+c=0(a≠0)中a,b,c的值:");
	scanf("%f %f %f",&a,&b,&c);
	derta = a*b- 4*a*c;
	if (derta == 0)
	{
		resl1 = -b/(2*a);
		printf("此方程的根为%f\n",resl1);
	}
	else if(derta < 0)
		printf("此方程无实根。\n");
	else
	{
		resl1 =  (-b+sqrt(derta))/(2*a);
		resl2 =  (-b-sqrt(derta))/(2*a);
		printf("此方程的根为 %f 和 %f",resl1,resl2);
	}
	return 0;
 } 

2-8(1)输出1900 — 2000 年中是闰年的年份,符合下面两个条件之一的是闰年:
① 能被四整除但不能被一百整除
② 能被一百整除但能被四百整除

#include
int main()  
{
	int n=1900;
	printf("1900-2000年中是闰年的有:") ;
	for(n=1900;n<=2000;n++)
	{
		if (((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0)))  //在用&&或者||时,每一条语句都需要加() 
			printf("%d\t",n);
		else
			continue;
	 } 
	printf("\n");
	return 0;
 } 

2-8(2) 同2-4(8)
2-8(3)输入十个数,输出其中最大的一个数。

#include
int main()  
{
	int a[10],t,i;
	for(i=0;i<=9;i++)
	{
		printf("请输入第%d个数的值:",i+1);
		scanf("%d",&a[i]);                   //将输入的十个数存入数组 
	}
	for(i=1;i<=9;i++) 
	{
		if (a[0]<a[i])
		{
			t = a[0];
			a[0]=a[i];          //只需要一次循环 
			a[i]=a[0];         //使得a[0]永远都是最大的那个 
		}
		else
			continue; 
	}
	printf("这十个数当中最大的数是:%d\n",a[0]);
	return 0;
 } 

第三章 最简单的C程序设计——顺序程序设计

3-1 加入我国国民生产总值的年增长率为9%,计算十年后我国国民生产总值与现在相比增长多少百分比?

#include 
#include     //要用pow()进行运算 
int main()
{
	int n=10;
	float r=0.09,p,resl;
	resl = pow((1+r),n);
	printf("10年后我国国民生产总值与现在相比增长了%0.2f倍",resl);
	printf("\n");   //建议单独把"\n"的模板打出来
	return 0;
}

3-6 请编程序将“China”译成密码,密码的规律是:用原来的字母后面第四个字母代替原来的字母,并分别用putchar函数和printf函数输出这五个字符。

#include 
int main()
{
	char c1='C',c2='h',c3='i',c4='n',c5='a';
	c1=c1+4;
	c2+=4;
	c3+=4;
	c4+=4;            //一个字母加4后表示的是字母表中这个字母的后四位
	c5+=4;           //小写字母减去32后表示的是这个字母的大写
	printf("编译后的密码为:%c%c%c%c%c\n",c1,c2,c3,c4,c5); 
	putchar(c1);
	putchar(c2);
	putchar(c3);//相应的getchar函数只能接受一个字符,并且getchar函数可以接受屏幕控制字符(如:换行符)所以把该输入的字符输入完再使用Enter完成储存
	putchar(c4); //putchar()既可以输出一个字符,也可以输出屏幕控制字符
	putchar(c5);  
	putchar('\n'); //***特别注意:putchar()中的控制字符用的是单引号‘’!
	return 0;
}

你可能感兴趣的:(C程序设计第四版谭浩强课后习题)