C语言————练习题册(答案版)

发布于:2025-07-27 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

每日更新5-10题,感兴趣可以订阅

一.理解函数、操作符、占位符

1.1 欢迎来到C语言的世界

 1.2 输入和输出

1.3 浮点数的打印

1.4 字符串的打印

1.14 I am iron man

1.5 求和运算

1.6 计算比例

1.7 求商求余

1.8 不同数位上的数字

1.8.1 求个位数

1.8.2 求十位数

1.9 地板函数的向下取整

1.10 两点之间的距离

二.认识训练循环语句

2.1数组内多组数据的计算求和

2.2 多组数据的输入,理解while(scanf()!=EOF)

2.2.1 scanf函数详解



每日更新5-10题,感兴趣可以订阅

一.理解函数、操作符、占位符

1.1 欢迎来到C语言的世界

请在编译器上编写一段程序,运行后输出“Welcome to the world of C language” ,要求光标换行。

考察点:printf 函数和程序启动的固定代码 int main()

答案如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
	printf("Welcome to the world of C language\n");
	return 0;
}

除了printf函数外,还有一个函数puts也同样能实现这个功能,下面表格会对比他们的使用差异

以下为puts函数的使用方式:

//省略了头文件等相关信息,读者自行添加
int main()
{
	puts("Welcome to the world of C language");
	return 0;
}

 1.2 输入和输出

我们懂得如何让程序输出一段字符信息,也应该学会如何让计算机程序了解我们输入的相关信息。

编写一段程序,在键盘上输入20后,程序会将20打印出来。

考察点:scanf 和 printf函数的联合使用

 答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int n;//此处为变量的声明,未初始化
	scanf("%d", &n);//取地址符号不能忘记
	printf("%d\n", n);
	return 0;
}

scanf 函数使用时容易出现的bug问题以及解决方法可以见如下文章

C语言————BUG的常见情况(持续更新)-CSDN博客

1.3 浮点数的打印

请输入一个浮点数x,数值为3.156

考察点:浮点数类型   占位符号%f   限定占位符的表达形式

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	float x;//创建变量x
	scanf("%f", &x);//输入浮点数
	printf("%f\n", x);
	return 0;
}

我们会发现输出的浮点数,小数点后自然保留了六位,那么我们如果想仅输出三位的话,可以在f前加上   .3   达到限制位数的作用

//省略了头文件等相关信息,读者自行添加
int main()
{
	float x;//创建变量x
	scanf("%f", &x);//输入浮点数
	printf("%.3f\n", x);
	return 0;
}

1.4 字符串的打印

输入一行字符串s,通过程序代码将他打印出来,输入内容为 CrazyThursday

考察点:字符串的占位符  

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	char str[100];
	scanf("%s", str);
	printf("%s", str);
	return 0;
}

注:使用scanf("%s",str)来读取字符串时,只会读取字符串直到遇到第一个空白字符(空格、制表符或换行符)。

1.14 I am iron man

编译代码,输入I am iron man,输出I am iron man。

考察点:循环语句   字符型的读取  

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	char x;
	for (int i = 0; i < 14; i++)//让编辑器逐步读取每个字符
	{
		scanf("%c", &x);
		printf("%c", x);//逐个打印
	}
	printf("\n");
	return 0;
}

1.5 求和运算

输入两个整数10、20,用代码打印出他们的和

考察点:算术操作符  变量的声明  scanf函数

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int a, b;//声明多个变量时,中间要用,隔开
	scanf("%d%d", &a, &b);//输入多个值时,不建议占位符之间加入空格
	printf("%d", a + b);
	return 0;
}

1.6 计算比例

在一个班级中,男生56人,女士37人,试计算女生的比例,输出形式为百分比

考察点:数据类型的选用  算术操作符  百分数的转换  %的打印

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int a;
	float b;//代表男生和女生的数量
	printf("男生的数量是 ");  scanf("%d", &a);
	printf("女生的数量是 ");  scanf("%f", &b);
	float c;//用以计算女生所占的比例
	c = b / (a + b);
	//双目操作符/两边的数如果都是整型结果只保留整型部分
	//只有一方为浮点数,才能输出浮点类型
	printf("女生的比例为%f%%\n", c * 100);
	return 0;
}

1.7 求商求余

输入两个整数18 和 7,求他们的商和余

考察点:算是操作符 scanf

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int a, b;
	scanf("%d%d", &a, &b);
	printf("商为%d\n", a / b);
	printf("余为%d\n", a % b);
	return 0;
}

1.8 不同数位上的数字

1.8.1 求个位数

输入一个数字123,求他的个位数字3并输出

考察点:算是操作符 

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int a;//声明变量,输入123
	scanf("%d", &a);
	printf("%d", a % 10);
	return 0;
}

1.8.2 求十位数

输入一个数字123,求他的十位数字2并输出

考察点:算是操作符 

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int a;//声明变量,输入123
	scanf("%d", &a);
	a = a / 10;//去除个位上数字
	printf("%d", a % 10);
	return 0;
}

 以上两个例子,我们可以知道一个随机的整数,如何输出他们各自数位上的数字,那我们应该如何将他们每个数位上的数字依次打印呢?

