6.C语言程序设计代码

  • Post author:
  • Post category:其他


设计一个函数,该函数用于求一个任意大小的二维double型数组的平均值。

该函数的名字叫做matrixAvg

int main() {


double matrixAvg(int m, int n, double b[m][n]);

int M, N;

scanf(“%d%d”, &M, &N);

double aver, a[M][N];

int i, j;

for (i = 0; i < M; i++)

for (j = 0; j < N; j++)

scanf(“%lf”, &a[i][j]);

aver = matrixAvg(M, N, a);

printf(“%.2f\n”, aver);

return 0;

}

double matrixAvg(int m, int n, double b[m][n])

{


int i, j;

double sum = 0, num;

for (i = 0; i < m; i++)

{


for (j = 0; j < n; j++)

{


sum = sum + b[i][j];

}

}

num = sum / (m * n);

return num;

}

设计一个函数,该函数用于实现一维数组的循环右移。

函数原型为:

void arrayShiftRight(int a[ ],int n,int m);

该函数的功能是将长度为n的数组a循环右移m个位置。

#include<stdio.h>

void arrayShiftRight(int n, int m,int x[])

{


int t=0,i=0,j=1;

for(i=0;i<m;i++)

{


t=x[n-1];

for(j=n-2;j>-1;j–)

{


x[j+1]=x[j];

}

x[0]=t;

}

}

int main()

{


int n,k,xx[20];

int i,j,t;

scanf(“%d”,&n);

scanf(“%d”,&k);

for(i=0;i<n;i++)

{


scanf(“%d”,&xx[i]);

}

arrayShiftRight(n,k,xx);

for(i=0;i<n;i++)

{


printf(“%d “,xx[i]);

}

printf(“\n”);

return 0;

}

本题要求实现一个对整数数组进行简单排序的函数。

函数原型为:void sort( int a[], int n );

其中

a

是待排序的数组,

n

是数组

a

中元素的个数。该函数用某种方法将数组

a

中的元素按升序排列,结果仍然在数组

a

中。

#include<stdio.h>

int main()

{


int i, n;

scanf(“%d”, &n);

int a[n];

for (i = 0; i < n; i++)

scanf(“%d”, &a[i]);

sort(n,a);

printf(“After sorted the array is:”);

for (i = 0; i < n; i++)

printf(” %d”, a[i]);

printf(“\n”);

return 0;

}

void sort(int n, int a[n])

