用C语言给文件中写入一个字符串
#include<stdio.h>
#include<string.h>
int main(){
FILE *fp=fopen("D:\\out.txt","w"); //以写的方式打开文件,如果该文件不存在,则创建该文件
fprintf(fp,"%s","ojbk!");
fclose(fp);
return 0;
}
用C语言从文件中提取一个字符串
#include<string.h>
int main(){
FILE *fp=fopen("D:\\in.txt","r"); //以读的方式打开文件,文件必须先创建好
if(fp==NULL) {
printf("文件打开失败!退出登录!");
}else printf("文件打开成功,请输入密码:");
char str[100],s[100];
fscanf(fp,"%s",str);
scanf("%s",s);
if(strcmp(str,s)==0) printf("密码输入正确!\n");
else printf("密码输入错误!\n");
fclose(fp); //关闭文件,这个很重要
return 0;
}
2016年c语言上机第三题
输入包含字母和数字,要求统计每个字符的出现次数,并按要求格式输出,30分。例如:
输入:AsdaAffid333778
输出:a:3
d:2
f:2
i:1
s:1
3:3
7:2
8:1
注意:输入是从文件中读入,输出是写入文件中
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char str[200];
char s[200];
int Hash[40];
FILE *fp=fopen("D:\\in.txt","r"),*p=fopen("D:\\out.txt","w");//第一个文件要先创建出来,否则会出错
if(fp){
int num;
fscanf(fp,"%s",str);
strcpy(s,str); //这个地方可以直接用str不用拷贝到s中,由于我编译的时候出现了问题,稍微改了一下才通过的。
int len=strlen(s);
int i;
for(i=0;i<80;i++){
Hash[i]=0;
}
printf("%d\n",len);
for(i=0;i<len;i++){
if(s[i]>='0' && s[i]<='9'){
Hash[s[i]-'0'+26]++;
}else if(s[i]>='A' && s[i]<='Z'){
Hash[s[i]-'A']++;
}else{
Hash[s[i]-'a']++;
}
}
for(i=0;i<36;i++){
if(Hash[i]!=0){
if(i>=26) fprintf(p,"%d:%d\n",i-26,Hash[i]);
else fprintf(p,"%c:%d\n",i+'a',Hash[i]);
}
}
fclose(fp);
fclose(p);
}else{
printf("打开失败!\n");
}
return 0;
}
第四题:求最大公约数和最小公倍数,从文件中读和写入文件中。
#include<stdio.h>
#include<string.h>
int gcd(int x,int y){
return x%y==0?y:gcd(y,x%y);
}
int main(){
int a,b;
FILE *fp=fopen("D:\\input.txt","r");
FILE *p=fopen("D:\\output.txt","w");
fscanf(fp,"%d%d",&a,&b);
fprintf(p,"最大公约数:%d\n最小公倍数:%d",gcd(a,b),a/gcd(a,b)*b);
fclose(fp);
fclose(p);
return 0;
}
质因子分解:90=2*3*3*5
#include<stdio.h>
#define N 1000
int prime[N];
int p[N]={0};
int k=0;
void primes(){
int i,j;
for(i=2;i<N;i++){
while(!p[i]){
prime[k++]=i;
for(j=i*i;j<N;j+=i){
p[j]=1;
}
}
}
}
int main(){
int input;
scanf("%d",&input);
primes();
int t;
int tag=1;
printf("%d=",input);
for(t=0;t<k;t++){
while(input%prime[t]==0){
printf(tag==1?"%d":"*%d",prime[t]);
input /= prime[t];
tag=0;
}
}
return 0;
}
十进制化为二进制 35 = 100011
#include<stdio.h>
int main(){
int n,i;
scanf("%d",&n);
int arr[100],k=0;
do{
arr[k++]=n%2;
n/=2;
}while(n!=0);
for(i=k-1;i>=0;i--){
printf("%d",arr[i]);
}
printf("\n");
return 0;
}
一维数组打印杨辉三角
1
1 1
1 2 1
1 3 3 1
#include<stdio.h>
int main(){
int arr[100];
int n,i,j;
scanf("%d",&n);
if(n==1) printf("1\n");
if(n>=2) printf("1\n1 1\n");
arr[0]=1;
arr[1]=1;
for(i=2;i<n;i++){
arr[i]=1;
for(j=i-1;j>0;j--){
arr[j]=arr[j]+arr[j-1];
}
for(j=0;j<=i;j++){
printf(j==0?"%d":" %d",arr[j]);
}
printf("\n");
}
return 0;
}
百位以内大数相加
#include<stdio.h>
#include<string.h>
void reverse(char s[]){
int len=strlen(s);
int i;
for(i=0;i<len/2;i++){
int tmp=s[i];
s[i]=s[len-1-i];
s[len-1-i]=tmp;
}
}
int main(){
char str1[110],str2[110],str[110]={0};
scanf("%s %s",str1,str2);
reverse(str1);
reverse(str2);
int len1=strlen(str1);
int len2=strlen(str2);
int len = len1>len2?len1:len2;
int c=0,i;
for(i=0;i<len;i++){
int numA = i < len1?str1[i]-'0':0;
int numB = i < len2?str2[i]-'0':0;
str[i]=(numA + numB + c)%10 + '0';
c = (numA + numB + c)/10;
}
if(c!=0) str[i]=c+'0';
reverse(str);
puts(str);
return 0;
}
写出int范围内2的幂的数
//直接用2乘
#include<stdio.h>
#define N 2e10
int main(){
printf("0 ");
long long i;
for(i=2;i<N;i=i*2)
{
printf("%lld ",i);
}
return 0;
}
输出小于1000的最大的10个素数
#include<stdio.h>
#include<math.h>
int prime(int x){
if(x<=1) return 0;
int i;
for(i=2;i<=(int)sqrt(x);i++){
if(x%i==0) return 0;
}
return 1;
}
int main(){
int i,j=0;
for(i=999;i>0;i--){
if(prime(i)) {
printf("%d ",i);
j++;
if(j==10) break;
}
}
return 0;
}
判断一个数是否为对称素数
#include<stdio.h>
#include<math.h>
#include<string.h>
int is_prime(int n){
if(n<=1) return 0;
int i;
for(i=2;i<=(int)sqrt(n);i++){
if(n%i==0) return 0;
}
return 1;
}
int is_symmetry(int n){
int arr[20]={0};
int i,k=0;
do{
arr[k++]=n%10;
n/=10;
}while(n!=0);
for(i=0;i<k/2;i++){
if(arr[i]!=arr[k-1-i]) return 0;
}
return 1;
}
int main(){
int x;
scanf("%d",&x);
if(is_prime(x)&&is_symmetry(x))
printf("YES!\n");
else
printf("NO!\n");
return 0;
}