// 这是小玖的第一篇博客,虽然怎么也没有想到过会有一天用这种网上写作的方式来记录小玖的C语言学习历程(也不能说是被迫,只能说,这种方式很新颖也很有意义),虽然刚刚开始学太过艰难,但小玖会尽己所能学好C语言,篇幅有限那就进入正题.
(小玖会在做考核题的同时记录下学到的东西,目前还不知道怎么写博客所以先用这种形式)
//第一题
#include<stdio.h>
int main()
{
int nums[5]={1,5,6,2,4}; //直接给定一组数
printf("数组nums为{1,5,6,2,4}"); //打印出数组
int i,j,k; //定义变量
for(i=0;i<5;i++){ //i为第几个数
j=nums[0]; //初始化变量j
if(nums[i]>k){ //将i代入与k比大小
k=nums[i]; //将最大值赋值给k
}
}
printf("最大的数为:%d",k); //输出最大值k
}
数组(一维数组)
1.定义: 类型名 数组名 [常量表达式]
例如:int a[5] float b[20] char ch[5+3]等
常量表达式即常数,值必须大于等于1,表示数组的长度,即数组中包含的元素个数.
该题中int num[5]声明了一个整型数组,其中第一个元素为num[0],第二个元素为num[1],以此类推.数组元素在内存中按顺序连续存放,方括号("[ ]")中的数字叫做下标或索引,表明元素在数组中的位置,且下标必须是整型常量或整型表达式,从0开始.
注意:下标用于引用数据元素,与数组定义时的常量表达式含义不同,定义中的常量表达式用于声明数组长度,长度一旦声明便不可再添加新元素.
2.数组的引用
数组元素只能逐个访问,不能一次性整体引用
例如:
int a[10],valuc=20; //整型数组a,含10个元素
a[0]=1; //将a的第1个元素赋值为1
a[1]=value; //将a的第2个元素赋值为20
a[2*3]=a[0]+a[1]; //将a的第7个元素赋值为a的前两个元素之和
scanf("%d”,&a[4]); //将一个值读入a的第5个元素
注意:下标值从0开始,如果超过或小于数组长度,都会越界,导致数组溢出,发生不可预测的情况.
C语言不允许将一个数组整体赋值给另一个数组,只能对数组元素逐个赋值
3.数组的初始化
int num[5]={1,5,6,2,4} "="后面的{ }为数组元素赋予初值,这称为数组的初始化
(1) 初值列表中值的数目不能大于数组长度
(2) 数组初始化时,可以只对数组的部分元素赋初值.当初值列表中的元素个数小于数组长度时,只对数组前面的部分元素赋值,剩下未指定初值的元素自动赋值为0
例如:int num[5]={1,2}时,剩下三个元素自动赋值为0
(3) 只能逐个为数组元素赋初值,不能对数组整体赋值,也不能用一个数组初始化另一个数组.
例如:要将num[5]的全部元素赋值为1,必须写成 : int num[5]={1,1,1,1,1} ,不能写成int num[5]=1
(4) 若对数组的全部元素赋初值,可以不指定数组长度,编译器会根据元素个数确定数组长度.
例如:int a[]={1,2,4}也是可以的
--------------------------------------------------小玖的分割线-------------------------------------------------------------
//第二题
#include <stdio.h>
int main(void)
{
int a,b; //定义变量a,b
printf("请输入两个数:");
scanf("%d,%d",&a,&b); //输入两个数
printf("a=%d b=%d\n",a,b); //让a等于第一个数,b等于第二个数
printf("a=%d b=%d\n",b,a); //将b的值赋值给a,a的值赋值给b
return 0;
}
基本输入与输出
1.格式输入与输出
1) 格式输出函数printf()
printf()函数是格式输出函数,它的作用是按规定格式向标准输出设备输出信息,它的函数原型在头文件"stdio.h"中.
一般形式为:printf("<格式控制>",<输出列表>) 例如:printf("%d\n",a,b);
括弧内包括两部分:
(1)"格式控制"是用双引号括起来的字符串,也叫"格式控制字符串".它包括三种信息:
①格式说明:由"%"和格式字符组成,用于确定输出内容格式,如%d,%c等,它总是由"%"字符开始.
②普通字符:这些字符是按原样输出的,主要用于输出提示信息,如printf()函数中双引号内的所有除特殊字符以外的符号.
③ 转义字符:指明特定的操作,如"\n"表示换行,"\r"表示回车.
(2)"输出列表"列出要输出的数据或表达式,它可以是零个或多个,每个输出项之间用逗号分隔,输出的数据可以是任何类型,输出数据的个数必须与前面格式化字符串说明的输出个数一致,顺序也要一一对应.
2)printf()函数中的格式说明
一般形式为: %[标志][输出宽度][.精度][长度][类型] []中的项为可选项
(1)标志
标志格式字符 标志格式含义
- 结果左对齐,右边填空格(默认为右对齐输出)
+ 正数输出加号(+),负数输出减号(-)
# 在八进制和十六进制数前显示前缀0和0x,且只在八进制和十六进制格式输出有效
空格 正数输出空格代替加号(+),负数输出减号(-)
(2)输出宽度.用十进制正整数来表示输出值所占位置个数.若实际位数多于设定的宽度,则按实际位数输出,若少于,则补以空格.系统默认为右对齐
printf("%5d%d\n",4,5);
printf("%-5d%d\n",+4,5);
printf("%-5d%d\n",-4, 5);
printf("%+5d%din",+4, 5);
printf("%+5d%d n", 4, 5);
输出结果为:
45
4 5
-4 5
+45
+45
(3)精度
精度格式符以小数点"."开头,后跟十进制整数来表示.
如果输出"整数",则表示至少要输出的数字个数,不足补数字0,多则原样输出;
如果输出"实数",则表示小数点后至多输出的数字个数,不足补0,多则作舍入处理;
如果输出"字符串",则表示输出的字符个数,不足补空格,多则截去超过的部分.
例如:
#include"stdio.h"
main()
{
printf("%.9d\n", 1234);
printf("%9.2fn",1.23456);
printf("%9.6f\n",1.23456);
printf("%5.6fn",1.23456);
printf("%7.5s\n", "school");
printf("%7.2s'n", "school");
}
输出结果为:
000001234
1.23
1.234560
1.234560
school
sc
(4)长度
(5)类型
格式字符 格式字符含义
d(或i) 以十进制形式输出带符号整数(正数不输出正号(+))
o 以八进制形式输出无符号整数(不输出前缀0)
x(或X) 以十六进制形式输出无符号整数(不输出前缀0x)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数,隐含输出6位小数
e(或E) 以指数形式输出单、双精度实数,尾数部分的小数位数为6位
g(或G) 以%f或%e 中较短的输出宽度输出单、双精度实数
C 输出单个字符
S 输出字符串
% 输出百分号(%)
3)格式输入scanf()
一般表现形式为:scanf("<格式控制>",<地址表列>) 地址表列表示为:&变量
4)使用要点
(1)格式符的个数必须与输入项的个数相等,数据类型必须从左至右一一对应.
(2)可以指定输入数据的域宽,系统会自动按此域宽截取所读入的数据
如:scanf("%3d,%3d",&a,&b); 当输入123456时,系统自动将123赋值给a,将456赋值给b
(3)输入实型数据时,不能规定小数点后的位数
如:scanf("%6.2f",&a);是错误的,可以改成scanf("%6f",&a);
(4)在使用%c格式符时,输入的数据之间不需要分隔符标志,空格或回车符都将作为有效字符输入(也就是说会把空格赋值给变量)
(5)如果格式控制字符串中除了格式说明,还包含其他字符,则输入数据时,这些普通字符原样输入
如:scanf("%d,%d",&a,&b); 就会输入12,34 scanf("%d,%d\n",&a,&b);就会输入12,34\n
(6)格式说明"%*"表示跳过对应的输入数据不予读入
如:scanf("%2d%*d%2d",&a,&b);输入12 34 56,会把12赋值给a,直接跳过34,把56赋值给b
2.字符输入与输出函数
1)字符输入函数getchar()
2)字符输出函数putchar()
---------------------------------------------小玖的分割线------------------------------------------------------------
#include <stdio.h>
int main()
{
int answer;
printf("请输入数字:");
scanf("%d",&answer);
if(answer==1){
printf("TURE\n");
}
else{
printf("FALSE\n");
}
return 0;
}
if语句
if语句有三种格式:单分支if语句,双分支if语句和多分支if语句
1.单分支if语句
基本格式为: if(表达式)语句;
(1)"表达式"一般为关系表达式或逻辑表达式,也可以是其他表达式,甚至可以是一个变量.
例如:if(a=8)语句; if(b)语句 等都是允许的
表达式的值为非0即为真,则执行其后的语句,否则不执行该语句.
2.双分支if语句
基本格式为:
if(表达式)语句块1;
else 语句块2
表达式为真的话执行语句块1,否则执行语句块2
3.多分支if语句
基本格式为:
if(表达式1) 语句块1;
else if(表达式2) 语句块2;
....
else if (表达式m) 语句块n;
else 语句块n+1;
4.if语句的嵌套
当嵌套的语句为if-else形式,将会出现多个if和else.C语言规定,else总是与它前面最近的一个没有配对的if配对.也可以使用加{}的方式进行配对
5.条件运算符和条件表达式
1)条件运算符
条件运算符由"?"和":"组合而成,是三目运算符,要求有3个操作对象,并且都是表达式.
2)条件表达式
一般形式为:
表达式1?表达式2:表达式3
求值规则为:计算表达式1的值,若为真,则以表达式2的值作为答案,否则以表达式3的值作为答案
(1)优先级.条件运算符的运算优先级低于关系运算符和算术运算符,高于赋值符.
(2)结合性.条件运算符的结合方式为自右往左.
(3)表达式1通常为关系或逻辑表达式,表达式2,3的类型可以是数字表达式,赋值表达式,函数表达式或条件表达式
--------------------------------------------------小玖的分割线---------------------------------------------------
#include <stdio.h>
int main()
{
int time;
int timeh;
int timem;
printf("请输入分钟数:");
scanf("%d", &time);
timeh = time / 60; //除以60取商,为小时部分
timem = time % 60; //除60取余数,为分钟部分
printf("转换后的时间为:%d 小时,%d 分钟\n", timeh, timem);
return 0;
}
除法运算符(/)
若两个整数或字符相除,结果为整型;当不能整除时,只保留结果的整数部分,小数部分全部舍去,而不是四舍五入.但当除数或被除数中有一个是浮点数,则进行浮点数除法,结果也为浮点数.
求余运算符(%)
求余运算符也称求模运算符,是取整数除法产生的余数.因为要求参与运算的数据必须为整数,所以"%"不能用于float和double类型数据的运算,且余数的符号与被除数的符号相同.
---------------------------------------------------小玖的分割线-----------------------------------------------------
#include <stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++) //外层循环,显示一行内容
{
for(j=1;j<=i;j++) //内层循环,显示两个数的乘法
{
printf("%d×%d=%d\t",j,i,i*j); //要写\t不然会黏在一起
}
printf("\n");
}
return 0;
}
for语句
1.for语句的一般形式:
for(表达式1;表达式2;表达式3) 循环体语句;
功能:先执行表达式1语句,然后判断表达式2的值是否为真(非0),如果为真,则执行循环体语句,接着执行表达式3,之后再判断表达式2的值.重复此操作直到表达式2的值为0终止循环,然后跳到循环体之后的语句继续执行.
表达式1一般是对循环控制变量进行初始化的语句(也可以是其他合法的C语言语句);
表达式2是循环继续条件语句;
表达式3通常是改变循环控制变量值的语句;
(表达式语句只能有三个,但每个分号前可以增加多个表达式,用逗号隔开,但分号不能省略)
----------------------------------------------小玖的分割线--------------------------------------------------
考核题就到这里结束啦
还有选做题但是小玖没写出来也没时间再写了,第一次写感觉写了好多赘余的话,洋洋洒洒居然写了六千多个字,那就话不多说,我们下期考核题再见啦~