SDUT-程序设计基础-实验4-for循环(上)

这篇具有很好参考价值的文章主要介绍了SDUT-程序设计基础-实验4-for循环(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SDUT-程序设计基础-实验4-for循环(上)

在开始之前,我想要提醒一下大家,在看完答案和解析以后,一定要自己再写一遍,一味的复制粘贴没有任何效果,当然,再解析中有任何看不懂的内容都可以私信我!!

0.for循环的基本格式

for循环相比while循环,二者不能说谁比谁更好,我们在打代码的过程中,要根据不同的情况选择不同的循环(do while同样)。for循环的基础结构简单来说分三部分
for(变量;循环条件;变量如何改变)
{
循环内容;
}
如上所示,for循环与while循环的区别就在于,while后跟括号,括号里只需要放循环条件,而for循环则更加完善。

1.sdut-C语言实验-A+B for Input-Output Practice (Ⅳ)

题干如下

Your task is to Calculate a + b.

输入格式:
Your task is to Calculate a + b.

输出格式:
For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.

输入样例:
在这里给出一组输入。例如:

2
1 5
10 20
输出样例:
在这里给出相应的输出。例如:

6
30

这个题目基本属于for循环的入门题目,我们只需要注意循环的次数,例如i如果初始定为0,那么循环条件也就变成了i<n,如果定义的是i=1,那循环条件应该定成i<=n来保证循环的不变性;或者使用累减,与上述基本相同,不再赘述。

#include <stdio.h>

int main()
{
	int m, n, z, add;
	scanf("%d", &m);
	for (m; m > 0; m--)
	{
		scanf("%d %d", &z, &n);
		add = z + n;
		printf("%d\n", add);
	}
	return 0;
}

2.sdut-C语言实验—两个数比较

题干如下

求2个数中较大者。

输入格式:
第一行为测试的数据组数N,接下来的N行分别是两个待比较的整数。

输出格式:
输出N行,每一行的值为每组数中较大的整数。

输入样例:
2
1 2
15 10
输出样例:
在这里给出相应的输出。例如:

2
15

对于这个题目,与上个题目相似,不过需要用到循环和选择结构的嵌套来使用,通过while循环的题,大家应该对这个结构不太陌生,只需要注意for循环的基础用法即可

#include <stdio.h>

int main()
{
	int n, a, b, max;
	scanf("%d", &n);
	for (n; n > 0; n--)
	{
		scanf("%d %d", &a, &b);
		if (a >= b)
		{
			max = a;
			printf("%d\n", max);
		}
		else
		{
			max = b;
			printf("%d\n", max);
		}
	}
	return 0;
}

3.sdut- C语言实验-计算1到n的和(循环结构)

题干如下

从键盘上输入任意一个整数n,计算1到n的和。

输入格式:
从键盘输入任意整数n。

输出格式:
输出1到n的和。

输入样例:
在这里给出一组输入。例如:

3
输出样例:
在这里给出相应的输出。例如:

6

这个题目在while循环中也见过,只需要在循环中维护一个变量(例sum)sum,和不断变大,加数也不断变大,就可以做到题干所说的效果了,不过需要注意,维护的这个变量需要赋初始值,此处赋值0即可,不可以用随机数直接进入循环

#include <stdio.h>

int main()
{
	int i = 0;
	int sum = 0;
	int m = 0;
	scanf("%d", &m);
	for (i; i <= m; i++)
	{
		sum += i;
	}
	printf("%d", add);
	return 0;
}

4.sdut-C语言实验-求阶乘(循环结构)

题干如下

从键盘输入任意一个大于等于0的整数n,然后计算n的阶乘,并把它输出。
提示: 0!是 1 。

输入格式:
输入任意一个大于等于0的整数n。

输出格式:
输出n!

输入样例:
在这里给出一组输入。例如:

3
输出样例:
在这里给出相应的输出。例如:

6

这个题目也是选择和循环的嵌套,不同于第二题,这里使用的是选择结构中嵌套循环结构,先对于n是否为零进行嵌套,随后的方法就与第三题无异,不过只需要把循环中的加号改成乘号就行

#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n < 0)
		return 0;
	else if (n == 0)
	{
		printf("1");
		return 0;
	}
	else
	{
		int N = 1;
		for (n; n > 0; n--)
		{
			N *= n;
		}
		printf("%d", N);
		return 0;
	}
}

5.sdut-C语言实验- 做乘法

题干如下

