1.设计一个递归函数,计算Ackerman的值。Ackerman函数定义如下:
n+1 m=0
A(m,n)= A(m-1,1) m≠0,n=0
A(m-1,A(m,n-1)) m≠0,n≠0
#include<stdio.h>
int A(int m,int n){
int result;
if(m==0){
result=n+1;
}else if(n==0){
result=A(m-1,n);
}else{
result=A(m-1,A(m,n-1));
}
return result;
}
int main(){
int m,n;
printf("请输入m,n:");
scanf("%d %d", &m,&n);
printf("Ackerman函数的值为:%d\n",A(m,n));
return 0;
}
这个函数我也是第一次接触哈,具体介绍可以看一下这个链接哦!
http://baike.baidu.com/item/阿克曼函数/10988285
2.设计一个函数,判断一个整数是否为素数。
#include<stdio.h>
int Number(int n){
if(n<=1){
return 0;
}
for(int i=2;i*i<n;i++){
if((n%i)==0){
return 0;
}else{
return 1;
}
}
}
int main(){
int n;
printf("请输入n:");
scanf("%d", &n);
if(Number(n)){
printf("%d是一个素数",n);
}else{
printf("%d不是一个素数",n);
}
return 0;
}
3.杨辉三角形
#include <stdio.h>
#define N 14
void main()
{
int i, j, k, n=0, a[N][N]; /*定义二维数组a[14][14]*/
while(n<=0||n>=13){ /*控制打印的行数不要太大,过大会造成显示不规范*/
printf("请输入要打印的行数:");
scanf("%d",&n);
}
printf("%d行的杨辉三角如下:\n",n);
for(i=1;i<=n;i++)
a[i][1] = a[i][i] = 1; /*两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数*/
for(i=3;i<=n;i++)
for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j]; /*除两边的数外都等于上两顶数之和*/
for(i=1;i<=n;i++){
for(k=1;k<=n-i;k++)
printf(" "); /*这一行主要是在输出数之前打上空格占位,让输出的数更美观*/
for(j=1;j<=i;j++) /*j<=i的原因是不输出其它的数,只输出我们想要的数*/
printf("%6d",a[i][j]);
printf("\n"); /*当一行输出完以后换行继续下一行的输出*/
}
printf("\n");
}
4.编写一个程序,计算两个十维向量的和。
【什么是十维向量?十维向量是一个有十个元素的向量。在数学和计算机科学中,向量是一组有序的数值,可以表示在十个不同的方向上的大小和方向。每个元素都对应于一个维度,也可以看作是一个十维空间中的点。十维向量可以用来表示包含十个特征的数据,例如在机器学习中用于描述样本的特征。】
#include <stdio.h>
#define DIMENSION 10
void addVectors(int vector1[], int vector2[], int result[]) {
int i;
for(i = 0; i < DIMENSION; i++) {
result[i] = vector1[i] + vector2[i];
}
}
int main() {
int vector1[DIMENSION] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int vector2[DIMENSION] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int result[DIMENSION];
int i;
// 计算两个向量的和
addVectors(vector1, vector2, result);
// 打印结果
for(i = 0; i < DIMENSION; i++) {
printf("%d ", result[i]);
}
printf("\n");
return 0;
}
例题拓展:两个矩阵相加
#include <stdio.h>
int main(){
int r, c, a[100][100], b[100][100], sum[100][100], i, j;
printf("输入行数 ( 1 ~ 100): ");
scanf("%d", &r);
printf("输入列数 ( 1 ~ 100): ");
scanf("%d", &c);
printf("\n输入第一维数组的元素:\n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("输入元素 a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}
printf("输入第二维数组的元素:\n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("输入元素 a%d%d: ",i+1, j+1);
scanf("%d", &b[i][j]);
}
// 相加
for(i=0;i<r;++i)
for(j=0;j<c;++j)
{
sum[i][j]=a[i][j]+b[i][j];
}
// 显示结果
printf("\n二维数组相加结果: \n\n");
for(i=0;i<r;++i)
for(j=0;j<c;++j)
{
printf("%d ",sum[i][j]);
if(j==c-1)
{
printf("\n\n");
}
}
return 0;
}
5.编写一个程序,统计输入字符串中大写字母、小写字母、数字、其他符号的个数。
#include <stdio.h>
#include <ctype.h>
int main() {
char input[100];
int upper_count = 0, lower_count = 0, digit_count = 0, symbol_count = 0;
int i;
printf("请输入一个字符串:");
fgets(input, sizeof(input), stdin);
for (i = 0; input[i] != '\0'; i++) {
if (isupper(input[i])) {
upper_count++;
} else if (islower(input[i])) {
lower_count++;
} else if (isdigit(input[i])) {
digit_count++;
} else {
symbol_count++;
}
}
printf("大写字母个数:%d\n", upper_count);
printf("小写字母个数:%d\n", lower_count);
printf("数字个数:%d\n", digit_count);
printf("其他符号个数:%d\n", symbol_count-1);
return 0;
}