首页 > 其他分享 >坐牢第七天 20040710

坐牢第七天 20040710

时间:2024-07-11 08:58:59浏览次数:12  
标签:20040710 定义 int 坐牢 strcpy 数组 printf 第七天 函数

1.作业:

完成学生管理系统

1> 使用菜单完成

2> 有学生的信息录入功能:输入学生个数,并将学生的姓名、分数录入

3> 查看学生信息:输出所有学生姓名以及对应的分数

4> 求出学习最好的学生信息:求最大值

5> 按姓名将所有学生进行升序排序

6> 按成绩将所有学生进行升序排序

要求每个功能使用函数完成

代码:

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

#define N 100
//定义全局变量
int num;
char name[N][20]={""};
int score[N]={0};
void caidan()//编辑菜单
{
    printf("\t\t=====学生管理系统=====\n");
    printf("\t\t1.录入信息\n");
    printf("\t\t2.查看信息\n");
    printf("\t\t3.成绩最好的\n");
    printf("\t\t4.按姓名将所有学生进行升序排序\n");
    printf("\t\t5.按成绩将所有学生进行升序排序\n");
    printf("\t\t0.退出\n");
  
}
void enter()//录入函数
{

  printf("录入几个学生:");
  scanf("%d",&num);
  getchar();
  for(int i=0;i<num;i++)
  {
    printf("他/她的姓名为:");
    scanf("%s",name[i]);
    printf("他/她的成绩为:");
    scanf("%d",&score[i]);
  }
}

void view()//输出函数
{
  for(int i=0;i<num;i++)
  {
    printf("%s的成绩为:%d\n",name[i],score[i]);
  }
}
void max()//求最大值函数
{
    int maxi=score[0];
    for(int i=0;i<num;i++)
    {
        if(maxi<score[i+1])
        {
           maxi=score[i+1];
        }
    }
    printf("成绩最好的:%d",maxi);
}
void shengxu4()//按姓名升序
{
    char temp[20] = "";        
    for(int i=1; i<num; i++)  
    {
        for(int j=0; j<num-i; j++)   
        {
            if(strcmp(name[j], name[j+1]) > 0)
            {
                strcpy(temp, name[j]);
                strcpy(name[j], name[j+1]);
                strcpy(name[j+1], temp);
                int temp = score[j];
                score[j] = score[j+1];
                score[j+1] = temp;

            }
        }
    }
      for(int i=0;i<num;i++)
    {
      printf("%s的成绩为:%d\n",name[i],score[i]);
    }
}
void shengxu5()//按成绩升序
{
    char temp2[20] = "";
	for(int i=1; i<num; i++)
	{
		for(int j=0; j<num-i; j++)
		{
			if(score[j]>score[j+1])
            {
                int temp = score[j];
                score[j] = score[j+1];
                score[j+1] = temp;
                strcpy(temp2, name[j]);
                strcpy(name[j], name[j+1]);
                strcpy(name[j+1], temp2);
            }
		}
	}
    for(int i=0;i<num;i++)
    {
      printf("%s的成绩为:%d\n",name[i],score[i]);
    }
}
/******************主程序***************************/
int main(int argc, char const *argv[])
{   
    int menu=0;
    while (1)
    {
        caidan();//调用菜单
        printf("请输入:");
        scanf("%d",&menu);
        getchar();
        switch (menu)
        {
            case 1:
            {
             enter();
            }
            break;
            case 2:
            {
             view();
            }     
            break;
            case 3:
            {
             max();
            } 
            break;
            case 4:
            {
             shengxu4();
            }
            break;
            case 5:
            {
            shengxu5();
            }
            break;
            case 0:goto END;
            default:printf("输入错误\n");
        }
    }
   END:
   return 0;
}

输出结果:

2.笔记

1.二维字符数组剩余部分

1.1引入目的:对于处理多个一维字符数组不方便时,可以引入二维字符数组

从该角度来看,二维字符数组其实就是一维字符串数组

1.2定义格式:char 数组名[常量1][常量2];

常量1:表示的是定义的字符串个数

