0
点赞
收藏
分享

微信扫一扫

C语言经典面试题


1. 从文本文件old.txt读取字符,将其中的数字字符 '0',' 1',' 2',......'9',分别用英文字母字符'Z', 'Y', 'Z', 'W', 'V', 'U', 'T', 'S', 'R','Q'替换,其余字符不变,结果写入文本文件new.txt,并分别将两个文件的内容输出到屏幕;

#include <stdio.h>
#include <stdlib.h>
int main(void){
    // 定义文件操作的两个指针
    FILE *fp1,*fp2;
    char ch;
    // 如果打开要读取文件出错
    if((fp1=fopen("old.txt","r"))== NULL){
        printf("error\n");
        exit(1);
    }

    // 如果打开要写入的文件出错
    if((fp2=fopen("new.txt","w+"))==NULL){
        printf("error\n");
        exit(1);
    }

    // 循环
    while(!feof(fp1)){
        // 获取文件中的字符
        ch = fgetc(fp1);
        // 输出读取的文件
        putchar(ch);
        if(ch>'0'&&ch<='9'){
            // 经典
            ch = 'Z'-(ch-48);
        }
        // 把字符写入指针所对应的对象中
        fputc(ch,fp2);
    }
    // 还原指针
    rewind(fp2);
    // 输出之前写入文件的内容
    while(!feof(fp2)){
        ch = fgetc(fp2);
        putchar(ch);
    }
    // 关闭指针
    fclose(fp1);
    fclose(fp2);
    return 0;
}

2. 编写函数int move(int b[ ], int n , int m),将整型数组 b 的 n 个元素循环右移 m 个位置。例如:n = 10,m = 2时,移动前:1,2,3,4,5,6,7,8,9,0,移动后:9,0,1,2,3,4,5,6,7,8,然后编写主函数,从键盘输入数组元素及n和m(0<m<n<20)的值,调用move函数,输出移动前后的全部元素;

#include<stdio.h>
void move(int b[],int n,int m){
    int temp;
    int i,j;

    // b =[1,2,3,4,5,6,7,8,9,0];
    // n = 10;
    // m = 2;

    // 移动2轮
    for(i=0;i<m;i++){  
        // 尾数       
        temp = b[n-1];   
        // 交换位置     
        for(j=n-1;j>0;j--){
           b[j]=b[j-1];       
        }
        // 尾数放到头部
        b[0]=temp;
    }  
}

int main(void){
    int a[20];
    int i,n,m;
    scanf("%d%d",&n,&m);

    // 输入要排序的数
    for(i=0;i<n;i++){
        // 5d代表数字所占宽度
        scanf("%5d",&a[i]);
    }

    // 打印之前输入的数据
    for(i=0;i<n;i++){
        printf("%5d",a[i]);
    }

    // 换行
    printf("\n");

    // 移位数据
    move(a,n,m);

    // 输出移位后的数据
    for(i=0;i<n;i++){
        printf("%5d",a[i]);
    }
    printf("\n");
    return 0;


}

举报

相关推荐

0 条评论