C语言题目
目录
函数类
一、排列顺序的函数
1、单行顺序颠倒函数
#include <stdio.h>
#define N 10
void fun(int a[], int n)
{
int i, j;
int temp = 0;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (a[j] < a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main(void)
法2
#include<stdio.h>
int main()
{
int num;
scanf("%d",&num);
int a,i;
for(i = 0;num > 0;i++)
{
a = num % 10;
printf("%d",a);
num = num/10;
}
2、二维数组颠倒函数
void exchange(int a[3][3])
{
int i,j,t;
for(i=0;i<2;i++)
{
for(j=1;j<3;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
}
3、数之间按照大到小顺序排列的函数
void sort(int a[], int n)
{
int i, j;
int temp = 0;
for (i = 0; i < n - 1; i++) //n-1的原因是数组从a[0]开始的
{
for (j = 0; j < n - 1 - i; j++) //保证每个数之间都能进行比较
{
if (a[j] < a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
二、计算阶乘的函数
int fac(int n)
{
if (n == 1)
return 1;
else
return fac(n - 1)*n; //这里返回的是fac(n-1),即会循环求底下的数
}
三、计算字符串长度的函数
int length(char *p) //*p为指针,即指向等下输入的字符
{
int d=0;
while(*p!='\0')
{
d++;
p++;
}
return (d);
}
非函数类
一、利用到数学符号
#include<math.h> //在开头添加才可以利用以下数学符号
pow(x,y) //表示x^y。
sqrt() //表示根号
二、简单的数学题目
一、求下列表达式的值。
1/3+3/5+5/7+……+n/(n+2) //n为任意一个奇数
#include <stdio.h>
int main()
{
float x, y, i, sum=0, n; //分数要利用到float
printf("请输入n的值:\n");
scanf_s("%f", &n);
for (i = 0; i < n; i++)
{
x = 1 + 2 * i;
y = 3 + 2 * i;
sum += x / y;
}
printf("值为:%.2f\t", sum);
return 0;
}
二、求2-100间的所有素数。
素数:一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数。
#include<stdio.h>
int main()
{
int i, j;
for (i = 0; i <= 100; i++)
{
for (j = 2; j <= i; j++)
{
if (i % j == 0) //利用了只能被自己整除这一性质。
{
break;
}
}
if (i == j)
{
printf("%d ", i);
}
}
return 0;
}
三、Fibonacci数列的输出,Fibonacci数列中的每项数据定义的规则如下:
即:1 1 2 3 5 8 13 21 …… 请输出前20项数据,并每行显示5个数。
#include <stdio.h>
int main()
{
int a[20], i;
a[0] = a[1] = 1; //定义前两项
for (i = 2; i < 20; i++) //定义后面项的值
{
a[i] = a[i - 1] + a[i - 2];
}
for (i = 0; i < 20; i++)
{
printf("%4d ", a[i]); //%4d表示每个数字之间隔四个空
if ((i + 1) % 5 == 0) //表示每个五个数字就换行
printf("\n");
}
return 0;
}
注:是否使用数组?
①当题目中的数用自己定义的变量很棘手时,考虑数组。
三、生活问题
一、将一张100元钱,换成10元,20元,50元零钱,问有多少种不同的换法(假设三种零钱每种都可不出现)。(利用穷举法)
#include<stdio.h>
int main()
{
int i1, i2, i3, n;
n = 0;
for (i1 = 0; i1 <= 2; i1++) //++i的意思是i的值先+1再运算括号内。
{
for (i2 = 0; i2 <= 5; i2++)
{
for (i3 = 0; i3 <= 10; i3++) //运用++i与i++作用相同
{
if (100 == 50 * i1 + 20 * i2 + 10 * i3)
{
n++;
printf("方案%d:50元:%d张 20元:%d张 10元:%d张\n",
n, i1, i2, i3);
}
}
}
}
printf("共有%d种方案。\n", n);
return 0;
}
注:此处的for叠加句型原理是:
最里面的for先循环,之后倒数第二个for的i+1后最后一个for在一个轮回,保证每个可能性都被计算到。
二、闰年问题
#include<stdio.h>
int main()
{
int year;
printf("请输入年份:");
scanf_s("%d", &year);
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
printf("该年是闰年\n");
}
else
{
printf("该年不是闰年,请重新输入年份");
}
return 0;
}
注:判断是否为闰年的依据
①该年份可以被4整除但不能被100整除。
②该年份可以被400整除。
③整除的意思为可以一直除到0
四、数组问题
一维数组
二维数组
1、键盘输入一个数据,得到一个3*4矩阵,并找出矩阵里元素的最大值
#include<stdio.h>
int main()
{
long a[3][4], i, j, mi,mj, t;
printf("请输入数据:");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
scanf_s("%d", &a[i][j]);//得到数据
}
}
mi = mj = 0; //利用中间变量来替换最大值输出
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
if (a[mi][mj] < a[i][j])
{
mi = i;
mj = j;
}
}
}
printf("max=%d\n", a[mi][mj]);
return 0;
}
最开始想法是用 t 换位,
但臃肿