程序题
程序设计
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:编写函数fun(str,i,n),从字符串str中删除第i个
字符开始的连续n个字符(注意:str[0]代表字符串
的第一个字符)。
------------------------------------------------*/
#include "stdio.h"
#include "string.h"
main()
{
char str[81];
int i,n;
void fun(char str[],int i,int n);
void TestFunc();
printf("请输入字符串str的值:\n");
scanf("%s",str);
printf("你输入的字符串str是:%s\n",str);
printf("请输入删除位置i和待删字符个数n的值:\n");
scanf("%d%d",&i,&n);
while (i+n-1>strlen(str))
{
printf("删除位置i和待删字符个数n的值错!请重新输入i和n的值\n"); scanf("%d%d",&i,&n);
}
fun(str,i,n);
printf("删除后的字符串str是:%s\n",str);
TestFunc();
}
void fun(char str[],int i,int n)
{
/*********Begin**********/
while(str[i+n-1])
{
str[i-1]=str[i+n-1];
i++;
}
str[i-1]='\0';
/* 或
int j=i-1,k=i+n-1;
while((str[j++]=str[k++])!='\0');
*/
/********** End **********/
}
void TestFunc()
{
FILE *IN,*OUT;
char i[200];
/*char o[200];*/
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read File Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write File Error");
}
fscanf(IN,"%s",i);
fun(i,2,8);
fprintf(OUT,"%s\n",i);
fclose(IN);
fclose(OUT);
}
/*------------------------------------------------ 【程序设计】
-------------------------------------------------- 功能:请编一个函数void fun(int tt[M][N],int pp[N]), tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维
数组中的数已在主函数中赋予。
------------------------------------------------*/ #include "conio.h"
#include "stdio.h"
#define M 3
#define N 4
void fun(int tt[M][N],int pp[N])
{
/*********Begin**********/
int i,j;
for(j=0;j { pp[j]=tt[0][j]; for(i=1;i if(tt[i][j] pp[j]=tt[i][j]; } /********** End **********/ } main() { int t[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}}; void NONO(); int p[N],i,j,k; printf("The original data is:\n"); for(i=0;i { for(j=0;j printf("%6d",t[i][j]); printf("\n"); } fun(t,p); printf("\nThe result is:\n"); for(k=0;k printf("\n"); NONO(); } /*------------------------------------------------ 【程序设计】1685 -------------------------------------------------- 功能:能计算从1开始到n的自然数的和,n由键盘输入, 并在main()函数中输出。 ------------------------------------------------*/ #include "stdio.h" int fun(int n) { /*********Begin**********/ int sum=0,i; for(i=1;i<=n;i++) sum=sum+i; return(sum); /********** End **********/ } main() { int m; void TestFunc(); printf("Enter m: "); scanf("%d", &m); printf("\nThe result is %d\n", fun(m)); TestFunc(); } /*------------------------------------------------ 【程序设计】1599 -------------------------------------------------- 功能:调用函数fun判断一个三位数是否"水仙花数"。 在main函数中从键盘输入一个三位数,并输 出判断结果。请编写fun函数。 说明:所谓"水仙花数"是指一3位数,其各位数字立方和等于该数本身。 例如:153是一个水仙花数,因为153=1+125+27。 ------------------------------------------------*/ #include "stdio.h" int fun(int n) { /*********Begin**********/ int bw,sw,gw; bw=n/100;sw=(n-bw*100)/10;gw=n%10; if(n==bw*bw*bw+sw*sw*sw+gw*gw*gw) return 1; else return 0; /********** End **********/ } main() { int n,flag; scanf("%d",&n); flag=fun(n); if(flag) printf("%d 是水仙花数\n",n); else printf("%d 不是水仙花数\n",n); TestFunc(); } /*-------------------------------------------------------------- 【程序设计】 ---------------------------------------------------------------- 功能:编写函数sum(int m,int n),求出m~n之间(包括m和n,m ---------------------------------------------------------------*/ #include "stdio.h" int sum(int m,int n) { /*********Begin**********/ int i, s=0; for(i=m;i<=n;i++) if(i%3==0 && i%5==0) s+=i; return s; /********** End **********/ } main() { void TestFunc(); int m=15,n=300; printf("sum=%d\n",sum(m,n)); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:求5行5列矩阵的主、副对角线上元素之和。注意, 两条对角线相交的元素只加一次。 例如:主函数中给出的矩阵的两条对角线的和为45。 ------------------------------------------------*/ #include "stdio.h" #define M 5 int fun(int a[M][M]) { /*********Begin**********/ int i, s=0; for(i=0;i s+=a[i][i]+a[i][M-i-1]; s-=a[(M-1)/2][(M-1)/2]; return s; /********** End **********/ main() { int a[M][M]={{1,3,5,7,9},{2,4,6,8,10},{2,3,4,5,6},{4,5,6,7,8},{1,3,4,5,6}}; int y; y=fun(a); printf("s=%d\n",y); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:根据整型形参m,计算如下公式的值: y=1/5+1/6+1/7+1/8+1/9+1/10...+1/(m+5) 例如:若m=9,则应输出:1.168229 ------------------------------------------------*/ #include "stdio.h" double fun(int m) { /*********Begin**********/ int i; double y=0; for(i=0;i<=m;i++) y+=1./(i+5); return y; /********** End **********/ } main() { int n; void TestFunc(); printf("Enter n: "); scanf("%d", &n); printf("\nThe result is %1f\n", fun(n)); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:求一批数中最大值和最小值的积。 ------------------------------------------------*/ #define N 30 #include "stdlib.h" #include "stdio.h" int max_min(int a[],int n) { /*********Begin**********/ int i, max, min; max=min=a[0]; for(i=1;i { if(a[i]>max) max=a[i]; if(a[i] } return max*min; /********** End **********/ } main() { int a[N],i,k; void TestFunc(); for(i=0;i a[i]=rand()%51+10; for(i=0;i { printf("%5d",a[i]); if((i+1)%5==0) printf("\n"); } k=max_min(a,N); printf("the result is:%d\n",k); //TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在fun函数中 实现,请给出该函数的定义。 ------------------------------------------------*/ #include "stdio.h" #include "stdlib.h" #define VSIZE 20 int vector[VSIZE] ; int fun(int list[],int size) { /*********Begin**********/ int i,min=0; for(i=1; i if(list[min]>list[i]) min=i; return min; /********** End **********/ } main() { int i; void NONO(); for (i=0;i { vector[i]=rand(); printf("Vector[%d]=%6d\n",i,vector[i]); } i=fun(vector,VSIZE); printf("\nMininum: Vector[%d]=%6d\n",i,vector[i]); NONO(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:求k!(k〈13),所求阶乘的值作为函数值返回。 (要求使用递归) ------------------------------------------------*/ #include "stdio.h" #include "conio.h" long fun(int k) { /*********Begin**********/ if (k>0) return(k*fun(k-1)); else if(k==0) return 1L; /********** End **********/ } main() { int m; void TestFunc(); printf("Enter m: "); scanf("%d", &m); printf("\nThe result is %ld\n", fun(m)); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:用do-while语句求1~100的累计和。 ------------------------------------------------*/ #include "stdio.h" long int fun(int n) { /*********Begin**********/ int i =1, sum =0; do { sum = sum + i; i++; } while ( i <= n ); return sum; /********** End **********/ } main () { int i=100; void TestFunc(); printf("1~100的累加和为:%ld\n",fun(i)); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:编写程序,实现矩阵(3行3列)的转置(即行列互换)例如:输入下面的矩阵: 100 200 300 400 500 600 700 800 900 程序输出: 100 400 700 200 500 800 300 600 900 ------------------------------------------------*/ #include "stdio.h" void fun(int array[3][3]) { /*********Begin**********/ int i,j,t; for(i=0; i < 3; i++) for(j=0; j < i; j++) { t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } /*【或】 int i, j, t; for (i=0; i < 3; i++) for (j=i+1; j < 3; j++) { t=array[i][j]; array[i][j]=array[j][i]; array[j][i] = t; } */ /********** End **********/ } main() { int i,j; void NONO(); int array[3][3]={{100,200,300}, {400,500,600}, {700,800,900}}; for (i=0; i < 3; i++) { for (j=0; j < 3; j++) printf("%7d",array[i][j]); printf("\n"); } fun(array); printf("Converted array:\n"); for (i=0; i < 3; i++) { for (j=0; j < 3; j++) printf("%7d",array[i][j]); printf("\n"); } NONO(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:将字符串中的小写字母转换为对应的大写字母,其它字符不变。 ------------------------------------------------*/ #include "string.h" #include "stdio.h" void change(char str[]) { /*********Begin**********/ int i; for(i=0;str[i]!='\0';i++) if(str[i]>='a' && str[i]<='z') str[i]=str[i]-32; /********** End **********/ } main() { void change(); char str[40]; void TestFunc(); gets(str); change(str); puts(str); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。 例如:当s中的数为:7654321时,t中的数为:642。 ------------------------------------------------*/ #include "stdio.h" long fun (long s,long t) { /*********Begin**********/ long sl=10; s /= 10; t = s % 10; while(s > 0) { s = s/100; t = s%10*sl + t; sl = sl * 10; } /********** End **********/ return t; } main() { long s, t,m; void TestFunc(); printf("\nPlease enter s:"); scanf("%ld", &s); m=fun(s,t); printf("The result is: %ld\n", m); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:求出二维数组外围元素之和,作为函数值返回。二维数组的值在主函数中赋予。 -------------------------------------------------*/ #define M 4 #define N 5 #include "stdio.h" int fun(int a[M][N]) { /*********Begin**********/ int s=0; int i,j; for(i=0;i s=s+a[i][0]+a[i][N-1]; for(j=1;j s=s+a[0][j]+a[M-1][j]; return s; /********** End **********/ } main() { int a[M][N]={{1,3,5,7,9},{2,4,6,8,10},{2,3,4,5,6},{4,5,6,7,8}}; void TestFunc(); int y; y=fun(a); printf("s=%d\n",y); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:找出一个大于给定整数且紧随这个整数的素数,并 作为函数值返回。 ------------------------------------------------*/ #include "stdio.h" #include"conio.h" int fun(int n) { /*********Begin**********/ int i,k; for(i=n+1;;i++) { for(k=2;k if(i%k==0) break; if(k==i) return(i); } /********** End **********/ } main() { int m; printf("Enter m: "); scanf("%d", &m); printf("\nThe result is %d\n", fun(m)); TestFunc(); } /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:计算并输出给定整数n的所有因子之和(不包括1与自身)。 注意:n的值不大于1000。