本文主要是介绍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语言设计题概述的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!