练习
1> 提示并输入一个字符串,统计该字符串中大写字母、小写字母、数字字符、空格字符的个数并输出
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char ch[100]; // 用于存储用户输入的字符串
gets(ch); // 获取用户从键盘输入的字符串
int count[4] = {0}; // 分别用于记录大写字母、小写字母、空格字符、数字字符的个数
// 遍历输入的字符串ch,根据字符类型统计相应字符的个数
for (int i = 0; i < strlen(ch); i++) {
if (isupper(ch[i])) { // 如果当前字符是大写字母
count[0]++; // 大写字母个数加1
}
if (islower(ch[i])) { // 如果当前字符是小写字母
count[1]++; // 小写字母个数加1
}
if (isspace(ch[i])) { // 如果当前字符是空格字符
count[2]++; // 空格字符个数加1
}
if (isdigit(ch[i])) { // 如果当前字符是数字字符
count[3]++; // 数字字符个数加1
}
}
// 输出统计
printf("大写字母:%d\n小写字母:%d\n空格字符:%d\n数字:%d\n",
count[0], count[1], count[2], count[3]);
return 0;
}
2> 提示并输入一个字符串,将该字符串中的所有字母挑选到一个新数组中,将所有的数字字符挑选到另一个新数组中。并且将数字字符对应的数组降序排序。输出两个数组的结果
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char ch[255] = ""; // 用于存储输入的字符串,初始化为空字符串
char number[255] = ""; // 用于存储从输入字符串中提取出来的数字字符,初始化为空字符串
char alpha[255] = ""; // 用于存储从输入字符串中提取出来的字母字符,初始化为空字符串
int count[2] = {0}; // 定义count[0]用于记录alpha数组中字符的个数,count[1]用于记录number数组中字符的个数,初始化为0
gets(ch); // 获取用户从键盘输入的字符串
// 遍历输入的字符串ch,将其中的字母字符存入alpha数组,数字字符存入number数组
for (int i = 0; i < strlen(ch); i++) {
if (isalpha(ch[i])) { // 如果当前字符是字母(通过isalpha函数判断)
alpha[count[0]++] = ch[i]; // 将该字母存入alpha数组,并使count[0]自增,记录存入的字母个数
}
if (isdigit(ch[i])) { // 如果当前字符是数字(通过isdigit函数判断)
number[count[1]++] = ch[i]; // 将该数字存入number数组,并使count[1]自增,记录存入的数字个数
}
}
int numlen = strlen(number); // 获取number数组中当前存储的数字字符的长度,即数字字符的个数
// 使用冒泡排序算法对number数组中的数字字符进行升序排序
for (int i = 1; i < numlen; i++) {
for (int j = 0; j < numlen - i; j++) {
if (number[j] < number[j + 1]) { // 如果当前数字字符大于下一个数字字符
char temp = number[j]; // 交换这两个数字字符,进行排序调整
number[j] = number[j + 1];
number[j + 1] = temp;
}
}
}
printf("字符数组为:");
puts(alpha); // 输出存储字母字符的alpha数组
printf("数字组为:");
puts(number); // 输出存储经过排序后的数字字符的number数组
return 0;
}
3> 请用 C、JAVA、C# 任一种语言,对数组 {3, 2, 10, 1, 23, 15, 82} 进行由小到大的排序。(安在软件)
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(int argc, const char *argv[])
{
int number[]={3,2,10,1,23,15,82};
int len=sizeof(number)/sizeof(number[0]);
//选择从小到大
for(int i=0;i<len;i++){
int flag=i; //默认每趟第一位最小
for(int j=i;j<len;j++){
//循环每一项与最小值判断
//如果发现更小的记录下来
if(number[flag]>number[j]){
flag=j;
}
}
//当前位置和最小的位置进行交换
int temp=number[i];
number[i]=number[flag];
number[flag]=temp;
}
puts("从小到大");
for(int i=0;i<len;i++){
printf("%d ",number[i]);
}
printf("\n");
//冒泡从大到小
for(int i=1;i<len;i++){
for(int j=0;j<len-i;j++){
if(number[j]<=number[j+1]){
int temp=number[j];
number[j]=number[j+1];
number[j+1]=temp;
}
}
}
puts("从大到小");
for(int i=0;i<len;i++){
printf("%d ",number[i]);
}
}
4> 输入一个字符串,将其逆序后输出?(电工时代)
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char ch[256];
gets(ch);
char p=0,q=0;
int len=strlen(ch);
for(int i=0;i<len/2;i++){
int temp=ch[i];
ch[i]=ch[len-i-1];
ch[len-i-1]=temp;
}
puts(ch);
}
5> 一个长度为10的数组中重复数据,现要求相同数据只保留一份,其他的用0来代替,被替换的数据移到数组末尾。(数组内容自定) (富士安全,云尖软件开发)
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char ch[10]={'a','0','q','a','1','2','1','0','q','d'};
char flags[10]={'0'};
int count=0;
//从起始位置开始比较
for(int i=0;i<10;i++){
for(int j=i+1;j<10;j++){
if(ch[i]==ch[j]&&j!=i){
ch[j]='0';
}
}
}
for(int i=0;i<10;i++){
if(ch[i]!='0'){
flags[count++]=ch[i];
}
}
for(int i=count;i<10;i++){
flags[i]='0';
}
for(int i=0;i<10;i++){
printf("%c ",flags[i]);
}
printf("\n");
}
6> 输出一个 int 型数组中最小和第二小的数。(鲁科安全)
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a[]={2,1,2,3,4,5,6,9,8,7,12,32,12,51,15};
int len=sizeof(a)/sizeof(a[0]);
int min1,min2;
for(int i=0;i<1;i++){
int min1=a[i];
for(int j=i;j<len;j++){
if(min1>a[j]){
min1=a[j];
}
}
int temp=a[min1];
a[min1]=a[i];
a[i]=temp;
}
printf("第一小:%d 第二小%d\n",a[0],a[1]);
return 0;
}
7> 将作业连接上的 第二节数组部分的题目完成:5、7、8、10、13、18、20、22、23、26、27、28、29、30