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;
}