一、思维导图
二、课后练习
1、提示并输入一个字符串,统计该字符串中字母、数字、空格以及其他字符的个数
#include<myhead.h>
#define M 20
int main(int argc, const char *argv[])
{
int sum_a=0,sum_b=0,sum_c=0,sum_d=0;
char str[M];
printf("please enter string:");
gets(str);
// getchar(); //吸收垃圾字符
//循环判断每个字符
for(int i=0;str[i]!='\0';i++)
{
//字母
if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z'))
sum_a++;
//数字
else if(str[i]>='0'&&str[i]<='9')
sum_b++;
//空格
else if(str[i] == ' ')
sum_c++;
//其他
else
sum_d++;
}
//输出累计数量
printf("字符串中有:字母%d个,数字%d个,空格%d个,其他字符%d个\n",sum_a,sum_b,sum_c,sum_d);
return 0;
}
2、提示并输入一个字符串,求出该字符串中所有数字的总和
#include<myhead.h>
#define M 20
int main(int argc, const char *argv[])
{
int sum = 0;
char str[M];
printf("please enter string:");
gets(str);
//循环判断数字并求和
for(int i=0;str[i]!='\0';i++)
{
if(str[i]>='0' && str[i]<='9')
sum += str[i] -'0';
}
//输出数字总和
printf("字符串中数字的总和为:%d\n",sum);
return 0;
}
3、定义一个4*3的二维整形数组,完成对二维数组的输入、输出。并将该二维数组中每一行的最值放入到一个一维数组中,并对该一维数组进行升序排序后输出。
#include<myhead.h>
int main(int argc, const char *argv[])
{
int arr[4][3]={0};
//二维数组输入
for(int i=0;i<4;i++)
{
for(int j=0;j<3;j++)
{
printf("请输入%d行%d列:",i+1,j+1);
scanf("%d",&arr[i][j]);
}
putchar(10);
}
//二维数组输出
for(int i=0;i<4;i++)
{
for(int j=0;j<3;j++)
{
printf("%d行%d列:%d\n",i+1,j+1,arr[i][j]);
}
putchar(10);
}
//定义一维数组存放二维数组每一行最大值
int brr[4]={0};
//循环二维数组比较选出每一行最大值
for(int i=0;i<4;i++)
{
int max = arr[i][0];
for(int j=1;j<3;j++)
{
if(max<arr[i][j])
max = arr[i][j];
}
brr[i] = max; //将每行最大值存入数组brr
}
//对一维数组进行升序排序
//冒泡排序
for(int i=1;i<4;i++)
{
for(int j=0;j<4-i;j++)
{
if(brr[j]>brr[j+1])
{
int temp = brr[j];
brr[j] = brr[j+1];
brr[j+1] = temp;
}
}
}
printf("冒泡排序升序排序后的结果:");
//循环输出
for(int i=0;i<4;i++)
{
printf("%d\t",brr[i]);
}
putchar(10);
//选择排序
int mini = 0; //记录最值的下标
for(int i=0;i<4;i++) //遍历整个数组找最值
{
mini = i;
//遍历整个数组比较
for(int j=i+1;j<4;j++)
{
if(brr[mini] > brr[j])
{
mini =j; //更新最值下标
}
}
//判断找到的最值是否放在了首位,不是则交换
if(mini !=i)
{
int temp = brr[i];
brr[i] = brr[mini];
brr[mini] = temp;
}
}
//输出一位数组排序后结果
printf("选择排序升序排序后的结果:");
//循环输出
for(int i=0;i<4;i++)
{
printf("%d\t",brr[i]);
}
putchar(10);
return 0;
}
4、提示并输入两个一维整形数组,求这两个数组的交集。
#include<myhead.h>
#define MAX 100
int main(int argc, const char *argv[])
{
//提示并输入两个一维数组
int arr1[MAX],arr2[MAX];
int size1=0,size2=0;
printf("please enter arr1 size1:");
scanf("%d",&size1);
printf("please enter arrry1:\n");
for(int i=0;i<size1;++i)
{
printf("请输入第个%d元素:",i+1);
scanf("%d",&arr1[i]);
getchar();
}
printf("please enter arr2 size2:\n");
scanf("%d",&size2);
printf("please enter arrry2:");
for(int i=0;i<size2;++i)
{
printf("请输入第个%d元素:",i+1);
scanf("%d",&arr2[i]);
getchar();
}
//遍历两个数组比较得出交集
//定义一位数组存储交集
int brr[MAX];
int k =0;
for(int i=0;i<size1;i++)
{
for(int j=0;j<size2;j++)
{
if(arr1[i] == arr2[j])
{
brr[k] = arr1[i];
k++;
}
}
}
//输出交集数组brr
printf("两数组交集为:");
for(int i=0;i<k;i++)
{
printf("%d\t",brr[i]);
}
return 0;
}
5、完成注册和登录功能:
#include<myhead.h>
void regis();
int login();
char old_user[32];
char old_passwd[32];
char new_user[32];
char new_passwd[32];
int main(int argc, char const *argv[])
{
int a,res;
while(1){ //循环执行
printf("***********");
printf("1.注册 2.登录");
printf("***********\n");
scanf("%d",&a);
switch(a){
case 1:
regis();
break;
case 2:
while (1)
{
res = login();
if (res==1)
{
return 0;
}else
{
printf("请重新输入\n");
}
}
break;
default:
break;
}
}
return 0;
}
void regis(){
printf("请输入注册帐号\n");
scanf("%s",old_user);
printf("请输入注册密码\n");
scanf("%s",old_passwd);
}
int login(){
printf("请输入登录帐号\n");
scanf("%s",new_user);
printf("请输入登录密码\n");
scanf("%s",new_passwd);
if (strcmp(old_user,new_user) == 0 && strcmp(old_passwd,new_passwd) == 0)
{
printf("登录成功\n");
return 1;
}else{
return -1;
}
}