C语言里的“%5.2f”是什么意思?

  • %f是输出float(单精度浮点型)型变量,%m.nf中m代表输出数长,n代表小数点后的数长,即保留n位小数。
  • 如果小数点后的数大于n,例如12.4567按照%5.2f输出得12.46(四舍五入),如果总位数大于m(小数只到两位),按照实际位数输出,例如111.4567按%5.2f输出,111.46(总数长6)。(注意小数点也算一位数字,占据一个数长)
  • 如果实际位数小于m,则要补齐空格,例如1.23按照%5.2f输出,_1.23(_表示空格)(四位数长加空格一共五位)再来讨论小数小于n的情况,小数小于n空格补齐,例如23.1按照%5.2f输出,得到23.1_(_表示空格)。

综上,m多了不限制小数点前,n多了四舍五入,mn少了空格补足。

C语言中的getchar()与putchar()

  • getchar()用于读取用户从键盘输入的单个字符,它有一个整型的返回值,当发生读取错误的时候,返回整型值-1,当读取正确的时候,它会返回用户从键盘输的第一个字符的ASCII码, 当程 序调用getchar时.运行程序时 就等着用户从按 键输入, 用户输入的字符被 存 放在键盘缓冲区中.直到用户按回车为 止(回 车字符也放在缓冲区 中),当用户键入回车之后,getchar才开始从输入流中每次读入一个字符,输入的字符不只一个的时候,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完之后,才等待用户按键,getchar函数输入数字也按字符处理,单个的getchar函数输入多于一个字符时,只接收第一个字符。
  • putchar()向终端输出一个字符。其格式为putchar(ch),其中ch可以是被单引号(英文状态下)引起来的一个字符,可以是介于0127之间的一个十进制整型数(包含0和127)(超过127就不是ASCII码了),也可以是事先用char定义好的一个字符型变量 当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符 ), 当c为一个介于0127(包括0及127)之间的十进制整型数时,它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符; 当c为一个事先用char定义好的字符型变量时,输出该变量所指向的字符。 当整型变量ch超出8位变量的范围时,ch则会变强制转化为8位变量(即取其低八位传过去输出),当为负数的时候,由于计算机存储负数是用补码表示的,所以传过去的二进制补码也被当做正数处理,也是取其低八位。
    getchar()和putchar()函数包含在头文件stdio.h中,使用时需包含此头文件

用冒泡法和选择法对10个整数排序(C语言 数组)

1.区别:

两者最大的区别在于算法本身。

冒泡法是相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可以作相对位置的调整。可以进行升序或降序排序。

选择法是每趟选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。
2.冒泡法:

算法分析: 如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。

代码如下(对10个整数进行升序排序):

#include <stdio.h>
int main()
{
int i,j,t,a[10]={5,4,8,3,6,9,7,222,64,88};//排序
for(i=1;i<10;i++)        //外循环控制排序趟数,n个数排n-1趟
{
    for(j=0;j<10-1;j++)      //内循环每趟比较的次数,第j趟比较n-i次
    {
        if(a[j]>a[j+1])     //相邻元素比较,逆序则
交换
        {
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
    }
}

printf("排序后的结果是:\n");
for(i=0;i<10;i++)
{
    printf("%d  ",a[i]);
}
printf("\n");

return 0;

3.选择法

算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。

代码如下(对10个整数进行升序排序):

#include<stdio.h>
int main()
{
int i,j,min,t,a[10]={2,4,8,3,6,9,7,222,64,88};printf("排序前的序列为:\n");
for(i=0;i<10;i++)            //输出排序前的序列
{
printf("%5d",a[i]);
}
printf("\n");for(i=0;i<9;i++)
{
min=i;                    //把每次循环的第一个数作为最小值
for(j=i+1;j<10;j++)
{
if(a[min]>a[j])
min=j;            //交换
}
if(min!=i)                //说明第一个数不是最小数,所以将a[i+1]~a[10]中最小值与a[i]对换
{
t=a[min];
a[min]=a[i];
a[i]=t;
}
}
printf("排序后的序列为:\n");
for(i=0;i<10;i++)            //输出排序后的序列
printf("%5d",a[i]);
printf("\n");return 0;
}
最后修改:2023 年 10 月 02 日
如果觉得我的文章对你有用,请随意赞赏