【手把手带你刷题】-C语言编程入门篇(二)

大家好,我是深鱼~

目录

前言:

1.判断字母

2.字符圣诞树

3.ASCII码

4.出生日期输入输出

 5.2的n次方计算

 6.按照格式输入并交换输出

7.字符转ASCII码

 8.计算表达式的值

9. 计算带余除法

 10.计算体重指数

结语:彼方尚有荣光在,少年不惧岁月长


前言:

本部分是C语言初阶部分题目,一共130题,由易到难,适于初学者学习,非初学者勿看
题目链接:编程语言初学训练营_在线编程+题解_牛客题霸_牛客网 (nowcoder.com)

1.判断字母

题目链接:判断字母

题目:

 题解1:这里要注意:

<1>用了ch=getchar时一定要用getchar()来处理\n

<2>ch要定义为int类型,因为getchar的返回值为int类型,而不是char类型

#include <stdio.h>

int main()
{
	int ch = 0;
    //多组输入
	while ((ch = getchar()) != EOF)
	{

		getchar();//处理\n
         //判断并输出
		if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
		  printf("YES\n");
	    else
		   printf("NO\n");
	}
	return 0;
}

题解2:这里用到了isalpha函数,当字符是字母时,它返回非0的值,不是字母时,返回0

#include <stdio.h>
#include<ctype.h>   //isalpha函数的头文件
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		getchar();
		if (isalpha(ch))
		  printf("YES\n");
	    else
		   printf("NO\n");
	}
	return 0;
}

2.字符圣诞树

题目链接:字符圣诞树

题目

 题解:本题主要考查循环嵌套,外层循环控制行数,内层循环控制字符和空格的打印,最后找到内层循环变量和外层循环变量的关系,即可得出答案(注意外层循环每进行一次,就要一次换行

问题:为啥int j=0不写在代码最前面

答:C语言规定:变量定义在当前代码块的最前面,j这个变量的作用域就是第二个大括号内,所以直接定义在第二个大括号的前面就行,如果写在第二个大括号的外面,j每一次循环都会累加起来,定义在第二个大括号内部可以让j每一次循环都回到0

#include <stdio.h>

int main()
 {
    //输入一个字符
    char ch=0;
    ch=getchar();
    //输出圣诞树
    int i=0;
    //每循环一次,打印一行
    //每一行有2部分组成,空格和字符
    for(i=0;i<5;i++)
    {
       int j=0;
       //空格
       for(j=0;j<4-i;j++)
        {
              printf(" ");     //4 3 2 1 0 
        }
        //字符
        for(j=0;j<=i;j++)
        {
             printf("%c ",ch);  //1 2 3 4 5 
        }

        printf("\n");
    }
    return 0;
}

3.ASCII码

题目链接:ASCII码

题目:

 题解1:本题要学会如何计算数组元素的个数sz=sizeof(arr)/sizeof(arr[0])  (用整个数组的大小除以数组第一个元素的大小)

#include <stdio.h>

int main()
 {
    //这里定义要用char类型,因为打印的是字符
    char arr[] = { 73,32,99,97,110,32,100,111,32,105,116,33 };
    //arr是数组,数组是用下标来访问的
    int i=0;
    //计算数组元素的个数
    int sz=sizeof(arr)/sizeof(arr[0]);
    for ( i = 0; i < sz; i++)
    {
        printf("%c", arr[i]);
    }
    return 0;
}

题解2:直接当作字符串打印,但是要注意的是必须在数组的最后加上0,或者’\0',不然后面会乱码,就会出现以下结果(字符串的结束标志:\0)

int main()
{
	char ch[] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33 ,'\0'};
	printf("%s", ch);
	return 0;
}

4.出生日期输入输出

题目链接:出生日期输入输出

题目:

题解:本题要学会如何按格式输入%md就是m域宽输入数据%0md就是m域宽输出数据,前面自动补0(如果数据没达到域宽长度)

#include <stdio.h>

int main() //简化版
{
	int year=0;
	int month=0;//变量尽量初始化
	int date = 0;
	//按格式输入
	scanf("%4d%2d%2d", &year, &month, &date);
	//输出
	printf("year=%4d\n", year);
	printf("month=%02d\n", month);
	printf("date=%02d\n", date);
	return 0;
}

 5.2的n次方计算

