编程基础概念
计算机中用来判断两个数的关系的符号,即关系运算符,一共有如下6个:
== 相等
高于
< 低于
= 不低于
<= 不高于
!= 不是
&& 以及
|| 或则
!不是非,和 << 运算符用于对二进制位执行右移或左移操作,
运算符会使用零填充高位;
运算符则使用符号位填充高位。
不支持三个小于号运算符<<<。
2.
float a = 1.1;
char c = 'x';
在为浮点型变量设定初始值时必须包含小数点;而对字符型变量赋初值时需用单引号括起(' '),请注意这里的单引号不是双引号。
3.注释
单一的前斜杠注释仅能延伸至当前行末
双斜杠/**/可包围一段注释内容
作用如下:
1)为他人解读代码提供帮助;
2)当前时刻可能未使用该代码时可使计算机暂停执行。
- 如果a大于0的话,则会执行printf("yes");;
正确的做法是应在printf("yes");之前留出4个空格或者插入一个Tab键(中间不得插入逗号)
在程序中,在执行某个语句后添加条件判断时,
若不使用双引号符号,则需插入空格以供程序错误检查。
例如:
if (a>0) printf("yes");
即使在无双引号情况下(即直接写 if(a>0) printf("yes");),添加或省略空格都不会影响程序运行结果。
5.if和语句中间连接是"tab",而else和语句中间连接的是"空格"
if (条件) 语句;
else 语句;
6.
if (a<b) {t=a; a=b; b=t;}
在上面这行代码中,当a<b这个条件成立时我们需要连续执行3条语句,此时我们需要将这3条语句放在一对{ }括号中形成一个语句块,这样当条件a<b成立时,计算机才会依次执行t=a; a=b; b=t;这3条语句。
7.if (0)
printf(“yes”);
else
printf(“no”);
输出是“no”,除了“0”其他数字都输出“yes”
8.只要变量a不小于b且不小于c就可以进行以下操作:
执行操作的方式如下:
首先输出变量a的值。
其逻辑含义为:当满足条件a≥b后,
接着检查是否变量a也大于等于c,
如果上述两个条件均满足,
则打印出变量a的值。
需要注意的是:
当内部语句只有一条时,
{}是可以省略的。
但是如果是有多条语句的情况,
则必须使用{}括起来以避免语法错误。
else的匹配采用就近原则,离上方哪个if最近,就属于哪个if。
循环条件设置为1大于0:
{
打印" wa";
}
此代码由两部分构成:循环条件部分以及位于花括号内的操作内容。
其含义是:当循环条件成立时才会执行花括号内的操作。
需要注意的是,在循环体后面的括号处是否添加空间不影响程序运行;
而循环体前面的'while'与'printf'之间则需留一个空间字符。
最后总结可知:
在编程中若是在条件判断后添加相关语句时,默认情况下前后需留一个字符位置,
这可以通过在前后分别插入适当的内容来实现。
深色背景搭配亮色字体。
该语句调用了系统函数以设置显示颜色。
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("color 0a");
}
在system函数中,在第一个参数中包含了背景颜色;第二个参数则包含了字体颜色
1-f分别代表的颜色如下:
0为纯黑
8则对应深灰色
1号位置是海蓝
9则为浅海蓝
2号是墨绿
A则对应浅墨绿
3号湖蓝
B则是较浅的墨绿
4号为正红
C则对应柔和的粉红
5号是紫红系
D则为柔和的紫红系
6号是明黄
E则是柔和的明黄系
7号为纯白
F则呈现亮白
%被称为mod,在编程中也常被视为取模运算符。其核心功能是计算两个整数相除后的余数值。此外需要注意的是,在使用%运算符时,操作数必须都是整数值。另一方面,“/”符号代表除号,在常规情况下用于计算商值。“/”运算符允许操作数为整型或浮点型。
变量a\%70和a\%107之间存在两个等号(由于某些技术原因导致无法正常显示),它们分别用于判断该数值是否能被7整除以及其末位数字是否为7。
14.“等待”这个语句是Sleep( ),注意第一个字母S是大写,例如,Sleep(1000)就表示等待1秒。其实这里的Sleep就是“等待”的意思,圆括号内的数字就是表示需要“等待”的时间,单位是毫秒,1000毫秒等于1秒。还有很重要的一点,如果需要用Sleep( ),就必须在代码的开头加上#include <windows.h>才行,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
eg:在弄一个一分钟计时器的时候,需要先输出60,然后等待某段时间再输出59,58……
清除屏幕内容的语句即为system("cls"),其作用即是先将当前屏幕上所有显示的内容删除完毕。通过调用该语句即可实现每次打印新数据前对屏幕的清理操作。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
system("cls");
printf("3");
Sleep(1000);
}
AI写代码
- 字符窗口相关操作功能模块
- 采用
clrscr()实现清空字符窗口的功能块;调用window()实现的字符窗口显示效果;使用gotoxy()定位光标的功能模块;通过clreol()去除光标行尾多余文字的功能块;采用insline()在文本中插入空白行的技术流程;借助delline()删除当前显示行的操作步骤; - 利用
gettext()将外部信息加载到显示区域的功能模块描述;基于puttext()将显示内容发送至外部系统的技术流程描述;借助textmode()设定文本模式的技术规范说明;应用textcolor()设置显示文字颜色的技术流程描述; - 通过高亮度设置增强显示效果的技术参数配置说明;采用低亮度调节改善视觉体验的技术手段规范;
- 定义标准背景颜色并完成初始化的过程性步骤说明;
- 调整字体属性以适应不同界面需求的功能参数配置;
- 应用背景颜色覆盖现有显示内容的操作规范说明;
- 设置字体大小以满足不同显示环境需求的技术参数规范
60秒倒计时完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int a;
a=60;
while(a>=0)
{
system("cls");
printf("%d",a);
Sleep(1000);
a=a-1;
}
system("pause");
return 0;
}
AI写代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b;
a=1;
while(a<=2)
{
b=1;
while(b<=3)
{
printf("ok ");
b=b+1;
}
a=a+1;
}
system("pause");
return 0;
}
AI写代码
该程序运行后会导致输出六个"OK".在分析这段代码时我们会发现它包含两个嵌套的 while 循环分别命名为 while_a 循环和 while_b 循环.每当外层 while_a 循环运行一次就会导致内层 while_b 循环从头开始运行三次并输出三个"OK".由于外层 while_a 循环总共运行两次因此内层 while_b 循环会被启动两次从而导致总共输出六个"OK".通过以上分析可知总共会产生六个"OK".
上述代码中的while循环由三个关键组成部分构成:首先设定初始值为a=1;其次持续运行直至满足a\leqslant 10这一条件;最后每一次迭代都将a值递增一次即a=a+1。
该循环机制将从数值1开始运行并持续计算直到数值达到或超越10为止。
其中第一阶段初始化a=1为程序运行的基础起点;第二阶段通过条件判断a\leqslant 10来决定是否继续执行循环体内的指令;第三阶段则负责每次循环后更新当前处理的数据量即a=a+1这一过程确保了数据量逐步递增直至满足退出循环的条件。
和
for(i=1; i<=10; i++)
{
printf(" %d ", i );
}
输出结果相同。
for和printf之间加不加空格都行。
因为编写时无法预知后续会有多长,
所以一般采用第一种形式比较稳妥。
a += 2 是 a = a + 2 的简化表示方法,在编程中被广泛采用。类似的简化语法中还包括 a += 100 ,这相当于将变量 a 的值增加到现有数值的基础上再加 100 。类似地还有 a -= 2 ,其作用在于将变量 a 的值减少到原有数值减去 2 。此外还有 a *= 2 和 a /= 2 等操作符的简化形式。这些简写方式不仅提高了代码的可读性与编写效率,在实际应用中具有重要的意义
if(f==0)
if后是俩个=
```c
#include <stdio.h>
#include <stdlib.h>
int main( )
{
int i,f;
f=0;
for(i=1;i<=10;i++)
{
if(i==6)
break;
printf("%d ",i);
}
system("pause");
return 0;
}
AI写代码
上面的代码本来是让i从1循环到10,但计算机只输出了1 2 3 4 5。因为当i==6时,计算机执行了break;语句,跳出了循环。break是用来提前终止for、while或者do-while循环的。
22.
```c
#include <stdio.h>
#include <stdlib.h>
int main( )
{
int i;
for(i=1;i<=100;i++)
{
if(i%2==1)
continue;
printf("%d ",i);
}
system("pause");
return 0;
}
AI写代码
在上述代码中,
如果i对21取余不为零,则继续执行后面的指令。
其含义在于:当i除以21存在余数时,
即当i为奇数的时候,
会跳过后续的打印操作并立即进入下一个循环。
进一步说明:
其中break用于提前退出循环;
而continue则迫使程序立即转向下一个循环的开头。
23.如何提取一个三位数的个位数字呢?其实很简单,只需要用该数值除以10取余就可以了。
123%10 -> 3
AI写代码
如何从这个数字中获取百位上的数值呢?其实很简单,请看下面的步骤:在C语言中,在整型运算中,“/”运算符会自动舍去小数部分而只保留整数值部分。因此,在这种情况下n = \frac{a}{b}就是正确的表达方式
例如,在上述例子中n = \frac{a}{b}
对于百位数值的提取过程如下所示
而对于十位数值的提取则需要更多的步骤
具体来说,请看下面的操作步骤
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
srand((unsigned)time(NULL));
a = rand();
printf("%d",a);
system("pause");
return 0;
}
AI写代码
用于初始化随机种子的方法是srand()函数,在此实现中我们采用当前系统时间为初始值获取初始随机种子值。随着时间的变化而不断变化的时间变量导致初始值不同;因此生成的不同初始值会导致随后产生的随机数值也随之发生变化。 rand()函数在调用前必须接受由srand()预先设定好的种子参数;其核心作用是基于此参数产生一次性的均匀分布在较大范围内的整数值;当需要将其结果限定在较小的具体范围内时,则只需将生成的一次性均匀分布在较大范围内的整数值取模即可得到所需的较小范围数字;例如,在本例中为了生成介于于两个整数值之间的结果,则需将 rand() 的输出结果取模运算处理即可得到所需的结果;具体实现代码如下所示:
注释
一行语句就一次性申请10 000个变量。
int a[10000];
AI写代码
#include <stdio.h>
#include <stdlib.h>
int main( )
{
int a[5],i;
for(i=0;i<=4;i++)
{
scanf("%d",&a[i]);
}
system("pause");
return 0;
}
AI写代码
char申请变量的时候要多申请一位,用来储存’\0’结尾标识符。
26.
int main()
{
int a[10],i,t;
for(i=0;i<=9;i++)
a[i]=0; //初始化每个小房间为0
for(i=1;i<=5;i++)
{
scanf("%d",&t); //依次读入5个数
a[t]=1; //把对应的小房间改为1
}
AI写代码
上述代码中的小房间起始编号设置为0,在实际应用中通常会遵循类似的生活习惯规范;配置为总共11个小房间并以编号0至10依次排列(或编号1至11依次排列),以便于后续的操作逻辑处理与应用需求满足。
27.选择排序

完整的排序过程如下(2、3、4轮均为模拟上述的方法产生的结果):
初始数据 [77 45 26 86 9]
第1轮排序后 9 [77 45 86 26]
第2轮排序后 9 26 [77 86 45]
第3轮排序后 9 26 45 [86 77]
第4轮排序后 9 26 45 77 [86]
最后结果 9 26 45 77 86
代码表示如下
AI写代码
while(i<5)//对于五个元素来说,在此排序只需要进行四次交换操作即可完成排序
{
while(j<5)//每次都需要将当前元素与其后一个元素进行对比交换位置
{
if(a[i]>a[j])//这里采用了从小到大的排序方式
{
t=a[i]; a[i]=a[j]; a[j]=t; //依次将较大的数值向右移动一位位置以实现有序排列
}
}
}
完整的代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[6],i,t,j;
for(i=1;i<=5;i++)
scanf("%d", &a[i]);
for(i=1;i<=4;i++)
{
for(j=i+1;j<=5;j++)
{
if(a[i]>a[j])
{ t=a[i]; a[i]=a[j]; a[j]=t; }
}
}
for(i=1;i<=5;i++)
printf("%d ",a[i]);
system("pause");
return 0;
}
AI写代码
这段代码声明了一个二维整型数组int a[3][4];其中第一条信息表明该数组共有多少行即第一个维度代表行的数量;第二条信息表明第二个维度代表列的数量;这是因为数组在内存中存储时采用的是零基索引的方式即从零开始计数因此左上角的第一个元素对应的位置是a[0][0];而右下方最后一个元素则是a[2][3];

