C语言题目练习100例——题目+题目分析+源代码(81—90)

【题目81】

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
 
int main()
{
    int a,i,aa[4],t;
    printf("请输入四位数字: ");
    scanf("%d",&a);
    aa[0]=a%10;
    aa[1]=a%100/10;
    aa[2]=a%1000/100;
    aa[3]=a/1000;
    for(i=0;i<=3;i++)
    {
        aa[i]+=5;
        aa[i]%=10;
    }
    for(i=0;i<=3/2;i++)
    {
        t=aa[i];
        aa[i]=aa[3-i];
        aa[3-i]=t;
    }
    printf("加密后的数字: ");
    for(i=3;i>=0;i--)
        printf("%d",aa[i]);
    printf("\n");
    return 0;
}

【题目82】

题目:计算字符串中子串出现的次数 。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#include "stdlib.h"
#include "string.h" 

int main()
{
    int i,j,k,TLen,PLen,count=0;
    char T[50],P[10];
    printf("请输入两个字符串,以回车隔开,母串在前,子串在后:\n");
    gets(T);
    gets(P);
    TLen=strlen(T);
    PLen=strlen(P);
    for(i=0;i<=TLen-PLen;i++)
    {
        for(j=0,k=i;j<PLen&&P[j]==T[k];j++,k++)
            ;
        if(j==PLen)count++;
    }
    printf("%d\n",count);
    system("pause");
    
    return 0;
}

【题目83】

题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#include "stdlib.h"

int main()
{
    FILE *fp=NULL;
    char filename[25],ch;
    printf("输入你要保存到的文件的名称: \n");
    gets(filename);
    if((fp=fopen(filename,"w"))==NULL)
    {
        printf("error: cannot open file!\n");
        exit(0);
    }
    printf("现在你可以输入你要保存的一些字符,以#结束: \n");
    getchar();
    while((ch=getchar())!='#')
	{
        fputc(ch,fp);
    }
    fclose(fp);
    system("pause");
    return 0;
}

【题目84】

题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。 输入的字符串以!结束。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
    FILE *fp=NULL;
    char str[50];
    int i,len;
    printf("输入一个字符串: \n");
    gets(str);
    len=strlen(str);
    for(i=0;i<len;i++)
    {
        if(str[i]<='z'&&str[i]>='a')
            str[i]-=32;
    }
    if((fp=fopen("test","w"))==NULL)
    {
        printf("error: cannot open file!\n");
        exit(0);
    }
    fprintf(fp,"%s",str);
    fclose(fp);
    
    system("pause");
    return 0;
}

【题目85】

题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
1.题目分析:前提:需要建立A.txt与B.txt。
2.题目源代码如下:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
    FILE*fa,*fb,*fc;
    int i,j,k;
    char str[100],str1[100];
    char tem;
    if((fa=fopen("A.txt","r"))==NULL)		//A.txt文件需要存在
    {
        printf("error: cannot open A file!\n");
        exit(0);
    }
    fgets(str,99,fa);
    fclose(fa);
    if((fb=fopen("B.txt","r"))==NULL)		//B.txt文件需要存在
    {
        printf("error: cannot open B file!\n");
        exit(0);
    }
    fgets(str1,100,fb);
    fclose(fb);
    strcat(str,str1);
    for(i=strlen(str)-1;i>1;i--)
        for(j=0;j<i;j++)
            if(str[j]>str[j+1])
            {
                tem=str[j];
                str[j]=str[j+1];
                str[j+1]=tem;
            }
    
    if((fc=fopen("C.txt","w"))==NULL)  // 合并为 C.txt
    {
        printf("error: cannot open C file!\n");
        exit(0);
    }
    fputs(str,fc);
    fclose(fc);
    system("pause");
    return 0;
}

【题目86】

题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#include "stdlib.h"