请用C语言编写一个程序。此程序接收一个正整数N,然后打印输出“N次N*(1->N)格式”的数据。例如:此程序接收正整数5,那会输出以下格式的数据:
51=5
5
2=10
53=15
5
4=20
5*5=25

输入格式:
只有一个正整数N(N<=100)。

输出格式:
输出共N行数据,如上面的例子所示。

输入样例:
在这里给出一组输入。例如:

5
输出样例:
在这里给出相应的输出。例如:

51=5
5
2=10
53=15
5
4=20
5*5=25

对于循环题目,一般我们都需要先分析题干,寻找每次循环的共通点,发掘循环条件,如何循环,对于这个题目,我们可以发现每次打印的样式基本相同,只有第二个乘数和积有变化,那我们就需要维护两个变量变化来实现第二个乘数和积的变化,对于第二个乘数来说,只需要从1开始每次循环加一即可,对于积就更容易实现,只需要两个乘数相乘,一个常量,另一个是我们维护的变量。

#include <stdio.h>

int main()
{
	int n = 0;
	int i = 1;
	int N = 0;
	scanf("%d", &n);
	for (i; i <= n; i++)
	{
		N = i * n;
		printf("%d*%d=%d\n", n, i, N);
	}
	return 0;
}

6.sdut-C语言实验-数列求和

题干如下

数列求和是一类常见的问题,本题有一定的代表性:
求s=a+aa+aaa+aaaa+……+aa…aa(n位)
其中,a的值由键盘输入,位数n也由键盘输入。

输入格式:
第一行输入a的值;
第二行输入位数n。

输出格式:
输出对n个数完成求和运算后的结果。
比如a=3,n=6时,s=3+33+333+3333+33333+333333

输入样例:
3
6
输出样例:
在这里给出相应的输出。例如:

370368

这个题目的也是常规的在循环中维护两个变量的变化,难点在于如何实现加数变量不断增加位数(以a=3为例),第一次循环中,a为3,第二次循环,a为33,常用的方法就是用另一个变量存个位,然后a*10再相加即可,详细代码如下

#include <stdio.h>

int main()
{
	int a, n;
	scanf("%d %d", &a, &n);
	int b = a;
	int i = 1;
	int m = 0;
	int c = 1;
	for (i; i <= n; i++)
	{
		m = m + a;
		a = a * 10 + b;
	}
	printf("%d", m);
	return 0;
}

7.求Fibonacci(斐波那契)数列的n项和

题干如下

已知斐波那契数列有如下特点:第1,2两个数为1,1。从第三个数开始,该数是其前面两个数之和。即该数列为1,1,2,3,5,8,13,……。本题要求编写程序,计算该数列的前n项和。

输入格式:
键盘输入n(2≤n≤40)。

输出格式:
sum=S,S为斐波那契数列的前n项和。

输入样例:
10
输出样例:
sum=143

这个题目略微有一点特殊,之前的题目都是从第一项开始每项都有一定规律,而这个题目是从一二项开始,每两项存在规律,即第三个数是前两个数的和,而题干说n肯定是比二大的一项,那不如我们就直接定义和的初始量为2,循环的时候少循环两次即可,同时在循环中我们还要注意变量大小的变化,经典的醋和酱油换瓶子问题,这里不多赘述

#include<stdio.h>

int main()
{
    int n, a1 = 1, a2 = 1;
    scanf("%d", &n);
    int i, sum1 = 0;
    int sum2 = 2 ,b = 2;
    for(i=3; i <= n; i++)
    {
       b = a1 + a2;
       a1 = a2;
       a2 = b;
       sum2 = sum2 + b;
    }
       printf("sum=%d", sum2);
    return 0;
}

8.sdut-C语言实验- 简单计算

题干如下

接受从键盘输入的N个整数,输出其中的最大值、最小值和平均值(平均值为整除的商)。

输入格式:
第一行一个正整数N(N<=100);
第二行有N个用空格隔开的整数Ti (1 <= i <= N, 0 <= Ti <= 10000000)

输出格式:
三个有空格隔开的整数分别为最大值、最小值和平均值,其中平均值为整除的商。

输入样例:
在这里给出一组输入。例如:

5
1 2 3 5 4
输出样例:
在这里给出相应的输出。例如:

5 1 3

这个题目相比前一个来说,难度降低,不过在循环中要维护的变量增多,但也不算太难,最大值和最小值都可以通过打擂法(打擂法详细解析看主页实验二第七题)来取得,然后在循环中再维护一个代表和的变量,这样就可以轻易的求得平均值。

