共有回帖数 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号
意见反馈 |
关于直线 |
版权声明 |
会员须知