C语言经典例题 小测五道题
小编想说:我是我们学校软件设计和程序协会研发部的一员,我们研发部每星期都会在我们的公众号上分享一些小题目。最近都是出C语言类的,这星期是我选题目。以下就是我这一初学者的拙作,有些题目我稍微改了一点点;提示,解析都是我自己写的,知识科普也是我自己归纳的。如果有哪里写得不好的,敢请大神们指教,谢谢。
- 【结构化程序设计】热热身,编写出九九乘法表,要求成三角形分布,并且结果要右对齐。
小编提示:先定义整数i与j,并能使i与j分别可以从1依次加一加到9,使i与j依次相乘。利用循环语句使i能从1依次加一到9,并在i的循环语句下再次利用循环语句使得j能够从1依次加一到i,输出i*j,并使输出结果后空一格,当i结束一次循环时换行。
#include <stdio.h>
int main(void)
{
for(int i=1;i<=9;i++)//先定义i,一共九行。
{
for(int j=1;j<=i;j++) //每行从1开始逐个乘,最后该乘以的数不得超过此行数。
printf("%d*%d=%2d ",i,j,i*j);//(%2d:按宽度为2输出,右对齐方式输出。)
printf("\n");//每一行输出完换行。
}
return 0;
}
知识普及:
scanf和printf都会有%3.2d之类的数字
scanf和printf的输入输出
scanf的输入可以限制域宽
就是输入字符的宽度,但是不能限制后面的小数位数, 否则程序可能会出错。
然而printf相反,他能限制输出的后面的小数,却不能限制输出的域宽,最多在空的地方加个空格而已
如果是scanf,因为c语言中禁止限制输入的时候的答小数的位数,所以只能限制输入的字符的宽度
scanf(“%3f”,a);
printf(“%2.2f”,a);
For example:如果输入的数是12345
那么,scanf取到的数据是123,后面的位数不起作用的,所以45没了
取到了123之后
再用printf输出的数应该是三位,但是限制的域宽是2位
这样的话,会损坏数据,所以限制不起作用,输出的是123.00
2.【选择控制结构】请设计一个猜数游戏。
(1)每次系统在1-100之间随机产生一个不同的数,等待用户输入猜测的结果。
(2)运用循环,用户每输入一个数,若还没猜对,需要告诉用户系统猜测结果比系统随机数大了还是小了;
(3)最后需要一个变量记录告诉用户已经猜了多少次;
(4)当用户猜中时,游戏结束,退出.
小编提示:先定义用户猜测结果,系统随机数,用户猜测的次数;再想想如何让系统产生随机数?然后运用循环,引导用户的猜测结果离系统随机数越来越近;猜对后输出猜测次数。打完代码后再次检查头部文件是否齐全(一共要用到三个头部文件)。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int i,j,k=0;
srand(time(NULL));//使用当前时间进行随机数发生器的初始化。
i=rand()%100+1;//产生一个随机的数(1~100间)
do
{
printf("请输入你要猜的数(1-100):");
scanf("%d",&j);
if(i>j)
printf("你猜错了!猜小了!\n");
if(i<j)
printf("你猜错了!猜大了!\n");
k++;
}while(i!=j);
printf("恭喜你!猜对了!一共猜了%d次\n",k);
}
知识普及:
stdio.h是standard input&output标准输入输出头文件
定位在标准的输入输出工具函数。
主要封装了getchar()、putchar()、scanf()、printf()、gets()、puts()、sprintf()等函数。
stdlib.h是standard library标准库头文件,定位在通用工具函数。
主要封装了malloc()、calloc()、realloc()、free()、system()、atoi()、
atol()、rand()、srand()、exit()等函数。
头文件<time.h>中说明了一些用于处理日期和时间的类型和函数。
srand函数是随机数发生器的初始化函数。
srand和rand()配合使用产生伪随机数序列。
3.【函数调用,循环】从键盘输入一组数据,运用递归得方法求平均数并输出。
小编提示:
(1) 可以先定义平均函数avg(int n)接受传递的值;
(2) 打主函数的代码:定义n,请用户输入将要输入的数据的个数;定义用于计算表达式的结果a,传递,输出结果;
(3) 再回头打平均函数avg(int n)的代码:定义sum,运用循环,请用户逐个输入待测数据;定义avg=?最后返回avg。
#include<stdio.h>
int avg(int n)
{
int sum=0;//定义这组数的总和。
int i=n;//用i进行循环。
int data;//定义输入的数据
while(i>0)
{
scanf("%d",&data);
sum+=data;//将输入的数据逐个相加。
i--;//输入个数不断减少。
}
int avg=sum/n;
return avg;//返回平均数。
}
int main(void)
{
int n;
printf("要输入的个数:\n");
scanf("%d",&n);
int a=0;//a用于计算表达式结果
a=avg(n);//传递n。
printf("%d个数得平均值是:%d\n",n,a);
return 0;
}
4.【字符串】要求编程求出一句话中到底有多少单词。首先在屏幕上输入一句话,每个单词之间用一个空格隔开,要求第一个字符和最后一个字符都不能为空格;然后运用for循环统计出这句话的单词数量,并把结果输出到屏幕上。
小编提示:
(1)首先使用gets()函数将输入的字符串保存在str字符数组中;
(2)然后使用if语句判断用户输入的第一个字符串是否为结束符,做相应处理;
(3)采用for循环遍历字符串=数组中的每个字符;
(4)最后把总单词数输出到屏幕上。
#include <stdio.h>
int main(void)
{
printf("请输入一段文字(不超过50个):\n");
char str[50];
int i,count=1;
char blank;//定义空格
gets(str);
if(str[0]=='\0')//判断第一个字符是否是空格
printf("没有输入文字\n");
else
{
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ')//判断是否有空格
{
count++;//有空格说明又多了一个单词
}
}
printf("本段文字有%d个单词\n",count);//
}
return 0;
}
5.【字符串,指针】编写一函数,求一个字符串的长度,要求用字符串指针实现。在主函数中输入字符串,调用该函数输出其长度。
小编提示:
(1) 先定义统计字符串的函数
(2) 主函数:定义字符串数组,用户输入,传递;
(3) 编写统计符串的函数(运用循环统计)。
#include <stdio.h>
void Mystrlen(char *pa);
int main ()
{
char str[50];//定义字符串数组
printf("请输入一段文字:(包括空格不超过五十个)\n");
gets(str);
Mystrlen(str);
return 0;
}
void Mystrlen(char *pa)//传递 字符串指针
{
int count=0;
while(*pa!='\0')
{
pa++;
count++;
}
printf("实际字符个数为:%d\n",count);
}