#include <stdio.h>

int main()
{
    int n, p, max, min, i, num, sum = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &num);
        if (i == 0)
        {
            max = num;
            min = num;
        }
        if (num > max)
            max = num;
        if (num < min)
            min = num;
        sum += num;
    }
    p = sum / n;
    printf("%d %d %d", max, min, p);
    return 0;
}

9.sdut- C语言实验-判断素数(循环结构)

题干如下

从键盘上输入任意一个正整数,然后判断该数是否为素数。
如果是素数则输出"This is a prime."
否则输出“This is not a prime.”

输入格式:
输入任意一个正整数n(1 <= n <= 1000000)。

输出格式:
判断n是否为素数,并输出判断结果:
如果n是素数则输出"This is a prime."
否则输出“This is not a prime.”

特别提醒:请注意对1的判定,1不是素数。

输入样例:
3
输出样例:
在这里给出相应的输出。例如:

This is a prime.

对于这个题目,我们采取的方法是穷举法,即将所有小于n的数都进行一次取余操作,从而判断是否是素数,由于1不是素数,所以需要特殊考虑,明显的是一个选择和循环的嵌套。深入来说,其实不需要将所有数字都进行判断,从二开始一直到n/2即可,因为大于n/2的不可能取余得到整数,可以减少运行时间,理解不了的话就可以直接使用穷举就好啦~

#include <stdio.h>

int main()
{
	int n = 0;
	int i = 0;
	scanf("%d", &n);
	if (n == 1)
		printf("This is not a prime.");
	for (i = n - 1; i > 1; i--)//对于这个循环条件,理解的可以直接用n/2来代替
	{
		if (n % i == 0)
		{
			printf("This is not a prime.");
			break;
		}
	}
	if (i == 1)
		printf("This is a prime.");
	return 0;
}

第二种方法是函数,对于函数来说,需要我们自己在主函数外面定义一个符合我们题目要求的函数,有传值函数和传址函数,以及有返回型函数和无返回型函数,如果大家能看懂上面的代码的话,这个函数看起来也就没有那么困难了。

#include<stdio.h>

int get_prime (int a)//在主函数外定义的适用函数
{
    int i = 0;
    for (i = a - 1; i > 1; i--)//这里也可以是a/2作为初始
	{
		if (a % i == 0)
		{
			return 0;//如果是素数返回0
		}
	}
	if (i == 1)
		return 1;//如果不是素数,返回1
}

int main()
{
	int n = 0;
	int i = 0;
	scanf("%d", &n);
	if (n == 1)
		printf("This is not a prime.");
	else
	{
		int c = get_prime(n);
		if(c == 0)
			printf("This is a prime.");
		else
			printf("This is not a prime.");
	}
	return 0;
}

10.sdut-C语言实验- 求绝对值最大值

题干如下

求n个整数中的绝对值最大的数。

输入格式:
输入数据有2行,第一行为n,第二行是n个整数。

输出格式:
输出n个整数中绝对值最大的数。

输入样例:
在这里给出一组输入。例如:

5
-1 2 3 4 -5
输出样例:
在这里给出相应的输出。例如:

-5

这个题目,是一个循环和选择的嵌套,需要我们先把数存起来,然后取绝对值进行比较,这里介绍一个比较简单(偷懒)的方法,我们可以直接用abs函数(不过需要引用头文件<math.h>),abs即求绝对值的符号,这里可以大大减少我们的做题难度

#include <stdio.h>
#include <math.h>

int main()
{
	int m, n, z;
	int max = 0;
	scanf("%d", &m);
	for (int i = 1; i <= m; i++)
	{
		scanf("%d", &n);
		if (abs(n) > abs(max))
			max = n;
	}
	printf("%d", max);
	return 0;
}

11.sdut- C语言实验—分数序列

题干如下

有一个分数序列:2/1, 3/2, 5/3, 8/5, 13/8, …编写程序求出这个序列的前n项之和。

输入格式:
输入只有一个正整数n,1≤n≤10。

输出格式:
请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。

输入样例:
在这里给出一组输入。例如:

3
输出样例:
在这里给出相应的输出。例如:

5.166667

对于这个题目,循环条件是很清晰的,就是根据输入的数字进行循环,难点在于循环内部如何将分子分母以及和进行维护,这就需要我们对于分数序列规律进行探寻,下一个数的分母是前一个数字的分子分母之和,分母则为前一个的分子,这样这个题目就迎刃而解了

