C语言设计题概述
2021/9/18 6:10:00
本文主要是介绍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语言设计题概述的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11国产医疗级心电ECG采集处理模块
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南