C语言经典100题之81-100

这篇博客介绍了C语言的100道经典编程题目,涵盖数字运算、进制转换、字符串操作、数据加密等多个方面。通过详细解释和示例代码,帮助读者理解和解决这些题目,提升C语言编程能力。
摘要由CSDN通过智能技术生成

题目81:809*??=800*??+9*?? 其中??代表的两位数,809*??为四位数,8*??的结果为两位数,
9*??的结果为3位数。求??代表的两位数,及809*??后的结果。

#include <stdio.h>

int main()
{
	int n = 0, b = 0;	//n表示??
	for(n = 10; n < 100; n++)
	{
		b = 809 * n;
		if(((b < 10000)&&(b > 1000))&&((n * 8) < 100)&&((n * 9) >= 100))
		{
			printf("??的结果是%d\n809*??的结果是%d\n", n, b);
		}
	}
	return 0;
}

运行结果
在这里插入图片描述
题目82:八进制转换为十进制

#include <stdio.h>

int main()
{
	int n = 0;
	printf("请输入一个八进制整数(如015):");
	scanf("0%o", &n);
	printf("转换为十进制后是%d\n", n);
	return 0;
}

运行结果
在这里插入图片描述

#include <stdio.h>
#include <math.h>

int main()
{
	int i = 0, n = 0, m = 0;
	printf("请输入八进制数:");
	scanf("%d", &n);
	for(i = 0; n / 10 != 0; i++)
	{
		m += n % 10 * (int)pow(8, i);
		n = n / 10;
	}
	m += n * (int)pow(8, i);
	printf("对应的十进制数:%d\n",m);
	return 0;
}

运行结果
在这里插入图片描述
题目83:求0—7所能组成的奇数个数

#include <stdio.h>

int main()
{
	int ge = 0, shi = 0, bai = 0, number = 0, count = 0;
	for(bai = 0; bai <= 7; bai++)
	{
		for(shi = 0; shi <= 7; shi++)
		{
			for(ge = 0; ge <= 7; ge++)
			{
				number = bai * 100 + shi * 10 + ge;
				if(number % 2 == 1)
				{
					count++;
				}
			}
		}
	}
	printf("0—7所能组成的奇数个数为%d\n", count);
	return 0;
}

运行结果
在这里插入图片描述

#include <stdio.h>

int main()
{
	int ge = 0, shi = 0, bai = 0, number = 0, count = 0;
	for(bai = 0; bai <= 7; bai++)
	{
		for(shi = 0; shi <= 7; shi++)
		{
			for(ge = 0; ge <= 7; ge++)
			{
				number = bai * 100 + shi * 10 + ge;
				if(number % 2 == 1)
				{
					count++;
				}
			}
		}
	}
	printf("0—7所能组成的奇数个数为%d\n", count);
	return 0;
}

运行结果
在这里插入图片描述

#include <stdio.h>

int main()
{
	int n, s, sum = 0;
	for(n = 1; n <= 8; n++)	//表示数有几位
	{
		if(n == 1)	//最后一位是奇数就是奇数,有4种情况
			s = 4;
		else if(n ==2)	//两位数7*4种,三位数7*8*4,四位数7*8*8*4……
			s = 4 * 7;
		else
			s = s * 8;
		printf("%d位数奇数有%d个\n", n, s);
		sum = sum + s;
	}
	printf("总奇数有%d个\n", sum);
	return 0;
}

运行结果
在这里插入图片描述
题目84:一个偶数总能表示为两个素数之和

#include <stdio.h>
#include <math.h>

