C初级阶段练习题目(三)
来源:互联网 发布:福州专业淘宝美工培训 编辑:程序博客网 时间:2024/05/17 07:16
//***********************21、求一个3*3矩阵对角线元素之和**********************
intmain()
{
inti, j;
intsum1 = 0;
intsum2 = 0;
inta[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(i == j) // \方向 主对角线元素之和
{
sum1 = sum1 + a[i][j];
}
if(i + j == 2) // /方向 副对角线元素之和
{
sum2 = sum2 + a[i][j];
}
}
}
printf("主对角线元素之和=%d\n", sum1);
printf("副对角线元素之和=%d\n", sum2);
printf("对角线元素之和=%d\n", sum1 + sum2 - a[1][1]);
return0;
}
//******扩展:当矩阵为N*N时
#defineN4
intmain()
{
inti, j;
intsum1 = 0;
intsum2 = 0;
inta[N][N] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 };
for(i = 0; i <N; i++)
{
for(j = 0; j <N; j++)
{
if(i == j) // \方向 主对角线元素之和
{
sum1 = sum1 + a[i][j];
}
if(i + j ==N-1) // /方向 副对角线元素之和
{
sum2 = sum2 + a[i][j];
}
}
}
printf("主对角线元素之和=%d\n", sum1);
printf("副对角线元素之和=%d\n", sum2);
if(N% 2 == 0) //偶数矩阵
{
printf("对角线元素之和=%d\n", sum1 + sum2);
}
if(N% 2 != 0)
{
printf("对角线元素之和=%d\n", sum1 + sum2 - a[(N- 1) / 2][(N- 1) / 2]);
}
return0;
}
//******************22、将一个整形数组逆序**************************
int* Reverse(int*a,intleft,intright)
{
inttemp = 0;
while(left<right)
{
temp =a[left];
a[left] =a[right];
a[right] = temp;
left++;
right--;
}
returna;
}
intmain()
{
inti = 0;
intarr[] = { 1, 2, 3, 4, 5 };
intsize =sizeof(arr) /sizeof(arr[0]);
Reverse(arr, 0, size - 1);
for(i = 0; i < size; i++)
{
printf("arr[i]=%d\n", arr[i]);
}
return0;
}
//*****************23、对一个整型数组排序(冒泡排序)*******************
int* BubbleSort(int*a,intsize)
{
inti = 0;
intj = 0;
inttmp = 0;
for(i = 0; i <size; i++)
{
for(j = 0; j <size; j++)
{
if(a[j] <a[j + 1])
{
tmp =a[j];
a[j] =a[j + 1];
a[j + 1] = tmp;
}
}
}
returna;
}
intmain()
{
inti = 0;
intarr[] = { 1, 4, 3, 7, 2, 9, 5, 0, 6 };
intsize =sizeof(arr) /sizeof(arr[0]);
BubbleSort(arr, size);
for(i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
return0;
}
//*****************25、用递归的方式求斐波那契的第n个数**********************
// | 0 n=0
// | 1 n=1
// F(n)=| 1 n=2
// | F(n-1)+F(n-2) n>2
// 0 1 1 2 3 5 8 13 21 34 55 89 ...
typedeflonglong INT;
INTFib(intnum)
{
if(num== 0)
return0;
if(num== 1)
return1;
returnFib(num- 1) + Fib(num- 2);
}
intmain()
{
intn = 0;
INTret = 0;
printf("请输入序号:");
scanf("%d", &n);
ret=Fib(n);
printf("%d", ret);
return0;
}
//**************26、用非递归的方式求斐波那契数列的第n个数********************
//用数组的话不知道要开辟多大的空间,如果num的值小,而开辟的空间太大,会造成空间浪费
//最好的方法是用三个变量不停交换值,循环num-1次,占用空间12个字节,效率也不慢
//如果是在C++中,可以用vector类型的数组来放数据,可自动增容,也可用三个指针
intFib(intnum)
{
inta = 0;
intb = 1;
intc = 0;
inti = 0;
if(num== 0)
returna;
if(num== 1)
returnb;
for(i = 2; i <=num; i++)
{
c = a + b;// 1 2 3 5
a = b; // 0 1 1 2
b = c; // 1 1 2 3
}
returnc;
}
intmain()
{
intn = 0;
scanf("%d", &n);
intret=Fib(n);
printf("第%d项的值=%d", n,ret);
return0;
}
//************27、编写一个函数求字符串的长度(不使用库函数)***************
//注意:*p的类型要和str的类型一致,否则传参失败,程序结果出错
#include<assert.h>
intmy_strlen(constchar*str)
{
assert(str);
intcount = 0;
char*p =str;
if(*p ==NULL)
return0;
while(*p !='\0')
{
count++;
p++;
}
returncount;
}
intmain()
{
chara[] ="abcdef";
intret=my_strlen(a);
printf("字符串长度=%d",ret);
return0;
}
//*******************28、不允许创建临时变量求一个字符串的长度*****************
//注意:进入程序要判断参数是否存在,参数是否为空
#include<assert.h>
int _strlen(constchar*a)
{
assert(a);
if(*a==NULL)
return0;
else
return(1 + _strlen(a+ 1));
}
intmain()
{
chara[] ="abcdefgh1234556";
intret=_strlen(a);
printf("字符串长度=%d", ret);
return0;
}
//*******************29、对任意一个整型数组排序(选择排序)*******************
//选择排序举例: 5 7 4 9 3 0 8 2 1
// 0 7 4 9 3 5 8 2 1
// 0 1 4 9 3 5 8 2 7
// 0 1 2 9 3 5 8 4 7
// 0 1 2 3 9 5 8 4 7
// 0 1 2 3 4 5 8 9 7 .....
//begin从第一个数开始,从除第一个数以外的数中找到最小的数,然后与第一个数交换
//begin++,指向第二个数,从第二个往后的数中找最小数,然后与之交换
//直到begin指向最后一个数时,表示顺序以及排好
//NOTE::找其余数中的最小值
#include<assert.h>
voidSelectSort(int*a,intsize)
{
assert(a);
intbegin = 0;
inti = 0;
intMin = 0;
inttemp = 0;
while(begin <size- 1) //当begin指向倒数第一个数时已经排好
{
Min = begin;
for(i = begin + 1; i <size; i++)
{
if(a[i] <a[Min]) //每次都和最小的那个数比较
{
Min = i;
}
}
temp =a[Min];
a[Min] =a[begin];
a[begin] = temp;
begin++;
}
}
intmain()
{
inti = 0;
intarr[] = { 9, 7, 4, 9, 3, 1, 8, 2, 0 };
SelectSort(arr,sizeof(arr) /sizeof(arr[0]));
for(i = 0; i <sizeof(arr) /sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
return0;
}
//*****************30、求一个数的二进制序列中1的个数**************************
//利用十进制转二进制的方法,余数倒写则为十进制的二进制表示
//在这里不用看顺序,只需要统计1的个数,所以只需统计每次除以2余数是1的个数
intmain()
{
size_tdata = 0;
intcount = 0;
scanf("%d", &data);
while(data)
{
if(data % 2 == 1)
{
count++;
}
data = data >> 1; // data=data/2;
}
printf("count=%d\n", count);
return0;
}
0 0
- C初级阶段练习题目(三)
- C初级阶段练习题目(一)
- C初级阶段练习题目(二)
- c语言初级阶段知识整理(一)
- C练习(三)
- <C/C++基础>九度OJ题目1050--1100解题练习(三)
- c语言初级阶段散知识整理(一)
- C语言复习day3(题目练习)
- c语言题目练习(2)
- C语言练习题目
- 练习c语言题目
- 三.SQL基础的练习题目(用心总结版)
- C程序设计Week8 练习题目
- C程序设计Week9 练习题目
- c语言小题目练习
- linux c 多线程编程练习(三)
- C语言练习作业(三)
- C语言基础练习(三)
- git的基本使用
- 函数模板练习题——template cmp
- Spring Boot使用方法小札(1):Web应用返回jsp页面
- 写MD5加密
- 利用栈将中缀表达式转换为后缀表达式
- C初级阶段练习题目(三)
- MacOS删除vpn
- ES6学习4(函数的拓展)
- arpspoof毒化
- 类模板练习题——Template Arithmetic
- 程序员提高效率的必备工具
- (三)JavaScript 的运算符,条件语句,循环语句..
- 电商之梳理mina相关知识---框架
- 电商之梳理jetty相关知识---服务器