class-notes/2207/习题答案/12-24习题答案.md
2025-02-06 22:43:19 +08:00

8.5 KiB
Raw Blame History

C语言-1

/*------------------------------------------------------------------------------
【程序设计】输入一个1000以内的三位数找出小于这个三位数且个位数字与十位数字之和
除以10所得的余数等于百位数字的数并输出满足条件的数字之和。
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容否则不得分。
仅在Program-End之间填入若干语句。不要删除标志否则不得分。
------------------------------------------------------------------------------*/
#include<stdio.h> 

int main()
{
	int a,b,c,d,i,j,sum=0;
	scanf("%d",&j);
	/**********Program**********/
	for(i=100;i<j;i++){
		a = i%10;//个位
		b = i%100/10;//十位
		c = i/100;//百位
		d = (a+b)%10;//个位+十位 取模
		if(c == d){
			sum += i;
		}
	}


	/**********  End  **********/
	printf("%d\n",sum);

}

C语言-2

/*------------------------------------------------------------------------------
【程序设计】任意一个大于0的正整数都可以写成若干个2的正整数次幂的和的形式。
例如7=2^2+2^1+2^0
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容否则不得分。
仅在Program-End之间填入若干语句。不要删除标志否则不得分。
------------------------------------------------------------------------------*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>

#define N 4

void binary_power(unsigned int x)
{
	int flag =1;
	unsigned int s,t,y;
	printf("%u=",x);

	/**********Program**********/
	t = 1;
	y = 0;
	//二进制的权位值  2^2 2^1 2^0
	//从末尾开始一直乘 乘到 大于传入的x就停止 同时记录下次方数
	while(t <= x){
		t*=2;
		y++;
	}
	y--;//2^y 会正好大于x
	printf("2^%d", y);//最高位
	x -= (int)pow(2, y);//求2的y次方 同时对x进行减法运算 
	y--;

	while(x > 0){
		t = 1;
		s = (int)pow(2, y);
		if(x >= s){//当前权位值没有大于需要运算的数据
			x -= s;
			printf("+2^%d", y);
		}
		y--;
	}
	/**********  End  **********/
	printf("\n");
}
int main()
{
	unsigned int n[N]={1,15,32,144};
	int i;
	for(i=0;i<N;++i)
		binary_power(n[i]);
	return 0;
}

C语言-3

/*------------------------------------------------------------------------------
【程序设计】从键盘接收3个无序的整数将这3个数据都插入到升序排列的数组中并保持数组仍然有序。
输入输出如下:
4 6 9 12 15 18 23 26 32 39
1 5 6
1 4 5 6 6 9 12 15 18 23 26 32 39
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容否则不得分。
仅在Program-End之间填入若干语句。不要删除标志否则不得分。
------------------------------------------------------------------------------*/
#include<stdio.h> 
#define N 10
void main( )
{
	int a[N+5]={4,6,9,12,15,18,23,26,32,39},p,x,i,j;  
	for(i=0;i<N;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
	/**********Program**********/
	for(i=N;i<N+3;i++){
		scanf("%d", a+i);
	}

	for(i=0;i<N+3-1;i++){
		for(j=0;j<N+3-1-i;j++){
			if(a[j] > a[j+1]){
				x = a[j];
				a[j] = a[j+1];
				a[j+1] = x;
			}
		}
	}




	/**********  End  **********/
	for(i=0;i<N+3;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
}

C语言-4

/*------------------------------------------------------------------------------
【程序设计】输入一个小于等于10000的整数n在[100,n]之间打印出各位数字和为5的所有整数的个数.
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容否则不得分。
仅在Program-End之间填入若干语句。不要删除标志否则不得分。
------------------------------------------------------------------------------*/
#include<stdio.h> 

void main()
{
	int a,b,c,d,k,i,n;
	k=0;
	scanf("%d",&n);
	/**********Program**********/
	
	for(i=100;i<=n;i++){
		a = i;//备份一遍i的数据
		d = 0;
		while(a){
			d += (a%10);
			a /= 10;
		}
		if(d == 5){
			k++;
		}
	}
	/**********  End  **********/
	printf("%d\n",k);
}

C语言-5

/*------------------------------------------------------------------------------
【程序设计】编写函数rtrim用来删除字符串尾部的空格首部和中间的空格不删除。例如字符串为"    A BC DEF     "
删除后的结果是"    A BC DEF"。要求函数形参采用指针变量。
测试输入:    A BC DEF
测试输出:    A BC DEF
说明测试输入中A前有4个空格F后有5个空格
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容否则不得分。
仅在Program-End之间填入若干语句。不要删除标志否则不得分。
------------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
void main()
{  
	void rtrim(char *p);
	char s[100];
	gets(s);   
	rtrim(s);
	puts(s);
}
void rtrim(char *p)
{
	int i;
	/**********Program**********/
	i=0;
	while(*(p+i) != '\0'){
		i++;
	}
	while(*(p+i-1) == ' '){
		*(p+i-1) = '\0';
		i--;
	}

	/**********  End  **********/
}

C语言-6

/*------------------------------------------------------------------------------
【程序设计】定义一个函数实现字符串的逆序存放(连续的字符串,中间不包含空格),要求用指针实现。
在主函数中调用函数实现字符串逆序存放。运行程序,输入字符串,输出逆序后的字符串。
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容否则不得分。
仅在Program-End之间填入若干语句。不要删除标志否则不得分。
------------------------------------------------------------------------------*/
#include<stdlib.h>
#include<stdio.h>
void reversed_str(char *str){
	char *p=str,*q=str;
	int temp;
	while(*q!='\0'){
		q++;
	}
	q--;
	/**********Program**********/
	while(p < q){
		temp = *p;
		*p = *q;
		*q = temp;
		p++;
		q--;
	}
	/**********  End  **********/
}
int main(){
	char s[50];
	printf("输入字符串:");
	scanf("%s",s);
	printf("逆序前:%s\n",s);
	reversed_str(s);
	printf("逆序后:%s\n",s);
	return 0;
}

C语言-7

/*------------------------------------------------------------------------------
【程序设计】从键盘输入一位整数i计算其各位数字之和。
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容否则不得分。
仅在Program-End之间填入若干语句。不要删除标志否则不得分。
------------------------------------------------------------------------------*/
#include<stdio.h>
#include <stdlib.h>
int main(){
	int i,sum=0,a;
	scanf("%d",&i);
	/**********Program**********/ 
	while(i){
		sum += i%10;
		i/=10;
	}
	/**********  End  **********/ 
	printf("%d\n",sum);
	return 0;
}

C语言-8

/*------------------------------------------------------------------------------
【程序设计】编写函数,判断一个字符串是否是回文。在主函数中输入一个字符串,调用自定义函数,输出结果。
所谓回文是指顺读和倒读都一样的字符串。如"XZYKYZX"是回文。
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容否则不得分。
仅在Program-End之间填入若干语句。不要删除标志否则不得分。
------------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
void main()
{
	char s[50];
	int hw(char *s); 
	gets(s);
	if(hw(s)) 
		printf("是回文!\n");
	else
		printf("不是回文!\n");
}
int hw(char *s) 
{
	int flag=1;
	char *p,*q;
	/**********Program**********/
	p = s;//指向字符串首元素
	q = s+strlen(s)-1;//指向末尾元素
	while(p < q){
		if(*p != *q){
			flag = 0;
			break;
		}
		p++;
		q--;
	}

	return flag;
	/**********  End  **********/
}