//判断一个数是否为素数
int IsPrime(int number)
{
	int n = 0, j = 0, flag = 1;
	n = int(sqrt(number));
	for(j = 2; j <= n; j++)
	{
		if(number % j == 0)
		{
			flag = 0;
		}
	}
	if((flag == 1)&&(number != 1))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

int main()
{
	int even = 0, i = 0, jiashu = 0, flag = 0;
	printf("请输入一个偶数:");
	scanf("%d", &even);
	for(i = 2; i < even; i++)
	{
		//把偶数分成两个数的和,然后判断两个数是否为素数
		if(IsPrime(i)&&IsPrime(even - i))
		{
			break;
		}
	}
	printf("%d能表示为素数%d和%d之和\n", even, i, even - i);
	return 0;
}

运行结果
在这里插入图片描述
题目85:判断一个素数能被几个9整除

#include <stdio.h>

int main()
{
	int prime = 0, i = 0, n = 9;
	printf("请输入一个素数:");
	scanf("%d", &prime);
	for(i = 1; ; i++)
	{
		if(n % prime ==0)
		{
			break;
		}
		else
		{
			n = n * 10 + 9;
		}
	}
	printf("%d能被%d个9即%d整除\n", prime, i, n);
	return 0;
}

运行结果
在这里插入图片描述
题目86:两个字符串连接程序

/*
*日期:2020年4月27日
*题目:两个字符串连接程序
*输入:
*输出:	
*/
#include <stdio.h>
#include <string.h>

int main()
{
	char str1[30] = {0}, str2[30] = {0};
	char *p = NULL;
	printf("请输入字符串1:");
	gets(str1);
	printf("请输入字符串2:");
	gets(str2);
	printf("连接后的字符串为%s\n", strcat(str1, str2));
	return 0;
}

运行结果
在这里插入图片描述
题目87:回答结果(结构体变量传递)
#include “stdio.h”
struct student
{
int x;
char c;
} a;
main()
{
a.x=3;
a.c=‘a’;
f(a);
printf("%d,%c",a.x,a.c);
}
f(struct student b)
{
b.x=20;
b.c=‘y’;
}

#include "stdio.h"
struct student
{ 
	int x;
	char c;
} a;

void f(struct student b)	//结构体变量a做实参
{
	b.x=20;
	b.c='y';	//值不能返回主函数
}

int main()
{
	a.x=3;
	a.c='a';
	f(a);
	printf("%d,%c\n",a.x,a.c);
	return 0;
}

运行结果
在这里插入图片描述
题目88:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*

#include <stdio.h>

//打印*
void print(int n)
{
	int i = 0;
	for(i = 0; i < n; i++)
	{
		printf("*");
	}
	printf("\n");
}

int main()
{
	int i = 0, n = 0;
	printf("读取7个数\n");
	for(i = 0; i < 7; i++)
	{
		printf("请输入一个数(1-50):");
		scanf("%d", &n);
		print(n);
	}
	return 0;
}

运行结果
在这里插入图片描述
题目89:某个公司采用公用电话传递数据,数据是四位的整数,
在传递过程中是加密的,加密规则如下:
   每位数字都加上5,然后用和除以10的余数代替该数字,
再将第一位和第四位交换,第二位和第三位交换。

#include <stdio.h>

int main()
{
	int n = 0, qian = 0, bai = 0, shi = 0, ge = 0, t = 0;
	printf("请输入需要加密的数字:");
	scanf("%d", &n);
	qian = n / 1000;
	bai = n / 100 % 10;
	shi = n / 10 % 10;
	ge = n % 10;
	qian = (qian + 5) % 10;
	bai = (bai + 5) % 10;
	shi = (shi + 5) % 10;
	ge = (ge + 5) % 10;
	t = qian; qian = ge; ge = t;
	t = bai; bai = shi; shi = t;
	printf("加密后的数字是%d%d%d%d\n", qian, bai, shi, ge);
	return 0;
}

运行结果
在这里插入图片描述
题目90:专升本一题,读结果。

#include “stdio.h”
#define M 5
main()
{
int a[M]={1,2,3,4,5};
int i,j,t;
i=0;j=M-1;
while(i
{
t=*(a+i);
(a+i)=(a+j);
(a+j)=t;
i++;j–;
}
for(i=0;i printf("%d",
(a+i));
}

#include <stdio.h>
#include <stdlib.h>
#define M 5
int main()
{
	int a[M] = {1, 2, 3, 4, 5};
	int i = 0, j = M - 1, t;
	while(i < j)
	{
		t = *(a + i);	//正数第i个数和倒数第i个数交换
		*(a + i) = *(a + j);
		*(a + j) = t;
		i++;
		j--;
	}
	for(i = 0; i < M; i++)
	{
		printf("%d\n", *(a + i));
	}
	return 0;
}

运行结果
在这里插入图片描述
题目91:时间函数举例1

#include <stdio.h>
#include <time.h>

int main()
{
	time_t rawtime;	//相当于long int rawtime,而在64位系统int和long int都是4字节
	struct tm *timeinfo;	//指向tm结构的指针timeinfo,tm是系统预设的结构体
	time(&rawtime);	//time函数原型,time_t time(time_t *t);返回值是1970-1-1至今的秒数,并将t指向其
	timeinfo = localtime(&rawtime);	//localtime函数将偏移的秒数转换,返回本地时间(tm结构)
	printf("当前本地时间为%s", asctime(timeinfo));	//asctime函数将tm结构转换为字符串
	return 0;
}

运行结果
在这里插入图片描述
题目92:时间函数举例2
//difftime函数原型double difftime(time_t time2,time_t time1);比较两个时刻的时间差
//因为time返回值是long型,所以时间差是整数,返回值用double型可能是因为有可能超过long型表示范围

#include <stdio.h>
#include <time.h>

int main()
{
	time_t start, end;
	int i;
	start = time(NULL);	//time(NULL)则返回当前时间
	for(i = 0; i < 30000; i++)
	{
		printf("%d\n", i);
	}
	end = time(NULL);
	printf("时间间隔为%6.1f\n",difftime(end,start));
	return 0;
}

运行结果
在这里插入图片描述
题目93:时间函数举例3

#include <stdio.h>
#include <time.h>

int main()
{
	int i;
	clock_t start, end;
	double diff;
	start = clock();
	for(i = 1; i <= 10000000; i++)	//进行一千万次空循环
	{
		;
	}
	end = clock();	//clock函数的返回值为long型,单元为计时单元
	//计算进行一千万次空循环需要的时间,CLOCKS_PER_SEC宏定义,表示1秒钟有多少个计时单元
	diff = (double)(end - start)/CLOCKS_PER_SEC;
	//VC++6.0中CLOCKS_PER_SEC = 1000,因此可以理解为clock()返回值单位是毫秒
	printf("%f秒\n", diff);
	return 0;
}

运行结果
在这里插入图片描述
题目94:猜数游戏

#include <stdio.h>

int main()
{
	int number = 0, guess = 0;
	printf("请输入一个数字:");
	scanf("%d", &number);
	while(guess != number)
	{
		printf("请猜一个数字:");
		scanf("%d", &guess);
		if(guess < number)
		{
			printf("猜小了\n");
		}
		else if(guess > number)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("猜对了\n");
		}
	}
	return 0;
}

运行结果
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	int m, n = 0, count = 1;
	srand(time(NULL));	//利用系统时间作为种子产生一个随机数序列
	m = (rand()%100) + 1;	//随机产生一个1-100的数
	printf("猜数游戏1-100\n");
	while(n != m)
	{
		printf("请猜一个数:");
		scanf("%d", &n);
		if(n == m)
		{
			printf("你猜中了!用了%d次\n", count);
		}
		else if(n < m)
		{
			printf("太小了\n");
			count++;
		}
		else if(n > m)
		{
			printf("太大了\n");
			count++;
		}
	}
	return 0;
}

运行结果
在这里插入图片描述
题目95:实时显示当前时间

#include <stdio.h>
#include <time.h>
#include <windows.h>

int main()
{
	time_t t;
	struct tm *timeinfo;
	while(1)
	{
		t = time(NULL);
		timeinfo = localtime(&t);
		printf("当前时间为:%s", asctime(timeinfo));
		Sleep(990);
		system("cls");
	}
	return 0;
}

运行结果
在这里插入图片描述
题目96:计算字符串中子串出现的次数

#include <stdio.h>
#include <string.h>

int main()
{
	char a[50], b[20];
	int i, j, k, count = 0;
	printf("请输入一串字符:");
	gets(a);
	printf("请输入查找的字符串:");
	gets(b);
	for(i = 0; i < strlen(a); i++)	//strlen函数求字符串长度
	{
		k = i;	//从a字符串中第i个字符开始与b比较
		//对比字符串a与b中的字符,首个字符相同后对比后续字符
		for(j = 0; j < strlen(b)&&(a[k]==b[j]); j++)
		{
			k++;
		}
		if(j == strlen(b))	//j==strlen(b)表明b中字符全部对比完且相同
		{
			count++;
		}
	}
	printf("%s出现了%d次\n", b, count);
	return 0;
}

运行结果
在这里插入图片描述
题目97:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。

#include <stdio.h>
#include <stdlib.h>
int main()
{ 
	FILE *fp = NULL;	//定义指向文件的指针
	char filename[20];	//存放文件名
	char ch;
	printf("将文件保存到:");
	gets(filename);
	if((fp = fopen(filename, "w")) == NULL)	//以写入方式打开文件,使fp指向该文件
	{
		printf("无法打开此文件");
		exit(0);
	}
	printf("输入需要存储的字符,以#结束\n");
	while((ch = getchar())!='#')
	{
		fputc(ch, fp);	//写入字符到文件
	}
	fclose(fp);
	fp = NULL;
	return 0;
} 

运行结果
在这里插入图片描述
在这里插入图片描述
题目98:从键盘输入一个字符串,将小写字母全部转换成大写字母,
然后输出到一个磁盘文件“test”中保存。输入的字符串以!结束。

#include <stdio.h>
#include <stdlib.h>
int main()
{ 
	char str[50];
	FILE *fp;
	int i = 0;
	if((fp = fopen("test.txt", "w")) == NULL)
	{
		printf("无法打开文件");
		exit(0);
	}
	printf("输入一串字符:");
	gets(str);
	while(str[i] != '!')
	{
		if(str[i] >= 'a' && str[i] <= 'z')
		{
			str[i] = str[i] - 32;
		}
		fputc(str[i], fp);
		i++;
	}
	fclose(fp);
	fp = NULL;
	return 0;
} 

题目99:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并
(按字母顺序排列), 输出到一个新文件C中。

#include <stdio.h>
#include <stdlib.h>
int main()
{ 
	char A[30], B[30], C[60];
	char ch, temp;
	int i, j, numA, numB, numC;
	FILE *fpA, *fpB, *fpC;
	fpA = fopen("A.txt", "r");
	printf("文件A中字母为:");
	for(i = 0; (ch = fgetc(fpA)) != EOF; i++)	//提取文件A中的字符
	{
		A[i] = ch;
		printf("%c", A[i]);
	}
	numA = i;	//numA记录A中字符数,第(0-i)个
	fclose(fpA);
	fpA = NULL;
	printf("\n");

	fpB = fopen("B.txt", "r");
	printf("文件B中字母为:");
	for(i = 0; (ch = fgetc(fpB)) != EOF; i++)	//提取文件B中的字符
	{
		B[i] = ch;
		printf("%c", B[i]);
	}
	numB = i;	//numA记录B中字符数,第(0-i)个
	fclose(fpB);
	fpA = NULL;
	printf("\n");

	for(i = 0; i < numA; i++)
	{
		C[i] = A[i];
	}
	for(j = 0; j < numB; j++)
	{
		C[i] = B[j];
		i++;
	}
	numC = i;	//numC记录C中字符数
	for(i = 0; i < numC; i++)	//排序
	{
		for(j = i+1; j< numC; j++)
		{
			if(C[i] > C[j])
			{
				temp = C[i];
				C[i] = C[j];
				C[j] = temp;
			}
		}
	}
	if((fpC = fopen("C.txt", "w"))== NULL)
	{
		printf("无法打开文件C");
		exit(0);
	}
	for(i = 0; i <  numC; i++)
	{
		fputc(C[i], fpC);
	}
	fclose(fpC);
	fpC = NULL;

	return 0;
} 

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

#include <stdio.h>
#include <stdlib.h>
struct Student
{
	int num;
	char name[10];
	int score[3];
	double aver;
};

int main()
{ 
	int i;
	FILE *fp = NULL;
	struct Student stu[5];
	for(i = 0; i < 5; i++)
	{
		printf("输入第%d个学生的学号 姓名 三门课成绩:", i+1);
		scanf("%d %s %d %d %d", &stu[i].num, &stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
		stu[i].aver = (double)(stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3;
	}
	if((fp = fopen("stud", "w")) == NULL)
	{
		printf("无法打开文件stud");
		exit(0);
	}
	for(i = 0; i < 5; i++)
	{
		fprintf(fp, "%d %s %d %d %d %.1f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].aver);
	}
	fclose(fp);
	fp = NULL;
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值