输入123,输出3  2  1

考察点:算术操作符和循环语句的总和运用

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int a;//声明变量,输入123
	scanf("%d", &a);
	while (a > 0)//while循环能够让a逐渐逼近这个条件
	{
		printf("%d ", a % 10);
		a = a / 10;//更新“个位”,把每一个数位的数字换到个位上
	}
	return 0;
}

1.9 地板函数的向下取整

输入一个整数n如23,求他们开根号的地板函数值

地板函数:对于任意实数x,地板函数[x]表示不大于x的最大整数。简单来说,就是把实数x向下取整到最接近的整数。

考察点:sqrt函数 数据类型的选择   数据类型的强制转换

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int a;
	scanf("%d", &a);
	printf("%d", (int)sqrt(a));//强制类型转换
	return 0;
}

俗话说,强扭的⽠不甜,我们使⽤强制类型转换都是万不得已的时候使⽤,如果不需要强制类型转化就能实现代码,这样⾃然更好的。

1.10 两点之间的距离

输入两个点的坐标 (x1,y1)   (x2,y2),输出两点之间的距离

考察点:sqrt函数  pow函数 数据类型的辨别

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
	int x1, y1;//声明坐标,输入坐标
	scanf("%d%d", &x1, &y1);
	int x2,y2;
	scanf("%d%d", &x2, &y2);
	float de;//代表两点之间的距离
	de = sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2));
	printf("%f", de);
	return 0;
}

 注:pow和sqrt返回的数值类型均为浮点型double

二.认识训练循环语句

2.1数组内多组数据的计算求和

给定一个数字3,确认含有3组数据,每组中有2个数字,随后输入这6个数字,分别计算每组的数字之和,并分别输入,示例如下:

输入 2 \n
2 3
4 5
输出 5 \n
9 \n

考察点:二维数组的元素类型  循环语句的初步使用 多组数据的输入

答案如下:

//省略了头文件等相关信息,读者自行添加
int main() {
    int i = 0;
    int j = 0;
    scanf("%d",&i);
   int arr[i][2];
   for(j = 0;j < i;j ++)
   {
    scanf("%d %d",&arr[j][0],&arr[j][1]);
    printf("%d\n",arr[j][0] + arr[j][1]);
   }
    return 0;
}

2.2 多组数据的输入,理解while(scanf()!=EOF)

2.2.1 scanf函数详解

int scanf ( const char * format, ... );这是scanf函数的调用形式以及声明,他的使用需要包含头文件<stdio.h>,他是用来读取我们键盘输入的信息,他的使用语法与我们常用的printf类似,第一个参数都是格式化字符串。

在scanf函数的格式化字符串中,需要包含一定的占位符,而占位符数量的多少,就决定了后续参数的个数,在这里我们需要特别注意,用以替换占位符的参数形式是以地址的样式体现的,我们需要用到一个重要的操作符————&(取地址操作符);因为scanf()传递的不是值,而是一个地址,即将变量i的地址指向用户输入的值。

:如果这里的变量是指针变量(如字符串变量),那就不用加&。

scanf()处理用户输入的原理是,用户的输入会被放入缓存区,等到按下回车键后,按照占位符对缓存区进行解读。

解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符位置。

scanf()在处理数值占位符时,会自动过滤空白字符,包括空格制表符换行符等。

#include <stdio.h>
int main()
{
 int x;
 float y;
 
 // ⽤⼾输⼊ " -13.45e12# 0"
 scanf("%d%f", &x, &y);
 return 0;
}

可以想想上述代码最终输出的x  和  y的值,int决定了x为整型类型,根据上述对scanf()的描述,解读会停留在小数点位置,导致x=-13,随后开始读取浮点数y,解读会从小数点开始(类似.45这样的形式会被默认为0.45),遇到e12后,会识别为科学技术法,那么我们可以知道y = 0.45 * 10^12

我们可以发现,他的结束需要返回int类型,那么这个整型应该如何计算呢?

scanf()返回的整型数值代表他所成功读取的数据个数

如果没有读取任何项,或者匹配失败,则会返回0;

如果在成功读取任何数据之前,发生了读取错误或者遇到读取文件到结尾的情况,则返回常量EOF(-1)。

EOF - end of file 文件结束标志

———————————————————————————————————————————

利用上述知识,我们继续讲解对while嵌套scanf的连续输入。

while(scanf() != EOF),根据里面的判断条件,我们知道只有当scanf在读取中发生错误或者读取到文件 的结尾时,这个循环才会结束,由此我们可以实现连续输入多组数据,处理多组数据的任务。那么接下来我们解决下面的题目:

输入多组两个整数的数据,依次分别计算两个整数之和,当和为0时则停止计算,结束输入。

考察点:while语句和scanf的嵌套使用  break在循环语句里的使用

答案如下:

//省略了头文件等相关信息,读者自行添加
int main()
{
 int a,b;//定义输入变量a,b
 while(scanf("%d%d",&a,&b) != EOF)
{
 if(a + b )
printf("%d",a + b);
else
break;
}
return 0;
}

_____________________________________________________________________________

持续更新中.........................................................................................................................................


网站公告

今日签到

点亮在社区的每一天
去签到