S1E11 - S1E20
S1E11 if函数
0、
#include <stdio.h>
#define STRING char *
#define IF if(
#define THEN ){
#define ELSE }else{
#define FI ;}
#define DO ){
#define OD ;}
#define INT int
#define BEGIN {
#define END }
in main()
BEGIN
INT i;
printf("请输入您的年龄:");
scanf("%d",&i);
IF i < 18
THEN
printf("您未满18周岁,不得使用这个程序!\n");
ELSE
printf("您已满18周岁,欢迎使用本程序,嘿嘿嘿...\n");
FI
return 0;
END
2、
#include <stdio.h>
int main()
{
char asc;
printf("请输入一个字符:");
scanf("%c",&asc);
if (asc <= 90 && asc >= 65) {
asc = asc + 32;
printf("%c",asc);
} else if (asc >= 97 && asc <= 122) {
asc = asc - 32;
printf("%c",asc);
}
return 0;
}
3、
#include <stdio.h>
#include "ssebtr1.h"
int mian()
{
int old;
int heart_rate_max;
int heart_rate_now;
printf("请输入您的年龄:")
scanf("%d",&old);
heart_rate_max = 220 - old;
heart_rate_now = getHeartRate();
if (heart_rate_now >= heart_rate_max)
{
printf("请马上停止跑步,否则会有生命危险.....\n");
} else if (heart_rate_now >= heart_rate_max * 0.85) {
printf("请放慢脚步\n");
playSound(130);
} else if (heart_rate_now <= heart_rate_max * 0.75) {
printf("Comn on,请加快节奏!\n");
playSound(170);
} else {
playSound(150);
}
return 0;
}
/* 20230427 */
S1E12
0、最短小快的语句是 ; ,它是一个空语句,本身不执行任何任务
1、用一对大括号将若干语句包裹起来,这些语句就构成了一个程序块,在编译系统看来,他们是一个整体。
2、case仅是一个标签,后面跟的应该是一个整形常量或常量表达式,且对应数值不能相等。
3、越界检查
#include <stdio.h>
int main()
{
char ch[6] = "FishC";
int i;
printf("请输入你想访问的字符序号(0-5):");
scanf("%d",&i);
if(!(i >= 0 && i <= 5 && printf("%c\n",ch[i])))
{
printf("非法访问!\n");
}
return 0;
}
动手
0、
#include <stdio.h>
int main()
{
float i,j;
char c;
printf("请输入式子");
scanf("%f %c %f",&i,&c,&j);
switch(c)
{
case '+':printf("结果是:%.2f\n",i + j);
break;
case '-':printf("结果是:%.2f\n",i - j);
break;
case '*':printf("结果是:%.2f\n",i * j);
break;
case '/':if (!(j != 0 && printf("结果是:%.2f\n",i / j)))
printf("很遗憾,除数不能为零!");
break;
default:
break;
}
return 0;
}
2、
#include <servo.h>
#define LEFT_MOTO_GO 8
#define LEFT_MOTO_BACK 9
#define RIGHT_MOTO_GO 10
#define RIGHT_MOTO_BACK 11
void loop()
{
char ch;
switch(ch)
{
case 'g':digitalWrite(LEFT_MOTO_GO,HIGH);
digitalWrite(LEFT_MOTO_BACK,LOW);
digitalWrite(RIGHT_MOTO_GO,HIGH);
digitalWrite(RUGHT_MOTO_BACK,LOW);
break;
case 'b':digitalWrite(LEFT_MOTO_GO,LOW);
digitalWrite(LEFT_MOTO_BACK,HIGH);
digitalWrite(RIGHT_MOTO_GO,LOW);
digitalWrite(RUGHT_MOTO_BACK,HIGH);
break;
case 'r':digitalWrite(LEFT_MOTO_GO,LOW);
digitalWrite(LEFT_MOTO_BACK,LOW);
digitalWrite(RIGHT_MOTO_GO,HIGH);
digitalWrite(RUGHT_MOTO_BACK,LOW);
break;
case 'l':digitalWrite(LEFT_MOTO_GO,HIGH);
digitalWrite(LEFT_MOTO_BACK,LOW);
digitalWrite(RIGHT_MOTO_GO,LOW);
digitalWrite(RUGHT_MOTO_BACK,LOW);
break;
default:digitalWrite(LEFT_MOTO_GO,LOW);
digitalWrite(LEFT_MOTO_BACK,LOW);
digitalWrite(RIGHT_MOTO_GO,LOW);
digitalWrite(RUGHT_MOTO_BACK,LOW);
break;
}
}
/* 20230428 */
S1E3 do.....while语句
0、死循环
1、condition为0
2、do.....while语句的特点是先进入循环在判断表达式的值,也就是说,无论如何do.....while语句至少执行循环体一次。
3、0 ~ -128;
4、char默认定义为unsigned char 还是signed char取决于编译系统,而int默认是signed int。
动手
0、
#include <stdio.h>
int main()
{
char ch;
int count = 0;
printf("请输入一行英文句子:");
while((ch = getchar()) != '\n')
{
if (ch >= 65 && ch <= 90)
count++;
}
printf("你总共输入了%d个大写字母!\n",count);
return 0;
}
1、
#include <stdio.h>
int main()
{
char ch;
printf("请输入一行英文句子:");
while((ch = getchar()) != '\n')
{
if (ch >= 65 && ch <= 90) {
ch = ch + 32;
putchar(ch);
} else if (ch >= 97 && ch <= 122) {
ch = ch - 32;
putchar(ch);
} else {
putchar(ch);
}
}
return 0;
}
2、
#include <stdio.h>
int main()
{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
do
{
ch = getchar();
if (ch >= '0' && ch <= '9')
{
num = 10 * num + (ch - '0');
} else {
if (num)
{
break;
}
}
} while(ch != '\n');
printf("结果是:%d\n",num);
return 0;
}
进阶版
#include <stdio.h>
#include <math.h>
int main()
{
int ch;
long long num = 0;
long long temp;
int is_overflow = 0;
const int max_int = pow(2,(sizeof(int) * 8) / 2 - 1);
const int min_int = pow(2,(sizeof(int) * 8) / 2 * (-1));
printf("请输入待转换的字符串:");
do
{
ch = getchar();
if (ch >= '0' && ch <= '9')
{
temp = 10 * num + (ch - '0');
if (temp >max_int || temp < min_int)
{
is_overflow = 1;
break;
}
else
{
num = temp;
}
} else {
if (num)
{
break;
}
}
} while(ch != '\n');
if (is_overflow)
{
printf("数值超出范围,结果未定义!\n");
}
else
{
if (!num)
{
printf("并未找到任何数值!\n");
}
else
{
printf("结果是:%d\n",num);
}
}
return 0;
}
注:可使用‘9’、'0'等表示特定的整数值,ch - '0',表示整数0-9
/* 20230501 */
S1E4 for语句
0、对于没有预先确定执行次数的循环(如根据用户输入内容决定是否进入下一轮循环),应使用while语句。对于指定次数的循环,for语句更加合适。
1、入口条件循环:循环执行前,判断表达式是否成立,如for语句,while语句。
3、
for (;;)
;
表示永远为真的循环,死循环,while循环如下:
while(1)
;
4、
while((ch = getchar()) != '\n')
{
printf("%c",ch);
}
for (;(ch = getchar()) != '\n';)
{
printf("%c",ch);
}
注:while((ch = getchar()) != '\n')可由for(;(ch = getchar()) != '\n';)替换
动手
0、
#include <stdio.h>
int main()
{
int i;
for (i = 1;i <= 20;i++)
{
printf("%3d -- %3d\n",i,23 + (i - 1) * 14);
}
return 0;
}
1、
#include <stdio.h>
int main()
{
int num = 0;
long sum = 0L;
int status;
do
{
printf("请输入合法的数字:");
sum = sum + num;
status = scanf("%d",&num);
} while(1 == status);
printf("结果是:%ld\n",sum);
return 0;
}
注:scanf函数会返回接受正确的输入字符的个数,如scanf("%d",&num),如果是输入%d格式正确,则返回&的个数,即1,如果输入%c字符格式,则返回0;同理如果是scanf("%d,%",&num,&num1),如果都正确则返回2,否则返回正确的个数,即0或1.
2、
#include <stdio.h>
int main()
{
float num = 0;
double sum = 0;
int status;
do
{
printf("请输入合法的数字:");
do
{
sum = sum + num;
status = scanf("%f",&num);
} while((getchar() != '\n') && status == 1);
} while(status == 1);
printf("结果是:%.2f\n",sum);
return 0;
}
3、
右上
#include <stdio.h>
int main()
{
int i,j;
for (i = 1;i <= 9;i++)
{
for (j = 1;j <= 9 - i;j++)
{
printf(" ");
}
for (j = 1;j <= i;j++)
{
printf("%d * %d = %2d ",i,j,i * j);
}
putchar('\n');
}
return 0;
}
左上
#include <stdio.h>
int main()
{
int i,j;
for (i = 1;i <= 9;i++)
{
for (j = 1;j <= 10 - i;j++)
{
printf("%d * %d = %2d ",i,j,i * j);
}
putchar('\n');
}
return 0;
}
右下
#include <stdio.h>
int main()
{
int i,j;
for (i = 9;i >= 1;i--)
{
for (j = 1;j <= i - 1;j++)
{
printf(" ");
}
for (j = 9;j >= i;j--)
{
printf("%d * %d = %2d ",i,j,i * j);
}
putchar('\n');
}
return 0;
}
/* 20230502 */
S1E15 break和continue
0、当输入的字符不是数字时
1、
for (i = 0;i < 100;i++)
{
if (i % 2)
{
continue;
}
//某语句
}
注:当i是偶数时不跑某语句,但i++会正常跑
i = 0;
while (i < 100)
{
if (i % 2)
{
continue;
}
//某语句
i++;
}
注:此时某语句和i++都不跑,如当i = 0时,跳过某语句和i++,i始终等于0,继续continue,陷入死循环。
2、注意浮点数与整数区别。
4、result = (int)(result + 0.5)这可以对result进行四舍五入,因为计算机会舍去小于1的部分,四不足一,大于等于0.5加0.5一定大于1.
动手
0、
#include <stdio.h>
int main()
{
char ch;
int a_count,e_count,i_count,o_count,u_count;
while((ch = getchar()) != '\n')
{
if ('a' == ch) {
a_count++;
} else if ('e' == ch) {
e_count++;
} else if ('i' == ch) {
i_count++;
} else if ('o' == ch) {
o_count++;
} else if ('u' == ch) {
u_count++;
}
}
printf("你输入的句子中,包含元音字母%d个!",a_count +
e_count + i_count + o_count + u_count);
printf("其中,a(%d),e(%d),i(%d),o(%d),u(%d)",a_count,
e_count, i_count, o_count, u_count);
return 0;
}
/* 20230503 */
1、
#include <stdio.h>
#include <math.h>
int main()
{
int count = 4;
int i,j,k;
_Bool flag = 1;
for (i = 9;i < 10000;i++)
{
k = (int)sqrt(i);
for (j = 2;j <= k;j++)
{
if (i % j == 0)
{
flag = 0; // 不是素数
break;
}
}
if (flag)
{
count++;
}
else
{
flag = 1;
}
}
printf("10000以内的素数有%d个\n",count);
}
/* 20230525 */
#include <stdio.h>
int main(void)
{
char ch;
printf("请输入明文");
while((ch = getchar()) != '\n')
{
if (ch <= 'z' && ch >= 'a')
{
putchar('a' + (ch - 'a' + 3) % 26);
continue;
}
if (ch >= 'A' && ch <= 'Z')
{
putchar('A' + (ch - 'A' + 3) % 26);
continue;
}
putchar(ch);
}
putchar('\n');
return 0;
}
S1E16 拾遗
0、for (i = 0;i != 10,j != 10;i++),条件判断(含逗号)只需满足后面一个表达式,前面可以不需要满足。
1、while(0)不会执行循环体。
2、l-value是左值,即a=b=c=5中的a,b,c
3、赋值运算符的优先级比逗号运算符的优先级高,所以b = 3,4;b等于3
/* 20230529 */
#include <stdio.h>
#include <math.h>
int main()
{
int sign = 1;
double pi = 0.0, n = 1, term = 1.0;
printf("%f\n",fabs(term));
while (fabs(term) >= 1e-8) // 1e-8表示10^(-8)
{
pi = pi + term;
n = n + 2;
sign = -sign;
term = sign / n;
//printf("%f\n",pi);
//printf("%f\n",n);
//printf("%f\n",term);
}
pi = 4 * pi;
printf("pi = %10.7f\n",pi);
return 0;
}
#include <stdio.h>
int main()
{
long i, c, a = 1, b = 1;
for (i = 3;i <= 24;i++)
{
c = a + b;
a = b;
b = c;
}
printf("%ld\n",c);
return 0;
}
/* 20230612 */

浙公网安备 33010602011771号