c/c++从入门到入土(7)

开始时间:2023-04-23 23:06:22

结束时间:2023-04-24 00:41:25

前言:今天的调休生活过得怎么样呢,哈哈哈哈。蓝桥杯省赛成绩出来了,大家是不是像我一样的省四呢?咳咳,早知道今年的国赛在北京比,我肯定会拆掉那台电脑吧!初学者,咱们多练习练习循环结构。

实验二 C循环结构程序设计

 第一题 应用循环结构输出ASCII码表

一.问题描述

请应用循环结构编写算法输出码值为33~127的ASCII码码值、字符对照表。

输入格式:
无输入。

输出格式:
以以下格式输出码值为33~127的ASCII码码值、字符对照表,一个字符一行。


< ASCII码 >-->< 字符 >

输入样例:

输出样例:
33-->!
34-->"
35-->#
36-->$
37-->%
38-->&
39-->'
40-->(
41-->)
42-->*
43-->+
44-->,
45-->-
46-->.
47-->/
48-->0
49-->1
50-->2
51-->3
52-->4
53-->5
54-->6
55-->7
56-->8
57-->9
58-->:
59-->;
60--><
61-->=
62-->>
63-->?
64-->@
65-->A
66-->B
67-->C
68-->D
69-->E
70-->F
71-->G
72-->H
73-->I
74-->J
75-->K
76-->L
77-->M
78-->N
79-->O
80-->P
81-->Q
82-->R
83-->S
84-->T
85-->U
86-->V
87-->W
88-->X
89-->Y
90-->Z
91-->[
92-->\
93-->]
94-->^
95-->_
96-->`
97-->a
98-->b
99-->c
100-->d
101-->e
102-->f
103-->g
104-->h
105-->i
106-->j
107-->k
108-->l
109-->m
110-->n
111-->o
112-->p
113-->q
114-->r
115-->s
116-->t
117-->u
118-->v
119-->w
120-->x
121-->y
122-->z
123-->{
124-->|
125-->}
126-->~
127-->
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

 二.设计思路

  无输入,只用在循环结构内分别输出从33到127的基本整型和字符型。

三.流程图

 四.源代码

#include<stdio.h>
int main()
{
    int i;
    for(i=33;i<=127;i++)
    {
        printf("%d-->%c\n",i,i);
    } 
    return 0;
}

第二题 应用循环结构验证欧拉素数公式

一.问题描述

请应用循环结构编写算法验证欧拉公式
图片1.png
是否是一个在n=-39~40范围内计算素数的通项公式。

输入格式:
无输入。

输出格式:
以以下形式输出每个an的判断情况,其中Y表示对于当前项n来说,欧拉公式成立;N表示对于当前项n来说,欧拉公式不成立。

< n >----< an >----< Y/N >

输入样例:

输出样例:
-39----1601----Y
-38----1523----Y
-37----1447----Y
-36----1373----Y
-35----1301----Y
-34----1231----Y
-33----1163----Y
-32----1097----Y
-31----1033----Y
-30----971----Y
-29----911----Y
-28----853----Y
-27----797----Y
-26----743----Y
-25----691----Y
-24----641----Y
-23----593----Y
-22----547----Y
-21----503----Y
-20----461----Y
-19----421----Y
-18----383----Y
-17----347----Y
-16----313----Y
-15----281----Y
-14----251----Y
-13----223----Y
-12----197----Y
-11----173----Y
-10----151----Y
-9----131----Y
-8----113----Y
-7----97----Y
-6----83----Y
-5----71----Y
-4----61----Y
-3----53----Y
-2----47----Y
-1----43----Y
0----41----Y
1----41----Y
2----43----Y
3----47----Y
4----53----Y
5----61----Y
6----71----Y
7----83----Y
8----97----Y
9----113----Y
10----131----Y
11----151----Y
12----173----Y
13----197----Y
14----223----Y
15----251----Y
16----281----Y
17----313----Y
18----347----Y
19----383----Y
20----421----Y
21----461----Y
22----503----Y
23----547----Y
24----593----Y
25----641----Y
26----691----Y
27----743----Y
28----797----Y
29----853----Y
30----911----Y
31----971----Y
32----1033----Y
33----1097----Y
34----1163----Y
35----1231----Y
36----1301----Y
37----1373----Y
38----1447----Y
39----1523----Y
40----1601----Y
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二.设计思路

  无输入,嵌套循环,在大循环中,按照格式输出n和an,判断an是否为素数,从2开始到更号an一个个判断若是an的合数则为N,很明显全是Y,直接输出Y就行了。

三.流程图

四.源代码

#include<stdio.h>
#include<math.h>
int main(){
    int i,n,k;
    for(i=-39;i<=40;i++)
    {
        n=i*i-i+41;
        printf("%d----%d----",i,n);
        for(k=2;k<=sqrt(n);k++)
        {

            if(n/k!=0)
                printf("Y\n");
                break;
        }
    }
    return 0;
}

第三题 应用循环结构输出菱型字符图形

一.问题描述

请应用循环结构编写算法实现如下图所示的n(n为正奇数)行菱型字符图形的输出。例如n=7,ch='*'时:

   *

  ***

 *****

*******

 *****

  ***

   *

输入格式:
输入在一行中给出字符ch和行数n(n为正奇数)的值,以空格为间隔。

输出格式:
对每一组输入的字符ch和行数n,显示n行由字符ch组成的菱形字符图形。

输入样例1:
* 5
输出样例1:
  *
 ***
*****
 ***
  *
输入样例2:
* 6
输出样例2:
error data
输入样例3:
# 3
输出样例3:
 #
###
 #
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二.设计思路

  这题是所有题中最难的一个,有输入为三角形层数和符号。我的思路是首先输出上半三角形,然后输出下半三角形。问题的难点是输出几行,空格如何输出,每一层几个符号怎么判断,以及什么时候输出换行。第一个问题输出几行,已知总共需要输出一个奇数行,上半则为总行数加一除2,以总行数为嵌套循环大循环循环次数,第二循环输出空格,举例总输出行数为5,第一行输出两个空格和一个星号,第二行第二行输出一个空格和三个星号,第三行不输出空格,输出五个星号,总结规律,空格数为总循环数减已循环数,符号数为两倍已循环次数减一。下半三角也一样。

三.流程图

 四.源代码

#include<stdio.h>
int main()
{
    int i,j,k;
    int a,n;
    char ch;
    int b,c,d;
    scanf("%c %d",&ch,&n);
    if(n%2!=0)
    {
        a=(n+1)/2;
        for(i=1;i<=a;i++)
        {
            for(k=1;k<=a-i;k++)
            {
                printf(" ");
            }
            for(j=1;j<=2*i-1;j++)
            {
                printf("%c",ch);
            }
            printf("\n");
        }
        for(b=1;b<=a-1;b++)
        {
            for(d=1;d<=b;d++)
            {
                printf(" ");
            }
            for(c=n-2*b;c>=1;c=c-1)
            {
                printf("%c",ch);
            }
            printf("\n");
        }
    }
        if(n%2==0)
            printf("error data");
        return 0;
}

第四题 数列求和

一.问题描述

求S=a+aa+aaa+…+a…a之值,其中a是一个数字,n表示a的位数,例如a=2,n=5时:S=2+22+222+2222+22222。

输入格式:
输入在一行中给出数字a和n的值。

输出格式:
对每一组输入的a和n,在一行中输出S的值。

输入样例1:
2 5
输出样例1:
S=24690
输入样例2:
a 0
输出样例2:
error data
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二.设计思路

  有输入,首先要考虑第一个输入是不是一个正常的自然数,其次第二个位置的输入必须大于零。第二个数为已知的大循环次数,然后考虑2,22,222,2222这种数如何出现,即前一个数乘十加一个基本数,然后加起来就行了。

三.流程图

 四.源代码

#include<stdio.h>
int main(){
    int a,n,i=0,s=0,t=0;
    scanf("%d %d",&a,&n);
    if(n!=0&&a>0&&a<9)
        {
        while(i<n)
        {
            t=t+a;
            s=s+t;
            a=a*10;
            i++;
        }
    printf("S=%d",s);
    }
    else
    printf("error data");
    return 0;
}

第五题 寻找完数

 一.问题描述
(谭浩强,《C程序设计(第四版)》,清华大学出版社:第五章,P141,第9题)
一个正整数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,23,而6=1+2+3,因此6是“完数”。编程序找出不大于N(N>=0)的所有完数。

输入格式:
输入在一行中给出1个整数N(N>=0)。

输出格式:
对每一个输入的N,在一行中输出不大于N的所有完数,每个数输出格式为宽度5位且右对齐,如没有完数则输出none。

输入样例1:
1000
输出样例1:
    6   28  496
输入样例2:
5
输出样例2:
none
输入样例3:
0
输出样例3:
error data
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

 二.设计思路

  首先有输入,你输的不是正整数会先报错,其次,我们知道最小完数为6,那么小于六都出不来完数,再其次如何找最简单的方法肯定便是一个个找,符合条件输出(域宽为5右对齐)。怎么设置这个条件呢,在大循环内部,找循环次数(从2开始到目标数)的素数和,选将结构控制是否相等,相等输出。

三.流程图

 四.源代码

#include<stdio.h>
int main(){
    int m,s,i,n;
    scanf("%d",&n);
    if(n==0)
        printf("error data");
    for(m=2;m<n;m++)
    {
        s=0;
        for(i=1;i<m;i++)
            if((m%i)==0)s=s+i;
        if(s==m)
        {
            printf("%5d",m);
        }

    }
    if(n<=5&&n>0)
        printf("none");
    return 0;
}
第六题 二分法求根
一.问题描述
(谭浩强,《C程序设计(第四版)》,清华大学出版社:第五章,P141,第15题)

用二分法求下面方程在(-1010)之间的根:

输入格式:
无输入。

输出格式:
在一行中输出(-1010)间方程的根的值,如没有根则输出no root。

输入样例:

输出样例:
root=2.0
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

 二.设计思路

  首先要知道二分法是怎么运行的,两个端点分别有俩函数值(一正一副),取中点,若中点函数值为正覆盖函数值为正的端点,若函数值为负覆盖函数值为负的端点。循环直到区间达到精度要求为止。

三.流程图

 四.源代码

#include<stdio.h>
#include<math.h>
int main()
{
    float x0,x1=-10,x2=10,f0,f1,f2;
    f1=x1*((2*x1-4)*x1+3)-6;
    f2=x2*((2*x2-4)*x2+3)-6;
    do{
        x0=(x1+x2)/2;
        f0=x0*((2*x0-4)*x0+3)-6;
        if((f0*f1)<0)
        {
            x2=x0;
            f2=f0;
        }else{
        x1=x0;
        f1=f0;
    }
    }while(fabs(f0)>=1e-5);
    printf("root=%.1f",x0);
    return 0;
}

总结:学完循环结构,你已经可以尝试通过c语言解决各种生活中的抽象化数学问题,同时你也两只脚迈进编程的大门,后面让我们一起探索更广阔的编程知识。

每日一mo:有结果的等叫等,没结果的等叫“熬”啊.......