C/C++教程

C语言设计题概述

本文主要是介绍C语言设计题概述,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/// 1.   大写转小写  小写转大写  其他字符不变

/*
char fun(char  ch)
{

   if ((ch>='a')&&(ch<='z'))
      return  ch -'a' + 'A';
   if ( isupper(ch) )                      #include    <ctype.h>

      return  ch +'a'-'A';

   return ch;
}
*/
/// 2.   计算给定整数的所有因子之和(不包括1和n)n不大于1000
/*
int fun(int  n)
{
    int i,sum=0;
    for(i=2;i<=n-1;i++)
    {
        if(n%i==0)
            sum+=i;
    }
    return sum;
}
*/
///计算函数 3.   1+x-x²/2!.........
/*
#include    <stdio.h>
#include    <math.h>
double fun(double  x, int  n)
{  double  f, t;      int  i;
   f = 1;
   t = -1;
   for (i=1; i<n; i++)
   {
      t *= (-1)*x/i;
      f += t;
   }
   return  f;
}
main()
{  double  x, y;
   x=2.5;
   y = fun(x, 15);
   printf("\nThe result is :\n");
   printf("x=%-12.6f    y=%-12.6f\n", x, y);
}
*/  ///要注意的就是这个函数思路是什么

/*    4.   红白黑  三个球 各有3.5.6个 任意取出8个,条件是必须有红白两种球
组合数作为函数值返回

#include <stdio.h>
int  fun()
{  int  i,j,k,sum=0;
   printf("\nThe result  :\n\n");
   for(i=1; i<=3; i++)
   {  for(j=1; j<=5; j++)
      {  k=8-i-j;
         if(k>=0 && k<=6)
         {  sum=sum+1  ;
            printf("red:%4d white:%4d black:%4d\n",i,j,k);
         }
      }
   }
   return  sum;
}
main()
{  int  sum;
   sum=fun();
   printf("sum =%4d\n\n",sum);
}
*/
///   5.  这题和上面的第三题是同一种类型的题  关键其实是变量的定义精度 除了循环变量i之外
///       t和f都是双精度  这是重点,否则得出的答案是不对的
/*
#include <stdio.h>
double  fun(int  n)
{
	int i;
	double sum=1;
    double t=1;
	for(i=1;i<=n;i++)
	{
		t*=1.0/i;
		sum+=t;

	}
	return sum;

}
main()
{  int  n;     double  s;
   printf("Input n:  ");  scanf("%d",&n);
   s=fun(n);
   printf("s=%f\n",s);
}
*/
///   6.函数功能是计算并返回当x<0.97时下列多项式的值,直到|Sn-Sn-1|<0.000001
///   Sn=1+0.5x+0.5(0.5-1)*x²/2!+0.5(0.5-1)(0.5-2)*x三次方/2!......以此规律依次递加
/*
double fun(double  x)
{
	double s1=1.0,p=1.0,sum=0.0,s0,t=1.0;     //当前的数和下一个数 :s0 s1 ;分子:p; 分母:n 计算数字的阶乘
	int n=1;
	do
	{
		s0=s1;                 ///因为后面要判断两个相邻值差值的绝对值小于等于1e-6,所以要设置为两个变量存储
		sum+=s0;               //因为值是一项一项算出来进行加减的,sum计算总和,s0存储计算出来的值和前面计算出来的总和继续相加,s1计算下一项
		t*=n;                  //这一项是计算分母的阶乘,1的阶乘是1=1*1,所以关于计算阶乘的两个变量的初值都初始化为1,但是由于阶乘是在分母上
		                       //整个式子的值计算下来是双精度的,所以这个程序里的变量除了n起整数更新值的作用外,其他都定义为double 在赋值时要注意精度问题
		p*=(0.5-n+1)*x;        //计算分子的值,要注意的地方是与更新值之间的关系,明白这个关系,才能使每一项的分子有规律的递加
		s1=p/t;                //而所要计算的每一项的值就是分子比分母的值
		n++;                   //循环值的更新
	}while(fabs(s1-s0)>=1e-6); //如果没有跳出循环的条件,值就会不断更新,这题的跳出循环条件不是到达几的阶乘,而是要根据所输入的x的值判断相邻两项
	                           //差值是否小于1e-6
	return sum;                //返回多项式和的值
}
///fabs();绝对值函数          注意包含其的头文件不能忘
*/
///  7. 函数功能 :求整数x的y次方的低3位值,例如,整数5的6次方为15625,此值的低3位值为625
/*
#include <stdio.h>
long  fun(int  x,int  y,long  *p )
{  int  i;
   long  t=1;
   for(i=1; i<=y; i++)
      t=t*x;
   *p=t;
   t=t%1000;
   return  t;
}
*/
/// 8.计算并返回给定十个数的方差 :
/*
      S=sqrt(1/10Σ(Xk-X平均值)²)[十个数]
      X的平均值=输入的十个数取平均
double fun(double x[10])
{
    double x1=0.0,s=0.0;
    int i;
    for(i=0;i<10;i++)
        x1=x1+x[i];
    x1=x1/10;          //求十个数的平均值
    for(i=0;i<10;i++)
        s=s+(x[i]-x1)*(x[i]-x1);
    return sqrt(s/10); //求十个数的方差

}
//要学会缩减变量的数量,那样才能让程序看起来更加简洁
//程序中第一个循环用来完成求十个数的总和,平均值  第二个循环用来求
//累加和的值,最后将累加和的平方根返回
*/
/// 9. 计算并返回给定数组(长度为9)中每相邻两个元素之平均值的平方根之和
/*
double fun(double  x[9])
{
	double sum=0.0;                                    //更需要注意的就是求的是平方根之和,肯定会有小数的存在,所以注意数据类型的定义
	int i,j=1;
	for(i=0;i<9;i++)
		if(j<=8)
		{
			sum+=sqrt((x[i]+x[i+1])/2.0);j++;
		}
  return sum;

}
//这个程序中需要注意的地方就是判断语句中j的使用
//数组中一共有九个数,相邻元素的相关计算需要计算8次,
//只依靠i一个循环变量也可以实现,当i=7时,计算的是(x[7]+x[8])/2
//循环判断条件改为i<8即可,但是上面的程序中判断条件是i<9
//所以就需要j来进行次数的判断
*/
/// 10.计算并返回下列多项式的值
/*
    S=1-1/2+1/3-1/4+...+1/(2*n-1)-1/2*n;
    例如:在主函数中从键盘给n输入8后,输出为:s=0.662872
    注意:要求n的值大于1但不大于100
//方法一
double fun(int  n)
{
	double sum=0.0;
	int i;
	for(i=1;i<2*n;i+=2)
	{
		sum+=(1.0/i-1.0/(i+1));
	}
	return sum;

}
//方法二
double fun(int  n)
{
	int i;
	double s=0.0;
	for(i=1;i<=n;i++)
		s=s+(1.0/(2*i-1)-1.0/(2*i));
  return s;

}
*/
/// 11 .计算并返回下列多项式的值
/*
    S=1+1/(1*2)+1/(1*2*3)+......1/(1*2*..*50)
    从键盘给n输入50后,输出为:s=718282

double fun(int  n)
{
	double sum=0,tmp=1;    //注意初始化的值,和的初始化值为0.0
	int i;
	for(i=1;i<=n;i++)
	{
		tmp=tmp*i;
		sum+=1.0/tmp;
	}
  return sum;

}

*/
///  12 计算并返回n(包括n)以内能被5或9整除的所有自然数的倒数之和
/*
    例如:n=20,输出  0.583333
double fun(int  n)
{
	int i;
	double sum=0.0;
	for(i=1;i<=n;i++)             //注意i的初值一定是1,分母不能为零
		if(i%5==0||i%9==0)
			sum+=1.0/i;
  return sum;

}
//还有就是要注意程序中复合语句大括号的使用,如果只有一条语句的话不要使用大括号,以增加程序的观感
*/
/// 13. 计算并返回3到n之间(含3和n)所有素数的平方根之和
/*
    例如:输入100,输出s=148.874270;
double fun(int n)
{
int m,k,i;
double s=0.0;
for(m=3;m<=n;m++)
{
k=sqrt(m);for(i=2;i<=k;i++)   //这个位置判断:每个数如果不能被2-根号m整除的话,那么他也不能被根号m之后的数整除
if(m%i==0) break;             //但是如果在2-根号这个数可以被整除,就直接退出循环
if(i>=k+1)
s+=sqrt(m);
}
return s;
}
*/
///  14 (程序设计库中的12).计算并返回 S=1+(1+根号2)+...+(1+根号2+...+根号n)
/*
    例如:输入:20   输出:534.188884
double fun(int  n)
{
	int i;
	double s=0.0,s1=0.0;
	for(i=1;i<=n;i++)
    {  s1=s1+pow(i,0.5);      // 求每一项
	s=s+s1;                   //按公式求出s
    }
  return s;

}
*/
///  15.将a,b中的两个两位正整数合并成一个新的整数放在c所指存储单元中
///     合并方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b
///      中的十位和个位数依次放在变量c的千位和十位上
/*
    输入 a=45,b=12  输出:c=1425
void fun(int a, int b, long *c)      //这个位置C的返回值是用指针实现的
{

*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;

}

//还要知道的就是:得到个位数用取余%,得到十位数用整除/
*/
///  16. 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数
///      ,功能:按分数的高低排列学生的记录,高分在前。
///      要注意的就是数组中包含两种数据,所以要定义结构体
/*
#include <stdio.h>
#define   N   16
typedef  struct
{  char  num[10];
int   s;
} STREC;
void  fun( STREC  a[] )
{
	STREC tmp;                             //由结构体作为新的数据类型定义了一个暂存值,
	                                       //因为这个暂存值比较特殊,数组中存储的值有两种类型,一个是学号,另外一个是对应的成绩
	                                       //所以只能用结构体去定义这个暂存值的变量
	int i,j;
	for(i = 1; i < N; i++)
		for(j = 0; j < N-1; j++)
		{

		if(a[i].s>a[j].s)                  //用数组中的分数的下一个值和当前值作比较,如果下一个值比当前值大,那么就进行交换
                                           //用数组中的一个数和数组中剩下的数一一比较,比较一次,选出最大的那个数,然后就是次大.....
		  {
			 tmp=a[j];a[j]=a[i];a[i]=tmp;
		  }
		}
}

main()
{  STREC  s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};                //以结构体中定义的数据类型和种类,对数组内容进行初始化
int  i;FILE *out ;
fun( s );
printf("The data after sorted :\n");
for(i=0;i<N; i++)
{  if( (i)%4==0 )printf("\n");
printf("%s  %4d  ",s[i].num,s[i].s);
}
printf("\n");
out = fopen("..\\out.dat","w") ;
for(i=0;i<N; i++)
{  if( (i)%4==0 && i) fprintf(out, "\n");
fprintf(out, "%4d  ",s[i].s);
}
fprintf(out,"\n");
fclose(out) ;
}
//这个代码比较麻烦一点,用到了结构体,用结构体的方式去给数组赋初值
*/
///  17.编写一个函数,功能是实现两个字符串的连接(不使用库函数strcat()),即把p2所指的字符串
///     连接到p1所指的字符串后
/*
    例如:分别输入两个字符串:FirstString--
                              SecondString
          输出:FirstString--SecondString

void fun(char p1[],char p2[])
{
    int i,j;
    for(i=0;p1[i]!='\0';i++)
    for(j=0;p2[j]!='\0',j++)
        p1[i++]=p2[j];
    p1[i]='\0';
}
*/
///上面的15不太明白,先记住吧
/// 18. 函数功能:将一个表示正整数的字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)
/*
    例如:输入 “1234”,转换为整数值1234
long fun(char *p)
{
    int i=0,len;     //len为串长    i是循环变量,len是判断循环循环次数
    long x=0;         //x保存转换为相应的整数
    len=strlen(p);
    for(;i<len;i++)
    {
        x=x*10+*p-'0';  //将字符串转成相应的整数
        p++;            //指针数加一,指向下一个要被转换的额字符
    }
}
*/
///  19. 编写一个函数,功能:根据以下公式求Π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代);
/*
    Π/2=1+1/3+1*2/3*5+...+1*2*...*n/3*5*...*(2*n+1)
    输入0.0005,   输出3.14
double  fun ( double  eps)
{

	double s=1.0,s1=1.0;
	int n=1;
	while(s1>=eps)                     //当某项大于精度要求时,继续求下一项
	{  s1=s1*n/(2*n+1);                //求多项式的每一项
    s=s+s1;                            //求和
    n++;
	}
  return 2*s;
}
*/
///做选择题时遇到的问题
/*
#include "stdio.h"

int main()
{
    int i=0,j=0,x=0;
    while(i<2)
    {
        x++;
        printf("x1=%d\n",x);
        for(;j<=3;j++)
        {
            if(j%2) continue;
            x++;
            printf("x2=%d\n",x);
        }
        x++;i++;
        printf("x3=%d\n",x);
    }
    printf("x4=%d\n",x);
    return 0;
}
  这个程序输出是6,原因是有一个点一直没有注意,就是for循环只
  一次,i的值更新了之后,j的值在第一次执行完for循环之后一直都不变了
  也就是说for循环只执行一次,这个一定要记住 最关键的还是在于for循环中j的初始化位置
*/
///   19.函数功能:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标
///通过形参传回。数组元素中的值已在主函数中赋予。
/*
    主函数a是数组名,n是x中的数据个数,max存放最大值index存放最大值所在元素的下标
void fun(int a[],int n,int *max,int *d)
{
    int i;
    *max=a[0];
    *d=0;
    for(i=0;i<n;i++)      //将最大的元素放入指针max所指的单元,最大元素的下标放入指针d所指的单元
    {
        *max=a[i];
        *d=i;
    }
}
*/
///  20. 函数功能:求出一个2*M整型二维数组中最大元素的值,并将此值返回
/*
int fun(int a[][M])
{
    int i,j,max=a[0][0];
    for(i=0;i<2;i++)
        for(j=0;j<M;j++)
            if(max<a[i][j])
            max=a[i][j];
    return max;
}
*/
///  21. 函数的功能:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符除外
///      ,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中
/*
    例如:若s所指字符串中的内容为:“ABCDEFG12345”,其中   A的ascii码值虽为奇数,但所在
          元素的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,所在数组中的下标也为
          奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是:“135”.

          这题考的另外一种相反的形式为:把输入的字符串中ascii码值为奇数的删除,剩下的保存在新的数组t[]中
void fun(char *s,char t[])
{
    int i,j=0,n;
    n=strlen(s);
    for(i=0;i<n;i++)
        if(i%2!=0&&s[i]%2!=0)
    {
        t[j]=s[i];
        j++;
    }
    t[j]='\0';
}
*/
///  24. 和16差不多  ,找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)

