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              */

posted @ 2023-04-27 15:32  海晨  阅读(9)  评论(0)    收藏  举报