您的位置:首页 > 编程语言 > C语言/C++

请-C语言初学、高手都进来看看

2009-06-16 09:36 288 查看
C 语言上机测试题目

以下题目都经WIN-TC实现过,如果您发现了错误,请留言。我好及时纠正,谢谢……

JQ---------------->
1、 写一个函数,求一个字符串的长度,在main函数中输入字符串,输出其长度。
#define N 20
main()
{
char a
;
printf("pleases input some word:");
scanf("%s",a);
printf("/n/nyou %d ge zifu",strlen(a));
getch();
}
strlen()是计算字符串长度的函数。

--------------------------------------------------------------------------------------------------------------
2、 输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

main()
{
int a,b,c,temp;
printf("pleases input a,b,c:/t");
scanf("%d %d %d",&a,&b,&c);
if(a>b){temp=a;a=b;b=temp;} /*相互比较的过程*/
if(a>c) {temp=a;a=c;c=temp;}
if(b>c){temp=b;b=c;c=temp;}
printf("/n/n%d/t%d/t%d",a,b,c);
getch();
}

--------------------------------------------------------------------------------------------------------------
3、题目:古典问题:有一只兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少对?
程序分析提示: 兔子的规律为数列1,1,2,3,5,8,13,21....

这个题是我觉得这里所有的题最难的题,想啦好久好久啊^

以前看过,差不多都搞忘记啦。

我也不太确定自己的对不对啊。由于题目给的规律数太少,不晓得我想的规律能不能满足此后跟多的数据,哎!暂且按我的想法做哈。
算法分析 : 1 1 1+1 1+1+1 (1+1+1)+(1+1) [(1+1+1)+(1+1)]+(1+1+1) ……
1 1 1+1=2 2+1=3 3+2=5 5+3=8 8+5=13 ……
就求一年中,每个月的兔子数量吧。
main()
{ int i,tuzi[12];
for(i=1;i<=12;i++)
{
if(i==1||i==2) tuzi[i-1]=1;
else {tuzi[i-1]=tuzi[i-2]+tuzi[i-3];} /*重点是这一步,我用的数组,这样好控制数的互相作用,这句可理解为,兔子数量等于上月加上前月数*/
printf("/n%d you %d ge/n",i,tuzi[i-1]);
}
getch();
}

这个题,我老是觉得做错啦,不过又不知道原因在哪里,运行结果虽然也是1 1 2 3 5 8 13 21 …… 我老是觉得后面的数有问题。 哦,提示一点,请分析一下,每月 不具备生产能力的兔子数的规律嘛!那个可以验证我的做法是否正确。

--------------------------------------------------------------------------------------------------------------
4、题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
程序分析提示:请抓住分子与分母的变化规律。

2/1
3/2
5/3
8/5
13/8

你注意观察他们的变化规律嘛,下一个数的分子为分数的分子加分母,而分子为下个数的分母;

main()
{
int a=2.0,b=1.0,temp=0.00;
int i,k;
for(i=0;i<20;i++)
{
temp+=a/b; /*这是累加过程*/
printf("%d/%d+",a,b); /*这是显示效果*/
k=a;a=a+b;b=k; /*注意算法的技巧 用临时变量 k 来 存放数据*/
}
printf("=%d",temp);
getch();
}

--------------------------------------------------------------------------------------------------------------
5、编写一个程序,输入a、b、c三个值,输出其中最大值。
main()
{
int a,b,c,max;
printf("pleases input a,b,c:/t");
scanf("%d %d %d",&a,&b,&c);
if(a>b)max=a;
else max=a;
if(c>max) max=c; /*相互比较的过程*/

printf("/n/n%d",max);
getch();
}

--------------------------------------------------------------------------------------------------------------
6、输入一个华氏温度,要求输出对应的摄氏温度。其计算公式为:
C=5(F-32)/9
输出结果取两位小数。

main()
{
float f,c; /*定义为浮点型 变量*/
printf("pleases input f:");
scanf("%f",&f);
c=5*(f-32)/9.0;
printf("/n/n%.2f",c);
getch();
}
注意:%.nf 中的 ‘n’是控制小数点位数的参数。

--------------------------------------------------------------------------------------------------------------
7、给一个正整数,要求:
a、求出它是几位数;
b、分别输出每一位数字;
c、按逆序输出各位数字,例如原数为321,应输出123

