论文下载链接:论文|学期1 | 2016-17
时间: 3小时
总分数:100
注意:-
- 共分为三个部分。 A节为20分, B节为30分, C节为50分。
- 尝试所有问题。每个问题都带有标记。
- 必要时假定合适的数据。
尝试本节中的任何两个问题:(2 * 15 = 30)
3. a)排序是什么意思。用C编写一个程序,对给定的n个正整数进行排序。并给出相同的流程图。使用排序算法根据上的元素运算符重新排列给定阵列或列表元素。运算符用于决定在相应的数据结构元素的新订单。
例如:以下字符列表按其ASCII值的升序排列。即,具有较小的ASCII值的字符将被首先放置比具有更高的ASCII值的字符。
选择排序流程图:
用C编程以对N个正整数的给定数组的元素进行排序:
// C program to sort the elements
// of a given array of N positive integers
#include
void swap(int* xp, int* yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
void selectionSort(int arr[], int n)
{
int i, j, min_idx;
// One by one move boundary of unsorted subarray
for (i = 0; i < n - 1; i++) {
// Find the minimum element in unsorted array
min_idx = i;
for (j = i + 1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
// Swap the found minimum element with the first element
swap(&arr[min_idx], &arr[i]);
}
}
/* Function to print an array */
void printArray(int arr[], int size)
{
int i;
for (i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
// Driver program to test above functions
int main()
{
int arr[] = { 64, 25, 12, 22, 11 };
int n = sizeof(arr) / sizeof(arr[0]);
selectionSort(arr, n);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}
Sorted array:
11 12 22 25 64
3. b)编写一个程序,以检查给定的号码是否为Armstrong。像153 = 1
// C program to find Armstrong number
#include
/* Function to calculate x raised to the power y */
int power(int x, unsigned int y)
{
if (y == 0)
return 1;
if (y % 2 == 0)
return power(x, y / 2) * power(x, y / 2);
return x * power(x, y / 2) * power(x, y / 2);
}
/* Function to calculate order of the number */
int order(int x)
{
int n = 0;
while (x) {
n++;
x = x / 10;
}
return n;
}
// Function to check whether the given number is
// Armstrong number or not
int isArmstrong(int x)
{
// Calling order function
int n = order(x);
int temp = x, sum = 0;
while (temp) {
int r = temp % 10;
sum += power(r, n);
temp = temp / 10;
}
// If satisfies Armstrong condition
if (sum == x)
return 1;
else
return 0;
}
// Driver Program
int main()
{
int x = 153;
if (isArmstrong(x) == 1)
printf("True\n");
else
printf("False\n");
x = 1253;
if (isArmstrong(x) == 1)
printf("True\n");
else
printf("False\n");
return 0;
}
True
False
4. a)定义一个结构?用C语言编写一个程序,创建一个包含五十名学生的数据库,以存储个人详细信息,例如卷号,姓名和标记。打印用户输入姓名的学生的所有详细信息。结构是C / C++中用户定义的数据类型。结构创建一个数据类型,该数据类型可用于将可能不同类型的项目分组为单个类型。
如何建立结构?
‘struct’关键字用于创建结构。以下是一个示例。
struct address {
char name[50];
char street[100];
char city[50];
char state[20];
int pin;
};
如何声明结构变量?
结构变量既可以用结构声明来声明,也可以像基本类型一样声明为单独的声明。
// A variable declaration with structure declaration.
struct Point {
int x, y;
} p1; // The variable p1 is declared with 'Point'
// A variable declaration like basic data types
struct Point {
int x, y;
};
int main()
{
struct Point p1; // The variable p1 is declared like a normal variable
}
注意:在C++中,在声明变量之前,struct关键字是可选的。在C语言中,它是强制性的。
程序:
#include
#include
struct Student {
int roll_no;
char name[100];
float marks;
};
int main()
{
int i = 0;
char n[100];
struct Student student[50];
for (i = 0; i < 50; i++) {
printf("\nEnter details for Student %d", i + 1);
printf("\nRoll Number: ");
scanf("%d", &student[i].roll_no);
printf("\nName: ");
scanf("%s", student[i].name);
printf("\nMarks: ");
scanf("%f", &student[i].marks);
}
printf("\nEnter the name of the student whose details you need: ");
scanf("%s", n);
for (i = 0; i < 50; i++) {
if (strcmp(n, student[i].name) == 0) {
printf("\nRoll Number: %d", student[i].roll_no);
printf("\nName: %s", student[i].name);
printf("\nMarks: %f", student[i].marks);
break;
}
}
if (i == 50)
printf("No student found with this name");
}
4. b)宏是什么意思?举例说明宏的类型。宏:宏是程序中具有某些名称的代码段。只要编译器遇到此名称,编译器就会用实际的代码段替换该名称。 “ #define”指令用于定义宏。现在让我们借助程序来了解宏定义:
#include
// macro definition
#define LIMIT 5
int main()
{
for (int i = 0; i < LIMIT; i++) {
std::cout << i << "\n";
}
return 0;
}
0
1
2
3
4
输出:
0
1
2
3
4
在上述程序中,编译器执行LIMIT时,将其替换为5。宏定义中的LIMIT被称为宏模板,而5则是宏扩展。
注意:宏定义的末尾没有分号(’;’)。宏定义不需要以分号结尾。
带参数的宏:我们还可以将参数传递给宏。用参数定义的宏的作用类似于函数。让我们通过一个程序来理解这一点:
#include
// macro with parameter
#define AREA(l, b) (l * b)
int main()
{
int l1 = 10, l2 = 5, area;
area = AREA(l1, l2);
std::cout << "Area of rectangle is: " << area;
return 0;
}
Area of rectangle is: 50
输出:
Area of rectangle is: 50
从上面的程序中我们可以看到,只要编译器在程序中找到AREA(l,b),它就会用语句(l * b)替换它。不仅如此,传递给宏模板AREA(l,b)的值还将在语句(l * b)中替换。因此,AREA(10,5)等于10 * 5。
5. a)指针是什么意思?指针变量如何初始化?编写程序以使用指针对给定的数字进行排序。
指针是地址的符号表示。它们使程序能够模拟按引用调用以及创建和操纵动态数据结构。它在C / C++中的一般声明具有以下格式:
句法:
datatype *var_name;
int *ptr; //ptr can point to an address which holds int data
如何使用指针?
- 定义一个指针变量
- 使用一元运算符(&)将变量的地址分配给指针,该运算运算符返回该变量的地址。
- 使用一元运算符(*)访问存储在地址中的值,该运算运算符返回位于其操作数指定的地址处的变量的值。
我们将数据类型与指针关联的原因是它知道数据存储在多少字节中。当我们增加一个指针时,我们将指针增加它所指向的数据类型的大小。
5. b)通过键盘输入一个五位数的正整数。编写C函数以计算5位数字的数字总和
- 不使用递归:
// C program to compute sum of digits in // number. #include
/* Function to get sum of digits */ int getSum(int n) { int sum = 0; while (n != 0) { sum = sum + n % 10; n = n / 10; } return sum; } int main() { int n = 687; printf(" %d ", getSum(n)); return 0; } 输出:21
- 使用递归:
// Recursive C program to find sum of digits // of a number #include
// Function to check sum of digit using recursion int sum_of_digit(int n) { if (n == 0) return 0; return (n % 10 + sum_of_digit(n / 10)); } // Driven Program to check above int main() { int num = 12345; int result = sum_of_digit(num); printf("Sum of digits in %d is %d\n", num, result); return 0; } 输出:Sum of digits in 12345 is 15