数组作业1

1、提示并输入一个字符串,统计该字符串中字母、数字、空格以及其他字符的个数

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100

int main(int argc, const char *argv[])
{
    char str[MAX]; // 假设输入的字符串最大长度为100
    printf("请输入一个字符串: ");
    gets(str); 
 
    int letters = 0, digits = 0, spaces = 0, others = 0;
    int len = strlen(str);
    for(int i = 0; i < len; i++) 
	{
        char ch = str[i];
        if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch >= 'Z')) 
		{
            letters++;
        } 
		else if (ch >= '0' && ch <= '9') 
		{
            digits++;
        } 
		else if (ch == ' ') 
		{
            spaces++;
        } 
		else 
		{
            others++;
        }
    }
 
    printf("字母: %d, 数字: %d, 空格: %d, 其他: %d\n", letters, digits, spaces, others);
    return 0;
}

 运行结果:

2、提示并输入一个字符串,求出该字符串中所有数字的总和

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100

int main(int argc, const char *argv[])
{
    char str[MAX];  // 假设输入的字符串最大长度为100
    int sum = 0, temp;
    printf("请输入一个字符串: ");
    gets(str);   
    for(int i = 0; i < strlen(str); i++) 
	{
        if(str[i] >= '0' && str[i] <= '9') 
		{  // 判断当前字符是否是数字
            temp = str[i] - '0';  // 转换字符型数字为整型数字
            sum += temp;  // 累加到总和中
        }
    }
 
    printf("字符串中所有数字的总和是: %d\n", sum);  // 输出总和
    return 0;
}

运行结果:

3、定义一个4*3的二维整形数组,完成对二维数组的输入、输出。并将该二维数组中每一行的最值放入到一个一维数组中,并对该一维数组进行升序排序后输出。

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 3          
#define N 4          

int main(int argc, const char *argv[])
{
    int arr[M][N] = {0};

    for(int i=0; i<M; i++)         
	{
        for(int j=0; j<N; j++)      
		{
            printf("请输入第%d行%d列的元素:", i+1, j+1);
            scanf("%d", &arr[i][j]);
        }
        printf("\n");
    }
    printf("数组元素分别是:\n");
    for(int i=0; i<M; i++)
    {
        for(int j=0; j<N; j++)
        {
            printf("%d\t", arr[i][j]);
        }
        printf("\n");
    }

	int max[M] = {0};
    for(int i=0; i<M; i++)        
	{
        max[i] = arr[i][0];

        for(int j=0; j<N; j++)
        {
            if(max[i] < arr[i][j])
            {
                max[i] = arr[i][j];
            }
        }

		printf("第%d行的最大值为:%d\n", i+1, max[i]);
     }
	 for(int i=1;i<M;i++)
	 {
		 for(int j=0;j<M-i;j++)
		 {
			 if(max[j] > max[j+1])
			 {
				 int temp = max[j];
				 max[j] = max[j+1];
				 max[j+1] = temp;
			 }
		 }
	 }
	printf("升序后的结果为:");
    for(int i=0; i<M; i++)
    {
        printf("%d\t", max[i]);
    }
    putchar(10);

    return 0;
}

运行结果:

4、提示并输入两个一维整形数组,求这两个数组的交集。

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 100                  

int main(int argc, const char *argv[])
{
    int arr1[M], arr2[M], n1, n2, i, j;
    printf("请输入第一个数组的元素个数: ");
    scanf("%d", &n1);
    printf("请输入第一个数组的元素: ");
    for (i = 0; i < n1; i++) 
	{
        scanf("%d", &arr1[i]);
    }
 
    printf("请输入第二个数组的元素个数: ");
    scanf("%d", &n2);
    printf("请输入第二个数组的元素: ");
    for (i = 0; i < n2; i++) 
	{
        scanf("%d", &arr2[i]);
    }
 
    printf("交集为: ");
    for (i = 0; i < n1; i++) 
	{
        for (j = 0; j < n2; j++) 
		{
            if (arr1[i] == arr2[j]) 
			{
                printf("%d ", arr1[i]);
                break;
            }
        }
    }
    putchar(10);
 
    return 0;
}

运行结果:

5、完成注册和登录功能:使用两个一维字符数组存储账户和密码

注册:完成对账号和密码的输入

登录:将登录账号和密码跟注册的账号和密码进行匹配,如果相等,则登录成功,否则,登录失败

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define MAX_USERNAME_LEN 32
#define MAX_PASSWORD_LEN 32
#define MAX_USERS 10
 
typedef struct {
    char username[MAX_USERNAME_LEN + 1];
    char password[MAX_PASSWORD_LEN + 1];
} UserAccount;
 
UserAccount users[MAX_USERS];
int numUsers = 0;
 
void registerUser() {
    if (numUsers >= MAX_USERS) {
        printf("Maximum number of users reached.\n");
        return;
    }
 
    char username[MAX_USERNAME_LEN + 1];
    char password[MAX_PASSWORD_LEN + 1];
    char passwordConfirm[MAX_PASSWORD_LEN + 1];
 
    printf("Enter username: ");
    scanf("%32s", username);
 
    printf("Enter password: ");
    scanf("%32s", password);
 
    printf("Confirm password: ");
    scanf("%32s", passwordConfirm);
 
    if (strcmp(password, passwordConfirm) != 0) {
        printf("Passwords do not match.\n");
        return;
    }
 
    strcpy(users[numUsers].username, username);
    // 使用bcrypt或其他安全算法存储密码
    // 这里为了简化,我们不安全地直接存储密码
    strcpy(users[numUsers].password, password);
    numUsers++;
 
    printf("Registration successful.\n");
}
 
int loginUser() {
    char username[MAX_USERNAME_LEN + 1];
    char password[MAX_PASSWORD_LEN + 1];
 
    printf("Enter username: ");
    scanf("%32s", username);
 
    printf("Enter password: ");
    scanf("%32s", password);
 
    for (int i = 0; i < numUsers; i++) {
        if (strcmp(users[i].username, username) == 0) {
            // 使用bcrypt或其他安全算法比较密码
            // 这里为了简化,我们不安全地直接比较密码
            if (strcmp(users[i].password, password) == 0) {
                printf("Login successful.\n");
                return 1;
            } else {
                printf("Invalid password.\n");
                return 0;
            }
        }
    }
 
    printf("User not found.\n");
    return 0;
}
 
int main() {
    int choice;
    do {
        printf("\n1. Register\n2. Login\n0. Exit\n");
        scanf("%d", &choice);
 
        switch (choice) {
            case 1:
                registerUser();
                break;
            case 2:
                if (!loginUser()) {
                    // 登录失败,可以选择重新登录
                }
                break;
            case 0:
                // 退出程序
                break;
            default:
                printf("Invalid choice.\n");
                break;
        }
    } while (choice != 0);
 
    return 0;
}

运行结果:

6、思维导图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值