常量2:表示的是每个字符串的最大长度+1

1.3初始化方式

1.单字符初始化:和二维整型一样

2.字符串初始化

1.4二维字符数组输入输出、求最值、排序

#include<myhead.h>
#define MAX 5               //定义字符串的个数
 
int main(int argc, const char *argv[])
{
	//定义一个二维字符数组
	char arr[MAX][20] = {""};      //定义了一个长度为MAX的字符串数组
 
	//完成对字符串的输入输出
	for(int i=0; i<MAX; i++)
	{
		printf("请输入第%d个字符串:", i+1);
		scanf("%s", arr[i]);
	}
	
	//输出所有的字符串
	printf("目前的字符串分别是:");
	for(int i=0; i<MAX;i++)
	{
		printf("%s\t", arr[i]);
	}
	puts("");
 
	//求最大字符串
	char max[20] = "";       //用于存储最大字符串
	//max = arr[0];      //字符串不能直接使用等号进行赋值
	strcpy(max, arr[0]);     //将第一个字符串当做最值
	for(int i=0; i<MAX; i++)
	{
		//跟任意一个字符串进行比较
		if(strcmp(max,arr[i]) < 0)
		{
			//更新最值
			strcpy(max, arr[i]);
		}
	}
 
	printf("最大字符串为:%s\n", max);
 
	//将所有字符串进行排序
	char temp[20] = "";        //交换变量
	for(int i=1; i<MAX; i++)  //外层控制趟数
	{
		for(int j=0; j<MAX-i; j++)   //控制元素
		{
			if(strcmp(arr[j], arr[j+1]) > 0)
			{
				//交换三部曲
				strcpy(temp, arr[j]);
				strcpy(arr[j], arr[j+1]);
				strcpy(arr[j+1], temp);
			}
		}
	}
 
	//输出排序后的结果
	printf("目前的字符串分别是:");
	for(int i=0; i<MAX;i++)
	{
		printf("%s\t", arr[i]);
	}
	puts("");
 
 
	return 0;
}

2.函数概述

2.1引入目的

1. 系统会提供一些库函数供大家使用,但是,提供的函数毕竟有限,如果想要使用特别定制的函数,需要自己封装

2.对于一些重复调用的语句块而言,如果不加封装的话,会使得代码比较冗余

3. 为了提高编程效率,我们引入了函数,能够做到一处修改,处处修改

4.目前接触的函数:printf、scanf、putchar、getchar、puts、gets、strlen、strcmp、strcat、strcpy

2.2函数的定义

1.函数:执行特定功能的一段代码块

2.定义格式: 返回值类型 函数名(参数列表) { 函数体代码 }

2.3函数的分类

1. 对于函数定义格式而言,函数名和函数体代码是不可变的,但是,函数的返回值类型和函数的参数是可变的

2. 对于一个函数而言,返回值是可有可无的,参数也是可有可无的,根据此,函数分为四大类

3. 关于函数的相关概念

主调函数:调用别的函数的函数叫做主调函数

被调函数:被别的函数调用的那个函数称为被调函数

形式参数:也称形参,定义函数时,括号里面的参数称为形参

实际参数:也称实参,函数调用时,括号里面的参数称为实参

4. 函数调用格式:变量名 = 函数名(实参列表);

3.函数与变量的关系

1. 局部变量:定义在函数内部的变量称为局部变量

局部变量的表现形式:定义在函数体内的变量

函数的形式参数

定义在语句块内的变量

局部变量的作用域:从定义开始,到函数结束(语句块内的变量到语句结束)

注意:不同作用域下的局部变量可以同名

2..全局变量:也称全程变量和外部变量,就是定义在函数体外部的变量

作用域:从定义开始到整个程序结束为止,该变量定义后的任意一个函数都可以使用他

注意:局部变量可以跟全局变量同名,函数体内使用的默认是局部变量(就近访问原则,局部优先原则)

如果非要使用全局变量,也不是不可以,需要使用关键字 extern 来声明

3. 静态局部变量:在函数体内定义一个功能上类似于全局变量的局部变量

定义格式:static 数据类型 变量名;

作用域:只能在函数体内被使用,但是,生命周期随着整个程序的结束而结束

4.数组作为函数的参数传递

1.数组的要素:起始地址(数组名),数组的容量

2. 数组作为函数参数传递,属于地址传递,形参内容的改变,实参内容也会跟着改变

3. 定义形参接受数组时,接受数组名时,只需要定义一个变量标识数组即可

标签:20040710,定义,int,坐牢,strcpy,数组,printf,第七天,函数
From: https://blog.csdn.net/m0_62828714/article/details/140333783

相关文章

  • 代码随想录算法训练营第七天 | 454.四数相加
    1、四数相加不需要考虑去重四个数组采两个数组一起相加的遍历方式,为了缩短时间复杂度。classSolution{public:intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums4){unordered_map<int,int>......
  • 数据结构小学期第七天
    今天继续学习Springboot的项目实战今天了解了一下,如何在自己登陆后,还能让界面知道是谁在进行操作,这个功能的实现需要JWT令牌的作用我们需要先引入一个JWT依赖1<!--java-JWT坐标-->2<dependency>3<groupId>com.auth0</groupId>4<artifa......
  • JAVA零基础小白自学日志——第七天
    文章目录一、类1.类名2.这是啥东西?虽然在类里,但是不在构造方法里面,也不在语句块里,它是谁?它要干啥?3.方法二、对象(重头戏来喽)1.类与对象的关系2.类不是对象,对象由类构造3.类和对象到底在程序里是什么样的今日提要:类和对象(什么?你说你没对象!?去去去,别打岔,我这对象不是你......
  • 代码随想录算法训练营第七天| 454. 两数相加Ⅱ、383.赎金信、15.三数之和、18.四数之
    454题拆成两块各自匹配化成两个O(n^2)运算1classSolution{2public:3intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums4){4//四个数组拆分成两块两块5unordered_ma......
  • 算法第七天:leetcode之209.长度最小的子数组
    一、长度最小的子数组  209.长度最小的子数组的链接:https://leetcode.cn/problems/minimum-size-subarray-sum/ 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组[numsl,numsl+1,...,num......
  • 团队冲刺第七天
    过去一天完成了哪些任务对专栏进行开发,可以发文章,查看文章接下来的计划优化各个页面继续学习flutter和Springboot完成AI对话的测试还剩下哪些任务优化主页面专栏功能的管理的优化内置AI对话功能进行测试遇到了哪些困难边学习边进行功能开发问题多多Springboo......
  • 代码随想录算法训练营第七天 |
    454.四数相加题目:给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0<=i,j,k,l<nnums1[i]+nums2[j]+nums3[k]+nums4[l]==0解题:思路:使用map,key为a+b,value为出现次数。再遍历k、l寻找0-a-b。关键:遍历......
  • 代码随想录算法训练营第七天 | 四数之和、赎金信、三数之和、四数之和2
    代码随想录算法训练营第七天383赎金信https://leetcode.cn/problems/ransom-note/submissions/537782865/383赎金信代码随想录https://programmercarl.com/0383.赎金信.html#思路四数之和2https://leetcode.cn/problems/4sum-ii/四数之和2代码随想录https://programmerca......
  • 代码随想录算法训练营第七天|454(四数相加||),383(赎金信),15(三数之和),18(四数之和)
    哈希三数之和和四数之和,和两数之和一样,是对一个数组来进行检索。因为要求元组不能重复,需要用多指针的方法来遍历和判断。由于两数之和没有这个要求且要返回下标,所以用了哈希表。但哈希表难以检测是否重复,不如双指针直接。四数相加||是对四个数组来做相加,且不要求元组重复,可用哈......
  • 2024.4.26日团队开发第七天
    学习时间1h代码行数50行博客量1篇学习内容主要完成了视频发布页面的展示代码<template><viewstyle="height:700px;"><viewclass="blank"></view><cu-custombgColor="bg-black":isBack="true&q......