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

时间:2021-05-11 08:54:41

C 语言上机测试题目  

 

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

JQ---------------->
1、 写一个函数,求一个字符串的长度,在main函数中输入字符串,输出其长度。
#define N 20
main()
{
   char a[N];
   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[N],b[N],i,j=N-1;
   printf("pleases input any numberes to a[N]:");
   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