C语言程序设计-练习篇

少年自当扶摇上,揽星衔月逐日光。

一,小乐乐走台阶

描述:

小乐乐上课需要走n阶台阶,因为腿长,所以每次可以选择走一阶或者两阶,那么他一共有多少种走法?

输入描述:

输入包含一个整数n(1<=n<=30)

输出描述:

输出一个整数,即小乐乐可以走的方法数

#include <stdio.h>

//小乐乐走台阶
int fib(int n)
{
	if (n <= 2)
		return n;
	else
		return fib(n - 1) + fib(n - 2);
}

int main()
{
	int n = 0;
	//输入
	scanf("%d", &n);
	//计算
	int m = fib(n);
	//输出
	printf("%d\n", m);
	return 0;
}

二,在序列中删除指定数字

描述:

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。

数据范围:序列长度和序列中的值都满足1<=n<=50

输入描述:

第一行输入一个整数N(0<=N<=50)

第二行输入N个整数,输入用空格分隔的N个整数

第三行输入想要进行删除的一个整数

输出描述:

输出为一行,删除指定数组之后的序列

#include <stdio.h>
//在序列中删除指定数字
int main()
{
	int N = 0;
	scanf("%d", &N);
	int arr[50];
	//接收N个数字
	int i = 0;
	for (i = 0; i < N; i++)
	{
		scanf("%d", &arr[i]);
	}
	int del = 0;
	//接受删除的值
	scanf("%d", &del);
	int j = 0;//j作为下标锁定的位置就是用来存放不删除数据
	for (i = 0; i < N; i++)
	{
		if (arr[i] != del)
		{
			arr[j++] = arr[i];
		}
	}
	//输出
	for (i = 0; i < j; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

三,最高分最低分之差

描述:

输入n个成绩,换行输出n个成绩中最高分数和最低分数的差

输入描述:

两行,第一行为n,表示n个成绩,不会大于10000

第二行为n个成绩(整数表示,范围0~100),以空格隔开

输出描述:

一行,输出n个成绩中最高分数和最低分数的差

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[10000];
	int i = 0;
	//输入
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//找出最大值
	int max = arr[0];
	for (i = 1; i < n; i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
		}
	}
	//找出最小值
	int min = arr[0];
	for (i = 1; i < n; i++)
	{
		if (arr[i] < min)
		{
			min = arr[i];
		}
	}
	printf("%d\n", max - min);
	return 0;
}

简化

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[10000];
	int i = 0;
	//输入
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//找出最大值
	//找出最小值
	int max = arr[0];
	int min = arr[0];
	for (i = 1; i < n; i++)
	{
		if (arr[i] > max)
			max = arr[i];

		if (arr[i] < min)
			min = arr[i];
	}
	printf("%d\n", max - min);
	return 0;
}

再简化

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[10000];
	int i = 0;
	int max = 0;
	int min = 100;
	//输入
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
		if (arr[i] > max)
			max = arr[i];
		if (arr[i] < min)
			min = arr[i];
	}
	printf("%d\n", max - min);
	return 0;
}

四,字母大小写转换

描述:

完成大小写转换,有一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;反之则转换为大写字母

输入描述:

多组输入,每一行输入一个字母

输出描述:

针对每组输入,输出单独占一行,输出字母的对应形式

(PS:小写字母a的ASCII值是97,大写字母A为65,相差32)

#include <stdio.h>
int main()
{
	char ch = 0;
	while (scanf("%c",&ch)==1)
	{
		//scanf读取成功返回读取数据的个数,读取失败返回EOF
		if (ch >= 'a' && ch <= 'z')
			printf("%c\n", ch - 32);
		else
			printf("%c\n", ch + 32);
		getchar();//读取输入后的回车(\n)
	}
	return 0;
}

或者

(while内的条件也可以写成--- scanf("%c",&ch)!=EOF )

#include <stdio.h>
int main()
{
	char ch = 0;
	while (scanf("%c", &ch) == 1)
	{
		//scanf读取成功返回读取数据的个数,读取失败返回EOF
		if (ch >= 'a' && ch <= 'z')
			printf("%c\n", ch - 32);
		else if(ch>='A'&&ch<='Z')
			printf("%c\n", ch + 32);
		//直接不接收每次输入的\n
	}
	return 0;
}

或者(使用库函数)

#include <stdio.h>
#include <ctype.h>
int main()
{
	char ch = 0;
	while (scanf("%c", &ch) != EOF)
	{
		if (islower(ch))
			printf("%c\n", toupper(ch));
		else if (isupper(ch))
			printf("%c\n", tolower(ch));
	}
	return 0;
}

五,判断是不是字母

描述:

判断输入的字符是不是字母,编程实现

输入描述:

多组输入,每一行输入一个字符

输出描述:

针对每组输入,输出单独占一行,判断字符是否为字母

示例:

输入:A

           6

输出:A is an alphabet

           6 is not an alphabet

#include <stdio.h>
int main()
{
	char ch = 0;
	while (scanf("%c", &ch) == 1)
	{
		if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
			printf("%c is an alphabet\n",ch);
		else
			printf("%c is not an alphabet\n",ch);
		getchar();//处理输入时敲得回车
	}
	return 0;
}

   

(或者去掉getchar那一行,在scanf内的%c前加个空格。此处加空格的意思是:跳过下一个字符之前的所有空白字符。)

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值