我们可以通过“两个for循环嵌套”来为这个二维数组赋值:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[3][4],i,j,x;
x=0;
for(i=0;i<=2;i++) //i循环用来控制行数
{
for(j=0;j<=3;j++) //j循环用来控制列数
{
a[i][j]=x;
x++;
}
}
for(i=0;i<=2;i++)
{
for(j=0;j<=3;j++)
{
printf("%d ",a[i][j]);
}
printf("\n"); //一行打印完毕需要换行
}
system("pause");
return 0;
}
AI写代码
上面这段代码的效果如下:

假设我们要创建一个大小为12个元素的一维整型数组a(即长度n=12),并将其中每个元素按顺序依次赋值给数值范围从零到十一。
int a[] = { 265437 };
另一种更简洁的方式是将数组初始化如下:
for (int i = 4; i < 8; ++i) {
if (i == 5 || i == 7) {
// 这里可能有笔误,请根据上下文理解
break;
}
}
特别地,在不需要具体索引位置的情况下,默认全部赋零值更为便捷。
当定义一个数组时,在声明中对其初始化,在编译阶段会被依次从索引a[0]开始赋值每个元素。未指定初始值的位置默认设置为整数类型的数据类型(即其表示方法是...)的零点位置。因此,在这种情况下,所有元素都设为零的方式可以用int\ a\ [10]\ =\ {\\{}}\ 来进行描述(如int\ a\ [10]\ =\ {\\{}};\ )。然而,在这种情况下(即所有元素都被设定为了数值一),则无法直接指定初始值的方式就是int\ a\ [10]\ =\ {\\{}};\ 的形式
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10]={7,9,8},i;
for(i=0;i<=9;i++)
printf("%d ",a[i]);
system("pause");
return 0;
}
AI写代码
运行之后你会发现a[0]的值为7,a[1]的值为9,a[2]的值为8,a[3]~a[9]的值都为0。
若不定义,输出为随机值
“%d%c%d”。注意双引号中没有空格。
scanf("%d%c%d",&a,&c,&b);
AI写代码
转载
转载
读入一个字符还有其他方法。
char a;
a=getchar();
AI写代码
不同途径的区别在于其操作机制和对输入处理方式的不同。其中最常用的是 scanf("%c", &ch); ,该方法最为基础。通过 getchar() 用于获取一个字符并等待回车键以结束输入。注解:该函数会自动捕捉当前输入的单个字符。而 getche() 则用于获取一个字符并立即停止。使用此函数可即时捕获单个字符,并无需回车键。同样的功能可通过 getch() 实现 ,但该方法不会返回控制台中的光标位置。
当你在一个键盘上按下一个键时(通常用双引号标识),如果电脑实时显示了你按下该键的信息,则这被称作"回显"现象;反之,则没有回显效果。
请注意:在VC环境中编译程序时,请确保代码中包含了必要的头文件 conio.h。如果无法使用VC编译器识别 GetChar() 和 GetCharAsync() 这些函数,则会遇到无法解决的问题。此外,请根据实际情况选择是否启用这些功能,并确保程序能够正常运行。
当输入多个字符时
char a[10];
gets(a);
AI写代码
它们有细微的区别,请分别运行代码1和代码2,运行时请输入:
Tom Smith
AI写代码
代码1如下:
#include <stdio.h>
#include <stdlib.h>
int main( )
{
char a[10];
scanf("%s",a);
printf("%s",a);
system("pause");
return 0;
}
AI写代码
代码2如下:
#include <stdio.h>
#include <stdlib.h>
int main( )
{
char a[10];
gets(a);
printf("%s",a);
system(“pause”);
return 0;
}
运行后,你会看到代码1打印出‘Tom’。
而另一个程序则打印出‘Tom Smith’。
可以看出, scanf 一旦遇到输入中的空格就会停止读取。
相比之下, gets 可以一次读取整个输入行。
另外一种方法是使用 puts 函数。
例如:
puts(a);
这样操作会将字符串 a 输出并在末尾换行,
这与使用 printf("%s\n", a) 的效果完全相同。
33.如何对1行字母排序。即读入1行小写字母,然后将这行字母从a到z进行排序。
例如,如果我们输入:
dzapytrbtc
则需要输出:
abcdprttyz
之前我们已经讨论过字符的本质是整数。字符的排序和整数的排序是完全一样的。首先申请一个字符数组a,然后用gets( )进行读入。
char a[101]; //假设读入的字符不超过100个
gets(a);
接下来我们要知道读入的字符串有多长,可以用strlen( )来获取字符串的长度。定义一个整型变量len(你可以改为你喜欢的名字)来存储字符串的长度:
int len;
len = strlen(a);
需要说明的一点就是,如果你用了strlen( )函数,就需要在程序的最开始,也就是第一行增加一条语句:
#include <string.h>
最后,添加已经学习过的“选择排序”的代码,完整的代码如下:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[101],t;
int len,i,j;
gets(a);
len=strlen(a);
for(i=0;i<=len-2;i++)
{
for(j=i+1;j<=len-1;j++)
{
if(a[i]>a[j])
{ t=a[i]; a[i]=a[j]; a[j]=t; }
}
}
puts(a);
system(“pause”);
return 0;
}
我们输入:
pear
apple
AI写代码
需要输出:
apple
pear
读入和输出都很简单,关键是如何比较两个字符串。字符的比较可以用“>”、“<”、“<=”、“<=”或者“==”,但是字符串却不可以。两个字符串的比较可以用函数strcmp()。strcmp(a,b)就是比较字符串a和字符串b在字典中的顺序。如果字符串a和字符串b完全相同,那么返回值为0;如果字符串a在字典中比字符串b先出现,那么返回值小于0;如果字符串a在字典中比字符串b后出现,那么返回值大于0。举一个例子:假设a和b是两个字符数组,分别存储两个字符串,然后把a和b按照字典序输出。
if ( strcmp(a,b) < 0) // a在b前面
{
puts(a);
puts(b);
}
if ( strcmp(a,b) > 0) // a在b后面
{
puts(b);
puts(a);
}
if ( strcmp(a,b) == 0) // a和b是同一个字符串
{
puts(a);
puts(“一样的”);
}
好了,回到本节的题目:输入任意两个字符串,将其按字典序输出。还有,如果你用了strcmp( )函数,也需要在程序的最开始,也就是第一行增加一条语句:
#include <string.h>
完整的代码如下:
包含<string.h>;
包含<stdio.h>;
包含<stdlib.h>;
函数 main () {
char a[101], b[101];
输入字符串到变量a;
输入字符串到变量b;
如果 字符串比较结果小于等于零 {
输出字符串a;
输出字符串b;
} 否则 {
输出字符串b;
输出字符串a;
}
执行 pause 操作;
返回零值;
}
在对整数或字符进行排序时
36.一维字符数组进行初始化的:
char a[10]={"hello"};
AI写代码
完成一维字符数组的初始化相对较为简单,并可通过在字符串两端添加双引号与花括号的方式轻松实现。对于二维字符数组的操作通常会采用以下方式:通过定义一个包含两行、十列元素的一维结构体变量,并将其初始值赋值为{{"hello","world"}};这种操作能够有效地组织多维度的数据存储需求
c语言中要实现输出键盘上下左右分别为
ch==72//上
80下
75左
77右
27ESC
case语句的使用方法
39.C语言中整数之间的乘除是只取整数部分,而浮点数是一般的除法。
C语言中唯一的三元条件运算符是?:。它首先会对前一个操作式的计算结果进行判断(布尔值判断),然后根据结果返回后两个操作数中的一个值(如果前者的结果为真,则取后者的值;否则取第三者的值)。例如:a=(b>0)?b:c;当b>0时a=b;当b不大于0时a=c;这就是把b的绝对值赋给a的操作(其实上面的意思就是把b的绝对值赋给a)。i++等价于将当前变量i加1的操作。
在程序运行期间其值无法更改的概念被称为变量而C语言中的变量分为两类即直接变量和符号变量直接变量通常采用具体数值的形式而符号变量则通过标识符来实现。直接变量包括整数型实数型字符型和字符串型四种类型例如具体的数值如"10"、"0x7f"等均属于此类别。符号变量即为通过标识符定义的特殊数值如字母或特定符号所代表的具体值。值得注意的是整数型变量具有明确的意义它表示的是整数范围内的数值如"5"、"-3"等都是有效的整数类型实例。此外实数型变量也被称作浮点类型它们能够表示带有小数部分的数值例如"3.14"、"-2e-5"等都是实数类型的具体表现形式。字符类型的特殊值必须使用单引号来加以限定例如' '(空格)、'\n'(换行)等都属于字符类型的特殊值而字符串类型的特殊值则需要用双引号括起来例如"Hello World"、""(空字符串)等则是字符串类型的典型实例。需要注意的是符号变量既可以使用宏定义的方式实现也可以借助const关键字来进行表征例如#define PI 3.14或者const float PI = 3.14两种方法各有特点但都能达到预期的效果。
在变量声明中,名称被称为标识符。其组成仅限于数字、字母及下划线,并且不允许在首字符位置使用数字。禁止使用关键字作为标识符。请注意,在此列表中包含以下 reserved keywords:

在变量声明中,在int类型后通常使用%d来表示标准输入数据;而对于双精度类型,则采用%lf作为输入格式。然而需要注意的是,在double类型中使用%f作为输出格式。

44.double双精度要显示除数小数部分


46.C语言一次输入多个数(%1d )

若用%d则运行时输入几个数按下空格没反应
