博主本人整理资料不易,如果文章对大家有用的话,恳请大家能够动动小手帮忙点个赞,如果能点个关注的话那就更好了…
文章目录
- 1.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积(4πR²)、圆球体积(V=4πR三次方)、圆柱体积。用scanf()输入数据,输出计算结果,输出时要求有文字说明。取小数点后2位数字。请编写程序。
- 2.输入一个华氏温度,要求输出摄氏温度。公式为c=5/9(F-32),输出时要有文字说明,取2位小数。
- 3.编写程序,从终端键盘输入圆的半径r,圆柱的高h,分别计算出圆周c1、圆面积cs和圆柱的体积cvz。输出计算结果要求有文字说明,并取小数点后两位数字。
- 4.编写程序,读入一个字母,输出与之对应的ASCII码,输入输出都要有相应的文字提示。
- 5.有一函数
- 写一程序,输入x,求出y值
- 6.给出一个不多于5位的正整数:,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。
- 7.输入4个正整数,要求按从小到大的顺序输出。
- 8.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
- 9.输入两个正整数m和n,求其最大公约数和最小公倍数。
- 10.编写程序实现功能:输入整数a和b,若a²+b²>100,则输出a²+b²之和的百位以上的数字,否则直接输出a²+b²的和。
- 11.编写程序判断输入的正整数既是5又是7的整数倍。若是则输出“yes”,否则输入“no”。
- 12.用switch编程实现以下函数关系:![在这里插入图片描述](https://img-blog.csdnimg.cn/2020032518230967.png)
- 13.编写程序,用switch实现:对于给定的百分制成绩,改成相应的A、B、C、D、E表示,90分以上为A,80到89为B,70到79为C,60到69为D,60以下为E。
- 14.编写程序实现功能:输入一个复数,输出其共轭复数,如,输入2+3i<回车>,输出2-3i。
- 15.求Sn=a+aa+aaa+...+aa...a(n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。
- 16.求从1到20之间的每个整数的阶乘之和。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200326173934307.png)
- 17.![在这里插入图片描述](https://img-blog.csdnimg.cn/20200326180106964.png)
- 18.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为![在这里插入图片描述](https://img-blog.csdnimg.cn/20200326180726441.png)
- 19.每个苹果0.8元,第一天买了2个苹果;从第二天开始,每天买前一天的两倍,直到每天购买的苹果个数达到不超过100的最大值,编写程序求每天平均花多少钱。
- 20.试编写程序,找出1~99之间的全部同构数。同构数是这样一组数,它出现在平方数的右边。例如,5是25的右边数,25是625的右边数,所以5和25都是同构数。
- 21.假设x、y是整数,编写程序x的y次方的最后三位数,要求x、y从键盘输入。
- 22.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
- 23.一球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?
- 24.编程打印出以下图案
- 25.编写递归程序的杨辉三角形
- 26.编写程序计算1~100之间的素数,并按照由大到小的次序输出。
- 27.已知整形数组a中有10个元素,整型数组b中有6个元素。编程将那些在数组a中而不在数组b中的数据组成新数组c并输出。
- 28.已知a是3x4的整型二维数组,编程求数组a中所有外围元素之和。
- 29.不用strcmp函数,编程判断两个长度不超过20的字符串的大小:若第一个字符串大于第二个字符串输出1;若两个字符串相等输出0;否则输出-1。
- 30.输入长度不超过20的字符串,编程判断其中字母的个数。
- 31.已知整型数组a中有10个元素,编程将其中某个数k删除,输出删除后的数组。
- 32.有n个整数,设计程序,将前面各个数按顺序向后移动k个位置,将最后k个数按顺序移动到最前面。
- 33.编写程序判断是否是回文字符串。回文是一种“从前向后读”和“从后向前读”都相同的字符串。如:“rotor”。
- 34.编制一个字符替换函数,实现已知字符串str中,所有属于ch中的字符都用ch2中对应字符代替。
- 函数原型:void replace(char *str,char ch,char ch2)
- 35.编写一个函数,删除一个字符串的指定字符,函数原型:
- int delStr(char *str,char ch)
- 先判断字符是否出现在字符串中,如果未出现,则返回0,如果字符出现一次或多次,则返回字符的个数。
- 36.编写函数把参数字符串中的字符反序排列,函数原型:
- void reversestr(char *str)
- 使用指针,不要用数组下标,也不要声明局部数组来临时存储。
- 37.编写程序。从键盘输入10本书的名称和定价,并存在结构体数组中,从中查找出定价最高和最低的书的名称和定价,并打印出来。
- 38.编写程序。设有以下结构体类型说明:
- 39.已有两个链表x和y,每个链表的节点包括学号和成绩,要求把两个链表和并,按学号升序排列。
- 40.编写一个程序,将两个文件的内容合并输出到另一个文件中。
- 41.求一元二次方程:ax2+bx+c=0 的根。
- 输入三个实数a,b,c的值,且a不等于0。
- 42.用户输入年份,判断该年份是否为闰年
- 43.九九乘法口诀表
- 44.表格形式输出数据。将1~100的数据以10x10矩阵格式输出。
- 45.计算一个数是否可为两个素数之和
- 46.二进制与十进制的相互转换
1.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积(4πR²)、圆球体积(V=4πR三次方)、圆柱体积。用scanf()输入数据,输出计算结果,输出时要求有文字说明。取小数点后2位数字。请编写程序。
#include<stdio.h>
int main(){
float r,h,C,S,Sa,Sb,V;
scanf("%f,%f",&r,&h);
C=2*3.14*r;
S=3.14*r*r;
Sa=4*S;
Sb=4*3.14*r*r*r/3;
V=S*h;
printf("C=%5.2f\nS=%5.2f\nSa=%5.2f\nSb=%5.2f\nV=%5.2f",C,S,Sa,Sb,V);
}
2.输入一个华氏温度,要求输出摄氏温度。公式为c=5/9(F-32),输出时要有文字说明,取2位小数。
#include<stdio.h>
int main(){
float c,F;
printf("请输入一个华氏温度:\n");
scanf("%f",&F);
c=5.0*(F-32)/9.0;
printf("摄氏温度为:%5.2f°\n",c);
return 0;
}
3.编写程序,从终端键盘输入圆的半径r,圆柱的高h,分别计算出圆周c1、圆面积cs和圆柱的体积cvz。输出计算结果要求有文字说明,并取小数点后两位数字。
#include<stdio.h>
#define PI 3.14159
int main(){
float r,h,c1,cs,cvz;
printf("请输入圆的半径r和圆柱的高h:\n");
scanf("%f,%f",&r,&h);
c1=2.0*PI*PI;
cs=PI*r*r;
cvz=cs*h;
printf("圆周c1=%5.2f\n圆面积cs=%5.2f\n圆柱的体积cvz=%6.2f",c1,cs,cvz);
}
4.编写程序,读入一个字母,输出与之对应的ASCII码,输入输出都要有相应的文字提示。
#include<stdio.h>
int main(){
char ch;
printf("请输入一个字母:\n");
scanf("%c",&ch);
printf("与输入字母相对应的ASCII码是:%d",ch);
return 0;
}
5.有一函数
写一程序,输入x,求出y值
#include<stdio.h>
int main(){
int x,y;
printf("请输入x的值:\n");
scanf("%d",&x);
if(x<1){
y=x;
}else if(x>=1 && x<10){
y=2*x-1;
}else if(x>=100){
y=3*x-11;
}
printf("y的值为:%d\n",y);
return 0;
}
6.给出一个不多于5位的正整数:,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。
#include<stdio.h>
int main(){
long int num;
int wan,qian,bai,shi,ge;
int place;
printf("请输入一个不多于5位的正整数:\n");
scanf("%d",&num);
if(num>9999){
place=5;
}else if(num>999){
place=4;
}else if(num>99){
place=3;
}else if(num>9){
place=2;
}else{
place=1;
}
printf("%d是%d位数\n",num,place);
wan=num/10000;
qian=num/1000%10;
bai=num/100%10;
shi=num/10%10;
ge=num%10;
switch(place){
case 5:
printf("分别打印出每位数字:\n");
printf("%d\n%d\n%d\n%d\n%d\n",wan,qian,bai,shi,ge);
printf("逆序打印出每位数字:\n");
printf("%d\n%d\n%d\n%d\n%d\n",ge,shi,bai,qian,wan);
break;
case 4:
printf("分别打印出每位数字:\n");
printf("%d\n%d\n%d\n%d\n",qian,bai,shi,ge);
printf("逆序打印出每位数字:\n");
printf("%d\n%d\n%d\n%d\n",ge,shi,bai,qian);
break;
case 3:
printf("分别打印出每位数字:\n");
printf("%d\n%d\n%d\n",bai,shi,ge);
printf("逆序打印出每位数字:\n");
printf("%d\n%d\n%d\n",ge,shi,bai);
break;
case 2:
printf("分别打印出每位数字:\n");
printf("%d\n%d\n",shi,ge);
printf("逆序打印出每位数字:\n");
printf("%d\n%d\n",ge,shi);
break;
case 1:
printf("分别打印出每位数字:\n");
printf("%d\n",ge);
printf("逆序打印出每位数字:\n");
printf("%d\n",ge);
break;
default:
break;
}
return 0;
}
7.输入4个正整数,要求按从小到大的顺序输出。
#include<stdio.h>
int main(){
int a,b,c,d,t;
printf("请输入4个正整数:\n");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b){
t=a;
a=b;
b=t;
if(a>c){
t=a;
a=c;
c=t;
if(a>d){
t=a;
a=d;
d=t;
}
}
}
if(b>c){
t=b;
b=c;
c=t;
if(b>d){
t=b;
b=d;
d=t;
}
}
if(c>d){
t=c;
c=d;
d=t;
}
printf("从小到大的顺序为:%d,%d,%d,%d\n",a,b,c,d);
return 0;
}
8.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include<stdio.h>
int main(){
char c;
int letter=0,space=0,dight=0,other=0;
while((c=getchar())!='\n'){
if((c>='a' && c<='z')||(c>='A' && c<='Z')){
letter++;
}else if(c==' '){
space++;
}else if(c>='0'&&c<='9'){
dight++;
}else{
other++;
}
}
printf("英文字母数为:%d\n空格数为:%d\n数字数为:%d\n其他字符数为:%d\n"
,letter,space,dight,other);
}
9.输入两个正整数m和n,求其最大公约数和最小公倍数。
- 将大数给m,小数给n。对m%n进行取余操作,将n赋值给m,将m%n的余数赋值给n,然后再循环进行取余操作,直到余数为0时,n即为最大公约数,一开始的m乘n再除以最大公约数所得即为最小公倍数。
#include<stdio.h>
int main(){
int m,n,p,r,t;
printf("请输入两个正整数m和n:\n");
scanf("%d,%d",&m,&n);
if(n>m){ //大数在前小数在后
t=n;
n=m;
m=t;
}
p=m*n; //用于求最小公倍数
while((m%n)!=0){
r=m%n;
m=n;
n=r;
}
printf("最大公约数为:%d\n",n);
printf("最小公倍数为:%d\n",p/n);
}
10.编写程序实现功能:输入整数a和b,若a²+b²>100,则输出a²+b²之和的百位以上的数字,否则直接输出a²+b²的和。
#include<stdio.h>
int main(){
int a,b,m,p;
printf("请输入两个整数a和b:\n");
scanf("%d,%d",&a,&b);
m=a*a+b*b;
if(m>100){
p=m/100;
printf("百位以上的数字为:%d\n",p);
}else{
printf("两数之和为:%d\n",m);
}
return 0;
}
11.编写程序判断输入的正整数既是5又是7的整数倍。若是则输出“yes”,否则输入“no”。
#include<stdio.h>
int main(){
int num;
printf("请输入一个整数:\n");
scanf("%d",&num);
if(num%5==0 && num%7==0){
printf("yes\n");
}else{
printf("no\n");
}
return 0;
}
12.用switch编程实现以下函数关系:
#include<stdio.h>
int main(){
int x,y;
printf("请输入x的值:\n");
scanf("%d",&x);
switch(x<0){
case 1:
y=-1;
break;
case 0:
switch(x==0){
case 1:
y=0;
break;
default:
y=1;
break;
}
}
printf("y的值为:%d",y);
return 0;
}
13.编写程序,用switch实现:对于给定的百分制成绩,改成相应的A、B、C、D、E表示,90分以上为A,80到89为B,70到79为C,60到69为D,60以下为E。
#include<stdio.h>
int main(){
int score,temp,log;
char grade;
log=1;
while(log){
printf("请输入成绩:\n");
scanf("%d",&score);
if(score>100 || score<0){
printf("\n 输入错误,请重试!\n");
}else{
log=0;
}
}
if(score==100){
temp=9;
}else{
temp=(score-score%10)/10;
}
switch(temp){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
grade='E';
break;
case 6:
grade='D';
break;
case 7:
grade='C';
break;
case 8:
grade='B';
break;
case 9:
grade='A';
break;
}
printf("score=%d,grade=%c\n",score,grade);
return 0;
}
14.编写程序实现功能:输入一个复数,输出其共轭复数,如,输入2+3i<回车>,输出2-3i。
#include<stdio.h>
int main(){
int a,b;
char symbol;
printf("请输入原始数据:\n");
scanf("%d%c%di\n",&a,&symbol,&b);
printf("原使复数为:%d%c%di\n",a,symbol,b);
if(symbol=='-'){
symbol='+';
}else{
symbol='-';
}
printf("其共轭复数为:%d%c%di\n",a,symbol,b);
return 0;
}
15.求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。
#include<stdio.h>
int main(){
int a,n,tn=0,sn=0,i=1;
printf("请输入a和n的值:\n");
scanf("%d,%d",&a,&n);
while(i<=n){
tn=tn+a; //用来表示第i个位置上的值
sn=sn+tn; //求和
a=a*10; //第i个位置为i的i位数
++i;
}
printf("a+aa+aaa+...+aa..a的值为:%d\n",sn);
return 0;
}
16.求从1到20之间的每个整数的阶乘之和。
#include<stdio.h>
int main(){
int n,t=1,s=0;
for(n=1;n<=20;n++){
t=t*n; //第几个位置时,该位置数的阶乘
s=s+t; //求和
}
printf("1!+2!+3!+4!+...+20!等于:%d\n",s);
return 0;
}
17.
#include<stdio.h>
int main(){
int n1=100,n2=50,n3=10;
float k;
float s1=0,s2=0,s3=0;
for(k=1;k<=n1;k++){
s1=s1+k;
}
for(k=1;k<=n2;k++){
s2=s2+k*k;
}
for(k=1;k<=n3;k++){
s3=s3+1/k;
}
printf("总和=%8.2f\n",s1+s2+s3);
return 0;
}
18.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为
#include<stdio.h>
int main(){
int num,a,b,c;
for(num=100;num<=999;num++){
a=num/100;
b=num%100/10;
c=num%100%10;
if(num==a*a*a+b*b*b+c*c*c){
printf("%d是水仙花数\n",num);
}
}
}
19.每个苹果0.8元,第一天买了2个苹果;从第二天开始,每天买前一天的两倍,直到每天购买的苹果个数达到不超过100的最大值,编写程序求每天平均花多少钱。
#include<stdio.h>
int main(){
float price=0.8,sumprice=0.0,aveprice;
int k=0,num,sum=0;
for(num=2;num<=100;num=num*2){
++k;
sum=sum+num;
}
sumprice=sum*price;
aveprice=sumprice/k;
printf("每天平均花的钱数为:%5.2f元\n",aveprice);
return 0;
}
20.试编写程序,找出1~99之间的全部同构数。同构数是这样一组数,它出现在平方数的右边。例如,5是25的右边数,25是625的右边数,所以5和25都是同构数。
#include<stdio.h>
int main(){
int i;
for(i=1;i<100;i++){
if(i*i%10==i || i*i%100==i){
printf("%3d",i);
}
}
}
21.假设x、y是整数,编写程序x的y次方的最后三位数,要求x、y从键盘输入。
#include<stdio.h>
int main(){
int i,x,y;
long last=1;
printf("Input x,y:");
scanf("%d,%d",&x,&y);
for(i=1;i<=y;i++){
last=last*x%1000;
printf("The 3 digits:%ld\n",last);
}
}
22.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
- 6 its factors are 1,2,3
#include<stdio.h>
int main(){
int k[100];
int a,s,i,n;
for(a=2;a<1000;a++){
s=a;
n=0;
for(i=1;i<a;i++){
if((a%i)==0){
n++;
k[n]=i; //将其除数放到数组中
s=s-i; //该数前去其除数,然后判断最后结果是否为0
}
}
if(s==0){
printf("%d its factors are:",a);
for(i=1;i<=n;i++){
printf("%d,",k[i]);
}
printf("\n");
}
}
}
23.一球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?
#include<stdio.h>
int main(){
float sn=100,hn=sn/2;
int n;
for(n=2;n<=10;n++){
sn=sn+2*hn;
hn=hn/2;
}
printf("第10次反弹高为:%5.2f米\n",hn);
printf("第10次落地时共经过:%5.2f米\n",sn);
}
24.编程打印出以下图案
代码一:
#include<stdio.h>
int main(){
int i,j,k;
for(i=0;i<=3;i++){ //输出上面4行*号
for(j=0;j<=2-i;j++) //输出*号前面的空格
printf(" ");
for(k=0;k<=2*i;k++) //输出*号
printf("*");
printf("\n"); //输出完一行*号后换行
}
for(i=0;i<=2;i++){ //输出下面3行*号
for(j=0;j<=i;j++) //输出*号前面的空格
printf(" ");
for(k=0;k<=4-2*i;k++) //输出*号
printf("*");
printf("\n"); //输出完一行*号后换行
}
}
代码二:
#include<stdio.h>
int main(){
int i,j,k;
for(i=0;i<=3;i++){
for(j=0;j<=2-i;j++)
printf(" ");
for(k=0;k<(2*(i+1)-1);k++)
printf("*");
printf("\n");
}
for(i=0;i<=2;i++){
for(j=0;j<=i;j++)
printf(" ");
for(k=0;k<(2*(3-i)-1);k++)
printf("*");
printf("\n");
}
}
25.编写递归程序的杨辉三角形
- 从杨辉三角形的特点出发,可以总结出:
(1)第N行有N+1个值(设起始行为第0行);
(2)对于第N行的第J个值:(N>=2)
当J=1或J=N+1时:其值为1
当J!=1且J!=N+1时:其值为第N-1行的第J-1个值与第N-1行第J个值之和。
将这些特点提炼成数学公式可表示为:
c(x,y)=1 当x=1或x=N+1
c(x,y)=c(x-1,y-1)+c(x-1,y); 其它
程序如下:
#include<stdio.h>
int c(int x,int y){
if((y==1)||(y==x+1))
return (1);
else
return c(x-1,y-1)+c(x-1,y);
}
int main(){
int i,j,n=13;
printf("N=");
while(n>12)
scanf("%d",&n);
for(i=0;i<=n;i++){
for(j=0;j<n-i;j++)
printf(" ");
for(j=1;j<i+2;j++)
printf("%6d",c(i,j));
printf("\n");
}
}
26.编写程序计算1~100之间的素数,并按照由大到小的次序输出。
- 素数(质数):指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。
#include<stdio.h>
int main(){
void IsPrime(int k);
int k;
printf("1到100之间的所有素数:\n");
for(k=2;k<=100;k++){
IsPrime(k);
}
}
void IsPrime(int k){
int j;
for(j=2;j<=k-1;j++){
if(k%j==0){
break;
}
}
if(j==k){
printf("%d,",k);
}
}
27.已知整形数组a中有10个元素,整型数组b中有6个元素。编程将那些在数组a中而不在数组b中的数据组成新数组c并输出。
#include<stdio.h>
int main(){
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[6]={2,4,6,8,11,13};
int c[16];
int i,j,k=0;
for(i=0;i<10;i++){
for(j=0;j<6;j++){
if(a[i]==b[j]){
break;
}
}
if(j==6){
c[k]=a[i];
k++;
}
}
for(i=0;i<k;i++){
printf("%d,",c[i]);
}
}
28.已知a是3x4的整型二维数组,编程求数组a中所有外围元素之和。
#include<stdio.h>
int main(){
int a[3][4]={{1,2,3,4},{5,6,7,8},{1,2,3,4}};
int i,j,k,sum;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d",a[i][j]);
}
printf("\n");
}
sum=0;
for(i=0;i<4;i++){
sum=sum+a[0][i]+a[2][i];
}
for(j=1;j<2;j++){
sum=sum+a[j][0]+a[j][3];
}
printf("sum=%d",sum);
}
29.不用strcmp函数,编程判断两个长度不超过20的字符串的大小:若第一个字符串大于第二个字符串输出1;若两个字符串相等输出0;否则输出-1。
#include<stdio.h>
#include<string.h>
int main(){
char a[20];
char b[20];
int m,n,k=0;
gets(a);
gets(b);
m=strlen(a);
n=strlen(b);
while((a[k]==b[k])&&k<m&&k<n){
k++;
}
if(k==m&&k==n){
printf("0\n");
}
else if(a[k]>b[k]){
printf("1\n");
}else{
printf("-1\n");
}
return 0;
}
30.输入长度不超过20的字符串,编程判断其中字母的个数。
#include<stdio.h>
#include<string.h>
int main(){
char a[20];
int i,m,n=0;
gets(a);
m=strlen(a);
for(i=0;i<m;i++){
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')){
n++;
}
}
printf("字母的个数为:%d\n",n);
}
31.已知整型数组a中有10个元素,编程将其中某个数k删除,输出删除后的数组。
#include<stdio.h>
int main(){
int a[10];
int i,m,j,k;
printf("请向数组中输入数据:\n");
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
printf("请输入要删除的数k:\n");
scanf("%d",&k);
for(i=0;i<10;i++){
if(k==a[i]){
m=i;
break;
}
}
for(j=m;j<10;j++){
a[j]=a[j+1];
}
printf("删除k后的数组为:\n");
for(i=0;i<9;i++){
printf("%d,",a[i]);
}
}
32.有n个整数,设计程序,将前面各个数按顺序向后移动k个位置,将最后k个数按顺序移动到最前面。
- 方法一:先将最后k个数装入数组2中,然后将数组1拼接到数组2后面即可;
#include<stdio.h>
int main(){
int n,i,k;
printf("输入数组的大小:n=\n");
scanf("%d",&n);
int arr1[n];
printf("向数组中填入数据:\n");
for(i=0;i<n;i++){
scanf("%d",&arr1[i]);
}
printf("请输入要移动的位置数:k=\n");
scanf("%d",&k);
int arr2[n];
int m=0;
for(i=n-k;i<n;i++){
arr2[m]=arr1[i];
m++;
}
for(i=k;i<n;i++){
arr2[i]=arr1[i-k];
}
for(i=0;i<n;i++){
printf("%d,",arr2[i]);
}
}
33.编写程序判断是否是回文字符串。回文是一种“从前向后读”和“从后向前读”都相同的字符串。如:“rotor”。
- 方法一:
#include<stdio.h>
#include<string.h>
int main(){
char str[20];
gets(str);
int n,i;
n=strlen(str);
for(i=0;i<n/2;i++){
if(str[i]!=str[n-i-1])
break;
}
if(i==n/2){
printf("true");
}else{
printf("false");
}
}
- 方法二:
#include<stdio.h>
int main(){
char str[50],*p,*q;
gets(str);
p=str;
q=str;
while((*q)!='\0'){
q++;
}
q--;
while((*p)==(*q)&&p<q){
p++;
q--;
}
if(p==q||(q+1)==p){
printf("yes");
}else{
printf("no");
}
}
34.编制一个字符替换函数,实现已知字符串str中,所有属于ch中的字符都用ch2中对应字符代替。
函数原型:void replace(char *str,char ch,char ch2)
#include<stdio.h>
#include<string.h>
int main(){
void replace(char *str,char ch,char ch2);
char arr[50];
char ch,ch2;
printf("请输入字符串str:\n");
gets(arr);
printf("请输入字符ch和ch2:\n");
scanf("%c,%c",&ch,&ch2);
replace(arr,ch,ch2);
puts(arr);
}
void replace(char *str,char ch,char ch2){
char *p;
p=str;
while(*p!='\0'){
if(*p==ch){
*p=ch2;
}
p++;
}
}
35.编写一个函数,删除一个字符串的指定字符,函数原型:
int delStr(char *str,char ch)
先判断字符是否出现在字符串中,如果未出现,则返回0,如果字符出现一次或多次,则返回字符的个数。
#include<stdio.h>
#include<string.h>
int main(){
int delStr(char *str,char ch);
char str[80]="wearegoodfriends";
char ch;
int i;
scanf("%c",&ch);
printf("%s\n",str);
i=delStr(str,ch);
printf("%s\n",str);
}
int delStr(char *str,char ch){
int i,j,total,k,sum;
char *p;
i=0;
total=0;
p=str;
while(*(p+i)!='\0'){ //p1字符串是否结束
k=i;
sum=0;
while(*(p+k)==ch){ //k移动到不要删除的位置
k++;
sum++; //删除字符个数
}
total+=sum;
if(*(p+i)==ch){
for(j=i;*(p+j+sum)!='\0';j++){
*(p+j)=*(p+j+sum);
}
*(p+j)='\0';
}
i++;
}
return total;
}
36.编写函数把参数字符串中的字符反序排列,函数原型:
void reversestr(char *str)
使用指针,不要用数组下标,也不要声明局部数组来临时存储。
#include<stdio.h>
#include<string.h>
int main(){
void reversestr(char *str);
char arr[50];
gets(arr);
reversestr(arr);
printf("%s",arr);
}
void reversestr(char *str){
char *p,*q;
char ch;
p=str;
q=str;
while(*q!='\0'){
q++;
}
q--;
while(p<q){
ch=*p;
*p=*q;
*q=ch;
p++;
q--;
}
}
37.编写程序。从键盘输入10本书的名称和定价,并存在结构体数组中,从中查找出定价最高和最低的书的名称和定价,并打印出来。
#include<stdio.h>
struct Book{
char name[50];
float price;
};
int main(){
int i;
struct Book book[10];
printf("请输入10本书的名称和定价:\n");
for(i=0;i<10;i++){
scanf("%s %f",book[i].name,&book[i].price);
}
struct Book minbook=book[0],maxbook=book[0];
for(i=1;i<10;i++){
if(book[i].price>maxbook.price){
maxbook=book[i];
}
if(book[i].price<minbook.price){
minbook=book[i];
}
}
printf("定价最高的书的名称为:%s,书的价格为:%5.2f\n",maxbook.name,maxbook.price);
printf("定价最低的书的名称为:%s,书的价格为:%5.2f\n",minbook.name,minbook.price);
}
38.编写程序。设有以下结构体类型说明:
struct student{
char num[10],name[10];
float s[4];
double ave;
};
要求:编写两个函数,函数fun1把10名学生放在一个结构体数组中。从键盘输入学生的学号、姓名和4门成绩,然后计算出平均分放在结构体对应的域中;函数fun2输出10名学生的记录。主函数调用函数fun1和函数fun2,不使用全局变量,函数之间的数据全部用参数传递。
#include<stdio.h>
struct student{
char num[10],name[10];
float s[4];
float ave;
};
int main(){
void fun1(struct student stu[]);
void fun2(struct student stu[]);
struct student stu[3];
fun1(stu);
fun2(stu);
}
void fun1(struct student stu[]){
printf("请分别输入10名学生的学号、姓名和4分成绩:\n");
int i;
for(i=0;i<3;i++){
scanf("%s %s %f %f %f %f",stu[i].num,stu[i].name,&stu[i].s[0],
&stu[i].s[1],&stu[i].s[2],&stu[i].s[3]);
stu[i].ave=(stu[i].s[0]+stu[i].s[1]+stu[i].s[2]+stu[i].s[3])/4.0;
}
}
void fun2(struct student stu[]){
int i;
for(i=0;i<3;i++){
printf("学号:%s\n姓名:%s\n4门成绩:%f,%f,%f,%f\n平均分:%5.2f\n",
stu[i].num,stu[i].name,stu[i].s[0],stu[i].s[1],stu[i].s[2],stu[i].s[3],
stu[i].ave);
}
}
39.已有两个链表x和y,每个链表的节点包括学号和成绩,要求把两个链表和并,按学号升序排列。
struct node *Merge(struct node *h1,struct node *h2){
struct node *p,*q,*r,*s,*h;
p=h1;
q=h2;
if(p->num<q->num){
h=s=p;
r=p;
p=p->next;
r->next=NULL;
}else{
h=s=q;
r=q;
q=q->next;
r-next=NULL;
}
while(p&&q){
if(p->num<q->num){
r=p;
p=p->next;
}else{
r=q;
q=q->next;
}
s->next=r;
s=s->next;
}
if(p){
s->next=p;
}else{
s->next=q;
}
return h;
}
40.编写一个程序,将两个文件的内容合并输出到另一个文件中。
#include<stdio.h>
#include<string.h>
int main(){
FILE *fp1,*fp2,*fp3;
char str[128];
if(fp1==fopen("t1.text","r")==NULL){
printf("不能打开文件\n");
exit(0);
}
if(fp2==fopen("t2.txt","r")==NULL){
printf("不能打开文件\n");
exit(0);
}
if(fp3==fopen("t3.txt","w")==NULL){
printf("不能打开文件\n");
exit(0);
}
while((strlen(fgets(str,128,fp2)))>0){
fputs(str,fp3);
printf("%s",str);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
}
41.求一元二次方程:ax2+bx+c=0 的根。
输入三个实数a,b,c的值,且a不等于0。
#include<stdio.h>
#include<math.h>
int main(){
float a,b,c,d,x1,x2;
printf("请输入a,b,c的值:\n");
scanf("%f %f %f",&a,&b,&c);
if(a!=0){
d=sqrt(b*b-4*a*c);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
printf("x1=%0.2f\tx2=%0.2f\n",x1,x2);
}
}
42.用户输入年份,判断该年份是否为闰年
- 思路:先把百年的年份拿出来,是400的倍数,是闰年,不是400的倍数,不是闰年。非百年的年份按照4处理。
#include<stdio.h>
int main(){
/**
思路:先把百年的年份拿出来,是400的倍数,是闰年,不是400的倍数,不是闰年。
非百年的年份按照4处理。
**/
int year;
printf("请输入年份:\n");
scanf("%d",&year);
//先处理百年年份
if(year%100==0){
//是400的倍数为闰年
if(year%400==0){
printf("y\n");
}else{
printf("n\n");
}
}
//再处理非百年的年份
else{
if(year%4==0){
printf("y\n");
}else{
printf("n\n");
}
}
}
43.九九乘法口诀表
#include<stdio.h>
int main(){
int i,j;
for(i=1;i<=9;i++){ //外层循环控制行
for(j=1;j<=i;j++){ //内层循环控制列
printf("%dx%d=%d\t",i,j,i*j);
}
printf("\n");
}
}
44.表格形式输出数据。将1~100的数据以10x10矩阵格式输出。
#include<stdio.h>
int main(){
int i,j,k;
for(i=1;i<=10;i++){
k=i;
for(j=0;j<=9;j++){
printf("%3d",j*10+k);
}
printf("\n");
}
}
45.计算一个数是否可为两个素数之和
- 思路:先写出判断数字是否为素数的函数,然后再循环遍历该数范围内的数,当范围内遇到素数时,然后再判断输入数字减去遇到的素数之差是否仍为素数,若仍为素数则可以分解为两个素数之和,否则不行。
#include<stdio.h>
int main(){
int checkPrime(int number);
int num,i,flag=0;
printf("请输入一个整数:\n");
scanf("%d",&num);
for(i=2;i<=num/2;i++){
if(checkPrime(i)==1){
if(checkPrime(num-i)==1){
printf("%d是%d和%d两个素数的和\n",num,i,num-i);
flag=1;
}
}
}
if(flag==0){
printf("%d不能分解成两个素数",num);
}
}
//判断素数
int checkPrime(int number){
int i;
for(i=2;i<number;i++){
if(number%i==0){
return 0;
}
}
if(i==number){
return 1;
}
}
46.二进制与十进制的相互转换
- 二进制转十进制
#include <stdio.h>
#include <math.h>
int main(){
int converTo(long long number);
long long num;
printf("请输入一个二进制数:\n");
scanf("%lld",&num);
printf("二进制数%lld转换为十进制数为:%d",num,converTo(num));
}
int converTo(long long number){
int reminder,decimalNumber=0,i=0;
while(number!=0){
reminder=number%10; //余数
number=number/10; //每次去掉最后一位再计算
decimalNumber=decimalNumber+reminder*pow(2,i);
i++;
}
return decimalNumber;
}
- 十进制转二进制
#include <stdio.h>
#include <math.h>
int main(){
long long convertDecimalToBinary(int number);
int num2;
printf("请输入一个数:\n");
scanf("%d",&num2);
printf("十进制数%d转换为二进制数为:%lld",num2,convertDecimalToBinary(num2));
}
//十进制转换为二进制数
long long convertDecimalToBinary(int number){
int reminder,i=1;
long long binaryNumber=0;
while(number!=0){
reminder=number%2; //每次记录二进制末尾数
binaryNumber=binaryNumber+reminder*i; //通过乘10法进位
number=number/2;
i=i*10;
}
return binaryNumber;
}