思维导图
1> 提示并输入一个字符串,统计该字符串中大写字母、小写字母、数字字符、空格字符的个数并输出
2> 提示并输入一个字符串,将该字符串中的所有字母挑选到一个新数组中,将所有的数字字符挑选到另一个新数组中。并且将数字字符对应的数组降序排序。输出两个数组的结果
3> 请用 C、JAVA、C# 任一种语言,对数组 {3, 2, 10, 1, 23, 15, 82} 进行由小到大的排序。(安在软件)
4> 输入一个字符串,将其逆序后输出?(电工时代)
5> 一个长度为10的数组中重复数据,现要求相同数据只保留一份,其他的用0来代替,被替换的数据移到数组末尾。(数组内容自定) (富士安全,云尖软件开发)
6> 输出一个 int 型数组中最小和第二小的数。(鲁科安全)
7> 将作业连接上的 第二节数组部分的题目完成:5、7、8、10、13、18、20、22、23、26、27、28、29、30
0-C基础知识 答案 · 华清远见工作空间
第一题
#include <stdio.h>
#include <ctype.h>
//1> 提示并输入一个字符串,统计该字符串中大写字母、小写字母、数字字符、空格字符的个数并输出
int main(int argc, const char *argv[])
{
char str[50];
printf("请输入一个字符串\n");
gets(str);//读取输入的字符串
int len = sizeof(str)/sizeof(str[0]);
int Uppercase_letters = 0, lowercase_letters = 0, numeric_characters = 0,
space_characters = 0;//大写字母、小写字母、数字字符、空格字符
for(int i=0;i<len;i++)
{
if(isupper(str[i]))//判断给定字符是否为大写字母
{
Uppercase_letters++;
}
if(islower(str[i]))//判断给定字符是否为小写字母
{
lowercase_letters++;
}
if(isdigit(str[i]))//判断给定字符是否为数字字符
{
numeric_characters++;
}
if(isspace(str[i]))//判断给定字符是否为空格字符
{
space_characters++;
}
}
printf("大写字母个数为:%d",Uppercase_letters);
printf("小写字母个数为:%d",lowercase_letters);
printf("数字字符个数为:%d",numeric_characters);
printf("空格字符个数为:%d",space_characters);
return 0;
}
ubuntu@ubuntu:student_C_2024_11_13$ gcc homework_after_class.c
homework_after_class.c: In function ‘main’:
homework_after_class.c:9:2: warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]
gets(str);//读取输入的字符串
^~~~
fgets
/tmp/ccnIEUop.o:在函数‘main’中:
homework_after_class.c:(.text+0x37): 警告: the `gets' function is dangerous and should not be used.
ubuntu@ubuntu:student_C_2024_11_13$ ./a.out
请输入一个字符串
qaz123 QWERT qwertHGvff 123487
大写字母个数为:11小写字母个数为:12数字字符个数为:9空格字符个数为:8
第二题
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//2> 提示并输入一个字符串,将该字符串中的所有字母挑
//选到一个新数组中,将所有的数字字符挑选到
//另一个新数组中。并且将数字字符对应的数组
//降序排序。输出两个数组的结果
char str[50];//原数组
char str1[20];//字母数组
char str2[20];//数字数组
printf("请输入一个字符串\n");
gets(str);//读取输入的字符串
int len = strlen(str);
int count1 = 0;//字母数组下标计数
int count2 = 0;//数字数组下标计数
for(int i=0;i<len;i++)
{
if(isalpha(str[i]))//判断给定字符是否为字母
{
str1[count1]=str[i];
count1++;
}
else if(isdigit(str[i]))//判断给定字符是否为数字字符
{
str2[count2]= str[i];
count2++;
}
else
{
continue;
}
}
//数字数组降序排列
int len1 = strlen(str1);
int len2 = strlen(str2);//数组长度
for(int i=0;i<len1;i++)
{
int arr = i;//目前对比值的下标
int temp,flag = 0;//中间变量,标识变量
for(int j=i;j<len2;j++)
{
if(str2[arr]<str2[j])//比较
{
flag = 1;
arr = j;
}
}
if(flag !=0)//将大的排到前面
{ temp = str2[arr];
str2[arr] = str2[i];
str2[i] = temp;
}
}
//输出两个数组
printf("字母是:");
for(int i = 0;i<len1;i++)
{
printf("%c ",str1[i]);
}
putchar(10);
printf("数字是:");
for(int i = 0;i<len2;i++)
{
printf("%c ",str2[i]);
}
putchar(10);
return 0;
}
ubuntu@ubuntu:student_C_2024_11_13$ gcc homework_after_class.c
homework_after_class.c: In function ‘main’:
homework_after_class.c:57:2: warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]
gets(str);//读取输入的字符串
^~~~
fgets
/tmp/ccwuB0g4.o:在函数‘main’中:
homework_after_class.c:(.text+0x40): 警告: the `gets' function is dangerous and should not be used.
ubuntu@ubuntu:student_C_2024_11_13$ ./a.out
请输入一个字符串
cdgf gfv434rfdjg vfdjgvf234
字母是:c d g f g f v r f d j g v f d j g v f
数字是:4 4 4 3 3 2
第三题
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//3> 请用 C、JAVA、C# 任一种语言,
//对数组 {3, 2, 10, 1, 23, 15, 82} 进行由小到大的排序。
char arr[] = {3, 2, 10, 1, 23, 15, 82};
int len = sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<len;i++)
{
for(int j=0;j<len-1;j++)
{
if(arr[j]>arr[j+1])
{
arr[j]=arr[j+1]+arr[j];
arr[j+1]=arr[j]-arr[j+1];
arr[j]=arr[j]-arr[j+1];
}
}
}
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
ubuntu@ubuntu:student_C_2024_11_13$ gcc homework_after_class.c
ubuntu@ubuntu:student_C_2024_11_13$ ./a.out
1 2 3 10 15 23 82
第四题
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//4> 输入一个字符串,将其逆序后输出?
char str[50]="";
printf("输入一个字符串\n");
gets(str);
int len = strlen(str);
for(int i=0;i<len/2;i++)
{
str[i] = str[len-i-1]+str[i];
str[len-i-1] = str[i]-str[len-i-1];
str[i] = str[i] - str[len-i-1];
}
puts(str);
putchar(10);
return 0;
}
ubuntu@ubuntu:student_C_2024_11_13$ ./a.out
输入一个字符串
cgdrthj12345
54321jhtrdgc
第五题
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//5> 一个长度为10的数组中重复数据,
//现要求相同数据只保留一份,其他的用0来代替,
//被替换的数据移到数组末尾。(数组内容自定)
char str[10] = {78,23,78,95,94,20,20,98,54,54};
int len = sizeof(str)/sizeof(str[0]);
for(int i = 0;i<len;i++)//对数的遍历次数
{
int qa = str[i];
for(int j = i+1;j<len;j++)//用几个数和全部的数比对
{
if(qa == str[j])//判断重复
{
str[j] = 0;//重复的数用0代替
}
}
}
for(int k=0;k<len-1;k++)//把0换到末尾
{
if(str[k] == 0)
{
for(int j=k;j<len-1;j++)
{
str[j] = str[j+1];
}
str[len] = str[k];
}
}
printf("结果为:\n");
for(int i = 0;i<len;i++)
{
printf("%d ",str[i]);
}
putchar(10);
return 0;
}
ubuntu@ubuntu:student_C_2024_11_13$ ./a.out
结果为:
78 23 95 94 20 98 54 0 0 0
第六题
#include <stdio.h>
#include <ctype.h>
#include <string.h>
//6> 输出一个 int 型数组中最小和第二小的数。
int main(int argc, const char *argv[])
{
int arr[] = {45,56,23,78,1,89,23,56,45,95,12};
int a = arr[0];//第一小
int len = sizeof(arr)/sizeof(arr[0]);
int b = arr[1];//第二小
for(int i=0;i<len;i++)//找出第一小
{
if(arr[i]<=a)
{
a = arr[i];
}
}
for(int i=0;i<len;i++)//找出第二小
{
if(arr[i]<=b||arr[i]>=a)
{
b = arr[i];
}
}
printf("第一小%d ,第二小%d\n",a,b);
return 0;
}
ubuntu@ubuntu:student_C_2024_11_13$ ./a.out
第一小1 ,第二小12
第七题
1.D
2. 9,2,3,4,5,6,7,8,1
9,8,3,4,5,6,7,2,1
9,8,7,4,5,6,3,2,1
9,8,7,6,5,4,3,2,1
6.D
9.C
11.B
12.A
14.D
15.C
16. 9,2,3,4,5,6,7,8,1
9,8,3,4,5,6,7,2,1
9,8,7,4,5,6,3,2,1
9,8,7,6,5,4,3,2,1
17.B
19. 10 10 8 10
21.D
24.A
25.a[j]
a[j+1]
k