#include<stdio.h>
int main()
{
    double a1=2,a2=1,sum=0,t;
    double c;
    int i,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        c=a1/a2;
        sum=sum+c;
        t=a1;
        a1=a1+a2;
        a2=t;
        
    }
    printf("%.6f",sum);
    return 0;
}

12.sdut-C语言实验- 平方数

题干如下

飞飞特别喜欢平方数,可是他数学并不好,你能帮他计算 n 与 m 之间所有平方数之和吗?
提示:若一个整数的开方还是整数,它就是平方数。例如:4、9、16、25是平方数。n 和 m 均可能为 0 至 100000000 内的任意整数,n、m不一定有序。

输入格式:
第一行 T 代表数据的组数。

接下来有 T 行,每行两个整数n,m (0 <= n, m <= 100000000)

输出格式:
输出一个整数,代表所求区间内平方数之和。

输入样例:
3
1 4
10 3
17 20
输出样例:
在这里给出相应的输出。例如:

5
13
0

对于这个题目,我们需要用到一个关于开根号的函数,即sqrt 关于sqrt 的用法,例sqrt(a),即求a的平方根,当然,同时也就需要引用
math 这个头函数。然后,唯一的难点就在于,如何判断平方数,sqrt(a)==(int)sqrt(a)
此行式子可以看作a的平方根是否是整型,如此之后,此题便不会太难了。

#include<stdio.h>
#include<math.h>

int main()
{
    int a, b, c, n, sum = 0;
    scanf("%d\n", &n);
    for(int i = 1; i <= n; i++)
    {
        scanf("%d %d\n", &a, &b);
        sum =0;
        if(b>a)
        {
            int t =b;
            b = a;
            a = t;
        }
        for(int m = b;m <= a;m ++)
        {
            if(sqrt(m)==(int)sqrt(m))
                sum += m;
        }
        printf("%d\n",sum);
    }
    return 0;
}

13.sdut - C语言实验—圆周率

题干如下

输入n值,并利用下列格里高里公式计算并输出圆周率:

输入格式:
输入公式中的n值。

输出格式:
输出圆周率,保留5位小数。

输入样例:
在这里给出一组输入。例如:

1
输出样例:
在这里给出相应的输出。例如:

2.66667

对于这个题目,给出公式求和,与第11题基本相同,只需要注意循环次数和循环条件即可,然后根据通项维护变量和的不断增加即可实现。唯一的难点在于,如何使用通项,这里我们可以将两项看作通项,即可完成题目要求

#include<stdio.h>

int main()
{
    double pai, sum = 0, a1, a2, i;
    int n;
    scanf("%d", &n);
    for(i = 1; i <= n; i++)
    {
        a1 = 1 / (4*i - 3);
        a2 = 1 / (4*i - 1);
        sum = sum + a1 - a2;

    }
    pai = 4*sum;
    printf("%.5f", pai);
    return 0;
}

14. sdut-C语言实验-虎子的虎年理财计划

题干如下

传说西塔发明了国际象棋而使国王十分高兴,他决定要重赏西塔,西塔说:“我不要你的重赏,陛下,只要你在我的棋盘上赏一些麦子就行了。在棋盘的第1个格子里放1粒,在第2个格子里放2粒,在第3个格子里放4粒,在第4个格子里放8粒,依此类推,以后每一个格子里放的麦粒数都是前一个格子里放的麦粒数的2倍,直到放满第64个格子就行了”。国王觉得很容易就可以满足他的要求,于是就同意了。但很快国王就发现,即使将国库所有的粮食都给他,也不够百分之一。

虎子深受启发,他开始了自己伟大的理财梦想:如果按照上面的复利计算,从这个虎年开始,第一年存1元钱,第二年存2元钱,第三年存4元钱,以此类推。你帮他算算,如果存n年(1<=n<=18),到下一个虎年虎子会存多少钱?

输入格式:
输入一个n,表示存n年。

输出格式:
输出虎子n年后的存款数额。

输入样例:
12
输出样例:
在这里给出相应的输出。例如:

4095

这个题目与前几个相比,较为简单,只需要维护循环中一个变量的不断翻倍和另一个变量的不断加和就可以完成题目要求文章来源地址https://www.toymoban.com/news/detail-741982.html

#include<stdio.h>

int main()
{
    int n, c = 1, sum = 0;
    scanf("%d", &n);
    while( n-- )
    {
        sum += c;
        c *= 2;
    }
    printf("%d", sum);
    return 0;
}

