C语言学习04:语句和控制块

张建 lol

输入输出语句

  1. printf(格式控制,输出表列)
  • %d格式符:输出有符号十进制整数。
  • c格式符:输出一个字符。
  • s格式符:输出一个字符串。
  • f格式符:%f-实数部分全部输出,小数部分输出6位。%m.nf-m表示包括小数在内的整个浮点数长度,n表示小数点保留几位。
  • p格式符:用来输出地址。
  1. scanf

一般形式为 scanf(格式控制,地址表列)

  1. 正则

需要通过 #include <regex.h> 库

  • %[abc]:读取a/b/c任意一员
  • %[^a-z]:读取不在a-z之间的字符串
  • %[^=]:读取字符串直到碰到=号
  • %[^=]:前面号表示不保存变量
  1. 字符输入输出
  • putchar(c):用于输出字符c
  • c = getchar():用于输入一个字符,返回的不是char类型,而是 int 类型

一般用法 while(c=getchar() && a!=EOF) { }

EOF:指检测文件尾,宏定义值为-1

判断语句

  1. if(…){}

  2. if(…){} else{}

  3. if(…){} else if(…){} … else{…}

  4. switch(表达式){case 常量1:语句1;case 常量2:语句2;…;case 常量n:语句n;default:语句n+1}

循环语句

  1. while

while (表达式) {
语句
}

  1. do…while:至少会执行一次

do
语句
while (表达式);

  1. for

for (表达式1,表达式2,表达式3)
语句

  1. 循环打断

break 或 goto

  1. continue

continue 不跳出循环,而是将程序执行跳转到末尾处

练习题

  1. 循环打印字符串
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(int argc, const char * argv[]) {
char str[] = "Hello World!";
size_t len = sizeof(str)/sizeof(char);
printf("%zu\n",len);
for (int i = 0; i<len; i++) {
printf("%c\n",str[i]);
}

return 0;
}
  1. 判断字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 声明
void judge_char(char ch);

int main(int argc, const char * argv[]) {
char ch;
printf("请输入一个字符:");
scanf("%c",&ch);
judge_char(ch);

return 0;
}

// 定义
void judge_char(char ch){
/*
getchar和putchar 专门用于字符的输入和输出
getchar()写法上要为 变量 = getchar();
putchar()写法上要为 putchar(变量)
getchar('\n')输出一个控制符
putchar('字母/字符');输出一个字母/字符
*/
// ch = getchar();
if (ch < 31) {
printf("这是一个控制字符或通讯专用字符!\n");
}else if (ch >= '0' && ch <= '9') {
printf("这是一个数字!");
}else if (ch >= 'A' && ch <= 'Z') {
printf("这是一个大写字母!\n");
}else if (ch >= 'a' && ch <= 'z') {
printf("这是一个小写字母!\n");
}else {
printf("这是其他字符!\n");
}
}
  1. 任意输入3个整数,使用if语句对这3个语句从小到大升序排序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 交换x,y
void swap(int *x,int *y){
int temp = *x;
*x = *y;
*y = temp;
}

int main(int argc, const char * argv[]) {
int a,b,c;
printf("请输入a,b,c:\n");
scanf("%d,%d,%d",&a,&b,&c);

if (a>b){
swap(&a, &b);
}
if (a>c){
swap(&a, &c);
}
if (b>c){
swap(&b, &c);
}

printf("升序排序结果:\n");
printf("%d,%d,%d\n",a,b,c);

return 0;
}
  1. 九九乘法表
1
2
3
4
5
6
7
8
9
10
11
int main(int argc, const char * argv[]) {
int i = 0;
int j = 0;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
printf("%d*%d=%2d\t",i,j,i*j);
}
printf("\n");
}
return 0;
}
  1. 使用goto语句模拟循环,求10以内整数之和。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main(int argc, const char * argv[]) {

int sum = 0;
int i = 0;
LOOP: if (++i <= 10) {
sum += i;
goto LOOP;
}
printf("10以内的正整数之和为:%d\n",sum);

return 0;
}
  1. while循环:最大公约数 和 最小公倍数

公约数:几个自然数共有的约数,为他们的公约数
最大公约数:公约数中的最大一个

公倍数:能够被一个整数整除额整数成为其倍数
最小公倍数:两个或多个整数的公倍数最小的一个

问:使用while循环,求两个正整数的最大公约数和最小公倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>

int main(int argc, const char * argv[]) {

int a,b,m,c;
printf("请输入两个数:");
scanf("%d,%d",&a,&b);
// 给两个整数排序
if (a<b){
int temp = a;
a = b;
b = temp;
}
m = a*b;
c = a%b;
while (c != 0) {
a = b; // 最大公约数
b = c;
c = a%b;
}
printf("最大公约数是:%d\n",b);
printf("最小公倍数是:%d\n",m/b);

return 0;
}
  • Post title:C语言学习04:语句和控制块
  • Post author:张建
  • Create time:2023-02-13 12:58:15
  • Post link:https://redefine.ohevan.com/2023/02/13/C学习/C语言学习04:语句和控制块/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
C语言学习04:语句和控制块