/*
#define  N  10
typedef  struct  ss
{  char  num[10];   int  s;  } STU;

void fun(  STU  a[], STU  *s  )
{
	int i;
 	*s=a[0];
  	for(i=0;i<N;i++)
    	    if(s->s>a[i].s)  //这个位置的意思就是:用第一个学生的成绩去和其他学生的成绩进行比较,若有这个成绩小的,
                             //那么将这个小的数值赋给被赋初值的数,继续进行比较,直到数组中的值都比较完成
      		*s=a[i];

}

main ( )
{  STU  a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
               {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m  ;

//这题的大概结构和16差不多 ,所以只复制了部分程序,所以有不明白的地方和上面进行对比即可
*/
///    25. 程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun,功能是:使数组右上
///        三角元素的值乘以m
/*
    例如:若m的值为2,a数组中的值为:
    a=|1 9 7|
      |2 3 8|
      |4 5 6|

    a=|2 18 14|
      |2  6 16|
      |4  5 12|

/*
void fun(int a[][N],int m)
{
    int i,j;
    for(j=0;j<N;j++)                 //第一列包含几个右上角元素,以列计算,以此类推
        for(i=0;i<=j;i++)            //注意这个地方的条件是i<=j
        a[i][j]=a[i][j]*m;           //右上半三角元素的值乘以m  上面的循环,先是列,再是行,这行数组中是i,j,注意顺序
}
*/
这篇关于C语言设计题概述的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!