我合起来写啦……
注意分析子函数的 功能……
#include "stdio.h"
#include "conio.h"
int ak[5]; /*全局变量*/
int wsh_k;
int weishu(int a) /*子函数 功能:判断数的位数*/
{
int text=10,temp,weishu=1;

printf("/n/na=%d/n",a);
while(1) /*用while循环 来判断*/
{temp=a-text;
if(temp<0) break; /*如果temp<0 退出循环*/
else {text=text*10;weishu++;}

}
printf("/n/n/nyou %d wei_shu/n",weishu);
return (weishu);
}
int fen_li(int b) /*具有分离功能的 子函数*/
{
int temp,i,ws,ws_t,j=0;

wsh_k=ws=ws_t=weishu(b); /*调用子函数,吧位数赋给ws和ws_t*/
printf("----------------------");
while(ws>=0) /*while 循环 把各位分解出来*/
{temp=10;
for(i=0;i<ws;i++)
temp=temp*10;
if(temp==10) /*判断是不是分离个位*/
{ak[j]=temp=b%10;break;}
if(ws==ws_t) /*判断属不属分离首位*/
ak[j]=temp=b%temp;
else
ak[j]=temp=b/(temp/10)%10; /*除了个位和首位,其他分离形式是一样的*/
ws--;
j++;
}
}
int ni_xu_shu() /*把分离的各位数,重组为新的要求数*/
{
int b[5],i,t,j_t,j=j_t=wsh_k;
int num=1,end_num=0;
for(i=0;i<=wsh_k;i++) /*逆序过程 两个数组之间进行循环赋值*/
{
b[j]=ak[i];j--;
}
for(i=0;i<=wsh_k;i++)
{ num=1;
if(i==wsh_k)continue;
else
for(t=0;t<=j_t-2;t++) /*原理不好讲,自己分析分析*/
num=num*10;
b[i]=b[i]*num;
j_t--;
end_num+=b[i];

}
printf("/n/n/nni_xu_hou:%d/n",end_num);

}
main()
{ int a,i;
printf("pleases input a number:");
scanf("%d",&a);
fen_li(a); /*函数调用1*/
for(i=0;i<=wsh_k;i++)
printf("%d/t",ak[i]);

ni_xu_shu();/*函数调用2*/
getch();

}

--------------------------------------------------------------------------------------------------------------
8、有一个函数:
X ( X<1 )
Y= X - 1 ( 1<=X<10)
3X-11 (X>=10)

咦?上下是一样的?

X ( X<1 )
Y= X - 1 ( 1<=X<10)
3X-11 (X>=10)
写一个程序,输入X,输出Y的值。

我是这样理解的,这个题应该是这样的。

输入一个输x,
if( X<1 )
Y= X - 1 ;
if(1<=X<10)
y=3X-11 ;
如果(X>=10) 不进行任何计算,退出程序。

main()
{
int x,y;
printf("pleases input x: ");
scanf("%d",&x);
if(x<1)
y=x-1;
if(x<10&&x>=1) /*注意条件的 表达*/
y=3*x-11;
else { printf("sorry!!");getch();return 0;}
printf("/n/n/nresult %d",y);
getch();
}

---------------------------------------------------------------------------------------------------------------
9、写一个判断偶数的函数,在主函数中输入一个整数,输入是否为素数的信息。

int y_n_ou_shu(int a) /*需要传递参数的 子函数 ,判断是不是偶数*/
{
if(a%2==0) return 1;
return 0;
}
main()
{
int a,i,temp=0;
printf("pleases input a: ");
scanf("%d",&a);
if(y_n_ou_shu(a))
printf("it's a ou_shu/n");
else printf("it's not a ou_shu/n");
for(i=2;i<=a-1;i++) /*判断是不是质数,它只能被自身和1整除,
反过来说,就是不能整除2到自身减一的任何数*/
if(a%i==0) temp=1; /*标记,当有能整除的情况,改变标记值,方便下面的判断*/
else continue;
if(temp==0) printf("it's a s_shu/n");
else printf("it's not a s_shu/n");
getch();
}
--------------------------------------------------------------------------------------------------------------
10、将一个数组中的值逆序存放。如原来存放顺序为 8,6,5,4,1。
逆序后变为1,4,5,6,8。 、
#define N 5 /*自定义标识 可能距需求改变 N的值*/
main()
{
int a
,b
,i,j=N-1;
printf("pleases input any numberes to a
:");
for(i=0;i<N;i++) /*通过循环来给数组赋值*/
{ scanf("%d",&a[i]); /*注意,给整形变量赋值的时候,要加‘&’符号*/
b[j]=a[i]; /*分析两个数组下标的 特点*/
j--;
}
printf("before/n");
for(i=0;i<N;i++)
printf("%d/t",a[i]);
printf("/n-----------------------------------------/n");
printf("the end/n");
for(i=0;i<N;i++)
printf("%d/t",b[i]);
getch();
}

我学C语言已经有1年啦,最近有个高中同学,发来了以上这些题目,我做了做,觉得挺有信心的。呵呵,主要是之前编程老是离不开书本,现在可以开始有自己的构思啦。我特意发出来,主要是想和初学者多多交流交流,另外,也很希望得到各位高手您的指教。 谢谢……

QQ:598327203
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: