首页 > 其他分享 >C语言——实验课大作业(十个C语言实验)

C语言——实验课大作业(十个C语言实验)

时间:2024-07-17 12:26:20浏览次数:20  
标签:语句 int 代码 十个 C语言 本关 测试 include 实验课

第1关:实验8 数学函数
任务描述
本关任务:编写一个能计算数的正弦、余弦、平方根的小程序。

相关知识
为了完成本关任务,你需要掌握:调用C语言自带的函数库的方法。

导入函数相关库
#include <math.h>

导入相关库后,可以直接调用相关的函数进行运算,比如计算数a的平方根,可以通过调用sqrt()。

编程要求
根据提示,在右侧编辑器补充代码,使程序正常运行。

测试说明
平台会对你编写的代码进行测试:

测试输入:100
预期输出:
sin(a)=-0.506366
cos(a)=0.862319
sqrt(a)=10.000000

开始你的任务吧,祝你成功!

#include <stdio.h>
#include <math.h>
int main(){
	float a;
	scanf("%f",&a);
	/********** Begin *********/
		// 请在此处添加你的代码
        printf("sin(a)=%f\n",sin(a));
        printf("cos(a)=%f\n",cos(a));
        printf("sqrt(a)=%f\n",sqrt(a));

	/********** End **********/
	return 0; 
}

 

第2关:实验9 判断日期是否合法
任务描述
本关任务:编写一个能判断输入的日期是否合法的小程序。如果合法,则按照年月日的输出此日期,比如1998年6月26日。;否则提示用户:您输入的日期有误,请重新输入!

相关知识
条件语句可以给定一个判断条件,并在程序执行过程中判断该条件是否成立,根据判断结果执行不同的操作,从而改变代码的执行顺序,实现更多的功能。

if (<条件>) 
{
    <条件成立执行的代码>
}
else 
{
    <条件不成立执行的代码>
}
编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:1994,02,20
预期输出:1994年2月20日。

#include <stdio.h>
int main(){
	int y, m, d;
	int tag;
	scanf("%d,%d,%d", &y, &m, &d);
	/********** Begin *********/
		// 请在此处添加你的代码
        if (y >= 1) {
        // 判断月份
        if (m >= 1 && m <= 12) {
            // 判断日期
            int day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            // 如果是闰年,二月有29天
            if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
                day[1] = 29;
            }
            // 判断输入的日是否在月份允许的范围内
            if (d >= 1 && d <= day[m - 1]) {
                tag = 1; // 日期合法,标记为1
            }
        }
    }
	/********** End **********/
	if ( tag == 1 )
		printf("%d年%d月%d日。", y, m, d );
	else
		printf("您输入的日期有误,请重新输入!");
	return 0; 
} 

 

第3关:实验10 分段函数
任务描述
本关任务:编写一个能计算分段函数的小程序。

输入x,求分段函数y的值。
−10<=x<10  y=sin(x+3.0)

10<=x<20   y=cos(x+8.0) 

20<=x<100  y=ln(x∗4)
如果x不在定义域内,输出No define!,否则输出y,并保留5位小数。

相关知识
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查

switch(expression){
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
}
编程要求
根据提示,在右侧编辑器补充代码,计算并输出数组的平均值和最大值。

测试说明
平台会对你编写的代码进行测试:

测试输入:10
预期输出:0.66032

#include <stdio.h>
#include <math.h>
int main()
{
    float x, y;
    int tag;
    scanf( "%f", &x );
    /********** Begin *********/
		// 请在此处添加你的代码
        if (x < -10 || x >= 100) {
        tag = -2; // x不在定义域内
    } else if (x < 10) {
        tag = -1; // -10 <= x < 10
    } else if (x < 20) {
        tag = 0;  // 10 <= x < 20
    } else {
        tag = 1;  // 20 <= x < 100
    }

    switch (tag) {
        case -1:
            y = sin(x + 3.0);
            break;
        case 0:
            y = cos(x + 8.0);
            break;
        case 1:
            y = log(x * 4);
            break;
        default:
            printf("No define!\n");
            return 0;
    }

    printf("%.5f\n", y);
	/********** End **********/
    return 0;
}

第4关:实验12 星号塔
任务描述
本关任务:编写一个能输出星号塔的小程序。

如果输入是4,则输出的星号塔为:

相关知识
为了完成本关任务,你需要掌握:for循环来进行控制输出。

for语句
基本语法:基于for实现循环的基本语法如下:

for(1.赋值语句或者省略;2.判断语句或者省略;3.执行语句或者省略){
    需循环的语句或者代码块
}
其中1处位置,是一个赋值语句,在循环开始前执行一次,之后再不执行。

其中2处位置为判断语句,每次开始循环时(包括第一次)都会先经过这个判断语句的判断如果此处为真,则进入循环,执行循环内语句或者代码块。如果此处为假,则不进入循环,执行之后的代码。

其中3处位置为一个运算语句,每执行完一次循环,就会执行一次此处代码。

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:4
预期输出:

#include <stdio.h>
int main()
{
	int i, j, n,k;
	scanf("%d", &n );
	for ( i = 1; i <= n; i++ )
	{
		/********** Begin *********/
		    // 请在此处添加你的代码
            for (j = i; j < n; j++) {
            printf(" ");
        }
        // 打印星号
        for (k = 1; k <= (2 * i - 1); k++) {
            printf("*");
        }
        // 换行
        printf("\n");
	    /********** End **********/
	}
	return 0;
}

 

第5关:实验16 求矩阵对角线元素之和
任务描述
本关任务:编写一个能计算4∗4矩阵2条对角线元素之和的小程序。

相关知识
为了完成本关任务,你需要掌握:通过控制for循环来对数组中的对角线上的元素进行相加。
#####for语句
基本语法:基于for实现循环的基本语法如下:

for(1.赋值语句或者省略;2.判断语句或者省略;3.执行语句或者省略){
    需循环的语句或者代码块
}
编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:1 2 3 4 1 2 3 4 4 3 2 1 1 2 3 4
预期输出:
sum=20.000000

 

#include <stdio.h>
int main()
{
	int i, j;
	float a[4][4], sum = 0;
	/********** Begin *********/
		// 请在此处添加你的代码
        for(i=0;i<4;i++){
        for (j = 0; j < 4; j++) {
            scanf("%f",&a[i][j]);
        }}
    // 计算主对角线和副对角线元素之和
    for (i = 0; i < 4; i++) {
        sum += a[i][i];           // 主对角线元素
        sum += a[i][3 - i];       // 副对角线元素
        
    }
	/********** End **********/
	printf("sum=%f",sum);
	return 0;
}

第6关:实验17 排序与查找
任务描述
本关任务:编写一个采用折半查找法查找数组中的数的小程序。

要求输入一个数组,数组的大小为5,首先将其按照从小到大的顺序排序。

然后输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出无此数。

相关知识
为了完成本关任务,你需要掌握:1.冒泡排序算法,2.折半查找算法。

冒泡排序算法
对拥有n个元素的数组R[n]进行n-1轮比较。第一轮,逐个比较 (R[1], R[2]), (R[2], R[3]), (R[3], R[4]), ……. (R[N-1], R[N]),最大的元素被移动到R[n]上。第二轮,逐个比较 (R[1], R[2]), (R[2], R[3]), (R[3], R[4]), ……. (R[N-2], R[N-1]),次大的元素被移动到R[n-1]上。。。。。。。以此类推,直到整个数组从小到大排序。

折半查找算法
首先选取表中间位置的记录,将其关键字与给定关键字 key 进行比较,若相等,则査找成功;若 key 值比该关键字值大,则要找的元素一定在右子表中,则继续对右子表进行折半查找:若 key 值比该关键宇值小,则要找的元素一定在左子表中,继续对左子表进行折半査找。如此递推,直到査找成功或査找失败(或査找范围为 0)

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:1 2 5 4 3 2
预期输出:该数是数组中第2个元素的值

#include <stdio.h>

int main() {
    int i, j, t, a[5], low = 0, mid, high = 4, flag = 0, search_num;

    // 输入数组元素
    for (i = 0; i < 5; i++) {
        scanf("%d", &a[i]);
    }

    // 冒泡排序算法,对数组进行排序
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4 - i; j++) {
            if (a[j] > a[j + 1]) {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }

    // 输入要查找的数
    scanf("%d", &search_num);

    // 折半查找算法
    while (low <= high) {
        mid = (low + high) / 2;
        if (search_num == a[mid]) {
            flag = 1; // 找到了
            break;
        } else if (search_num < a[mid]) {
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }

    // 输出查找结果
    if (flag) {
        printf("该数是数组中第%d个元素的值",mid + 1);
    } else {
        printf("无此数");
    }

    return 0;
}

 

第7关:例7-15 密码检测
任务描述
本关任务:编写一个能实现简单密码检测的小程序。用户通过输入密码字符串,然后和预先设定的密码进行匹配,如果密码正确就输出Yes,否则输出No.
####相关知识

为了完成本关任务,你需要掌握:strcmp()函数。

strcmp()函数
int strcmp(const char *str1, const char *str2)

该函数返回值如下:

如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:
测试输入:password
预期输出:Yes

#include <stdio.h>
#include <string.h>
int main()
{
	char pass[50];
	char pwd[50] = "password";
	scanf("%s",pass);
	/********** Begin *********/
		// 请在此处添加你的代码
        if (strcmp(pass, pwd) == 0) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }
	/********** End **********/
	return 0;
} 

 

第8关:实验19 单词统计
任务描述
本关任务:编写一个能统计输入2行英文中包括多少个单词的小程序。

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:
I love study
I do not believe
预期输出:
总共有7个单词

#include <stdio.h>
#include <string.h>

int main() {
    char line[256];
    int word_count = 0;
    int in_word = 0;

    // 读取两行文本
    for (int i = 0; i < 2; ++i) {
        fgets(line, sizeof(line), stdin); // 使用fgets读取一行文本
        int length = strlen(line);

        // 遍历字符串,统计单词
        for (int j = 0; j < length; ++j) {
            if (line[j] != ' ' && line[j] != '\n' && line[j] != '\t') {
                if (!in_word) {
                    in_word = 1; // 进入单词
                    word_count++; // 单词计数增加
                }
            } else {
                in_word = 0; // 离开单词
            }
        }
    }

    printf("总共有%d个单词", word_count);
    return 0;
}

 

第9关:实验21 求三角形的面积
任务描述
本关任务:编写一个程序,能根据输入的三角形三条边长,判断能否组成三角形。如果能组成三角形,判断是锐角、钝角还是直角三角形,并运用海伦公式计算出三角形面积。

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:3 4 5
预期输出:
直角三角形
三角形的面积是:6.000000

#include <stdio.h>
#include <math.h>
int IsValid( double a, double b, double c );
void JudgeShape( double a, double b, double c );
double Area( double a, double b, double c );
int main()
{
	double a, b, c, s, area;
	scanf("%lf%lf%lf", &a, &b, &c);
	if( IsValid( a, b, c ) )
	{
		JudgeShape ( a, b, c);
		area  = Area( a, b, c);
		
		printf("三角形的面积是:%f", area );
	}
	else
	{
		printf("输入的三条边无法组成三角形");
	}
	
	return 0;
}
int IsValid( double a, double b, double c)
{
	if( a + b <= c )
		return 0;
	if( a + c <= b )
		return 0;
	if( b + c <= a )
		return 0;
	return 1;	 
} 
void JudgeShape( double a, double b, double c )
{
	/********** Begin *********/
		// 请在此处添加你的代码
        double a2 = a * a, b2 = b * b, c2 = c * c;
    
    // 判断三角形类型
    if (a2 + b2 == c2 || a2 + c2 == b2 || b2 + c2 == a2) {
        printf("直角三角形\n");
    } else if (a2 + b2 < c2 || a2 + c2 < b2 || b2 + c2 < a2) {
        printf("钝角三角形\n");
    } else {
        printf("锐角三角形\n");
    }
    /********** End **********/
}
double Area( double a, double b, double c )
{
	/********** Begin *********/
		// 请在此处添加你的代码
        double s = (a + b + c) / 2;
    return sqrt(s * (s - a) * (s - b) * (s - c));
    /********** End **********/
	
}

 

第10关:实验23 约瑟夫环问题
任务描述
本关任务:编写一个能解决约瑟夫环问题的小程序,求出最后一个出列的人的原始编号。

相关知识
约瑟夫环问题的具体描述是:设有编号为1,2,3,..,n的n个(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,才从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人都出列。当任意给定n和m后,设计算法求n个人出圈的次序。

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:4 2
预期输出:最后一个出列的是1

#include <stdio.h>
#include <string.h>
#define N 100
int main()
{

  	int m, n, i, j, k = 0;
	scanf("%d",&n);
    scanf("%d",&m);
  	int a[N] = {0};
    for(i = 0; i < n; i++)
 		a[i] = i+1;
  	while (n > 1)
  	{
		/********** Begin *********/
		    // 请在此处添加你的代码
            k = (k + m - 1) % n; // 计算每次要删除的元素的索引
        for (j = k; j < n - 1; j++) // 将删除的元素后面的元素前移
            a[j] = a[j + 1];
        n--; // 元素总数减一
	    /********** End **********/
  	}
  printf("最后一个出列的是%d", a[0]);
  return 0;

}

 

标签:语句,int,代码,十个,C语言,本关,测试,include,实验课
From: https://blog.csdn.net/2303_80517143/article/details/140477690

相关文章

  • [C语言] 作业8 学生管理系统(结构体实现)
    1、使用结构体完成学生(学号、姓名、性别、成绩)管理系统1>使用菜单实现2>功能1:完成对学生信息的录入,确定人数,完成输入2>功能2:完成对学生信息的输出3>功能3:输出成绩最高和最低学生的信息4>功能4:输出学生的总成绩和平均成绩5>功能5:对学生信息按成绩进行排序,根据传入的......
  • c语言-逻辑运算符和逻辑表达式
    一认识三个逻辑运算符    1.&&“逻辑与”一假则假 2.||“逻辑或”一真则真3.!“逻辑非” 逻辑与和逻辑或都是双目运算符,要求两个操作数;逻辑非为单目运算符优先级为!>算术运算符>关系运算符>&&和|| >赋值运算符  运算符可以通过括号展开或收缩......
  • C语言中的整数类型及其类型转换
    C语言中的整数数据类型C语言中的整型数据就是定点整数,根据位数的不同,可分为字符型(char,8位)、短整型(short或shortint,16位)、整型(int,32位)、长整型(long或longint,在32位机器中为32位,在64位机器中为64位)。char是整型数据中比较特殊的一种,其他如short/int/......
  • 【C语言习题】39.模拟实现atoi
    文章目录作业标题作业内容代码作业标题模拟实现atoi作业内容自行了解库函数atoi的功能,学习使用,并模拟实现atoi函数。文档链接:atoi-C++Reference(cplusplus.com)代码//atoi将一个字符串转化为一个整型#include<stdio.h>#include<assert.h>#include<......
  • 【C语言习题】40.变种水仙花数
    文章目录题目代码题目代码#include<stdio.h>intmain(){inti,j;for(i=10000;i<99999;i++){intsum=0;for(j=10;j<=10000;j=10*j){sum+=(i/j)*(i%j);}if(sum==i)prin......
  • 【c语言】函数递归的一些例题1.编写一个函数,不许创建临时变量,求字符串长度 2.求n的阶
    1.intmy_strlen(char*str){   if(*str!='\0')   {      return1+my_strlen(str+1);//利用递归求字符串长度:递归一次就是多一个字符这样就可以求出字符串的长度了   }   else      return0;}intmain(){   //编写......
  • C语言中的指针:掌握内存的钥匙
    C语言中的指针:掌握内存的钥匙引言       C语言是一种结构化编程语言,它提供了对硬件底层的直接访问,其中最强大的特性之一就是指针。指针允许程序员直接操作内存地址,这对于理解程序的内部工作原理以及优化代码性能至关重要。本文将深入探讨C语言中指针的概念、使用方......
  • C语言指针详解(初级)
    1.指针是什么?指针理解的2个要点:        1.指针是内存中一个最小单元的编号,也就是地址(&)        2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量总结:指针就是地址,口语中说的指针通常指的是指针变量。那我......
  • C语言网络编程(一对多通讯)
    使用C语言实现一个服务器对多个客户端主要技术除了网络编程几个函数的使用外,还用到了线程,实现方式是一个客户端对应一个新的线程Server:#include<pthread.h>//包含线程库的头文件#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h......
  • 嵌入式C语言指针面试题大全(持续更新)
    什么是指针?指针在C语言中的作用是什么?在C语言中,指针是一种变量类型,它存储的是其他变量或数据结构的内存地址,而不是实际的数据值。指针允许程序员直接操作和管理内存,这是C语言的一个重要特性,也是它能够高效地处理资源和进行底层编程的原因之一。指针在C语言中有多种作用,包括......