题目链接:2的n次方计算

题目:

题解:本题要学会移位操作符的使用(移位移的是二进制位,如1的二进制为01,1<<1【整体向左移一位,然后右边自动补0】二进制就是10,十进制也就是2)

结论:左移1位相当于*2,右移一位相当于/2

还有就是整形如何多组输入:while((scanf("%d,&a"))!=EOF)

scanf的返回值就是输入变量的个数,也是整形

#include <stdio.h>

int main()
{
	int n = 0;
	while((scanf("%d", &n))!=EOF)
	{
      printf("%d\n",1<<n);
	}
	
	return 0;
}

 6.按照格式输入并交换输出

题目链接:按照格式输入并交换输出

题目:

 题解1:思路:类比要把一瓶酱油和一瓶醋交换一个瓶子,首先需要第三个瓶子,把酱油放进第三个瓶子,接着醋倒入第二个瓶子,然后把酱油倒入第一个瓶子,这样完成了交换

#include <stdio.h>

int main()
 {
    int a,b,flag=0;
    scanf("a=%d,b=%d",&a,&b);
    //交换
    flag=a;
    a=b;
    b=flag;
    //输出
    printf("a=%d,b=%d\n",a,b);
    
    return 0;
}

补充一道笔试题:如果不创建第三个变量如何实现两个数的交换?

题解2加减法:这种方法有个缺点,如果a,b太大会溢出

#include <stdio.h>

int main()
 {
    int a,b,flag=0;
    scanf("a=%d,b=%d",&a,&b);
    //交换
     a=a+b;
     b=a-b;
     a=a-b;
    //输出
    printf("a=%d,b=%d\n",a,b);
    
    return 0;
}

题解3异或法:推荐用这种方法

^异或操作符:操作数必须是整形(int),作用的是二进制位,相同位置上相同为0,相异为1

如:3的二进制位为011,5的二进制位为101,那么3和5异或的结果为110,对应十进制为6,那么3和5异或的结果就是6

#include <stdio.h>

int main()
 {
    int a,b,flag=0;
    scanf("a=%d,b=%d",&a,&b);
    //交换
    a=a^b;
    b=a^b;
    a=a^b;
    //输出
    printf("a=%d,b=%d\n",a,b);
    
    return 0;
}

7.字符转ASCII码

题目链接:字符转ASCII码

题目:

题解:这题比较简单,但是大家可以记住a的ASCII值为97,A的为65

#include <stdio.h>

int main() 
{
	char ch = 0;
	scanf("%c", &ch);
	//也可以这样写
	//ch=getchar();
	printf("%d", ch);

    return 0;
}

 8.计算表达式的值

题目链接:计算表达式的值

题目:

题解:这题非常简单,但是要注意C语言中的乘号是*

#include<stdio.h>

int  main()
{
    int a=40;
    int c=212;
    printf("%d\n",(-8+22)*a-10+c/2);
    return 0;
}

9. 计算带余除法

题目链接:计算带余除法

题目:

题解:这题知道/,%操作符即可做出

#include <stdio.h>

int main() 
{
    int a=0;
    int b=0;
    scanf("%d %d",&a,&b);
    // / 除法操作符,得到的是商
    // % 取余(取模)操作符,得到的是余数
    printf("%d %d",a/b,a%b);
    return 0;
}

 10.计算体重指数

题目链接:计算体重指数

题目:

 题解:本题注意两个点:<1>身高的单位为cm

<2>high不能直接除以100,这样得到的整数,而不是小数,这样就会和正确结果差很大

#include <stdio.h>

int main() 
{
    //输入
    int weight = 0;
    int high = 0;
    double BMI = 0;
    scanf("%d %d", &weight, &high);
    //计算BMI
    BMI = (weight / ((high / 100.0) * (high / 100.0)));
    //输出
    printf("%.2lf\n", BMI);
}

结语:彼方尚有荣光在,少年不惧岁月长

求求了,来个三连吧。 

猜你喜欢

转载自blog.csdn.net/qq_73017178/article/details/131674913