C语言的常见题,对大家学习C语言会有一定的帮助,不断地会收录新题(含牛客网的习题)
没有对题型进行分类,大家自行挑选对自己有用的题目
如果代码有什么bug,或者你比我有更好的处理方法还请及时下方留言
如果还需要哪种题型也可以下方留言
感谢支持!!!
eg1.(斐波那契数列)非递归的
方法1:
int main()
{
int arr[30];//定义一个数组
arr[0] = 0;//设置数组的第一个元素为0
arr[1] = 1;//设置数组的第二个元素为1
int i = 0;//定义一个循环变量
for (i = 2; i < 30; i++)
{
arr[i] = arr[i - 1] + arr[i - 2];//从第三个元素开始等于前两个元素的和 循环去赋值
}
for (i = 0; i < 30; i++)
{
printf("%d\n", arr[i]);//循环把元素都打印出来
}
return 0;
}
方法2:递归求解
int fib(int n)
{
if (n == 0)//第一个原素打印 0
{
return 0;
}
if (n <= 2 && n > 0)//第一个元素打印1
{
return 1;
}
else//从第三个元素开始递加
{
return fib(n - 1) + fib(n - 2);
}
}
int main()
{
int i = 0;
for (i = 0; i < 20; i++)
{
int ret = fib(i);//打印斐波那契数列
printf("%d\n", ret);
}
return 0;
}
效果如图:
方法3:(变式)求斐波那契数列的第n个元素
#pragma warning(disable : 4996)
#include
int fib(int n)
{
int result = 1;
int pre_result = 1;
int next_preresult ;
while (n > 2) //从第三个数字才开始有规律 数值等于前两个相加
{
n = n - 1;
next_preresult = pre_result;
pre_result = result;
result = pre_result + next_preresult;
}
return result;
}
int main()
{
printf("请你输入想要查询的n的数值\n");
int n = 0;
scanf("%d", &n);//捕获你想查询的数字
int ret = fib(n);//接收算出来的返回值(n所对应的斐波那契数列数值)
printf("%d", ret);
return 0;
}
效果如图:
eg2.字符金字塔(输入一个字符输出相应字符所对应的金字塔)
#include
int main()
{
char a;
scanf("%c", &a);
int i = 1;//行
int j = 1;
for (i = 1; i <= 5; i++)//从第一行开始 一共有5行
{
for (j = 5-i; j >=0; j--)//打印空格 空格从第一行到第五行空格是递减的 第一行四个空格第五行没有空格,所以利用循环 5-i表示打印的空格数去打印空格
{
printf(" ");
}
for (j = 1; j <= i; j++)//一行有几个字符取决于字符在第几行,在第几行打印打印几个字符
{
printf("%c ", a);
}
printf("\n");//循环完打印完一行换行
}
return 0;
}
效果如图:
(变式)打印菱形 (与上方的打印方法基本一致加一步打印倒三角)
//}
#include
int main()
{
char a;
scanf("%c", &a);
int i = 1;//行
int j = 1;
//打印上三角
for (i = 1; i <= 5; i++)//从第一行开始 一共有5行
{
for (j = 5-i; j >=0; j--)//打印空格
{
printf(" ");
}
for (j = 1; j <= i; j++)
{
printf("%c ", a);
}
printf("\n");
}
//打印倒三角
for (i = 4; i>=1; i--)//从第一行开始 一共有5行
{
for (j = 5 - i; j >= 0; j--)//打印空格
{
printf(" ");
}
for (j = 1; j <= i; j++)
{
printf("%c ", a);
}
printf("\n");
}
return 0;
}
效果如图:
(变式)根据自己需求打印多少行的菱形
#include
int main()
{
char a;
int n = 0;
scanf("%c %d", &a, &n);
int i = 1;//行
int j = 1;
//打印上三角
for (i = 1; i <= n; i++)//从第一行开始 一共有5行
{
for (j = n-i; j >=0; j--)//打印空格
{
printf(" ");
}
for (j = 1; j <= i; j++)
{
printf("%c ", a);
}
printf("\n");
}
//打印倒三角
for (i = n-1; i>=1; i--)//从第一行开始 一共有5行
{
for (j = n - i; j >= 0; j--)//打印空格
{
printf(" ");
}
for (j = 1; j <= i; j++)
{
printf("%c ", a);
}
printf("\n");
}
return 0;
}
效果如图:
#include
int main()
{
int n = 0;
scanf("%d",&n);
int q = n/1000; //计算数字的每一位 千位
int b = n%1000/100;//百位
int s = n%100/10;//十位
int g = n%10;//个位
int new = g*1000+s*100+b*10+q*1;//倒着赋值回去
printf("%04d",new);
}
效果如图:
eg4. (利用海伦公式)计算三角形的周长和面积
#include
#include
int main()
{
int a = 0;//定义三个整形数据
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);//录入数据
if (a + b >= c && a - b <= c)//判断是否满足三角形的的前提条件
{
float zc = (float)(a + b + c);//将周长强制转换成浮点类型
float S = 0;//定义一个浮点类型的面积S
float p = 0;//定义一个浮点型的半周长p
p = (float)(zc / 2);//初始化p
float n = (float)((p - a) * (p - b) * (p - c));//利用海伦公式
float f = p * n;
S = sqrt(f);
printf("circumference=%.2f area=%.2f\n", zc, S);
}
}
效果如图:
海伦公式:相关海伦公式的介绍(点击即可查询)
eg 5.井字棋(简单版没有棋盘)(同往期博客的三子棋游戏)
#include
char fun(char arr[3][3])
{
int i = 0;
for (i = 0; i < 3; i++)//竖着的三种情况(一列)
{
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])//利用循环对i进行变化去判断一列的元素是不是相等
{
return arr[0][i];//返回那个下标元素
}
}
for (i = 0; i < 3; i++)//横着的三种情况(一行)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])//利用循环对i进行变化去判断一行的元素是不是相等
{
return arr[i][0];//返回那个下标元素
}
}
//判断主对角线上的三个元素
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])//利用主对角线所对应坐标去判断元素是否相等
{
return arr[0][0];//返回那个下标元素
}
//判断副对角线上的三个元素
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])//利用副对角线所对应坐标去判断元素是否相等
{
return arr[1][1];//返回那个下标元素
}
else //都不是就返回一个平局
{
return 'Q';//Q代表平局
}
}
int main()
{
char arr[3][3] = { 0 };//初始化棋盘
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)//循环对棋盘进行初始化
{
for (j = 0; j < 3; j++)
{
scanf("%c", &arr[i][j]);//录入元素
getchar();//清除换行
}
}
char str = fun(arr);//调用判断输赢的fun函数
if (str == 'K')//返回的K就是kiki赢
{
printf("KiKi wins!\n");
}
else if (str == 'B')//返回的B就是kiki赢
{
printf("BoBo wins!\n");
}
else
{
printf("No winner!\n");//上面两种情况 都不是就是都没赢
}
return 0;
}
效果如图:
1.主对角线情况
2.副对角线情况
3.一列的情况
4.一行的情况
5..都没赢的情况
eg 6. 相关质数的求法
#include
int main()
{
int i = 0;
int j = 0;
for (i = 2; i < 10; i++)//从2-10的数字(这里的10是可以改动的)
{
for (j = 1; j < i; j++)//从1开始设置被除数小于数字本身即可
{
if (i % j == 0 && j != 1)//判断哪些数字不满足题目要求(判断一下除了自身和1还没有可以整除的数字 如果有进入if语句停止循环 所对应的数字不是质数)
{
break;//有一个本身及1的被除数外即停止本次循环
}
}
if (i == j)//这些数字都是循环完整一边后(j的数值不满足小于i)才跳出来的(这就证明这些数字都是只能被本身和1整除的 所以他们是质数)
{
printf("%d ", i);//打印出来这些质数
}
}
return 0;
}
效果如图:(10以内的质数)(10可以改变)
方法 2 :筛选法求质数(素数)(从2开始的后面的数组元素只要可以被2整除全部置成0,以此类推可以被3,4,5等等整除的数字全部置成0)(最终数组剩下的元素即为质数)
#include
int main()
{
int n = 0; //设置你想打印从数字2到数字几(n所对应的数值)
int arr[100] = { 0 };//定义一个数组用来存放 数字 2~n
while (scanf("%d", &n) != EOF)//输入n的数值
{
int i = 0;
int j = 0;
for (i = 2; i <= n; i++)//从2开始存进数组中
{
arr[j] = i;//以i为循环变量去把从2~n的数值赋值进数组里
j++;
}
//对数组全部的元素进行访问 从2开始的后面的数组元素只要可以被2整除全部置成0,以此类推可以被3,4,5等等整除的数字全部置成0)(最终数组剩下的元素即为质数)
for (i = 2; i <= n; i++)
{
for (j = 0; j <= n - 2; j++)
{
if (i != arr[j])
{
if (arr[j] % i == 0)
{
arr[j] = 0;
}
}
}
}
for (i = 0; i <= n; i++)
{
if (arr[i] != 0)//数组元素中不是0的给他打印出来就是质数
{
printf("%d ", arr[i]);
}
}
printf("\n");
}
return 0;
}
eg 7.计算球体的体积
#include
#include
#define pi 3.1415926 定义一个宏 是π的数值
int main()
{
float r = 0;
scanf("%f", &r); //输入半径
float mid = (float)4/(float) 3;//注意一定要对4/3的每个元素进行强制类型转化 因为3和4都是整型变量所以4/3的结果也是整型,所以需要强制转化 这样才可以输出 4/3的数值
double V = mid * pow(r, 3) * pi;//球的体积公式
printf("%.3lf", V);
return 0;
}
eg 8. 2的n次方 (特殊方法)
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。
#include
#include
int main()
{
int a = 0;
while(scanf("%d", &a) != EOF) {
//高效的实现可以使用左移,移动a位即为2的a次方
printf("%d\n", 1 << a);
}
return 0;
}
方法 2 :一般方法直接利用C语言的库函数pow
#include
#include
int main()
{
int n = 0;
scanf("%d", &n);
int ret = pow(2, n);
printf("%d", ret);
return 0;
}
eg 9 .变种水仙花数
#include
int LilyNumber(int i)
{
int flag = 0;//定义了一个判断变量
int a = 0;
int b = 0;
int c = 0;
int d = 0;
a = i % 10000 * (i / 10000);//获取10000-100000数字的每一位
b = i % 1000 * (i / 1000);
c = i % 100 * (i / 100);
d = i % 10 * (i / 10);
if (a + b + c + d == i)
{
flag = 1;//如果加在一起相等flag变成1 就是满足条件的数字
}
return flag;
}
int main()
{
int i = 0;
for (i = 10000; i < 100000; i++)
{
int ret = LilyNumber(i);//循环调用函数去打印出数字
if (ret == 1)
{
printf("%d ", i);
}
}
return 0;
}
eg 10.三角形判断
#pragma warning(disable : 4996)
#include
int main()
{
int a, b, c;
while (scanf("%d %d %d", &a, &b, &c) != EOF)
{
if (a + b > c && a - b < c)//满足三角形大条件
{
//再判断下面三类三角形
if (a == b && b == c && c == a)
{
printf("Equilateral triangle!\n");
}
else if (a == b || c == a || c == b)
{
printf("Isosceles triangle!\n");
}
else if (a * a + b * b == c * c || c * c + b * b == a * a || a * a + c * c == b * b)
{
printf("Right angle!\n");
}
else
{
printf("Ordinary triangle!\n");
}
}
else//不满足三角形大条件
{
printf("Not a triangle!\n");
}
}
return 0;
}
eg 11.简单计算器
#include
int main()
{
double a = 0.0;
double b = 0.0;
char c = 0;
while(scanf("%lf%c%lf",&a,&c,&b)!=EOF)//输入两个数字和一个运算符 进去计算就好了
{
double sum = 0.0;
if(c=='+')
{
sum = a+b;
printf("%.4lf+%.4lf=%.4lf\n",a,b,sum);
}
else if(c=='-')
{
sum = a-b;
printf("%.4lf-%.4lf=%.4lf\n",a,b,sum);
}
else if(c=='*')
{
sum = a*b;
printf("%.4lf*%.4lf=%.4lf\n",a,b,sum);
}
else if(c=='/')
{
sum = a/b;
if(b==0)
{
printf("Wrong!Division by zero!\n");
}
else
{
printf("%.4lf/%.4lf=%.4lf\n",a,b,sum);
}
}
else
{
printf("Invalid operation!\n");
}
}
return 0;
}
eg 12.打印线图案
#include
int main()
{
int n = 0;
while(scanf("%d",&n)!=EOF)
{
int i = 0;
for( i = 0 ; i < n ;i++)//循环按需求打印*个数
{
printf("*");
}
printf("\n");
}
return 0;
}
eg 13. 打印正方形
#include
int main()
{
int n = 0;
while(scanf("%d",&n)!=EOF)
{
int i = 0;
int j = 0;
for( i = 0 ;i < n ;i++ )
{
for( j = 0 ;j < n ;j++)
{
printf("* ");
}
printf("\n");
}
}
}
eg 14.打印直角三角形
#include
int main()
{
int n = 0;
while (scanf("%d",&n)!=EOF)
{
int i = 0;
int j = 0;
for(i = 0;i < n;i++)
{
for(j = 0 ;j <= i;j++ )//j<=i(*的个数小于等于行数就可以打印出来)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
eg 15.打印倒三角
#include "stdio.h"
int main(){
int x=0;
int i,j,k;
while(scanf("%d",&x)!=EOF)
{
k=x;
for(i=1;i<=x;i++)
{
for(j=1;j<=k;j++)//同打印正三角一样就是从多*向少*打印
{
printf("* ");
}
k--;//打印一行后减少下次打印*的个数
printf("\n");
}
}
return 0;
}
eg 16.打印靠右的三角
#include
int main(){
int n,i,j;
while(~scanf("%d",&n)){
for(i=0;i
eg 16.打印金字塔(同上代码一致就是if条件句是打印1个空格,上面题目打印的是两个空格)
#include
int main(){
int n,i,j;
while(~scanf("%d",&n)){
for(i=0;i
eg 17. 打印倒金字塔
#include
int main()
{
int a = 0;
while (~scanf("%d", &a))
{
for (int b = 0; b < a; b++)
{
for (int c = 0; c < b; c++)
{
printf(" ");
}
for (int d = 0; d < a-b; d++)
{
printf("* ");
}printf("\n");
}
}return 0;
}
eg 18. 打印k形图案
#include
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for (i = 0; i <= n; i++)//打印上三角
{
for (j = n-i; j >= 0; j--)//*数量随着行数+而-1
{
printf("* ");
}
printf("\n");
}
for (i = 1; i <= n; i++)//打印下三角
{
for (j = 1; j <=i+1; j++)//每一行的*数量等于行数+1
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
eg 19. 打印箭头形图案
#include
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for (i = 0; i <= n; i++)//上半部分
{
for (j = 2 * n - (2 * i); j > 0; j--)
{
printf(" ");
}//打印空格
for (j = 0; j <= i; j++)
{
printf("*");
}
printf("\n");
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= 2 * i; j++)
{
printf(" ");
}
for (j = n - i + 1; j >= 1; j--)
{
printf("*");
}
printf("\n");
}
}
return 0;
}
eg 20. 打印反斜线
#include
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for (i = 0; i < n; i++)//打印行数
{
for (j = 0; j < i;j++)
{
printf(" ");
}
printf("*");
printf("\n");
}
}
return 0;
}
eg 21. 正斜线(与反斜线基本一致)(就是打印空格的代码略有区别)
#include
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for (i = 0; i < n; i++)//打印行数
{
for (j = n-1-i; j >0; j--)
{
printf(" ");
}
printf("*");
printf("\n");
}
}
return 0;
}
eg 22.打印X形
#include
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i == j || j == n - i - 1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
eg 22.空心正方形
#include
int main()
{
int n = 0;
while ((scanf("%d", &n) != EOF))
{
int i = 0;
for (i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < n; j++)
{
if (i == 0 || i == n - 1 || j == 0 || j == n - 1)//把不满足条件的点扣掉
{
printf("* ");//满足要求的打印*
}
else
{
printf(" ");//其他不满足的点置成空格
}
}
printf("\n");
}
}
return 0;
}
eg 23.空心三角形
#include
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for (i = 0; i < n; i++)//行数
{
for (j = 0; j < n; j++)
{
if (i == j || j == 0 || i == (n - 1))
{
printf("* ");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
eg 24.有序序列插入一个数
#include
void sort(int arr[], int n)
{
int i = 0;
int j = 0;
int temp = 0;
for (j = 1; j <= n; j++)
{
for (i = 0; i <= n - j; i++)
{
if (arr[i] > arr[i + 1])
{
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
int main()
{
int arr[50] = { 0 };
int n = 0;
scanf("%d", &n);
int i = 0;
for (i = 0; i < n; i++)//输入数组元素
{
scanf("%d", &arr[i]);
}
int cr = 0;
scanf("%d", &cr);//输入想要插入的数组
arr[n] = cr;//把想插入数组的元素赋值给数组
sort(arr, n);//将插入好的数组进行冒泡排序
for (i = 0; i <= n; i++)//打印出排序好的数组
{
printf("%d ", arr[i]);
}
}
eg 25. 图片相似度
#include
int main()
{
int arr[10][10] = { 0 };
int brr[10][10] = { 0 };
int m = 0;
int n = 0;
int count = 0;
scanf("%d %d", &m, &n);
int i = 0;
int j = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &arr[i][j]);//初始化数组
}
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &brr[i][j]);//初始化数组
}
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (arr[i][j] != brr[i][j])//访问两个数组 如果元素不一样
{
count++;//计数器+1
}
}
}
int sum = n * m;//总元素
int s = sum - count;//得到一样元素的数量
float ret = (float)s / sum;//算出比例
printf("%.2f", ret*100);
return 0;
}
eg 26. 有序数组判断(升序or降序)
#include
int main()
{
int n = 0;
int count1 = 0;
int count2 = 0;
int arr[50] = { 0 };
int i = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);//初始化数组
}
for (i = 1; i < n - 1; i++)
{
if (arr[i] >= arr[i - 1] && arr[i + 1] >= arr[i])//判断数组元素的相邻元素是否满足升序或者是降序的标准
{
count1++;//满足升序计数器++
}
if (arr[i] <= arr[i - 1] && arr[i + 1] <= arr[i])
{
count2++;//满足降序计数器++
}
}
if (count1 == (n - 2) || count2 == (n - 2))//判断如果计算器数量满足n-2即可因为是从第二个元素到倒数第二个元素 所以这里的n需要-2
{
printf("sorted\n");
}
else {
printf("unsorted\n");
}
return 0;
}
eg 27.数组中删除指定元素
#include
int main()
{
int n = 0;
int arr[50] = {0};
int i = 0;
scanf("%d",&n);
for(i = 0;i < n; i++)
{
scanf("%d",&arr[i]);初始化数组
}
int shan = 0;
scanf("%d",&shan);//输入那个需要删除的数组
for (i = 0;i < n;i++)
{
if(arr[i]==shan)//去循环判断如果等于数组中的元素
{
arr[i] = 0;//将数组中的那个对应元素 赋值成0
}
}
for (i = 0;i < n;i++)
{
if(arr[i]!=0)//不打印0把其他的都打印出来
{
printf("%d ",arr[i]);
}
}
return 0;
}
eg 28.数组去重
#include
int main()
{
int n = 0;
int arr[1000] = { 0 };
int i = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);//初始化数组
}
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i != j)//访问下标元素 在不是其本身的条件下去进行循环判断
{
if (arr[i] == arr[j])//如果有重合元素
{
arr[j] = 0;//把该元素赋值成0
}
}
}
}
for (i = 0; i < n; i++)//打印出来
{
if (arr[i] != 0)
{
printf("%d ", arr[i]);
}
}
return 0;
}
eg 29.有序数组合并
#include
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &m, &n);
int num = m;
int arr[5000] = { 0 };//定义两个数组
int brr[5000] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < m; i++)
{
scanf("%d", &arr[i]);//初始化这两个数组
}
for (j = 0; j < n; j++)
{
scanf("%d", &brr[j]);
}
int crr[10000] = { 0 };//定义一个大的数组
for (i = 0; i < m; i++)
{
crr[i] = arr[i];//把arr数组的元素赋值给crr数组的前半段
}
for (i = 0; i < n; i++)
{
crr[num] = brr[i];//把brr数组的元素赋值给crr数组的后半部
num++;
}
for (j = 1; j < m + n; j++)//合并完保证是升序的 进行冒泡排序
{
for (i = 0; i < (m + n) - j; i++)
{
if (crr[i] > crr[i + 1])
{
int temp = crr[i];
crr[i] = crr[i + 1];
crr[i + 1] = temp;
}
}
}
for (i = 0; i < m + n; i++)//最后打印出来
{
printf("%d ", crr[i]);
}
return 0;
}
eg 30. 上三角形矩阵判断
#include
int main()
{
int n = 0;
scanf ("%d",&n);
int i = 0;
int j = 0;
int arr[10][10] = {0};
int count = 0;
for (i = 0; i < n; i++)
{
for (j = 0;j < n;j++)
{
scanf("%d",&arr[i][j]);//初始化数组
}
}
for (i = 0; i < n; i++)
{
for (j = 0;j < n;j++)
{
if (i !=j && j < n-1 && i != 0)//去访问这些下表的元素看看他们是不是都是0
{
if (arr[i][j] == 0)
{
count++;//是0计数器+1
}
}
}
}
if (count==n*(n-1)/2)//上三角矩阵的0的个数 等于阶数*(阶数-1)/2
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
eg 31.矩阵转置 (通过交换循环变量就可以实现)
#include
int main()
{
int n = 0;//行
int m = 0;//列
scanf("%d %d", &n, &m);
int arr[10][10] = { 0 };
int i, j;
for (j = 0; j < n; j++)
{
for (i = 0; i < m; i++)
{
scanf("%d", &arr[i][j]);
}
}
for (j = 0; j < m; j++)
{
for (i = 0; i < n; i++)
{
printf("%d ", arr[j][i]);
}
printf("\n");
}
}
eg 32. 杨辉三角
#include
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
int j = 0;
int arr[30][30] = { 0 };
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (j == 0)//第一列的元素全是1
{
arr[i][j] = 1;
}
else if (j == i)//对角线的元素都是1
{
arr[i][j] = 1;
}
else//其他的元素都等于上一行的元素+上一行左一列的元素和
{
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
}
for (i = 0; i < n; i++)//打印出来杨辉三角
{
for (j = 0; j <= i; j++)
{
printf("%5d", arr[i][j]);
}
printf("\n");
}
return 0;
}
eg 33.矩阵交换
#include
int arr[10][10];
void swapr(int m, int a, int b)
{
int temp;
for(int i = 0; i < m;i++)//交换对应下标元素
{
temp = arr[a][i];
arr[a][i] = arr[b][i];
arr[b][i] = temp;
}
}
void swapc(int n,int a, int b)//交换对应下标元素
{
int temp;
scanf("%d%d",&a,&b);
for(int i = 0; i < n;i++)
{
temp = arr[i][a];
arr[i][a] = arr[i][b];
arr[i][b] = temp;
}
}
int main()
{
int n,m,k,a,b;
char func;
scanf("%d%d",&n,&m);
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
scanf("%d",&arr[i][j]);//初始化数组
}
}
scanf("%d",&k);//输入需要变化几次
while(k)
{
scanf(" %c%d%d",&func,&a,&b);
if(func == 'r')//行变换
{
swapr(m,a-1,b-1);//调用函数
}
if(func == 'c')//列变化
{
swapc(n,a-1,b-1);//调用函数
}
k--;
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)//打印出来变化后的数组
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
eg 33.模拟实现计算器
#include
//模拟实现计算器函数指针
int add(int x,int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int cheng(int x, int y)
{
return x * y;
}
void calc(int (*pf)(int, int))
{
int ret = pf(3, 5);
printf("%d", ret);
}
int main()
{
calc(add);
printf("\n");
calc(sub);
printf("\n");
calc(cheng);
return 0;
}
’