1.接着上一篇内容,我对目前所学的C语言代码所包含的一个预处理文件#include<stdio.h>有了进一步的了解(这是我问的结合自己查询到内容):stdio的意思与其缩写有联系,standard input and output,意为“标准输入输出”,该头文件包含了我们平时用到的输入“scanf”,输出“printf”还有其它getchar等等一些函数,得知这些,我深刻地体会到事物之间的藕断丝连,这些关联如此奇妙。
2.关于VS设置断点调试,就现在而言,感觉不太深(听说是VS精髓之处),只会一些皮毛,用来监视定义的某个变量的数值变化,比如以下代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int x = 10;
int y = 20;
printf("Before debug\n"); // 设置断点
if (x > y)
{
printf("x > y\n");
int z = x + y;
printf("z = %d\n", z);
}
else
{
printf("x <= y\n");
}
printf("After debug\n");
return 0;
}
通过VS,按下快捷键F9(在光标处设置断点),点击调试,会在下方弹出监视窗口显示x,y的数值,如果在printf("After debug\n");前设置一个断点,加一个对z的监视,会显示z未定义,可能是if语句不执行printf("z = %d\n", z); 的原因(希望可以得到解答),之后还得多多摸索它的作用。
2.通常计算一个像从1到100的求和,可以借助for循环语句,它的基本语法为for (初始化;条件;递增/递减){ }
例如:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int sum=0;
for (int a = 1; a <= 100; a++)
{
sum += a;
}
printf("1到100的sum=%d", sum);
system("pause");
return 0;
}
这里涉及到了自加等问题,简单说明一下:a++表示先输出a再自加1,sum+=a 表示sum=sum+a。
就像if语句一样,for循环也存在嵌套:
#include <stdio.h>
int main()
{
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
printf("%d*%d=%d\t", j, i, i * j);
}
printf("\n");
}
return 0;
}
运行结果为:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
这里结果以一排一排的形式呈现,没有和上一个一样定义一个变量sum来储存数据。
3.循环结构除了上述的for循环,while循环也可以重复执行,有这么一个问题:输入一串字符,统计其中字母的个数和数字的个数。通常看到字符串这类问题,首先想到的应该是数组的概念,但是因为还未学习到那里,我用了之前的知识运行这个过程,以下:
#include<stdio.h>
int main()
{
int sum1=0,sum2=0;
int c=getchar();
while (c != '#')
{
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
{
sum1++;
}
else if (c >= '0' && c <= '9')
{
sum2++;
}
else
printf("没有输入字母和数字");
c = getchar();
}
printf("字母个数:%d\n", sum1);
printf("数字个数:%d\n", sum2);
printf("\n");
return 0;
}
明显这个代码运用了多种语句的镶嵌(目前不太懂),并且while语句通过识别到#来停止循环(可以自己定义其他的符号)。
其中一种运行结果为:
12345678abcd520lyt#
字母个数:4
数字个数:10
4.谈到逻辑语句,这里就不得不说一说if-else语句了(其实还有很多种结构,这里我只简单地讲一下我自己比较喜欢的一种形式),同时,我还要将switch语句和if-else语句对比讲述一下:
if-else语句的一般结构大致为以下:
{
if (条件)
{
执行的代码
}
else if()
{
执行的代码
}
else
{
执行的代码
}
}
注意:(1).if语句和后面跟的条件不属于一个语句,结尾处不需要分号
(2).执行的代码一般用花括号括起来,只有一个语句可以不括起来,但是我更喜欢都括起来,养成一个好的习惯;
(3).else后面不需要括号括起来的条件。
switch语句的一般结构如下:
switch(变量)
{
case 3:语句;break;
case 2:语句;break;
case 1:语句;break;
default:语句;break;
}
注意:(1).case和后面的字符之间要又空格,否则会造成格式不对;
(2).每一种case结尾都有对应的break,以表示语句的结束
有这么一道题目:编写程序,通过键盘输入字符,判断其属于控制、数字、大写字母、小写字母和其他字母中的类别。
分析:要编写这样一个程序,最关键的应该是判断的过程,这里简单的运用了if-else语句和switch语句,通过以下两段代码,可以更好的感受到两者之间的区别和用处。
(1)#include<stdio.h>
#include<stdlib.h>
int main()
{
char c;
printf("Enter a char:");
c=getchar();
if(c<0x20)
printf("\nThe char is a control char.\n");
else if(c>='0'&&c<='9')
printf("The char is a digit char.\n");
else if(c>='a'&&c<='z')
printf("The char is a lower char.\n");
else if(c>='A'&&c<='Z')
printf("The char is a captal char.\n");
else
printf("The char is an other char.\n");
system("pause");
return 0;
}
(2)#include<stdio.h>
int main()
{
char c;
printf("please input a char:\n");
c = getchar();
switch (c)
{
case 'a':
case 'b':
printf("The char is a lower char.\n");
break;
case 'A':
case 'B':
printf("The char is a captal char.\n");
break;
case 0x20:
printf("The char is a control char.\n");
break;
default :
printf("The char is an other char.\n");
}
return 0;
}
总结:上述switch语句我只举例说明了几个字母(也可以将其补充完整),显然switch语句在有的时候会显得代码冗长,而且一旦改变了变量的范围,就需要更改case的情况,而if-else语句灵活性比较强,可以包容比较复杂的条件,修改也比较方便。但是switch语句简单易懂,能够很清楚地了解代码的意图。
总而言之,switch语句适合处理数量有限的、无序的条件分支;
if-else语句适合处理复杂有序的条件判断。