typedef struct{
    int ID;
    int math;
    int English;
    int C;
    int avargrade;
    char name[20];
}Stu;
int main()
{
    FILE*fp;
    Stu stu[5];
    int i,avargrade=0;
    printf("请输入5个同学的信息:学生号,姓名,3门成绩:\n");
    for(i=0;i<5;i++)
    {
        scanf("%d %s %d %d %d",&(stu[i].ID),stu[i].name,&(stu[i].math),&(stu[i].English),&(stu[i].C));
        stu[i].avargrade=(stu[i].math+stu[i].English+stu[i].C)/3;
    }
    
    if((fp=fopen("stud","w"))==NULL)
    {
        printf("error :cannot open file!\n");
        exit(0);
    }
    for(i=0;i<5;i++)
        fprintf(fp,"%d %s %d %d %d %d\n",stu[i].ID,stu[i].name,stu[i].math,stu[i].English,
                stu[i].C,stu[i].avargrade);
    
    fclose(fp);		// ==system("pause");
    return 0;
}

【题目87】

题目:我国古代数学家在《算经》中有一道题:"鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?“意为:公鸡每只5元,母鸡每只3只,小鸡3只1元。用100元钱买100只鸡,问公鸡、母鸡、小鸡各多少只?”
1.题目分析:
2.题目源代码如下:

#include "stdio.h"

int main()
{
	int x,y,z;			//定义3个变量,分别表示公鸡、母鸡和小鸡的个数 
	for(x=0;x<=20;x++)
	{
		for(y=0;y<=33;y++)
		{
			z=100-x-y;
			if(z%3==0 && x*5+y*3+z/3==100)			//3种鸡一共100只 
			printf("公鸡: %d,母鸡: %d,小鸡: %d \n",x,y,z);
		}
	}
	getchar();
	return 0;	
} 

【题目88】

题目:斐波那契数列因数学家列昂纳多•斐波那契的以兔子繁殖为例子而引人,故又称为“兔子数列”。一般而言, 兔子在出生两个月后,就有繁殖能力,一对兔 子每个月能生出一对小兔子来如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#define NUM 13

int main()
{
	int i;
	long fib[NUM]={1,1};
	for(i=2;i<NUM;i++)
	{
		fib[i]=fib[i-1]+fib[i-2];	
	}		
	for(i=0;i<NUM;i++)
	{
		printf("第%d月兔子总数:%d只 \n",i,fib[i]);
	}
	getchar();
	return 0;
}

【题目89】

题目:母亲为儿子小Sun 4年的大学生活准备了一笔存款,方式是整存零取,规定小Sum每月月底取下一个月的生活费。现在假设银行的年利息为1.71%, 请编写程序,计算母亲最少需要存人多钱?
(小Sun大学毕业时连本带息要取1000元)
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#define FETCH 1000
#define RATE 0.0171

int main()
{
	double corpus[49];
	int i;
	corpus[48]=(double)FETCH;
	for(i=47;i>0;i--)
	{
		corpus[i]=(corpus[i+1]+FETCH)/(1+RATE/12);
	}
	for(i=48;i>0;i--)
	{
		printf("%d月月末本利共计:%.2f \n",i,corpus[i]);
	}
	getchar();
	return 0;
}

【题目90】

题目:假设有一种29选7的彩票, 每注由7个1~ 29的数字组成,且这7个数字不能相同,编写程序生成所有的号码组合。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#define MAXN 7		//设置每一注彩票的位数
#define NUM 29		//设置组成彩票的数字

int num[NUM];
int lottery[MAXN];
void combine(int n,int m)
{
	int i,j;
	for(i=n;i>=m;i--)
	{
		lottery[m-1]=num[i-1];		//保存一位数字 
		if(m>1)
		combine(i-1,m-1);
		else				//若m=1,则输出一注号码 
		{
			for(j=MAXN-1;j>=0;j--)
			{
				printf("%3d",lottery[j]);
			}
			getchar();
			printf("\n");
		}	
	}	
}
int main()
{
	int i,j;
	for(i=0;i<NUM;i++)		//设置彩票的个位数字 
	num[i]=i+1;
	for(i=0;i<MAXN;i++)
	{
		lottery[i]=0;
	}
	combine(NUM,MAXN);
	getchar();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值