点个关注不迷路~
如果有错误可以留言,会及时答复的~
(注意:没有main函数的建议走提交路线,避开露一手)
问题 AA: C语言实习题五——5.用指针实现查找二维数组中最大数及其位置
#include<stdio.h> // 引入标准输入输出库 int main() // 主函数 { int a[3][4]={0}; // 定义一个3行4列的整型数组a,并初始化为0 for(int i=0;i<3;i++) // 外层循环,遍历数组a的每一行 { for(int j=0;j<4;j++) // 内层循环,遍历数组a的每一列 { scanf("%d",&a[i][j]); // 从标准输入读取一个整数,赋值给数组a的当前元素 } } int m,n; // 定义两个整型变量m和n,用于存储最大值的行号和列号 int b=-0x3f3f3f3f; // 定义一个整型变量b,初始化为一个较大的负数,用于存储最大值 for(int i=0;i<3;i++) // 外层循环,遍历数组a的每一行 { for(int j=0;j<4;j++) // 内层循环,遍历数组a的每一列 { if(b<a[i][j]) // 如果当前元素大于b { b=a[i][j]; // 更新最大值b m=i; // 更新最大值所在的行号m n=j; // 更新最大值所在的列号n } } } printf("%d %d %d\n",n,m,b); // 输出最大值所在的列号、行号和最大值本身 return 0; // 返回0表示程序正常结束 }
问题 AB: C语言实习题五——6.用指针实现子字符串提取
#include <stdio.h> int main() { // 定义两个字符数组,分别用于存储源字符串和目标字符串 char zfsour[100], zfdest[100]; // 将源字符串的地址赋给指针变量pzfsour char* pzfsour = (char*)zfsour; // 初始化目标字符串的指针变量为NULL char* pzfdest = NULL; // 从标准输入读取源字符串 scanf("%s", zfsour); // 定义两个整数变量m和n,用于存储需要截取的子串的长度 int m, n; // 从标准输入读取m和n的值 scanf("%d%d", &m, &n); // 将源字符串的指针向后移动m个位置,即跳过前m个字符 pzfsour += m; // 将目标字符串的指针指向源字符串的第m+n个字符的位置 pzfdest = pzfsour + n; // 定义一个整数变量i,用于记录已经复制到目标字符串的字符个数 int i = 0; // 使用for循环,将源字符串中从第m个字符开始的n个字符复制到目标字符串中 for (pzfsour, i; pzfsour < pzfdest; pzfsour++,i++) { // 将源字符串中的当前字符复制到目标字符串中 zfdest[i] = *pzfsour; } // 在目标字符串的末尾添加空字符'\0',表示字符串结束 zfdest[i] = '\0'; // 将目标字符串输出到标准输出 printf("%s\n",zfdest); return 0; }
问题 AC: C语言实习题六——1.整数交换函数设计
#include<stdio.h> // 定义一个交换函数,用于交换两个整数的值 void Swap(int m, int n) { int t = m; // 将m的值赋给临时变量t m = n; // 将n的值赋给m n = t; // 将t的值(即原来的m的值)赋给n } int main() { int a, b; scanf("%d%d", &a, &b); // 从标准输入读取两个整数a和b Swap(a, b); // 调用Swap函数交换a和b的值 printf("%d %d\n", b, a); // 输出交换后的a和b的值 return 0; }
问题 AD: C语言实习题六——2.数字字符个数统计函数设计
#include<stdio.h> #include<string.h> // 定义一个函数,用于计算字符串中数字的个数 int Caculat(char *str) { int t=0; // 初始化计数器t为0 for(int i=0;i<strlen(str);i++) // 遍历字符串中的每个字符 { if(str[i]>='0'&&str[i]<='9') // 如果当前字符是数字(ASCII码在48到57之间) { t++; // 计数器t加1 } } return t; // 返回数字的个数 } int main() { char a[100]; // 定义一个字符数组a,用于存储输入的字符串 fgets(a,100,stdin); // 从标准输入读取一行字符串,存储到字符数组a中 printf("%d\n",Caculat(a)); // 调用Caculat函数计算字符串中数字的个数,并输出结果 return 0; // 程序正常结束,返回0 }
问题 AE: C语言实习题六——3.排序函数设计
#include<stdio.h> // 定义一个交换函数,用于交换两个整数的值 void Swap(int *p, int *q) { int t = *p; *p = *q; *q = t; } // 定义一个冒泡排序函数,用于对整数数组进行升序排序 void Buble(int a[], int n) { for (int i = n - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (a[j] < a[j + 1]) { Swap(&a[j], &a[j + 1]); } } } } int main() { int n; scanf("%d", &n); // 输入数组长度 int a[100]; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); // 输入数组元素 } Buble(a, n); // 调用冒泡排序函数对数组进行排序 for (int i = 0; i < n; i++) { printf("%d ", a[i]); // 输出排序后的数组元素 } printf("\n"); return 0; }
问题 AF: C语言实习题六——4.矩阵转置函数设计
#include <stdio.h> #include <stdlib.h> // 定义一个函数,用于计算矩阵的转置 void matrixTranspose(int** arr, int n) { // 遍历矩阵的每一行 for (int i = 0; i < n; i++) { // 遍历当前行的每一个元素 for (int j = 0; j <= i; j++) { // 如果当前元素在对角线上,跳过 if (i == j) { continue; } // 否则,交换当前元素和对角线上对应位置的元素 else { int tmp = arr[i][j]; arr[i][j] = arr[j][i]; arr[j][i] = tmp; } } } } int main() { int n = 0; scanf("%d", &n); // 输入矩阵的大小 int** arr = (int**)malloc(n * sizeof(int*)); // 分配内存空间 for (int i = 0; i < n; i++) { arr[i] = (int*)malloc(n * sizeof(int)); // 分配内存空间 } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &arr[i][j]); // 输入矩阵的元素 } } matrixTranspose(arr, n); // 计算矩阵的转置 for (int i = 0; i < n; i++) { int j = 0; for (; j < n-1; j++) { printf("%d ", arr[i][j]); // 输出矩阵的转置结果 } printf("%d\n", arr[i][j]); } printf("\n"); return 0; }
问题 AG: C语言实习题六——5.求素数函数设计
#include<stdio.h> // 定义一个函数,判断一个数是否为质数 int Tf(int n) { // 如果n等于1,返回0,表示不是质数 if(n==1) return 0; // 从2开始遍历到n-1,如果n能被其中任何一个数整除,返回0,表示不是质数 for(int i=2;i<n;i++) { if(n%i==0) return 0; } // 如果以上条件都不满足,返回1,表示是质数 return 1; } int main() { int m,n; int sum = 0; // 用于记录质数的个数 scanf("%d%d",&m,&n); // 输入两个整数m和n // 遍历从m到n的所有整数 for(int i=m;i<=n;i++) { int a=Tf(i); // 调用Tf函数判断当前整数是否为质数 if(a==1) // 如果当前整数是质数 { printf("%d ",i); // 输出当前整数 sum=sum+1; // 质数个数加1 } } printf("\n"); // 换行 printf("%d\n",sum); // 输出质数的个数 return 0; }
问题 AH: C语言实习题六——6.进制转换函数设计
#include <stdio.h> #include <stdlib.h> #include <math.h> // 定义一个函数,将十进制数转换为八进制数 int trans(int in, int count) { int i, temp, temp_1, temp_2, result = 0; temp = in; for (i = 0; i < count; i++) { // 取余数 temp_1 = temp % 10; // 减去余数 temp_2 = temp - temp_1; // 计算八进制数的每一位 result = result + temp_1 * pow(8, i); // 更新临时变量 temp = temp_2 / 10; } return result; } int main() { int in, in_i; scanf("%d", &in); // 输入十进制数 in_i = in; int i = 0, count = 0; // 计算十进制数的位数 while (in_i != 0) { i = in_i / 10; in_i = i; count++; } int result; result = trans(in, count); // 调用函数进行转换 printf("%d", result); // 输出八进制数 return 0; }
问题 AI: C语言实习题六——7.求最大公约数函数设计
#include <stdio.h> // 定义一个函数,用于计算两个整数的最大公约数 int DIV(int a, int b) { int Div = 0; // 初始化最大公约数为0 int Multi = a * b; // 计算a和b的乘积 int rem = 0; // 初始化余数为0 rem = a % b; // 计算a除以b的余数 // 使用辗转相除法求最大公约数 while (rem) { a = b; b = rem; rem = a % b; } Div = b; // 将最大公约数赋值给Div return Div; // 返回最大公约数 } int main() { int a, b; scanf("%d%d", &a, &b); // 从标准输入读取两个整数a和b int Div = DIV(a, b); // 调用DIV函数计算a和b的最大公约数 printf("%d\n", Div); // 将最大公约数输出到标准输出 return 0; // 程序正常结束 }
问题 AJ: C语言实习题六——8.对称数组判断
#include <stdio.h> #include <string.h> #include <stdlib.h> // 定义一个函数,用于检查矩阵是否对称 int exam(int n, int **arr) { int count = 0, i = 1; for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { // 如果矩阵的某个元素与其转置位置的元素不相等,则说明矩阵不对称 if (arr[j][k] != arr[k][j]) i = 0; } } return i; // 返回结果,如果矩阵对称,则返回1,否则返回0 } int main() { int n; scanf("%d", &n); // 输入矩阵的大小 int **arr = (int **)malloc(sizeof(int *) * n); // 分配内存空间 for (int i = 0; i < n; i++) { arr[i] = (int *)malloc(sizeof(int) * n); // 分配内存空间 } // 输入矩阵的元素 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) scanf("%d", &arr[i][j]); } int r = 0; r = exam(n, arr); // 调用exam函数检查矩阵是否对称 if (r == 1) printf("Yes"); // 如果矩阵对称,输出"Yes" else printf("No"); // 如果矩阵不对称,输出"No" // 释放内存空间 for (int i = 0; i < n; i++) { free(arr[i]); } free(arr); return 0; }
问题 AK: C语言实习题七——1. 结构体的定义与引用
#include <stdio.h> // 定义一个名为Person的结构体 struct Person { char name[20];// 字符数组类型成员变量name,表示人物的姓名 char str[20]; int id; float salary;// 浮点型成员变量,表示人物的薪水 }; int main() { struct Person p1; scanf("%s%s%d%f",&p1.name,&p1.str,&p1.id,&p1.salary); // 创建并初始化第一个Person对象p1 printf("%s\n", p1.name); printf("%s\n", p1.str); printf("%d\n", p1.id); printf("%.2f\n", p1.salary); return 0; }
问题 AL: C语言实习题七——2.结构体数组的定义与引用
#include <stdio.h> // 定义一个名为Person的结构体 struct Person { char name[20];// 字符数组类型成员变量name,表示人物的姓名 char str[20]; int id; float salary;// 浮点型成员变量,表示人物的薪水 }; int main() { struct Person p1; struct Person p2; struct Person p3; struct Person p4; struct Person p5; scanf("%s%s%d%f",&p1.name,&p1.str,&p1.id,&p1.salary); scanf("%s%s%d%f",&p2.name,&p2.str,&p2.id,&p2.salary); scanf("%s%s%d%f",&p3.name,&p3.str,&p3.id,&p3.salary); scanf("%s%s%d%f",&p4.name,&p4.str,&p4.id,&p4.salary); scanf("%s%s%d%f",&p5.name,&p5.str,&p5.id,&p5.salary); float arr[5]={0}; arr[0]=p1.salary; arr[1]=p2.salary; arr[2]=p3.salary; arr[3]=p4.salary; arr[4]=p5.salary; float max = 0; // 初始化0 for (int i = 0; i < 5; i++) { if (arr[i] > max) { max = arr[i]; } } printf("%.2f\n",max); return 0; }
问题 AM: C语言实习题八——测试Function Call
int Add2(int a,int b) { return (a+b); }
问题 AN: C语言实习题八——用户自定义sum
int sum(int (*f)(int), int start, int end){ int i, s=0, t; // 定义变量i、s和t,其中s用于存储累加结果,t用于临时存储函数f的返回值 if(start>end) // 如果start大于end,交换它们的值 { i=start; start=end; end=i; } for(i=start; i<=end; i++){ // 遍历从start到end的整数 t=f(i); // 调用函数f,将返回值赋给t s+=t; // 将t的值累加到s中 } return s; // 返回累加结果s }
问题 AO: C语言实习题八——单链表结点的阶乘和
int FactorialSum(List L){ int i; // 定义一个整型变量i,用于循环计数 int sum, totalsum = 0; // 定义两个整型变量sum和totalsum,分别用于存储阶乘值和阶乘和 while(L != NULL){ // 当链表不为空时,执行循环 sum = 1; // 将sum初始化为1,用于计算阶乘值 for(i = L->Data; i >= 1; i--){ // 从链表中取出的数据开始,逐个乘以sum,直到1 sum = sum * i; // 计算阶乘值 } totalsum += sum; // 将阶乘值累加到totalsum中 L = L->Next; // 移动到链表的下一个节点 } return totalsum; // 返回阶乘和 }
问题 AP: C语言实习题八——任务调度问题
void scheduler(int task[], int n, int system_task[], int user_task[]) { // 检查输入参数是否合法 if (task == NULL || n < 0 || system_task == NULL || user_task == NULL) { return; } int i = 0, j = 0, k = 0; int temp = 0; // 初始化system_task数组 for (i = 0; i < n; i++) { system_task[i] = i; } // 将user_task数组初始化为-1 memset(user_task, 0xff, n * sizeof(int)); // 对task数组进行冒泡排序,同时调整system_task数组的顺序 for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if (task[j] > task[j + 1]) { temp = task[j + 1]; task[j + 1] = task[j]; task[j] = temp; temp = system_task[j + 1]; system_task[j + 1] = system_task[j]; system_task[j] = temp; } } } // 根据task数组的值,将system_task数组中的元素分配到user_task数组中 for (i = 0, j = 0, k = 0; i < n; i++) { if (task[i] >= 0 && task[i] < 50) { system_task[j] = system_task[i]; if (i > j) { system_task[i] = -1; } j++; } else if (task[i] >= 50 && task[i] <= 255) { user_task[k] = system_task[i]; system_task[i] = -1; k++; } else { system_task[i] = -1; } } }
问题 AQ: C语言实习题八——ASCII字模文件
#include<stdio.h> // 引入标准输入输出库 #include<stdlib.h> // 引入标准库 #include<string.h> // 引入字符串处理库 int main() // 主函数 { int i, j, k, place, temp; // 定义整型变量i, j, k, place, temp char a[100]; // 定义字符数组a,用于存储输入的字符串 int b[20][20]; // 定义二维整型数组b,用于存储文件中的数据 unsigned char ch[10]; // 定义无符号字符数组ch,用于存储文件中的数据 FILE *fp; // 定义文件指针fp gets(a); // 从标准输入读取一行数据到a中 int *line = (int *)malloc(8 * strlen(a) * sizeof(int)); // 动态分配内存给整型指针line fp = fopen("ASC10x8.dic", "rb"); // 以二进制只读方式打开文件"ASC10x8.dic" for (i = 0; i < strlen(a); i++) { // 遍历字符串a中的每个字符 place = (a[i] - 32) * 10; // 计算字符在文件中的位置 fseek(fp, place, SEEK_SET); // 将文件指针移动到指定位置 fread(ch, 1, 10, fp); // 从文件中读取10个字节的数据到ch中 rewind(fp); // 将文件指针重置到文件开头 for (j = 0; j < 10; j++) // 遍历ch中的每个字节 b[i][j] = ch[j]; // 将字节数据存储到二维数组b中 } for (i = 0; i < 10; i++) { // 遍历二维数组b中的每行 for (j = 0; j < strlen(a); j++) { // 遍历字符串a中的每个字符 temp = b[j][i]; // 获取二维数组b中的当前元素 for (k = 7; k >= 0; k--) { // 将temp转换为二进制形式并存储到line中 line[k + j * 8] = temp % 2; temp /= 2; } } for (j = 0; j < strlen(a) * 8; j++) { // 遍历line中的每个元素 if (line[j] == 0) // 如果元素为0,则打印空格 printf(" "); else // 如果元素为1,则打印井号 printf("#"); } printf("\n"); // 打印换行符 } free(line); // 释放动态分配的内存 fclose(fp); // 关闭文件 return 0; // 返回0,表示程序正常结束 }
问题 AR: C语言实习题八——文本文件行统计
int GetLineInfo(FILE * fp, PLineInfo li) { // 初始化计数器 li->Uppers = 0, li->Lowers = 0, li->Numbers = 0, li->Separators =0, li->Others = 0; // 如果文件指针为空,返回错误代码1 if (fp == NULL) { return 1; } char ch; int m = li->lineno; // 当前行号 int n = 1; // 读取的行数 // 将文件指针重置到文件开头 rewind(fp); // 跳过前面的行 while (n != m) { ch = fgetc(fp); if (ch == 10) n++; } // 读取当前行的第一个字符 ch = fgetc(fp); // 遍历当前行的每个字符 while (ch != '\n') { // 统计小写字母数量 if (ch >= 97 && ch <= 122) li->Lowers++; // 统计大写字母数量 else if (ch >= 65 && ch <= 90) li->Uppers++; // 统计数字数量 else if (ch >= 48 && ch <= 57) li->Numbers++; // 统计分隔符数量 else if ((ch == 32) || (ch == 9) || (ch == 10) || (ch == 44) || (ch == 46) || (ch == 59)) li->Separators++; // 其他字符数量加1 else { li->Others++; if (ch == EOF) return 0; } // 读取下一个字符 ch = fgetc(fp); } // 返回成功代码0 return 0; }
问题 AS: 统计吉利数字
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int n, m, t = 0, i; // 定义变量n、m、t和i,其中t用于计数,i用于循环 scanf("%d", &n); // 从标准输入读取一个整数n scanf("%d", &m); // 从标准输入读取一个整数m for (i = n; i <= m; i++) // 从n到m进行循环 { if (i % 10 == 8) // 如果i的个位数是8 t++; // t加1 else if (i / 10 % 10 == 8) // 如果i的十位数是8 t++; // t加1 else if (i / 100 % 10 == 8) // 如果i的百位数是8 t++; // t加1 else if (i / 1000 % 10 == 8) // 如果i的千位数是8 t++; // t加1 else if (i / 10000 % 10 == 8) // 如果i的万位数是8 t++; // t加1 } printf("%d\n", t); // 输出t的值 return 0; // 返回0表示程序正常结束 }
问题 AT: 寻找亲近的同学
#include <stdio.h> int main(){ int num,sum=0,b[1000]; // 定义变量num用于存储输入的整数,sum用于存储字符出现的次数,b用于存储字符出现的位置 char ch; // 定义字符变量ch用于存储输入的字符 char a[26]; // 定义字符数组a用于存储输入的字符串 scanf("%d",&num); // 读取输入的整数 getchar(); // 读取换行符 int i=-1; // 初始化i为-1 do{ ++i; // i自增 a[i]=getchar(); // 读取输入的字符并存入数组a }while(a[i]!='\n'); // 当读取到换行符时结束循环 int j=0; // 初始化j为0 do{ ch=getchar(); // 读取输入的字符 j++; // j自增 int p; for(p=0;p<i;p++){ // 遍历数组a if(ch==a[p]){ // 如果输入的字符在数组a中出现过 if(j!=num){ // 如果该字符不是最后一个字符 sum++; // sum自增 b[sum]=j; // 将该字符的位置存入数组b } } } }while(ch!='\n'); // 当读取到换行符时结束循环 if(sum==0){ // 如果sum为0,表示没有出现次数为1的字符 printf("Lonely Xiao Ming\n"); // 输出"Lonely Xiao Ming" } else { // 如果sum不为0,表示有出现次数为1的字符 int p; for(p=1;p<sum;p++) // 遍历数组b,从第二个元素开始输出 printf("%d ",b[p]); // 输出元素值和空格 printf("%d\n",b[sum]); // 输出最后一个元素值 } return 0; // 返回0表示程序正常结束 }
问题 AU: 城市电话号码
int CheckPhoneNum(char *num){ int x, y, f = 0, len, i; // 定义变量x, y, f, len, i len = strlen(num); // 获取字符串长度 for (i = 0; i < len; i++) { // 遍历字符串 if (num[i] == '-') // 如果字符是'-' f++; // f加1 } if (f == 1) { // 如果只有一个'-' for (i = 0; i < len; i++) { // 再次遍历字符串 if (num[i] == '-') // 如果字符是'-' y = i; // 将y赋值为当前位置 } } else if (f == 2) { // 如果有两个'-' for (i = 0; i < len; i++) { // 再次遍历字符串 if (num[i] == '-') { // 如果字符是'-' x = i; // 将x赋值为当前位置 break; // 跳出循环 } } for (i = x + 1; i < len; i++) { // 从x+1开始遍历字符串 if (num[i] == '-') // 如果字符是'-' y = i; // 将y赋值为当前位置 } } else { // 如果有三个或以上的'-' return 1; // 返回1 } if (f == 1) { // 如果只有一个'-' if (yes1(num, y, len - 1) == 1) { // 如果yes1函数返回1 return 0; // 返回0 } else return 1; // 否则返回1 } if (f == 2) { // 如果有两个'-' if (yes2(num, x, y, len - 1) == 1) // 如果yes2函数返回1 return 0; // 返回0 else return 1; // 否则返回1 } return 1; // 如果以上条件都不满足,返回1 } int yes1(char *num, int x1, int x2) { int i; if (x1 != 3) return 0; // 如果x1不等于3,返回0 if (x2 != 7) return 0; // 如果x2不等于7,返回0 if (num[0] == '0') return 0; // 如果第一个字符是'0',返回0 for (i = 0; i <= 7; i++) { // 遍历字符串 if (i == 3) // 如果当前位置等于3 continue; // 跳过本次循环 if (num[i] < '0' || num[i] > '9') // 如果当前字符不是数字 return 0; // 返回0 } return 1; // 如果以上条件都不满足,返回1 } int yes2(char *num, int x1, int x2, int x3) { int i; if (x1 > 4) return 0; // 如果x1大于4,返回0 if (x2 - x1 != 4) return 0; // 如果x2减去x1不等于4,返回0 if (x3 - x2 != 4) return 0; // 如果x3减去x2不等于4,返回0 if (x1 == 0) return 0; // 如果x1等于0,返回0 if (num[x1 + 1] == '0') return 0; // 如果x1+1位置的字符是'0',返回0 for (i = 0; i <= x3; i++) { // 遍历字符串 if (i == x1 || i == x2) // 如果当前位置等于x1或x2 continue; // 跳过本次循环 if (num[i] < '0' || num[i] > '9') // 如果当前字符不是数字 return 0; // 返回0 } return 1; // 如果以上条件都不满足,返回1 }
问题 AV: 删除子串
int delSubStr(char *src, char *sub, char *result) { char *a, *b, *c; // 定义三个字符指针变量 int i, j, sum = 0, k = 0, n = 0, m, s = 0; // 定义整型变量 a = src; // 将源字符串赋值给指针a b = sub; // 将待删除子串赋值给指针b c = result; // 将结果字符串赋值给指针c for (i = 0; a[i] != '\0'; i++) // 遍历源字符串 { if (a[i] == b[0]) // 如果当前字符与待删除子串的第一个字符相同 { j = i; // 记录当前字符的位置 for (k = 0; b[k] == a[j] && a[j] != '\0'; j++) // 遍历待删除子串 k++; // 统计待删除子串的长度 if (b[k] == '\0') // 如果待删除子串已经遍历完毕 { sum++; // 计数器加1 i = j; // 跳过待删除子串 } } for (m = 0; b[m] != '\0'; m++) // 遍历待删除子串 if (a[i + m] == b[m]) // 如果当前字符与待删除子串的对应字符相同 s++; // 计数器加1 if (s != strlen(b)) // 如果待删除子串的长度不等于计数器的值 c[n++] = a[i]; // 将当前字符添加到结果字符串中 if (s == strlen(b)) // 如果待删除子串的长度等于计数器的值 i--; // 回退一位,继续遍历 s = 0; // 重置计数器 } c[n] = '\0'; // 在结果字符串末尾添加空字符 return sum; // 返回删除子串的次数 }
问题 AW: 比压牌
#include <stdio.h> #include <string.h> // 定义一个函数,用于判断字符串a是否在字符串b中出现 int win(char *a, char *b, int la, int lb); int main() { char a[100], b[10]; // 定义两个字符数组a和b,分别用于存储输入的字符串 int la, lb; // 定义两个整型变量la和lb,分别用于存储字符串a和b的长度 scanf("%s%s", a, b); // 从标准输入读取两个字符串 la = strlen(a); // 计算字符串a的长度 lb = strlen(b); // 计算字符串b的长度 // 调用win函数,判断字符串a是否在字符串b中出现 if (win(a, b, la, lb)) printf("YES\n"); // 如果字符串a在字符串b中出现,输出"YES" else printf("NO\n"); // 如果字符串a不在字符串b中出现,输出"NO" return 0; } // 定义win函数,用于判断字符串a是否在字符串b中出现 int win(char *a, char *b, int la, int lb) { int i, j, sum; // 定义三个整型变量i、j和sum,用于循环计数和临时存储数据 char ch; // 定义一个字符变量ch,用于存储字符串b的第一个字符 if (lb == 1) { // 如果字符串b的长度为1 for (i = 0; i < la; i++) { // 遍历字符串a的每一个字符 if (a[i] > b[0]) // 如果当前字符大于字符串b的第一个字符 return 1; // 返回1,表示字符串a在字符串b中出现 } return 0; // 如果遍历完字符串a的所有字符都没有找到大于字符串b第一个字符的字符,返回0,表示字符串a不在字符串b中出现 } else if (lb == 2 || lb == 3 || lb == 4) { // 如果字符串b的长度为2、3或4 ch = b[0]; // 将字符串b的第一个字符赋值给变量ch for (i = 0; i < la; i++) { // 遍历字符串a的每一个字符 if (a[i] > ch) { // 如果当前字符大于变量ch sum = 1; // 将计数器sum初始化为1 for (j = i + 1; j < la; j++) { // 从当前字符的下一个字符开始遍历字符串a的每一个字符 if (a[j] == a[i]) // 如果当前字符等于上一个字符 sum++; // 计数器sum加1 } if (sum >= lb) // 如果计数器sum大于等于字符串b的长度 return 1; // 返回1,表示字符串a在字符串b中出现 } } return 0; // 如果遍历完字符串a的所有字符都没有找到大于变量ch的字符,或者计数器sum小于字符串b的长度,返回0,表示字符串a不在字符串b中出现 } else { // 如果字符串b的长度大于4 int aa[10] = {0}, bb; // 定义一个长度为10的整型数组aa和一个整型变量bb,用于存储临时数据 bb = b[4] - '0'; // 将字符串b的第5个字符(下标为4)转换为数字,并赋值给变量bb for (i = 0; i < la; i++) { // 遍历字符串a的每一个字符 aa[a[i] - '0'] = 1; // 将当前字符对应的数字在数组aa中的对应位置设为1 } for (i = 1; i <= 9; i++) { // 遍历数组aa的每一个元素 if (aa[i] == 1 && aa[i - 1] >= 1) { // 如果当前元素为1且前一个元素大于等于1 aa[i] += aa[i - 1]; // 将当前元素加上前一个元素的值 } } for (i = bb; i <= 9; i++) { // 从变量bb开始遍历数组aa的每一个元素 if (aa[i] >= 5) // 如果当前元素大于等于5 return 1; // 返回1,表示字符串a在字符串b中出现 } return 0; // 如果遍历完数组aa的所有元素都没有找到大于等于5的元素,返回0,表示字符串a不在字符串b中出现 } return 0; // 如果以上条件都不满足,返回0,表示字符串a不在字符串b中出现 }
问题 AX: 计算某年某月对应天数
#include<stdio.h> void yue(int,int); // 声明函数yue,接收两个整数参数 int main() { int y = 0,m = 0; scanf("%d %d",&y,&m); // 从标准输入读取年份和月份 yue(y,m); // 调用函数yue,传入年份和月份 return 0; } void yue(int y,int m) { int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; // 定义一个数组a,存储每个月的天数 if(y <= 1000 || y >= 3000){ // 判断年份是否在有效范围内 printf("invalid year!"); // 输出无效年份提示 } else if(m <= 0 || m >= 13){ // 判断月份是否在有效范围内 printf("invalid month!"); // 输出无效月份提示 } else if((y % 400 == 0||(y % 100 != 0 && y % 4 == 0))&& m == 2) // 判断是否为闰年二月份 printf("29"); // 输出闰年二月份的天数 else printf("%d",a[m]); // 输出其他月份的天数 }
问题 AY: 正负号与数字和
#include<stdio.h> int main() { int i; // 定义整型变量i int sum=0; // 定义整型变量sum并初始化为0 scanf("%d",&i); // 从标准输入读取一个整数并赋值给i if(i<0) // 如果i小于0 { printf("N"); // 输出字符"N" i=-i; // 将i取反 } else printf("P"); // 否则输出字符"P" while(i>=10) // 当i大于等于10时执行循环 { sum+=i%10; // 将i除以10的余数加到sum上 i/=10; // 将i除以10并向下取整 } sum+=i; // 将i加到sum上 printf(",%d\n",sum); // 输出逗号和sum的值 return 0; // 返回0表示程序正常结束 }
问题 AZ: 两数互素
#include <stdio.h> int main(){ int a,b,c; scanf("%d%d",&a,&b); // 从标准输入读取两个整数a和b while ((c=a%b)!=0){ // 当a除以b的余数不为0时,执行循环 a=b; // 将b的值赋给a b=c; // 将余数c的值赋给b } if (b==1) printf("Yes."); // 如果b等于1,输出"Yes." else printf("No."); // 否则输出"No." }