C程序设计笔记

此博客给的是谭浩强先生《C程序设计第四版》课程章节里的问题(不含课后答案)

课后答案见:https://blog.csdn.net/Mr_Cat123/article/details/84800905

第一部分 章节内的问题

第二章 算法----程序的灵魂

算法+数据结构=程序
例题2.1:求 1 × 2 × 3 × 4 × 5 1\times2\times3\times4\times5 1×2×3×4×5

C实现

#include<stdio.h>

int main()
{
	int i=2, p=1;
	while (i<=5)
	{
		p = p*i;
		i++;
	}
	printf("answer=%d\n", p);
	return 0;
}

在这里插入图片描述
python版本

ans = 1
for i in range(1,6):
    ans*=i
print('answer = ',ans)
例题2.2 有50个学生,要求输出成绩在80分以上到学生的学号和成绩

由于学生人数较多,故只取五个学生作为参考
在这里插入图片描述

python代码:

import numpy as np
import xlrd    #读取Excel文件

workbook = xlrd.open_workbook('C:/users/lenovo/desktop/student_score.xlsx')
sheet = workbook.sheet_by_name('Sheet1')

data_name = sheet.col_values(0)
data_st_ID = sheet.col_values(1)
data_st_score = sheet.col_values(2)

n = data_st_ID      #学号
g = data_st_score    #分数

itera = len(data_name)       #人数
for i in range(1,itera):        
    if g[i] >= 80:
        print('学号是:%d,分数是:%.2f'%(n[i],g[i]))

在这里插入图片描述
在这里插入图片描述

例题2.3 判断2000-2500年中的每一年是否是闰年,并将结果输出
  • 1)python代码
leap_year = []
for year in range(2000,2501):
    if year%4 == 0:
        if year%100 != 0:
            leap_year.append(year)
        elif year%400 == 0:
            leap_year.append(year)
    elif year%400 == 0:
        leap_year.append(year)

上面的程序可以通过布尔算符表示如下:

leap_year = []
for year in range(2000,2501):
    if (year%4 == 0 and year%100 != 0) or (year%400 == 0):
        leap_year.append(year)

C++/C程序

#include<stdio.h>

int main()
{
	int year;
	year = 2000;
	while (year <= 2500)
	{
		if (year % 4 == 0)
			if (year % 100 != 0)
				printf("%d是闰年", year);
		    else
			    if (year % 400 == 0)
				    printf("%d是闰年", year);
		year += 1;
	}
	return 0;
			
}

通过布尔算符改为:

#include<stdio.h>

int main()
{
	int year;
	year = 2000;
	while (year <= 2500)
	{
		if ((year % 4 == 0 && year % 100 != 0) || (year%400==0))
			printf("%d是闰年", year);
		year += 1;
	}
	return 0;
}
例题2.4 求 1 − 1 2 + 1 3 − 1 4 + . . . − 1 100 1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+...-\frac{1}{100} 121+3141+...1001.

python代码

sum = 1
sign = 1
for i in range(2,101):
    sign *= (-1)
    sum+=sign/i
print(sum)

在这里插入图片描述
C++/C代码

#include<stdio.h>

int main()
{
	int sign=1;
	double sum_ans = 1, i = 2.0;

	while (i <= 100)
	{
		sign = (-1)*sign;
		sum_ans = sum_ans + sign / i;
		i=i+1;
	}
	printf("%f\n", sum_ans);
	return 0;
}

C++和C相比python比较坑的是,一定要声明sum_ans和i为double,否则结果是1,有时候忘记这个,那么就等着哭泣吧。

第四章 选择结构程序设计

例题4.2输入两个数,按数值从小到大排列输出.
#include<stdio.h>
#include<math.h>

int main()
{
	float a, b,t;
	printf("Please enter two numbers:");
	scanf_s("%f %f", &a, &b);
	if (a > b)
	{
		t = a;
		a = b;
		b = t;
	}
	printf("%6.1f\n%6.1f\n", a, b);
		
	return 0;
}

在这里插入图片描述
如果是输入的多个数,可以使用algorithm中的sort函数。如下:

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;

int main()
{
	float a[3];
	printf("Please enter three numbers:");
	scanf_s("%f %f %f", &a[0], &a[1],&a[2]);
	sort(a, a + 3);
	printf("%6.1f\n%6.1f\n%6.1f\n", a[0],a[1],a[2]);
		
	return 0;
}

在这里插入图片描述
注意:上面使用了sort函数,因此在预处理那儿要加入算法库algorithm,同时,由于不同库之间会有一些标识符等的冲突,于是要使用using namespace std,即命名空间是标准命名空间。

