874复习第四天-习题7编程题

32 篇文章 2 订阅

编程实现从键盘任意输入20个整数,计算其中所有非负数之和

//计算20个非负整数之和
#include<stdio.h>
#include<string.h>
int main()
{
	int i,sum=0;
	int a[20];
	for(i=0;i<20;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<20;i++)
	{
		if(a[i]>=0)
		{
			sum=sum+a[i];
		}
	}
	printf("sum=%d\n",sum);
	return 0;
	
} 

在这里插入图片描述

输入10个整数,将这10个整数按升序排序输出,并且奇数在前,偶数在后。

#include<stdio.h>
#include<string.h>
int main()
{
	int odd=0,even=9,a[10],n,i,j,t;
	for(i=0;i<10;i++){
		scanf("%d",&n);//存放一个整数
		if(n%2!=0)//奇数
			a[odd++]=n;//先进行odd的运用,Odd=0所以a[0]=n;odd+1
		else
		a[even--]=n;//把偶数排到右边 
	}
	//此时,假如输入10,9,8,7,6,5,4,3,2,1
	//这个时候,a[0]=9,a[1]=7,a[2]=5,a[3]=3,a[4]=1,odd=5
	//a[odd]={9,7,5,3,1}odd=5,因为odd++在赋值之后还加了一个
	//a[9]=10,a[8]=8,a[7]=6,a[6]=4,a[5]=2,even=4
	for(i=0;i<odd-1;i++)//通过选择排序对奇数进行升序排列 
	{
		n=i;//很好奇为什么要设置n=i 
		//就假设,n=0; 
		for(j=i+1;j<odd;j++)
			if(a[j]<a[n])//a[1]<a[0]:7是否小于9,是的 
				n=j;//n=1;
		//之后,a[2]<a[1]?是的,n=2;a[3]<a[2]是的,n=3;a[4]小于a[3]是的n=4
		//j=j++=5,此时不小于5了,所以此时n=4
		//但此时n!=0,所以进行换位置,a[0]和a[4]进行换位置a[0]=1,a[4]=9
		//之后再来几轮就是
		//n=1;j=2开始,a[2]<a[1] 对,n=2;j=3,对,n=3,j=4,此时就不对了
		//a[4]=9,a[3]=3,此时不小于,此时n=3,j=5退出
		//此时还不等于i=1,所以a[1]=a[3]=3,a[3]=a[1]=7
		//所以此时是1,3,5,7,9
		//之后再i=2=n,j=3,a[3]<a[2]不小于,所以j=4,a[4]<a[2]不小于,所以退出
		//此时,n=i=2,所以结束,此时排完 
		if(n!=i){//如果不等于就交换位置  
			t=a[i];
			a[i]=a[n];
			a[n]=t; 
		} 
	}
	for(i=odd;i<9;i++)
	{
		n=i;
		for(j=i+1;j<10;j++)
			if(a[j]<a[n])
				n=j;
		if(n!=i)
		{
			t=a[i];
			a[i]=a[n];
			a[n]=t;
		}
	}
	//输出排序结果 
	for(i=0;i<10;i++)
		printf("%d",a[i]);
	printf("\n");
	
	return 0;
}

在这里插入图片描述

从键盘输入10个整数,编程实现将其中最大数与最小数的位置兑换后,再输出调整后的数组

#include<stdio.h>
int main()
{
	int i,max,min,a[10];
	printf("Input 10 integer number:");
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	max=0;
	min=0;
	for(i=1;i<10;i++)//为什么是从1开始,不从0开始呢?因为直接把max=min开始设置为0 
	{
		if(a[i]>a[max])
			max=i;
		if(a[i]<a[min])
			min=i;
	}
	i=a[max];
	a[max]=a[min];
	a[min]=i;
	for(i=0;i<10;i++)
		printf("%d",a[i]);
	printf("\n");
	return 0;
}

在这里插入图片描述

编写一程序,其功能是给一维数组a输入任意的6个整数,假设为5 7 4 8 9 1,然后建立一个具有以下内容的方正,并打印出来

在这里插入图片描述
在这里插入图片描述
错误的程序

#include<stdio.h>
int main()
{
	int i,j,t,a[6];
	printf("Input 6 Integer number:");
	for(i=0;i<6;i++)//输入6个数字 
		scanf("%d",&a[i]);
	printf("\n");
	for(i=0;i<6;i++)
	{
		for(j=0;j<6;j++)//显示结果 
			printf("%d",a[j]);
		printf("\n");
		t=a[5];
		for(j=5;j>0;j--);//将数组元素循环右移 
		a[j]=a[j-1];
		a[0]=t;
	}
	return 0;
} 

在这里插入图片描述
正确答案
就是最后一个for多写了一个;

#include<stdio.h>
int main()
{
	int i,j,t,a[6];
	printf("Input 6 Integer number:");
	for(i=0;i<6;i++)//输入6个数字 
		scanf("%d",&a[i]);
	printf("\n");
	for(i=0;i<6;i++)
	{
		for(j=0;j<6;j++)//显示结果 
			printf("%d",a[j]);
			
		printf("\n");
		
		t=a[5];
		
		for(j=5;j>0;j--)//将数组元素循环右移 
			a[j]=a[j-1];
		a[0]=t;
	}
	return 0;
} 

