C语言笔记4:错题整理
#1.1 编程题
判断101-500之间有多少个素数,放入数组中,遍历数组输出所有素数,
素数: 除了1和它本身以外不再有其他的因数。
具体实现 就用DeepSeek了 以下是AI生成代码:
#include <stdio.h>
#include <math.h>// 函数声明
int isPrime(int num);int main() {int primes[100]; // 假设最多有100个素数(实际在101-500之间有少于100个素数)int count = 0;// 遍历101到500之间的所有数字for (int i = 101; i <= 500; i++) {if (isPrime(i)) {primes[count] = i; // 将素数存入数组count++;}}// 输出结果printf("101到500之间的素数共有%d个,分别是:\n", count);for (int i = 0; i < count; i++) {printf("%d ", primes[i]);if ((i + 1) % 10 == 0) { // 每行输出10个素数printf("\n");}}printf("\n");return 0;
}// 判断一个数是否为素数的函数
int isPrime(int num) {if (num <= 1) {return 0;}if (num == 2) {return 1;}if (num % 2 == 0) {return 0;}// 检查从3到sqrt(num)的所有奇数for (int i = 3; i <= sqrt(num); i += 2) {if (num % i == 0) {return 0;}}return 1;
}
1.2 从键盘输入10个数据,存入数组当中,程序实现,统计数组当中出现次数最多的数以及是哪一个数。(如果有次数相同则输出第一个出现数字).
#include <stdio.h>#define SIZE 10int main() {int arr[SIZE];int i, j;// 从键盘输入10个数据printf("请输入10个整数:\n");for (i = 0; i < SIZE; i++) {scanf("%d", &arr[i]);}int maxCount = 0; // 最大出现次数int mostFrequent = arr[0]; // 出现次数最多的数,初始为第一个元素// 遍历数组统计每个数的出现次数for (i = 0; i < SIZE; i++) {int currentCount = 1; // 当前数字的出现次数// 检查当前数字在数组中出现的次数for (j = i + 1; j < SIZE; j++) {if (arr[i] == arr[j]) {currentCount++;}}// 如果当前数字出现次数更多,更新最大值if (currentCount > maxCount) {maxCount = currentCount;mostFrequent = arr[i];}}// 输出结果printf("\n数组中出现次数最多的数是:%d\n", mostFrequent);printf("它出现了%d次。\n", maxCount);return 0;
}
- 有一个3×4的矩阵,要求输出其中最大的值以及它的行号和列号。
int a[3][4] = {
{123, 94, -10, 218},
{3, 9, 10, -83},
{45, 16, 44, -99}
};
#include <stdio.h>int main() {int a[3][4] = {{123, 94, -10, 218},{3, 9, 10, -83},{45, 16, 44, -99}};int max = a[0][0]; // 初始化最大值为矩阵第一个元素int row = 0, col = 0; // 初始化最大值的位置// 遍历矩阵寻找最大值for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {if (a[i][j] > max) {max = a[i][j];row = i;col = j;}}}// 输出结果printf("矩阵中的最大值是:%d\n", max);printf("它位于第%d行,第%d列\n", row + 1, col + 1); // 行号和列号从1开始计数return 0;
}
4 写一个函数,统计一个int类型(32)的数中有多少位二进制数1?
#include <stdio.h>int countBits(int num) {int count = 0;unsigned int unum = (unsigned int)num; // 处理负数情况for (int i = 0; i < 32; i++) {if (unum & 1) { // 检查最低位是否为1count++;}unum >>= 1; // 右移一位}return count;
}int main() {int number;printf("请输入一个整数: ");scanf("%d", &number);printf("数字 %d 的二进制表示中有 %d 个1\n", number, countBits(number));return 0;
}
请实现类似atoi函数,
把字符串“123456”转换成数值123456 int atoi(char *str);
#include <stdio.h>
int atoi(char* str);
int main(int argc, char *argv[])
{ char a[10]="12345678";printf("%d\n",atoi(a));return 0;
}
int atoi(char* str)
{int result=0;while(*str){result=result*10+(*str)-'0';str++;}return result;
}
选择题和答案解析
//这题注意 宏定义特别小心
不是原创,我只是个搬运工 记录下错题,重要的事情说三遍
不是原创,我只是个搬运工 记录下错题,重要的事情说三遍
不是原创,我只是个搬运工 记录下错题,重要的事情说三遍