共有回帖数  0  个 
	 
	
	
	
     
          
          
               
				
			 
				
					 
 
            
				   - 
						
						
							 
									/************************************************************** 
7.12 有一行电文,已经按下面规律译成密码: 
         A=Z   a=z    B=Y   b=y    C=X  c=x  ...... 
         即第1个字母变成第26个字母、第i个字母变成 
         第(26-i+1)个字母。非字母字符不变。编程将密 
         码译回原文,并输出密码和原文。 
*****************************************************************/ 
#includestdio.h 
void main() 
{ 
   int i,n; 
   char ch[80],tr[80]; 
   n=0; 
   printf("n请输入密码"); 
   gets(ch); 
   for(i=0;ch!=' ';i++) 
   { 
      if(ch='a'&&ch='z') 
tr=219-ch; 
      else if(ch='A'&&ch='Z') 
tr=155-ch; 
      else tr=ch; 
  } 
  n=i; 
  printf("n密码为:"); 
  for(i=0;in;i++) 
  printf("%c",tr); 
  printf("n"); 
}
/********************************************************** 
 7.13 编一程序,把2个字符串连接起来,不要 
 使用strcat()函数。 
**********************************************************/ 
#includestdio.h 
void main() 
{ 
 char ch1[80],ch2[40]; 
 int i,j; 
 printf("请输入字符串ch1:"); 
 scanf("%s",ch1); 
 printf("请输入字符串ch2:"); 
 scanf("%s",ch2); 
 for(i=0;ch1!=' ';i++) 
 ; 
 for(j=0;ch2[j]!=' ';j++) 
 { 
 ch1=ch2[j]; 
 i++; 
 } 
 printf("两个字符串合为:%s",ch1); 
}
/************************************************************************* 
 8.15 编写源程序,它包括下面几个模块: 
 1、完成输入10个职工的姓名和职工号的函数input()。 
 2、按职工号从小到大排序,姓名顺序也随之调整的函数sort()。 
 3、输入一个职工号,用折半查找法找出该职工的姓名的函数search() 
 4、主函数。主函数依次作下述工作: 
 1)调用input(),输入职工工号和姓名。 
 2)调用sort(),对工号和姓名排序。 
 3)调用search(),输入一个工号,输出职工姓名。 
*************************************************************************/ 
#includestdio.h 
#includestring.h 
#define N 10 
void main() 
 {void input(int[],char name[][8] ); 
 void sort(int [],char name[][8]); 
 void search(int ,int[],char name[][8]); 
 int num[N],number,flag=1,c; 
 char name[N][8]; 
 input(num,name); 
 sort(num,name); 
 while(flag==1) 
{printf("n input number to look for:"); 
 scanf("%d",&number); 
 search(number,num,name); 
 printf("continue or not (Y/N)?"); 
 getchar(); 
 c=getchar(); 
 if (c=='N'||c=='n') 
 flag=0; 
 } 
} 
 void input(int num[], char name[N][8]) 
{ int i; 
for(i=0;iN;i++) 
{printf("n input No.:"); 
scanf("%d",&num); 
printf("input name:"); 
 getchar(); 
 gets(name); 
} 
 } 
 void sort(int num [],char name[N][8]) 
{ int i,j ,min,templ; 
char temp2[8]; 
for(i=0;i,N-1;i++) 
{min =i; 
for(j=i;jN;j++) 
 if (num[min]num[j]) 
min=j; 
templ=num; 
strcpy(temp2,name); 
num=num[min]; 
strcpy(name,name[min]); 
num[min]=templ; 
strcpy(name[min] ,temp2) ; 
} 
printf("n result:n"); 
for(i=0;iN;i++) 
 printf("n %5d%10s",num,name); 
} 
 void search(int n ,int num[],char name[N][8]) 
{ int top bott,mid,loca,sign; 
 top=0; 
 bott=N-1; 
 loca=0; 
 sign=1; 
 if((nnum[0])||(nnum[N-1])) 
 loca=-1; 
 while((sign==1)&&(top=bott)) 
{ mid=(bott+top)/2; 
 if (n==num[mid]) 
{ 
 loca=mid; 
 printf("No. %d,his name is %s.n",n,name[loca]); 
 sign=-1; 
 } 
 else if (nnum[mid]) 
 bott=mid-1; 
 else  
 top=mid+1; 
} 
if (sign==1||loca==-1) 
 printf("can not find %d.n",n); 
}
{ int top bott,mid,loca,sign;  
这里个逗号,应该为 
{ int top,bott,mid,loca,sign;
/*********************************************************************** 
8.e1 编写程序,验证歌德巴赫猜想。 
 歌德巴赫猜想:任何≥6的偶数都可以表示成2个素数之和。 
 提示:编写一个函数prime(x),用来判断x是否素数。 
 主函数接受用户输入的偶数n(n=6) 
 对i=6~n,找出一对j、k,使得: j和k都是素数。并且 i 等于 j + k 。 
 输出i、j、k。 
************************************************************************/ 
#include stdio.h  
void main () 
{  
 int n,i,j;  
 printf("请输入任何大于或等于6的偶数:"); 
 scanf ("%d",&n); 
 printf ("%d=",n);  
 if (n&1)  
 {printf ("3+"); n-=3;}  
 for(i=2;in;i++)  
 {  
 for (j=2;j*j=i;j++)  
 if (i%j==0) break;  
 if (j*j=i) continue;  
 for (j=2;j*j=n-i;j++)  
 if ((n-i)%j==0) break;  
 if (j*j=n-i) continue;  
 break;  
 }  
 printf ("%d+%dn",i,n-i);  
 return 1;  
}
8.17、用递归法将一个整数n转换成字符串,例如输入483,应输出字符串"4,8,3,"。n的位数不确定、可以是任意位数的整数。 不要使用系统提供的sprintf()函数,输出屏幕只显示4,8,3,不显示双引号。 
输入整数 a 
 a 是负数 
是	 否 
输出负数 
使a变为整数	
递归调用f函数输出字符 
#includestdio.h 
void main() 
{ 
 void f(int n); 
 int a; 
 printf("请输入整数:"); 
 scanf("%d",&a); 
 printf("输出:"); 
 if(a0) 
 { 
 putchar('-'); 
 a=-a; 
 } 
 f(a); 
 putchar('n'); 
} 
void f(int n) 
{ 
 int i; 
 if((i=n/10)!=0) 
 f(i); 
 putchar(n%10+'0'); 
}
/************************************************* 
 6.e1 编程解百文买百鸡问题。 
 “鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一; 
 百钱买百鸡,问翁、母、雏各几何?” 
*************************************************/ 
#includestdio.h 
void main() 
{ 
 int x,y,z; 
 for(x=0;x=100/5;x++) 
 { 
 for(y=0;y=100/3;y++) 
 { 
 z=100-x-y; 
 if(5*x+3*y+z/(3.0)==100) 
 printf("翁为%d,母为%d,雏为%dn",x,y,z); 
 } 
 } 
}
/******************************************** 
 6.14 编程输出以下图形: 
 * 
 *** 
 ***** 
 ******* 
 ***** 
 *** 
 * 
********************************************/ 
#includestdio.h 
void main() 
{ 
 int a,b,i,j; 
 for(i=1;i=4;i++) 
 { 
 a=2*i-1; 
 b=(7-a)/2; 
 for(;b=1;b--) 
 { 
 printf(" "); 
 } 
 for(j=1;j=a;j++) 
 { 
 printf("*"); 
 }  
 printf("n"); 
 } 
 for(i=3;i=1;i--) 
 { 
 a=2*i-1; 
 b=(7-a)/2; 
 for(;b=1;b--) 
 { 
 printf(" "); 
 } 
 for(j=1;j=a;j++) 
 { 
 printf("*"); 
 }  
 printf("n"); 
 } 
}
6.12、用牛顿迭代法求下面方程2x3 - 4x2 + 3x - 6 = 0在1.5附近的根。 
问题分析: 
①	根据题意,设根的初始近似值x=1.5,过x作y轴平行线与曲线F(x)相交于j,交点j的坐标为(x,y)。 
②	过交点j作F(x)的切线交x轴于x1,则x、j、x1组成一个直角三角形。由几何知识可知、(x-x1)*tgα=y。所以,x1= x - y/tgα。由解析几何知识可知,tgα等于曲线F(x)在j的切线的斜率、即等于F(x)的导函数F '(x)在x点的函数值, F '(x)= tgα=6*x^2-8*x+3。 
③	把x1作为x,重复执行①②可获得离实际交点X更近的交点x2。再把x2作为x0,重复执行①②又可获得离实际交点X更近的交点x3。…… 
④	当前后2次交点的距离d=|x-x1|足够小时,x1就是所求的方程近似根。 
N-S流程图: 
float x,y,x1,tg,d,i; x=1.5;d=1; 
For fabs(d)=1e-5 
y=2*x*x*x-4*x*x+3*x-6; 
tg=6*x*x-8*x1+3; 
x1= x - y/tg; 
d=x-x1; x=x1; 
输出 x 
源程序: 
#includestdio.h 
#includemath.h 
void main() 
{ 
 float x,y,x1,tg,d,i; 
 x=1.5;d=1; 
 for(i=1;fabs(d)=1e-5;i++) 
 { 
 y=2*x*x*x-4*x*x+3*x-6; 
 tg=6*x*x-8*x1+3; 
 x1= x - y/tg; 
 d=x-x1; 
 x=x1; 
 } 
 printf("n%f",x); 
}
/************************************************************ 
7.2 用选择法对10个整数按从小到大的顺序排序。 
************************************************************/ 
#includestdio.h 
void main() 
{ 
 int a[11],i,j,t,min; 
 printf("请输入a[0]到a[9]的值n"); 
 for(i=1;i=10;i++) 
 { 
 printf("a[%d]=",i); 
 scanf("%d",&a); 
 } 
 for(i=1;i=9;i++) 
 { 
 min=i; 
 for(j=i+1;j=10;j++) 
 if(a[min]a[j])min=j; 
 t=a[min]; 
 a[min]=a; 
 a=t; 
 } 
 for(i=1;i=10;i++) 
 printf("na[%d]=%d",i,a); 
}
7.4、有一个一维数组a,其长度为10。a中只存有9个数据,并且a0到a8已经按升序排好序(即a0a1a2a3a4a5a6a7a8)。编程实现下述功能:从键盘输入一个数据,把它插入到a中的适当位置,使得a中的数据仍然保持升序排列。 
问题分析: 
 假设一个已排好的数组a[11]={1,7,10,25,36,48,67,88,94,100} 
如果插入一个数n比a数组最后一个数大,刚将插入的数放在a数组的末尾。 
 否则,将它依次和a[0]到a[9]比较,直到出现an为止,p 这表示a[i-1]na,然后要把n插入a[i-1]与a之间, 
#includestdio.h 
void main() 
{ 
 int i,j,n; 
 int a[11]={1,7,10,25,36,48,67,88,94,100}; 
 for(i=0;i=9;i++) 
 printf("na[%d]=%d",i,a); 
 printf("n请输入n的值"); 
 scanf("%d",&n); 
 if(na[9]) a[10]=n; 
 else 
 { 
 for(i=0;i=9;i++) 
 { 
 if(a=n) 
 { 
 for(j=10;ji;j--) 
 a[j]=a[j-1]; 
 a=n; 
 break; 
 } 
 } 
 } 
 printf("n结果为a= "); 
 for(i=0;i=10;i++) 
 printf("%d ",a); 
 printf("n"); 
}
7.6、从键盘输入一个整数n(5n11),编程显示如下的n行杨辉三角形 
问题分析: 
各行第一个数和最后一个数都是1,其余各数是数是上一行同列和前一列两个数的和。设数组为a[j],a[j]=a[i-1][j]+ a[i-1][j-1],其中i为行,j为列 
#includestdio.h 
void main() 
{ 
 int i,j,a[11][11]; 
 for(i=1;i=11;i++) 
 { 
 a=1; 
 a[1]=1; 
 } 
 for(i=3;i11;i++) 
 { 
 for(j=2;j=i-1;j++) 
 a[j]=a[i-1][j]+ a[i-1][j-1]; 
 } 
 for(i=1;i11;i++) 
 { 
 for(j=1;j=i;j++) 
 printf("%4d",a[j]); 
 printf("n"); 
 } 
 printf("n"); 
}
/*************************************************************** 
 7.9 有15个数已经按由小到大的顺序存放在一个 
 数组中,输入1个数,用折半查找法找出该数 
 是数组中的第几个元素的值,如果该数不在 
 数组中,则输出“无此数”。 
***************************************************************/ 
#includestdio.h 
void main() 
{ 
 int x,i,max,min,mid; 
 int a[15]={1,3,5,7,9,11,13,15,17,19,21,23,25,27,29}; 
 printf("请输入要查找的数"); 
 scanf("%d",&x); 
 max=14;min=0; 
 for(i=1;i=7;i++) 
 { 
 mid=(max+min)/2; 
 if(xa[mid]) min=mid; 
 else if(xa[mid]) max=mid; 
 else break; 
 } 
 printf("该数组为:"); 
 for(i=0;i=14;i++) 
 printf("%4d",a); 
 printf("n"); 
 if(a[mid]==x) 
 printf("该数是数组中的第%d个元素n",mid+1); 
 else printf("无此数n"); 
}
							 
							 
							 
							  
							  
							  楼主 2016-01-28 13:52 回复
						 
						 
           
          
          
         
   
         
      
 
   
             
                  
                  
 
 
 
     
	 
  
	Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知