2006年兰州交通大学硕士研究生考试题(计算机编程题)

2,10进制转换为16进制:

#include<stdio.h>

char char_mod(int c) {
    char number=0;
    switch (c) {
        case 0: number='0';break;
        case 1: number='1';break;
        case 2: number='2';break;
        case 3: number='3';break;
        case 4: number='4';break;
        case 5: number='5';break;
        case 6: number='6';break;
        case 7: number='7';break;
        case 8: number='8';break;
        case 9: number='9';break;
        case 10: number='A';break;
        case 11: number='B';break;
        case 12: number='C';break;
        case 13: number='D';break;
        case 14: number='E';break;
        case 15: number='F';break;
    }
    return number;
}
main() {
    long num=0,a=0;
    int count=0,i=0;
    char *p;
    printf("please input a number: num=");
    scanf("%ld", &num);
    a=num;
    do{
        count++;
        a/=16;   
    }while(a!=0);
    p=(char *)calloc(count,sizeof(char));
    a=num;
    for(i=count;i>0;i--){
        p[i-1]=char_mod(a%16);
        a/=16;
    }
    printf("The number  %ld  transform  into  ",num);
    for(i=0;i<count;i++){
        printf("%c",p[i]);
    }

    getch();
}

 

4题,编程从N位数中删去M个数字使剩下的数值最小:

#include<stdio.h>
#define min -1
int max_num(int a[],int i) {
 int b=0,j=0;
 for (j=0; j<i; j++) {
  if (a[j]>b)
   b=a[j];
 }
 return b;
}
main(){
 int N=0;
 int M=0;
 int i=0,max=0;
 int *p;
 printf("please input number N= ");
 scanf("%d",&N);
 printf("/n");
 printf("please input number M= ");
    scanf("%d",&M);
 printf("/n");
 p=(int *)calloc(N,sizeof(int));
 for(i=0;i<N;i++){
  printf("Please input %d number :  ",i+1);
  scanf("%d",&p[i]);
 }
 
 printf("The older  number is :  ");
 for(i=0;i<N;i++){
   printf("%d",p[i]);
  }
 printf("/n");
 
 for(i=0;i<M;i++){
  max=max_num(p,N);
  for(k=0;k<N;k++){
   if(max==p[k]) p[k]=min;
  }
 }
 
 printf("The new number is : ");
 for(i=0;i<N;i++){
  if(p[i]!=-1) printf("%d",p[i]);
 }
 getch();
}

 

6题,编写程序找出文件中最长和最短的正文行并统计文件中的行数:

#include<stdio.h>
#define n 80
main(){
     FILE *fp;
     char ch,*maxrow,*minrow,*row;
     int rowcount=0;
     int i=0,j=0;
     int max=0,min=1000,maxflag,minflag;
     row=(char *)calloc(n,sizeof(char));
     maxrow=(char *)calloc(n,sizeof(char));
     minrow=(char *)calloc(n,sizeof(char));
     if((fp=fopen("C://Win-TC//test//f.txt","r"))==NULL){
         printf("Can't open input file/n");
         exit(1);
     }
     while(1){
        ch=fgetc(fp);
        row[i++]=ch;
        if(ch=='/n'||ch=='/r'||ch==EOF){
           rowcount++;
           if(max<i){
              max=i;
              maxflag=rowcount;
              free(maxrow);
              maxrow=(char *)calloc(max,sizeof(char));
              for(j=0;j<max-1;j++){
                  maxrow[j]=row[j];
              }
           }
           if(min>i){
              min=i;
              minflag=rowcount;
              free(minrow);
              minrow=(char *)calloc(min,sizeof(char));
              for(j=0;j<min-1;j++){
                  minrow[j]=row[j];
              }
           }
           free(row);
           i=0;
        }
        if(ch==EOF) break;
     }
     fclose(fp);
     printf("The Account Numbers/n ");
     printf("The sum of rowcount is : %d/n",rowcount);
     printf("The max of char rowcount is : %d  ,char of numbers is: %d  ,the string is : /n",maxflag,max-1);
     printf("%s/n",maxrow);
     printf("/n");
     printf("The min of char rowcount is : %d  ,char of numbers is: %d  ,the string is : /n",minflag,min-1);
     printf("%s/n",minrow);
     getch();
}

 

7题:数列总是具有一些奇妙的性质,现有这样一个数列A,它是以递增顺序排列的,并且该数列中的所有数列中所有的数的质因子只可能为 2,3,5。请你编写程序输出这个数列中的前N 个数字:

#include<stdio.h>

int zhiyinzi(long c) {
    int flag=0;
    switch (c) {
        case 2: flag=1;break;
        case 3: flag=1;break;
        case 5: flag=1;break;
        default:flag=0;
    }
    return flag;
}

int sushu(long num){
    int i;
    if(num==2) return 1;
    for(i=2;i<num;i++){
        if(num%i==0) return 0;
    }
    return 1;
}

long yinzi(long num){
    int flag=1;
    long m=2,n=0,i;
    long a=0;
    while(flag){
        n=num%m;
        a=num/m;
        if(n==0){  /*m 是 num的因子数,下一步判断该m因子数是不是素数,如果是素数,看是不是2,3,5 */

            if(sushu(m)==1){

                if(zhiyinzi(m)==1){

                          /*m因子正确, 下一步判断数 num/m */

                    if(a==1){
                        return 1;  /*该数符合条件*/

                    }else{
                        yinzi(a);
                        break;
                    }
                }else return 0;

            }

        }else m++;
    }
}


main(){
    int N=0,flag=1,i=0;
    long *A,count=1;
    printf("please input number N= ");
    scanf("%d",&N);
    printf("/n");
    A=(long *)calloc(N,sizeof(long));
    while(flag){
        count++;
        if(yinzi(count)==1){
            A[i]=count;
            i++;
            if(i==N) flag=0;
        }
    }
   
    for(i=0;i<N;i++){
        if(i%5==0) printf("/n"); /*每5个数打印一行*/
        printf("%d     ",A[i]);
    }

    getch();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值