以上是实验设计基础-实验4的部分题目题干详细解析和答案,希望同学们能多多思考,一味的复制粘贴没有任何效果,大家学业顺利!!当然,在详解中没有看懂的内容可以私信我!!

到了这里,关于SDUT-程序设计基础-实验4-for循环(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SDUT—Python程序设计实验五(列表与元组)

    如果你对python中的列表和元组的使用还不是很熟悉,这篇文章也许会提供一些帮助: Python数据容器之列表(list)与元组(tuple) 输入N个字符后,按各字符的ASCII码从小到大的顺序输出这N个字符。 输入格式: 输入数据有多组,每组占一行,有N个字符组成。 输出格式: 对于每组输入

    2024年02月08日
    浏览(103)
  • 5、MATLAB程序设计与应用刘卫国(第三版)课后实验五:循环结构程序设计

    目录 一、  二、  三、  四、  五、 已知 求 y的近似值。当n分别取100、1 000、10 000时,结果是多少? 要求 :分别用循环结构和向量运算(使用sum 函数)来实现。 --------------------------------------- 示例代码 --------------------------------------------- --------------------------------------- 运行结果

    2023年04月26日
    浏览(49)
  • python程序设计基础 实验三

    ⭐python实验专栏,欢迎订阅与关注! ★观前提示 :本篇内容为python程序设计实验,代码内容经测试没有问题,但是可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。 一、实验目的 (1)掌握Python各种函数的使用。 二、实验内容 1、编写函数,求三个整数的

    2023年04月13日
    浏览(43)
  • Java面向对象程序设计实验报告(实验二 面向对象基础练习)

     ✨ 作者: 命运之光  ✨  专栏:Java面向对象程序设计实验报告 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录:源程序代码(带注释) 测试类demo2 Address类 Employee类 实验二 面向对象基础练习 实验环境: Eclipse+JDK 实验目的:

    2024年02月06日
    浏览(75)
  • 同济大学Python程序设计基础 实验九:数据可视化

    1.创建一个2行1列的绘图区并在第1行第1列绘制函数f(x)=x2 的曲线图(x的取值范围[-1,1]),在第2行第1列绘制函数f(x)=1/x的曲线图(x的取值范围[0,1]),效果如图2.9.1所示。 2.调用scatter函数绘制正弦函数的曲线,请在曲线中添加一个表示XY的轴线,并在X轴方向输出刻度标记文本,

    2024年02月16日
    浏览(49)
  • 1、MATLAB程序设计与应用刘卫国(第三版)课后实验一:MATLAB系统环境与运算基础

    目录 一、 二、 三、 四、 五、 六、 启动MATLAB系统环境,完成下列操作。 (1)在 MATLAB命令行窗口输入以下命令后,观察工作区窗口的内容。 x=0:pi/10:2*pi; y=sin(x); (2)在工作区窗口右击变量x、y,再在快捷菜单中选择“删除”命令将它们删除。 ---------------------------------------------

    2024年02月02日
    浏览(43)
  • Python 程序设计入门(022)—— 循环结构程序设计(3):循环的嵌套

    在编程时,循环语句的嵌套是很常见的,循环嵌套是指在一个循环语句中又包含另一个循环语句。例如:在 for 循环中嵌入另一个 for 循环或 while 循环,在 while 循环中嵌入另一个 while 循环或 for 循环等。 1、使用双层 for 循环 代码如下: 代码如下: 1、使用 for 循环中嵌套 w

    2024年02月12日
    浏览(44)
  • 头歌:《C语言程序设计编程实践任务》循环结构程序设计 教学团队:祁文青

    任务:求1000以内所有的水仙花数。若一个 3 位整数的各位数字的立方之和等于这个整数,称之为“水仙花数”。 注: 前面题目写过,取余可以提取刀整数的末尾数字,只要逐步提取出来判断就行。 不能改变x的值(如x10),否则循环一直无法达到x1000,会陷入死循环。 任务:输

    2024年02月05日
    浏览(66)
  • Java程序设计入门教程-- 嵌套循环

            在解决某些复杂问题时,若在for、while或do-while循环语句的循环体内再包含一个循环语句,就形成了嵌套循环(nested loop)。         这3种循环语句之间可相互嵌套,构成多层的嵌套逻辑结构,外层的循环称为外循环,内层的循环称为内循环。         同嵌套

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包