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

347 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### C语言-1
```c
/*------------------------------------------------------------------------------
【程序设计】输入一个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
```c
/*------------------------------------------------------------------------------
【程序设计】任意一个大于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
```c
/*------------------------------------------------------------------------------
【程序设计】从键盘接收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
```c
/*------------------------------------------------------------------------------
【程序设计】输入一个小于等于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
```c
/*------------------------------------------------------------------------------
【程序设计】编写函数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
```c
/*------------------------------------------------------------------------------
【程序设计】定义一个函数实现字符串的逆序存放(连续的字符串,中间不包含空格),要求用指针实现。
在主函数中调用函数实现字符串逆序存放。运行程序,输入字符串,输出逆序后的字符串。
------------------------------------------------------------------------
注意部分源程序给出如下。请勿改动主函数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
```c
/*------------------------------------------------------------------------------
【程序设计】从键盘输入一位整数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
```c
/*------------------------------------------------------------------------------
【程序设计】编写函数,判断一个字符串是否是回文。在主函数中输入一个字符串,调用自定义函数,输出结果。
所谓回文是指顺读和倒读都一样的字符串。如"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 **********/
}
```