{


int i, j,temp;

for (i = 0; i < n; i++)

{

for (j = i; j < n; j++)

{


if (a[i] > a[j])

{


temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}

}

}

本题引用自PTA,原作者:浙江大学C课程组

本题要求实现一个求整数的逆序数的简单函数。

函数原型为:int reverse( int number );

其中函数

reverse

须返回用户传入的整型

number

的逆序数。

#include<stdio.h>

int main()

{


int n;

int reverse(int number);

scanf(“%d”, &n);

printf(“%d\n”, reverse(n));

return 0;

}

int reverse(int number)

{


int num=0,n,wei,len=0,temp=number;

int i, j;

while (temp != 0)

{


temp /= 10;

len += 1;

}

n = len;

for (i = 0; i < len; i++)

{


wei = number % 10;

num = num+wei * pow(10, n-1);

number /= 10;

n -= 1;

}

return num;

}

本题引用自PTA,原作者:山东理工大学巨同升

本题要求的程序功能是:首先在main函数中输入10个数,然后在被调函数ave中求出这10个数的平均值,最后在main函数中输出结果。要求写出函数ave。

函数原型为:double ave(double a[],int n);

其中

a



n

是由主调函数传入的参数。

#include<stdio.h>

int main(void)

{

int N;

double ave(double a[], int n);

scanf(“%d”, &N);

double x[N], p;

int i;

for (i = 0; i < N; i++)

scanf(“%lf”, &x[i]);

p = ave(x, N);

printf(“ave=%.2f\n”, p);

return 0;

}

double ave(double a[], int n)

{


double sum=0;

int i, j;

for (i = 0; i < n; i++)

{


sum = sum + a[i];

}

sum = sum / n;

return sum;

}

本题引用自PTA, 原作者:浙江大学张高燕

若两个复数分别为:c1=x1+y1i  和c2=x2+y2i,则它们的乘积为 c1×c2=(x1x2−y1y2)+(x1y2+x2y1)i。

本题要求实现一个函数计算两个复数之积。

函数原型为:

double result_real, result_imag;  //这是两个全局变量void complex_prod( double x1, double y1, double x2, double y2 );

其中用户传入的参数为两个复数

x1

+

y1

i  和

x2

+

y2

i;函数

complex_prod

应将计算结果的实部存放在全局变量

result_real

中、虚部存放在全局变量

result_imag

中。

#include<stdio.h>

double result_real, result_imag;

int main(void)

{


double imag1, imag2, real1, real2;

void complex_prod(double x1, double y1, double x2, double y2);

scanf(“%lf %lf”, &real1, &imag1);

scanf(“%lf %lf”, &real2, &imag2);

complex_prod(real1, imag1, real2, imag2);

printf(“product of complex is (%f)+(%f)i\n”, result_real, result_imag);

return 0;

}

void complex_prod(double x1, double y1, double x2, double y2)

{


result_real = x1*x2-y1*y2;

result_imag = x1 * y2 + x2 * y1;

}

本题引用自PTA,原作者:浙大城市学院张高燕

本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。

函数原型为:int search( int n );

其中传入的参数

int n

是一个三位数的正整数(最高位数字非0)。函数

search

返回[101,

n

]区间内所有满足条件的数的个数。

#include<stdio.h>

int main()

{


int number;

int search(int n);

scanf(“%d”, &number);

printf(“count=%d\n”, search(number));

return 0;

}

int search(int n)

{


int i, j=0;

int a,b,c,num;

for (i = 101; i < n; i++)

{


a = i % 10; b = (i / 10) % 10; c = (i / 100) % 10;

num = sqrt(i);

if (a == b || b == c || a == c)

if( i == num * num)

j ++;

}

return j;

}

本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。

函数原型如下:int f( int n );

函数

f

应返回第

n

个Fabonacci数。

#include<stdio.h>

int main()

{


int n;

int f(int n);

scanf(“%d”, &n);

printf(“%d\n”, f(n));

return 0;

}

int f(int n)

{


int i, j,num;

if (n == 1) { num = 1; return num; }

if (n == 2) {


num = 1; return num;

}

num = f(n – 1) + f(n – 2);

return num;

}

本题引用自PTA,原作者:浙江大学陈越

本题要求实现一个计算非负整数阶乘的简单函数。函数原型为:int Factorial( const int N );

其中

N

是用户传入的参数,其值不超过12。如果

N

是非负整数,则该函数必须返回

N

的阶乘,否则返回0。

#include<stdio.h>

int Factorial(int N);

int main()

{


int N, NF;

scanf(“%d”, &N);

NF = Factorial(N);

if (NF)  printf(“%d! = %d\n”, N, NF);

else printf(“Invalid input\n”);

return 0;

}

int Factorial(int N)

{


int i,j,num = 1;

if (N > 0 && N <= 12)

{


for (i = 1; i <= N; i++)

{


num = num * i;

}

return num;

}

else { return 0; }

}

本题引用自PTA,原作者:浙江大学陈越

本题要求实现判断给定整数奇偶性的函数。函数原型为:

int even( int n );

其中

n

是用户传入的整型参数。当

n

为偶数时,函数返回1;

n

为奇数时返回0。注意:0是偶数。

#include<stdio.h>

int main()

{


int n;

int even(int n);

scanf(“%d”, &n);

if (even(n))

printf(“%d is even.\n”, n);

else

printf(“%d is odd.\n”, n);

return 0;

}

int even(int n)

{


if (n % 2 == 0)return 1;

else { return 0; }

}

编制程序,设计一个函数,这个函数用于判断一个字符串是否回文串。所谓回文串,是一个正读和反读都一样的字符串。例如”level”和”moom”

该函数的原型如下:

int isPalindromicString(char s[ ]);

这个函数接收要判断的字符串的首地址并判断其是否回文串。是则返回1,不是则返回0。

#include<stdio.h>

int main() {


char s[100];

int isPalindromicString(char s[]);

gets(s);

if (isPalindromicString(s))

printf(“Yes”);

else

printf(“No”);

return 0;

}

int isPalindromicString(char s[])

{


int len, i, j;

len = strlen(s);

if (len % 2 == 0)

{


for (i = 0; i < len / 2; i++)

{

if (s[i] != s[len – i-1])return 0;

else { return 1; }

}

}

if (len % 2 != 0)

{


for (i = 0; i < (len – 1) / 2; i++)

{


if (s[i] != s[len – i-1])return 0;

else { return 1; }

}

}

}

给定正整数N,函数F(N)表示小于等于N的自然数中1和2的个数之和,例如:1,2,3,4,5,6,7,8,9,10序列中1和2的个数之和为3,因此 F(10)=3。输入N,求F(N)的值,1=<N<=10^100(10的100次方)若F(N)很大,则求F(N)mod20123的值

#include<stdio.h>

int main() {


int i, j, n;

int F(int n);

while(scanf(“%d”,&n)!=EOF)

{

printf(“%d\n”, F(n));

}

}

int F(int n)

{


int i,k, len=0,temp=n,j=0,a;

for (i = 1; i <= n; i++)

{


while (temp != 0)

{


temp /= 10;

len += 1;

}

int itemp = i;

for (k = 0; k < len; k++)

{


a = itemp % 10;

itemp /= 10;

if (a == 1 || a == 2)

j++;

}

}

return j;

}

在算法4-1中已经描述过一种定位子串的算法,但其依赖字符串的其他操作(使用了算法4-3描述的子串提取以及字符串比较)。

下面给出书中另一种相对独立的定位子串算法:

图:求子串位置的定位函数

书中的算法思想是这样的:分别利用计数指针i和j指示主串S和模式串T中当前正待比较的字符位置。算法的基本思想是:从主串S的第pos个字符起和模式的第一个字符比较之,若相等,则继续逐个比较后续字符,否则从主串的下一个字符起再重新和模式的字符比较之。依次类推,直至模式T中的每个字符依次和主串S中的一个连续的字符序列相等,则称匹配成功,函数值为和模式T中第一个字符相等的字符在主串中的序号,否则称匹配不成功,函数值为零。

你的任务是将S中每次比较的字符输出来,并将匹配的序号输出。

#include<stdio.h>


typedef struct

{


char s[1000];

int len;

}SString;

int Index(SString S, SString T)

{


int pos = 0;

int i = 0, j = 0;

while (i < S.len && j < T.len)

{


if (S.s[i] == T.s[j])

{


printf(“%c”, S.s[i]);

++i; ++j;

}

else

{


printf(“%c”, S.s[i]);

j = 0;

i = ++pos;

}

}

putchar(‘\n’);

if (j == T.len)

return pos;

else

return -1;

}

int main()

{


SString S, T;

int pos;

int n, m, j, k, i;

while (~scanf(“%s”, S.s))

{


scanf(“%s”, T.s);

S.len = strlen(S.s);

T.len = strlen(T.s);

int ans = Index(S, T) + 1;

printf(“%d\n”, ans);

}

return 0;

}

本题目要求计算下列分段函数f(x)的值:

#include<stdio.h>

int main()

{


double answer(double x);

double x, y;

scanf(“%lf”, &x);

printf(“f(%.1lf) = %.1lf”,x, answer(x));

}

double answer(double x)

{


double y, i, j;

if (x >= 5)

{


y = x * x + 4 * x – 2;

return y;

}

else if (0 <= x && x < 5)

{


y = 3 * x + 2; return y;

}

else if (x < 0)

return 0.0;

}



版权声明:本文为twotanshui原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。