⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cc.txt

📁 C语言第三版课后答案(文本文件类型).rar
💻 TXT
📖 第 1 页 / 共 2 页
字号:
   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);
  }
第八章 函数
8.1(最小公倍数=u*v/最大公约数.)
hcf(u,v)
int u,v;
(int a,b,t,r;
 if(u>v)
  {t=u;u=v;v=t;}
 a=u;b=v;
 while((r=b%a)!=0)
   {b=a;a=r;}
  return(a);
  }

 lcd(u,v,h)
   int u,v,h;
 {int u,v,h,l;
 scanf("%d,%d",&u,&v);
 h=hcf(u,v);
 printf("H.C.F=%d\n",h);
 l=lcd(u,v,h);
 printf("L.C.d=%d\n",l);
 }

  {return(u*v/h);}
 main()
 {int u,v,h,l;
 scanf("%d,%d",&u,&v);
 h=hcf(u,v);
 printf("H.C.F=%d\n",h);
 l=lcd(u,v,h);
 printf("L.C.D=%d\n",l);
 }
8.2求方程根
#include<math.h>
float x1,x2,disc,p,q;

greater_than_zero(a,b)
float a,b;
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
}

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

smaller_than_zero(a,b)
float a,b;
{p=-b/(2*a);
q=sqrt(disc)/(2*a);
}
main()
{
float a,b,c;
printf("\n输入方程的系数a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
printf("\n 方程是:%5.2f*x*x+%5.2f*x+%5.2f=0\n",a,b,c);
disc=b*b-4*a*c;
printf("方程的解是:\n");
if(disc>0)
{great_than_zero(a,b);
printf("X1=%5.2f\tX2=%5.2f\n\n",x1,x2);
}
else if(disc==0)
 {
zero(a,b);
printf("X1=%5.2f\tX2=%5.2f\n\n",x1,x2);
 }
else
 {
	small_than_zero(a,b,c);
	printf("X1=%5.2f+%5.2fi\tX2=%5.2f-%2.2fi\n",p,q,p,q);
 }
}
8.3素数
/*判断整数是否为素数*/
main()
{
 int number;
 printf("请输入一个正整数:\n");
 scanf("%d",&number);
 if(prime(number))
 printf("\n %d 是素数.",number);
 else
 printf("\n %d 不是素数",number);
}

int prime(number)/*此函数用于差别素数*/
int number;
{
int flag=1,n;
for(n=2;n<number/2 && flag==1;n++)
  if(number%n==0)
flag=0;
return(flag);
}
8.4 /*矩阵的转置*/
#define N 3
int array[N][N];
convert(array)
int array[3][3];
 { int i,j,t;
  for(i=0;i<N;i++)
	for(j=i+1;j<N;j++)
	{ t=array[i][j];
	  array[i][j]=array[j][i];
	  array[j][i]=t;
	}
 }
main()
{
 int i,j;
 printf("输入数组元素:\n");
 for(i=0;i<N;i++)
 for(j=0;j<N;j++)
   scanf("%d",&array[i][j];
 printf("\n数组是:\n");
for(i=0;i<N;i++)
 { for(j=0;j<N;j++)
   printf("%5d",array[i][j]);
  printf("\n");
 }

 convert(array);
 printf("转置数组是:\n");
 for(i=0;i<N;i++)
 { for(j=0;j<N;j++)
   printf("%5d",array[i][j]);
   printf("\n");
 }
}
8.5/*字符串反序存放*/
main()
{
char str[100];
  printf("输入字符串:\n");
  scanf("%s",str);
  inverse(str);
  printf("转换后的字符串是: %s\n",str);
}

inverse(str)
char str[];
{
 char t;
 int i,j;
 for(i=0,j=strlen(str);i<strlen(str)/2;i++,j--)
 {
 t=str[i];
 str[i]=str[i-1];
 str[i-1]=t;
 }
}
8.6/*字符串联接*/
char concatenate(string1,string2,string);
char string1[],string2[],string[];
{
int i,j;
for(i=0;string1[i]!='\0';i++)
  string[i]=string1[i];
for(j=0;string2[j]!='\0';j++)
 string[i+j]=string2[j];
 string[i+j]='\0';
}
main()
{
	char s1[100],s2[100],s[100];
	printf("\n输入字符串1:\n");
	scanf("%s",s1);
	printf("输入字符串2:\n");
	scanf("%s",s2);
	concatenate(s1,s2,s);
	printf("连接后的字符串:%s\n",s);
}
8.8/*在四个数字符中加空格*/
main()
{
 char str[80];
 printf("请输入含有四个数字的字符串:\n");
 scanf("%s",str);
 insert(str);
}

insert(str)
   char str[];
{
 int i;
 for(i=strlen(str);i>0;i--)
 { str[2*i]=str[i];
   str[2*i-1]=' ';
 }
 printf("\n 结果是:\n    %s",str);
 }
8.9/*统计字母数字空格和其它字符数*/
int alph,digit,space,others;
main()
{
  char text[80];
  printf("\n输入字符串:\n");
  gets(text);
  alph=0;
  digit=0;
  space=0;
  others=0;
  count(text);
  printf("\n %d 字母,%d 数字,%d 空格,%d 其它字符\n");
}

count(str)
char str[];
{
 int i;
 for(i=0;str[i]!='\0';i++)
   if((str[i]>='a' && str[i]<='z')||(str[i]>='A' && str[i]<='Z')
	alph++;
   else if(str[i]>'0' && str[i]<='9')
	digit++;
   else if(strcmp(str[i],' ')==0)
	space++;
    else
	others++;
}
8.10/*输出文本行的最长单词*/
int alphabetic(c);
char c;
{
  if((c>='a' && c<='z'||(c>='A' && c<='Z'))
	return(1);
  else
	return(0);
}

/*寻找最长的词*/
int longest (string)
char string[];
{
 int len=0,i,length=0,flag=1,place,point;
 for(i=0;i<=strlen(string);i++)
   if(alphabctic(string[i]))
	if(flag)
	{
	point=i;
	flag=0;
	}
	else
	  len++;
	else
	{ flag=1;
	 if len>length)
	 {length=len;
	  place=point;
	  len=0;
	  }
	}
     return(place);
  }
main()
{
int i;
char line[100];

printf("输入一行文本\n");
gets(line);
printf("\n最长的单词是:");
for(i=longest(line);alphabctic(line[i]);i++)
	printf("%c",line[i];
printf("\n");
}
8.11/*起泡法排序*/
#define N 10

char str[N];
main()
{
int i,flag;
for(flag=1;flag==1;)
{
 printf("\n输入字符串,长度为10:\n");
 scanf("%s",&str);
 if(strlen(str)>N)
	printf("超过长度,请重输!");
 else
	flag=0;
}
sort(str);
printf("\n 排序结果:");
for(i=0;i<N;i++)
  printf("%c",str[i]);
}

sort(str)
char str[N];
{
int i,j;
char t;
for(j=1;j<N;j++)
 for(i=0;(i<N-j)&&(str[i]!='\0');i++)
  if(str[i]>str[i+1])
  { t=str[i];
    str[i]=str[i+1];
    str[i+1]=t;
  }
}
8.16/*十六进制转换为十进制*/
#include<stdio.h>
#define MAX 1000
main()
{ int c,i,flag,flag1;
  char t[MAX];

 i=0;
 flag=0;
 flag1=1;
 printf("\n输入十六进制数:");
 while((c=getchar())!='\0'&&i<MAX&&flag1)
 { if c>='0' && c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
   {flag=1;
    t[i++]=c;
   }
   else if(flag)
 {
 t[i]='\0';
 printf("\n 十进制数%d\n",htoi(t));
 printf("继续吗?");
 c=getchar();
 if(c=='N'||c=='n')
  flag1=0;
 else
 {flag=0;
  i=0;
  printf("\n 输入十六进制数:");
 }
}
}
}
htoi(s)
char s[];
{ int i,n;
  n=0;
  for(i=0;s[i]!='\0';i++)
  {if(s[i]>='0'&&s[i]<='9')
	n=n*16+s[i]-'0';
   if(s[i]>='a'&&s[i]<='f')
	n=n*16+s[i]-'a'+10;
   if(s[i]>='A'&&s[i]<='F')
	n=n*16+s[i]-'A'+10;
   }
   return(n);
}
8.17/*递归法将整数转换成字符*/
#include<stdio.h>

void counvert(n)
int n;
{ int i;
 if((i=n/10)!=0)
  convert(i);
 putchar(n%10+'0');
}

main()
{ int number;
  printf("\n 输入整数:");
  scanf("%d",&number);
  printf("\n 输出是: ");
  if(number<0)
  { putchar('-');
    number=-number;
  }
convert(number);
}
8.18/*计算某晶为该年的第几天*/
main()
{
  int year,month,day;
  int days;
  printf("\n 请输入日期(年,月,日)\n");
  scanf("%d,%d,%d",&year,&month,&day);
  printf("\n %d年%d月%d日",year,month,day);
  days=sum_day(month,day);
  if(leap(year)&&month>=3)
    days=days+1;
  printf("是该年的%d天.\n",days);
 }

 static int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}

 int(sum_day(month,day)
 int month,day;
  {
  int i;
  for(i=1;i<month;i++)
    day+=day_tab[i];
  return(day);
  }

 int leap(year)
 int year;
    {
   int leap;
   leap=year%4==0&&year%100!=0||year%400==0;
   return(leap);
   }
第九章 编译预处理
9.1/*交换两变量值*/
#define SWAP(a,b) t=b;b=a;a=t
main()
{
int a,b,t;
printf("请输入两个整数 a,b:");
scanf("%d,%d",&a,&b);
SWAP(a,b);
printf("交换结果为:a=%d,b=%d\n",a,b);
}
9.2/*求两个整数相除的余数*/
#define SURPLUS(a,b) ((a)%(b))
main()
 {
 int a,b;
 printf(" 请输入两个整数 a,b:");
 scanf("%d,%d",&a,&b);
printf("a,b相除的余数为:%d\n",SURPLUS(a,b));
 }
9.3/*输入三角形的三条边,求其面积*/
#include<math.h>
#defin S(a,b,c) ((a+b+c)/2)
#define AREA(a,b,c) (sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(s(a,b,c)-c)))
main()
 {
 float a,b,c;
  printf("请输入三角形的三条边:");
  scanf("%f,%f,%f",&a,&b,&c);
  if(a+b>c && a+c>b && b+c>a)
   printf("其面积为:%8.2f.\n",AREA(a,b,c));
  else
   printf("不能构成三角形!");
 }
9.4/*判断输入年份是否为闰年*/
#define LEAP_YEAR(y) (y%4==0) && (y%100!=0)||(y%400==0)
main()
 {
 int year;
 printf("\n请输入某一年:");
 scanf("%d",&year);
 if(LEAP_YEAR(year))
  printf("%d  是闰年.\n",year);
 else
  printf("%d  不是闰年.\n",year);
 }
9.5解:展开后:
printf("value=%format\t",x);
printf("value=%format\t",x);putchar('\n');
printf("value=%format\t");printf("value=%format\t",x2);putchar('\n');
输出结果:
value=5.000000ormat	value=5.000000ormat
value=3.000000ormat	value=8.000000ormat
9.8/*用函数方法,从三个数中找出最大值*/
main()
  {
  int a,b,c;
  printf("请输入三个整数:");
  scanf("%d,%d,%d",&a,&b,&c);
  printf("三个之中最大值为:%d\n",max(a,b,c));
  }

 max(x,y,z)
 int x,y,z;
   {
   int t;
   t=(x>y? x:y);
   return(t>z? t:z);
   }
9.10/*翻译电码*/
#include <stdio.h>
#define MAX 80
#define CHANGE 1
main()
{
 char str[MAX];
 int i;
 printf("请输入文本行:\n");
 scanf("%s",str);
 #if(CHANGE)
  {
  for (i=0;i<MAX;i++)
  {
  if(str[i]!='\0'
   if(str[i]>='a' && str[i]<'z' || str[i]>='A'&&str[i]<'Z')
    str[i]+=1;
   else if(str[i]=='z' || str[i]=='Z')
    str[i]-=25;
  }
}
#endif
printf("输出电码为:\n%s",str);
}











     






    
































  






	




















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -