目录
每日更新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;//创建变量xscanf("%f", &x);//输入浮点数printf("%f\n", x);return 0;
}
我们会发现输出的浮点数,小数点后自然保留了六位,那么我们如果想仅输出三位的话,可以在f前加上 .3 达到限制位数的作用
//省略了头文件等相关信息,读者自行添加
int main()
{float x;//创建变量xscanf("%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;//声明变量,输入123scanf("%d", &a);printf("%d", a % 10);return 0;
}
1.8.2 求十位数
输入一个数字123,求他的十位数字2并输出
考察点:算是操作符
答案如下:
//省略了头文件等相关信息,读者自行添加
int main()
{int a;//声明变量,输入123scanf("%d", &a);a = a / 10;//去除个位上数字printf("%d", a % 10);return 0;
}
以上两个例子,我们可以知道一个随机的整数,如何输出他们各自数位上的数字,那我们应该如何将他们每个数位上的数字依次打印呢?
输入123,输出3 2 1
考察点:算术操作符和循环语句的总和运用
答案如下:
//省略了头文件等相关信息,读者自行添加
int main()
{int a;//声明变量,输入123scanf("%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,bwhile(scanf("%d%d",&a,&b) != EOF)
{if(a + b )
printf("%d",a + b);
else
break;
}
return 0;
}
_____________________________________________________________________________
持续更新中.........................................................................................................................................