C语言经典习题(四)

时间:2023-02-22 17:01:45

11. 统计输入数据的正负个数

C语言经典习题(四) 题目分析:判断输入10个数的正负数个数,利用分支语句判断正负再让代表正负个数的变量加一即可。

#include<stdio.h>
int main()
{
	int a = 0,z=0,i=0,f=0;
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &a);
		if (a < 0)
			f++;
		if (a >= 0)
			z++;
	}
	printf("positive:%d\n", z);
	printf("negative:%d\n", f);
	return 0;
}

12.学生基本信息输入输出

C语言经典习题(四) 题目分析:题目不难,主要是考数据类型。

int类型,存储大小2或4字节,值范围-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 long类型,存储大小4字节,值范围-2,147,483,648 到 2,147,483,647 float类型,存储大小4字节,值范围1.2E-38 到 3.4E+38,精度可达小数点后六位

#include <stdio.h>
int main()
{
    int num = 0;
    float c_score = 0.0;
    float math_score = 0.0;
    float eng_score = 0.0;
    scanf("%d;%f,%f,%f", &num, &c_score, &math_score, &eng_score);
    printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n", num, c_score, math_score, eng_score);
    return 0;
}

13.杨辉三角的前n行

C语言经典习题(四) 题目分析: 杨辉三角:两条斜边都是由数字1组成,其余的数则是等于上一行左右两个数字之和。

#include <stdio.h>
int main()
{
    int n=0;
    int arr[30][30];
    int i=0,j=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            if(j==0||i==j)
            {
                arr[i][j]=1;
                printf("%5d",arr[i][j]);
            }
            else
            {
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
                printf("%5d",arr[i][j]);
            }
        }
        printf("\n");
    }
    return 0;
}

14.模拟用户登录情景

模拟用户登录情景,并且只能登录三次,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。

题目分析:

对比密码需要运用比较函数。两个字符串比较不能用==应该使用strcmp(字符串比较函数) strcmp是字符串比较函数,字符串比较必须用比较函数! stramp需要引头文件#include<string.h>

#include<stdio.h>
#include<string.h>
int main()
{
	int i = 0;
	//假设正确密码是123456
	char password[20] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:");
		scanf("%s", password);
		if (strcmp(password, "123456") == 0)
		{
			printf("登录成功!");
			break;
		}
		else
		{
			printf("密码错误,请重新输入\n");
		}
	}
	if (i == 3)
	{
		printf("三次密码均错误,退出程序。");
	}
	return 0;
}

15.演示多个字符从两端移动,向中间汇聚

题目分析: 用两个数组,分别存放第一组字符和第二组字符。 接着将两个数组分别进行替换,起始位置+1,结束位置-1,利用while循环再一次次替换。

#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
	char arr1[] = "welcome to China!!!!";
	char arr2[] = "####################";
	int left = 0;
	int right = strlen(arr1) - 1;//strlen求字符长度
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);
		left++;
		right--;
	}
	return 0;
}

16.计算短信费用

C语言经典习题(四)

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int arr[20];
    double count=0;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(int i=0;i<n;i++)
    {
        if(arr[i]<=60)
            count +=0.1;
        else
            count +=0.2;
    }
    printf("%.1lf",count);
    return 0;
}

17.编写函数不允许创建临时变量,求字符串的长度

题目分析:不允许创建临时变量,只能使用函数递归

#incude <stdio.h>
int Strlen(const char*str)
{
 if(*str == '\0')
 return 0;
 else
        return 1+Strlen(str+1);
}
int main()
{
 char *p = "abcdef";
 int len = Strlen(p);
 printf("%d\n", len);
 return 0;
}

18.汉诺塔问题

汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,其中的一根柱子上按照从小到大的顺序摞着 64 个黄金圆盘。梵天命令一个叫婆罗门的门徒将所有的圆盘移动到另一个柱子上,移动过程中必须遵守以下规则: ● 每次只能移动柱子最顶端的一个圆盘; ● 每个柱子上,小圆盘永远要位于大圆盘之上;

#include <stdio.h>
void hanoi(int num, char sou, char tar,char aux) {
    //统计移动次数
    static int i = 1;
    //如果圆盘数量仅有 1 个,则直接从起始柱移动到目标柱
    if (num == 1) {
        printf("第%d次:从 %c 移动至 %c\n", i, sou, tar);
        i++;
    }
    else {
        //递归调用 hanoi() 函数,将 num-1 个圆盘从起始柱移动到辅助柱上
        hanoi(num - 1, sou, aux, tar);
        //将起始柱上剩余的最后一个大圆盘移动到目标柱上
        printf("第%d次:从 %c 移动至 %c\n", i, sou, tar);
        i++;
        //递归调用 hanoi() 函数,将辅助柱上的 num-1 圆盘移动到目标柱上
        hanoi(num - 1, aux, tar, sou);
    }
}

19.走台阶问题

C语言经典习题(四)

题目分析:第18题、第19题是经典的斐波那契系题目。 C语言经典习题(四)

#include <stdio.h>
 
int main()
{
    int arr[31]={0,1,2,3},n,i;
    scanf("%d",&n);
    for(i = 4;i<=n;i++)
    {
        arr[i] = arr[i-1] + arr[i-2];
    }
    printf("%d",arr[n]);
    return 0;
}

20.兔子的序列

C语言经典习题(四)

#include <stdio.h>
#include <math.h>
int main()
{
    int max = -1, len, n;
    scanf("%d", &len);
    for(int i = 0; i < len; i++)
    {
        scanf("%d", &n);
        max = (pow((int)sqrt(n), 2) != n) && max < n? n : max;
    }
    printf("%d", max);
    return 0;
}