在这里插入图片描述

输入5*5阶的矩阵编码实现,A:求两条对角线上的各元素之和,B求两条对角线上行,列下标均为偶数的个元素之和

在这里插入图片描述

#include<stdio.h>
int main()
{
	int i,j,sum=0,mul=1,a[5][5];
	printf("Input 5*5 array:\n");
	for(i=0;i<5;i++)//输入5*5的矩阵 
		for(j=0;j<5;j++)
			scanf("%d",&a[i][j]);
	printf("\n");
	for(i=0;i<5;i++)
	{
		sum+=a[i][i];//对左角线元素进行累加
		if(i!=2)//对右角线上的元素进行累加(对角线中间元素除外) 
			sum+=a[i][4-i]; 
		if(i%2!=0)//如果行下标为奇数,进入下一次循环 
			continue;
		mul *= a[i][i];//对左对角线上行,列下标均为偶数的元素进行累乘
		if(i!=2)//对右对角线上行,列下标均为偶数的元素进行累成,中间元素除外
			mul*=a[i][4-i]; 
	}
	printf("sum=%d mul=%d\n",sum,mul);
	return 0;
}

在这里插入图片描述

编程打印杨辉三角

在这里插入图片描述

#include<stdio.h>
#define N 6
int main()
{
	int i,j,a[N][N];
	for(i=0;i<N;i++)//先把杨辉三角写入 
	{
		a[i][0]=1;
		a[i][i]=1;
		for(j=1;j<i;j++)
			a[i][j]=a[i-1][j-1]+a[i-1][j];
	}
	for(i=0;i<N;i++)
	{
		for(j=0;j<N-i-1;j++)//j=0;j<6-0-1,第一个是小于5 ,第二个是4 
			printf(" ");
		for(j=0;j<=i;j++)
			printf("%2d ",a[i][j]);//占2个字符宽 
		printf("\n");//输出换行 
	}
}

在这里插入图片描述

编写一程序实现将用户输入的一字符串以反向形式输出。比如,输入的字符串是abcdefg,输出为gfedcba

在这里插入图片描述

#include<stdio.h>
#include<string.h>
#define N 80
int main()
{
	char str[N];
	int i;
	
	printf("Input a string: ");
	gets(str);
	printf("After reverse:");
	for(i=strlen(str)-1;i>=0;i--)
		printf("%c",str[i]);
	printf("\n");
	return 0;
} 

书上的例题错误
在这里插入图片描述

编写一程序实现将用户输入的一字符串中所有的字符’c’删除,并输出结果

在这里插入图片描述

#include<stdio.h>
#include<string.h>
#define N 80
int main()
{
	char str[N],strtemp[N];
	unsigned int i,j;
	
	printf("Input a string: ");//将输入的字符串存入str数组中
	gets(str);
	for(i=0,j=0;j<strlen(str);i++)//将str中的非'c'字符复制到字符数组strtemp中
	if(str[i]!='c')
		strtemp[j++]=str[i];
	strtemp[j]='\0';
	strcpy(str,strtemp);
	//将删除字符'c'后的字符串strtemp复制给字符串str
	printf("After delete charactor \'c\':");
	printf("%s\n",str);
	return 0; 
}

在这里插入图片描述

编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strpy函数,复制时’\0’也要复制过去。’\0’后面的字符不复制

在这里插入图片描述

#include<stdio.h>
#define N 80

int main()
{
	char s1[N],s2[N]="abcdefg\0hijk";
	unsigned int i;
	i=0;
	while(1)
	{
		s1[i]=s2[i];
		if(s2[i]=='\0')
			break;
		i++;
	}
	printf("After string copy:%s\n",s1);
	return 0;
}

在这里插入图片描述

不用strcat函数编程实现字符串连接函数strcat的功能,将字符串srcStr连接到字符串dstStr的尾部

在这里插入图片描述

#include<stdio.h>
int main()
{
	char dstStr[20]="12345",srcStr[20]="67890";
	unsigned int i,j;
	printf("Before strcat:dstStr=%s scrStr=%s\n",dstStr,srcStr);
	for(i=0;dstStr[i]!='\0';i++)//找到dstStr串中\0所在的位置I
	;
	 for(j=0;srcStr[j]!='\0';j++)
	 	dstStr[i+j]=srcStr[j];
	dstStr[i+j]='\0';
	printf("After strcat:dstStr =%s\n",dstStr);
	return 0;
} 

在这里插入图片描述

有一个已排好序(升序)的整型数组,要求从键盘输入一整数按原来排序的规律将它插入到数组中。并输出结果。比如,原来数据1 3 5 7,需插入4,插入后为:1 3 4 5 7

#include<stdio.h>
int main()
{
	int a[10]={1,3,5,7,9},num=5,i,n;
	printf("Before insert:");
	for(i=0;i<num;i++)
		printf("%d",a[i]);
	printf("\n");
	
	printf("Input a number:");
	scanf("%d",&n);
	for(i=num-1;i>=0;i--)
		if(a[i]>n)
			a[i+1]=a[i];
		else
			break;
	a[i+1]=n;
	
	printf("After insert:");
	for(i=0;i<num+1;i++)
		printf("%d",a[i]);
	printf("\n"); 
	return 0;
}

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向上Claire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值