例题4.4, 输入一个字符判断是否是大写,如果不是则换成小写输出.
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;

int main()
{
	char ch;
	scanf_s("%c", &ch,sizeof(ch));
	ch = ('A' <= ch <= 'Z') ? (ch + 32) : ch;
	printf("%c\n", ch);
		
	return 0;
}

第五章

例题5.7用 π / 4 。 。 。 。 \pi/4。。。。 π/4 π \pi π.
#include<stdio.h>
#include<algorithm>
#include<time.h>
#define SUM 10000
using namespace std;

int main()
{
	clock_t timeStart, timeEnd;
	timeStart = clock();
	int i=0;
	float n = 1.0;
	double pi = 0.0;
	int sign = 1;
	for (; fabs(1.0 / n) >= 1e-6; i++)
	{
		pi = pi + sign / n;
		sign = -sign;
		n = n + 2;
	}
	timeEnd = clock();
	printf("%f\n%d\n", 4*pi,i);
	printf("time interval=%.4f\n", (float)(timeEnd - timeStart) / CLOCKS_PER_SEC);

	return 0;
}

这里,当将1e-6改成1e-8时一定要记得将float改成double,因为float 4个字节不够储存会出现溢出导致无法给出结果的现象。

第六章

6.8 输入一行字符,统计其中
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include<cstring>

using namespace std;

int main()
{
	int i,count=0;
	char str[30];
	gets_s(str);
	for (i = 0; i <= strlen(str); i++)
		if (str[i] == ' ') count++;
	printf("there are %d words", count+1);

	return 0;
}

这个没有书上的严谨,一旦前面有多个空格或者两个单词之间有多个空格就无法用这个方法。

第七章 用函数实现模块化程序设计

例7.9 输入10个数,输出最大元素和该数是第几个数

文章使用的方法有点麻烦,还要定义max()函数,下面是不定义max函数的情况

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include<cstring>

using namespace std;

int main()
{
	int i,a[10],max,n=1;
	printf("Please enter 10 integer numbers:");
	for (i = 0; i < 10; i++)
		scanf_s("%d",&a[i]);
	for (i = 1, max = a[0]; i < 10; i++)
	{
		if (max < a[i]) max = a[i],n=i+1;
	}
	printf("The largest number is %d\nIt is the %dth number.", max,n);

	return 0;
}

在这里插入图片描述

第八章 善于利用指针

这一章很重要,要点也很多,因此我将一些网上搜索的试题卷放在此处
1,试题卷1

例8.1 通过指针变量访问整型变量
#include<stdio.h>
int main()
{
	int a = 100, b = 9;
	int * pointer_1, *pointer_2;
	pointer_1 = &a, pointer_2 = &b;
	printf("%d,%d",* pointer_1,* pointer_2);

	return 0;
}
例8.2通过指针来大小排序
#include<stdio.h>
int main()
{
	int a, b;
	int * pointer_1, *pointer_2;
	scanf_s("%d,%d", &a, &b);
	pointer_1 = &a, pointer_2 = &b;
	if (a < b)
	{
		pointer_1 = &b, pointer_2 = &a;
	}
	printf("%d,%d\n",* pointer_1,* pointer_2);

	return 0;
}

在这里插入图片描述

例8.3大小排序
#include<stdio.h>
int main()
{
	void swap(int *p1,int *p2);
	int a, b;
	int * pointer_1, *pointer_2;
	scanf_s("%d,%d", &a, &b);
	pointer_1 = &a, pointer_2 = &b;
	if (a < b)
	{
		swap(pointer_1, pointer_2);
	}
	printf("%d,%d\n",* pointer_1,* pointer_2);

	return 0;
}
void swap(int *p1,int *p2)
{
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

第二部分 个人笔记

1 数组

1.1数组的定义

1维数组:
定义整型10个元素的1维数组

int a[10];

定义并赋值

int a[4]={1,2,3,4}
int a[] = {1,2,3,4}  //会自动知道有4个元素
int a[4] = {0}   //未赋值的部分自动为0

2维数组

int a[2][2]; //定义
int a[2][2] = {{1,2},{3,4}} //定义并赋值
1.2数组运算(加减乘除)
#include<stdio.h>

int main()
{
    int i,j;
    int a[2][2] = {{1,2},{3,4}};
    int b[2][2] = {{-3,-2},{0,2}};
    int c[2][3];
    for (i=0;i<2;i++)
        {
        for (j=0;j<2;j++)
            {
            c[i][j] = a[i][j]+b[i][j];
            printf("%-4d",c[i][j]);  //隔四格打印一个数,并从最左开始
            }
        printf("\n");
        }
    return 0;
}

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值