编写版本:vc++2022
1.求最大/小值
#include<stdio.h>
int main(){
int a[50],n;
int max, min;
printf("请输入您要输入几个数");
scanf_s("%d", &n);
printf("请输入您要比较的%d个数\n",n);
for (int i = 0; i<n; i++) {
scanf_s("%d", &a[i]);
}
max = min = a[0];
for (int i = 0; i < n; i++) {
if (a[i] > max) max = a[i];
if (a[i] < min) min = a[i];
}
printf("max=%d,min=%d", max, min);
return 0;
}
2.求一个三位数abc,使a的阶乘+b的阶乘+c的阶乘=abc
#include<stdio.h>
//factorial 阶乘
int jiecheng(int n) {
int m=1;
while (n != 0) {
m *= n;
n--;
}
return m;
}
int main() {
int a, b, c;
for (int abc = 100; abc <= 999; abc++) {
a = abc / 100;
b = abc / 10 % 10;
c = abc % 10;
if (abc == jiecheng(a) + jiecheng(b) + jiecheng(c))
printf("%d\n", abc);
}
return 0;
}
3.求2/1,3/2,5/3,8/5,13/8,21/13,的前20项和
#include<stdio.h>
int main() {
float sum = 2;
int i = 1, j = 2;
float k;
for (int num = 1; num < 20; num++) {
k = i + j;
i = j;
sum += k / i;
j = k;
}
printf("%0.2f", sum);
return 0;
}
4.求阶乘
#include<stdio.h>
int main() {
int N;
int jiecheng=1;
scanf_s("%d", &N);
while (N != 0) {
jiecheng *= N;
N--;
}
printf("%d\n", jiecheng);
return 0;
}
5.求10-1000之间所有数字之和为5的整数的个数
#include<stdio.h>
int main() {
int count = 0;
for (int i = 10; i <= 99; i++) {//两位数
if (i/10+i%10== 5)
count++;
}
for (int i = 100; i <= 999; i++) {//三位数
if ((i/100)+(i/10%10)+(i%10)== 5)
count++;
}
printf("%d\n", count);
return 0;
}
6.输入字符串打印除小写,元音,字母之外的。用数组
#include<stdio.h>
int main() {
char a[50];
scanf_s("%s", a, 50);
for (int i = 0; a[i] != '\0'; i++)
if (a[i] != 'a' && a[i] != 'e' && a[i] != 'i' && a[i] != 'o' && a[i] != 'u')
printf("%c", a[i]);
return 0;
}
scanf_s输入字符串时,需要添加长度防止溢出
7.计算输入的10个整数中的,偶数的和,偶数平均值(小数表示)
#include<stdio.h>
int main() {
int a[10];
int sum=0;
double avg;
for (int i = 0; i < 10; i++) {
scanf_s("%d", &a[i]);
if (a[i] % 2 == 0) sum += a[i];
}
avg = sum / 10.0;
printf("偶数的和%d,偶数的平均值%0.2f", sum, avg);
return 0;
}
8.循环语句求a+aa+aaa+aaaa……n个a,n和a由键盘输入
#include<stdio.h>
#include<math.h>
int main() {
int a, n,m;
int sum = 0;
scanf_s("%d %d", &a, &n);
m = a;
for (int i = 1; i <= n; i++) {
sum += m;
m += a * pow(10, i);
}
printf("%d", sum);
return 0;
}
9.1!+2!+3!+4!……
#include<stdio.h>
int main() {
int sum = 0, n,m=1;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++) {
m *= i;
sum += m;
}
printf("%d", sum);
return 0;
}
10.求sum=1-1/3+1/5-1/7+ +1/n(1/n<0.0001)
#include<stdio.h>
int main() {
float sum = 0;
int k=1;
for (int i = 1; (1.0 / i) >= 0.0001; i += 2) {
sum += (1.0 / i) * k;
k = -k;
}
printf("%0.2f", sum);
return 0;
}
11.输入正数判断是否为素数
#include<stdio.h>
int main() {
int i,n;
scanf_s("%d", &n);
//素数:=质数,除了1和它本身之外不能被其他数整除。否则称为合数(1既不是质数也不是合数)
if (n == 1) printf("%d不是素数", n);
else if (n == 2) printf("%d是素数", n);
else {
for (i = 2; i < n; i++) {
if (n % i == 0) {
printf("%d不是素数", n);
break;
}
}
if(i>=n) printf("%d是素数", n);
}
return 0;
}
12.编写一个计算器,可以计算+-*/
#include<stdio.h>
int main() {
float a, b;
char ch;
scanf_s("%f", &a);
ch = getchar();
scanf_s("%f", &b);
switch (ch) {
case '+':printf("=%0.2f", a + b); break;
case '-':printf("=%0.2f", a - b); break;
case '*':printf("=%0.2f", a * b); break;
case '/':printf("=%0.2f", a / b); break;
}
return 0;
}
13.求m,n的最小公倍数
#include<stdio.h>
int main() {
//lcm:lowest common multiple 最小公倍数
int m, n,min;
scanf_s("%d %d", &m, &n);
if (m < n) min = m;
else min = n;
for(int i=min;i<=n*m;i++)
if (i % m == 0 && i % n == 0) {
printf("最小公倍数:%d", i);
break;
}
return 0;
}
14.对10个数排序
#include<stdio.h>
int quick_one_pass(int a[], int low, int high) {
int mid = a[low];
while (low < high) {
while (low < high && a[high] >= mid) --high;
a[low] = a[high];
while (low < high && a[low] <= mid) ++low;
a[high] = a[low];
}
a[low] = mid;
return low;
}
void quicksort(int a[], int low, int high) {
int k;
if (low < high) {
k = quick_one_pass(a, low, high);
quicksort(a, low, k - 1);
quicksort(a, k + 1, high);
}
}
int main() {
//快速排序
int a[10] = { 2,6,4,8,1,9,3,5,7,4 };
quicksort(a, 0, 9);
for (int i = 0; i < 10; i++)
printf("%d ", a[i]);
return 0;
}
15.36块砖,男人一次可以搬4块,女人:3块,两个小孩:1块。问男,女,小孩各多少人可以一次搬完
#include<stdio.h>
int main() {
int man, woman, kid;
for (man = 0; man <= 9; man++)
for (woman = 0; woman <= 12; woman++)
for (kid = 0; kid <= 72; kid++)
if (4 * man + 3 * woman + 0.5 * kid == 36)
printf("%d,%d,%d\n", man, woman, kid);
return 0;
}
16.输入一个字符串,将其正序反序输出
#include<stdio.h>
#include<string.h>
int main() {
char array[50];
int n=0;//n是数组的长度
scanf_s("%s", array, 50);
n = strlen(array);
for (int i = 0; i < n; i++)
printf("%c", array[i]);
printf("\n");
for(int i=n-1;i>=0;i--)
printf("%c", array[i]);
return 0;
}
计算字符数组的长度:
#include<string.h>
strlen(array);
17.求一个整数在存储单元中,从右端开始第4到第7位的值
#include<stdio.h>
int main() {
unsigned a, b, c;
scanf_s("%o", &a);
b = a >> 4;//右移四位
c = b & 15;//和15按位与,15的二进制编码为1111
printf("%o,%d\n%o,%d\n", a, a, c,c);
return 0;
}
18.楼梯一共有n级,一次爬1级或2级,有几种不同的路径
#include<stdio.h>
int ClimbStairs(int n) {
if (n == 0) return 1;
else if (n == 1) return 1;
else return ClimbStairs(n - 1) + ClimbStairs(n - 2);
}
int main() {
int n;
scanf_s("%d", &n);
printf("%d", ClimbStairs(n));
return 0;
}
19.十六进制转换成十进制
#include<stdio.h>
#include<string.h>
#include<math.h>
int f(char* a);//声明
int main() {
char a[30];
int n=0,ten=0;
gets(a);
printf("%d", f(a));
return 0;
}
int f(char* a) {
int i, c, sum = 0, n;
c = strlen(a);
for (i = 0; i < c; i++) {
if (a[i] >= 'A' && a[i] <= 'Z')
a[i] -= 55;
if (a[i] >= '0' && a[i] <= '9')
a[i] -= '0';
}
n = c - 1;
for (i = 0; i <= c; i++) {
sum = sum + a[i] * pow(16, n);
n--;
}
return sum;
}
20.创建链表,头/尾插法插入数据
#include<stdio.h>
#include<stdlib.h>
struct Node {
int data;
struct Node* next;
};
//头插法创建链表
struct Node* createList(int arr[], int n) {
struct Node* head = NULL;//初始化头节点为null
for (int i = 0; i < n; i++) {
//创建新结点
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = arr[i];
newNode->next = head;
head = newNode;
}
return head;
}
//尾插法创建链表
struct Node* createList_2(int arr[], int n) {
struct Node* head = NULL;
struct Node* tail = NULL;
for (int i = 0; i < n; i++) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = arr[i];
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
}else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
//打印链表
void printList(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
printf("%d ->", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
int arr[] = { 1,2,3,4,5 };
int n = sizeof(arr) / sizeof(arr[0]);//数组长度
//头插法创建链表
struct Node* head = createList(arr, n);
//打印链表
printList(head);
//尾插法创建链表
struct Node* head_2 = createList_2(arr, n);
//打印链表
printList(head_2);
return 0;
}